[epubcheck] 01/03: Add upstream source

Eugene Zhukov eugene-guest at moszumanska.debian.org
Mon Aug 17 08:21:25 UTC 2015


This is an automated email from the git hooks/post-receive script.

eugene-guest pushed a commit to branch master
in repository epubcheck.

commit 2436fb54e41d3ea99a113c334b19324037789d3e
Author: Eugene Zhukov <jevgeni.zh at gmail.com>
Date:   Sun Aug 16 15:06:12 2015 +0000

    Add upstream source
---
 COPYING.txt                                        |   19 +
 README.md                                          |   65 +
 debian/changelog                                   |    2 +-
 debian/rules                                       |    2 +-
 docs/BookReporter.docx                             |  Bin 0 -> 130807 bytes
 docs/BookReporter.pdf                              |  Bin 0 -> 627158 bytes
 docs/ePubCheck-4.0-Preview.docx                    |  Bin 0 -> 142686 bytes
 docs/ePubCheck-4.0-Preview.pdf                     |  Bin 0 -> 636476 bytes
 pom.xml                                            |  529 ++
 src/main/assembly/README-dist.txt                  |   60 +
 src/main/assembly/dist.xml                         |   64 +
 src/main/assembly/src.xml                          |   21 +
 .../java/com/adobe/epubcheck/api/EpubCheck.java    |  333 +
 .../com/adobe/epubcheck/api/EpubCheckFactory.java  |   64 +
 .../java/com/adobe/epubcheck/api/MasterReport.java |  148 +
 .../java/com/adobe/epubcheck/api/QuietReport.java  |   39 +
 src/main/java/com/adobe/epubcheck/api/Report.java  |  101 +
 .../com/adobe/epubcheck/bitmap/BitmapChecker.java  |  319 +
 .../epubcheck/bitmap/BitmapCheckerFactory.java     |   49 +
 .../java/com/adobe/epubcheck/css/CSSChecker.java   |  183 +
 .../com/adobe/epubcheck/css/CSSCheckerFactory.java |   63 +
 .../java/com/adobe/epubcheck/css/CSSHandler.java   |  344 +
 .../java/com/adobe/epubcheck/ctc/CheckManager.java |   73 +
 .../com/adobe/epubcheck/ctc/ContentValidator.java  |   16 +
 .../java/com/adobe/epubcheck/ctc/EntitySearch.java |  187 +
 .../adobe/epubcheck/ctc/Epub3StructureCheck.java   |   64 +
 .../java/com/adobe/epubcheck/ctc/EpubCSSCheck.java |  214 +
 .../java/com/adobe/epubcheck/ctc/EpubCfiCheck.java |   83 +
 .../epubcheck/ctc/EpubCheckContentFactory.java     |   96 +
 .../com/adobe/epubcheck/ctc/EpubExtLinksCheck.java |  114 +
 .../epubcheck/ctc/EpubHTML5StructureCheck.java     |  292 +
 .../com/adobe/epubcheck/ctc/EpubLangCheck.java     |  273 +
 .../adobe/epubcheck/ctc/EpubMetaDataV2Check.java   |   33 +
 .../adobe/epubcheck/ctc/EpubMetaDataV3Check.java   |   34 +
 .../java/com/adobe/epubcheck/ctc/EpubNCXCheck.java |  226 +
 .../java/com/adobe/epubcheck/ctc/EpubNavCheck.java |  177 +
 .../adobe/epubcheck/ctc/EpubRenditionCheck.java    |  145 +
 .../java/com/adobe/epubcheck/ctc/EpubSVGCheck.java |  144 +
 .../com/adobe/epubcheck/ctc/EpubScriptCheck.java   |  220 +
 .../com/adobe/epubcheck/ctc/EpubSpanCheck.java     |   62 +
 .../com/adobe/epubcheck/ctc/EpubSpineCheck.java    |   99 +
 .../adobe/epubcheck/ctc/EpubStyleSheetsCheck.java  |   59 +
 .../adobe/epubcheck/ctc/EpubTextContentCheck.java  |   52 +
 .../java/com/adobe/epubcheck/ctc/EpubTocCheck.java |   36 +
 .../com/adobe/epubcheck/ctc/PackageReader.java     |  321 +
 .../java/com/adobe/epubcheck/ctc/XmlDocParser.java |  247 +
 .../com/adobe/epubcheck/ctc/css/CSSSelector.java   |   45 +
 .../epubcheck/ctc/css/CSSSelectorAttribute.java    |   37 +
 .../epubcheck/ctc/css/CSSSelectorCollection.java   |   38 +
 .../epubcheck/ctc/css/EpubCSSCheckCSSHandler.java  |  879 +++
 .../epubcheck/ctc/epubpackage/EpubPackage.java     |  193 +
 .../epubcheck/ctc/epubpackage/ManifestItem.java    |   49 +
 .../epubcheck/ctc/epubpackage/MetadataElement.java |   45 +
 .../epubcheck/ctc/epubpackage/PackageManifest.java |   44 +
 .../epubcheck/ctc/epubpackage/PackageMetadata.java |   18 +
 .../epubcheck/ctc/epubpackage/PackageSpine.java    |   61 +
 .../adobe/epubcheck/ctc/epubpackage/SpineItem.java |   49 +
 .../adobe/epubcheck/ctc/xml/AnchorTagHandler.java  |  234 +
 .../ctc/xml/CSSStyleAttributeHandler.java          |  315 +
 .../epubcheck/ctc/xml/Epub3StructureHandler.java   |   68 +
 .../epubcheck/ctc/xml/HTMLTagsAnalyseHandler.java  |  456 ++
 .../epubcheck/ctc/xml/LangAttributeHandler.java    |   63 +
 .../adobe/epubcheck/ctc/xml/LinkTagHandler.java    |  172 +
 .../com/adobe/epubcheck/ctc/xml/ScriptElement.java |   19 +
 .../adobe/epubcheck/ctc/xml/ScriptTagHandler.java  |  225 +
 .../adobe/epubcheck/ctc/xml/SpanTagHandler.java    |  129 +
 .../epubcheck/ctc/xml/XMLContentDocParser.java     |  119 +
 .../com/adobe/epubcheck/dtbook/DTBookChecker.java  |  106 +
 .../epubcheck/dtbook/DTBookCheckerFactory.java     |   49 +
 .../com/adobe/epubcheck/dtbook/DTBookHandler.java  |  140 +
 .../java/com/adobe/epubcheck/messages/Message.java |   71 +
 .../epubcheck/messages/MessageDictionary.java      |  601 ++
 .../com/adobe/epubcheck/messages/MessageId.java    |  305 +
 .../adobe/epubcheck/messages/MessageLocation.java  |  107 +
 .../com/adobe/epubcheck/messages/Severity.java     |   58 +
 .../java/com/adobe/epubcheck/nav/NavChecker.java   |  147 +
 .../com/adobe/epubcheck/nav/NavCheckerFactory.java |   59 +
 .../java/com/adobe/epubcheck/ncx/NCXChecker.java   |  123 +
 .../com/adobe/epubcheck/ncx/NCXCheckerFactory.java |   49 +
 .../java/com/adobe/epubcheck/ncx/NCXHandler.java   |  110 +
 .../epubcheck/ocf/AdobeFontManglingFilter.java     |   28 +
 .../com/adobe/epubcheck/ocf/EncryptionFilter.java  |   10 +
 .../com/adobe/epubcheck/ocf/EncryptionHandler.java |  131 +
 .../epubcheck/ocf/IDPFFontManglingFilter.java      |   28 +
 .../java/com/adobe/epubcheck/ocf/OCFChecker.java   |  400 ++
 src/main/java/com/adobe/epubcheck/ocf/OCFData.java |   21 +
 .../adobe/epubcheck/ocf/OCFFilenameChecker.java    |  132 +
 .../java/com/adobe/epubcheck/ocf/OCFHandler.java   |  104 +
 .../java/com/adobe/epubcheck/ocf/OCFPackage.java   |  191 +
 .../com/adobe/epubcheck/ocf/OCFZipPackage.java     |  288 +
 .../epubcheck/ocf/UnsupportedEncryptionFilter.java |   16 +
 .../com/adobe/epubcheck/opf/ContentChecker.java    |   28 +
 .../adobe/epubcheck/opf/ContentCheckerFactory.java |   36 +
 .../com/adobe/epubcheck/opf/DocumentValidator.java |   28 +
 .../epubcheck/opf/DocumentValidatorFactory.java    |   34 +
 .../adobe/epubcheck/opf/GenericContentChecker.java |   54 +
 .../opf/GenericContentCheckerFactory.java          |   46 +
 .../java/com/adobe/epubcheck/opf/OPFChecker.java   |  614 ++
 .../java/com/adobe/epubcheck/opf/OPFChecker30.java |  227 +
 .../com/adobe/epubcheck/opf/OPFCheckerFactory.java |   51 +
 src/main/java/com/adobe/epubcheck/opf/OPFData.java |   72 +
 .../java/com/adobe/epubcheck/opf/OPFHandler.java   |  738 +++
 .../java/com/adobe/epubcheck/opf/OPFHandler30.java |  296 +
 src/main/java/com/adobe/epubcheck/opf/OPFItem.java |  163 +
 .../java/com/adobe/epubcheck/opf/OPFPeeker.java    |  242 +
 .../java/com/adobe/epubcheck/opf/OPFReference.java |   66 +
 .../com/adobe/epubcheck/opf/VersionRetriever.java  |  182 +
 .../java/com/adobe/epubcheck/opf/XRefChecker.java  |  413 ++
 .../java/com/adobe/epubcheck/ops/OPSChecker.java   |  206 +
 .../com/adobe/epubcheck/ops/OPSCheckerFactory.java |   64 +
 .../java/com/adobe/epubcheck/ops/OPSHandler.java   |  522 ++
 .../java/com/adobe/epubcheck/ops/OPSHandler30.java |  621 ++
 .../adobe/epubcheck/overlay/OverlayChecker.java    |  133 +
 .../epubcheck/overlay/OverlayCheckerFactory.java   |   63 +
 .../adobe/epubcheck/overlay/OverlayHandler.java    |  134 +
 .../adobe/epubcheck/reporting/CheckMessage.java    |  205 +
 .../adobe/epubcheck/reporting/CheckerMetadata.java |  116 +
 .../adobe/epubcheck/reporting/CheckingReport.java  |  206 +
 .../adobe/epubcheck/reporting/ItemMetadata.java    |  215 +
 .../epubcheck/reporting/PublicationMetadata.java   |  197 +
 .../java/com/adobe/epubcheck/tool/Checker.java     |   33 +
 .../java/com/adobe/epubcheck/tool/EpubChecker.java |  778 +++
 .../java/com/adobe/epubcheck/util/Archive.java     |  312 +
 .../java/com/adobe/epubcheck/util/CheckUtil.java   |  133 +
 .../java/com/adobe/epubcheck/util/DateParser.java  |  330 +
 .../com/adobe/epubcheck/util/DateParserTest.java   |  134 +
 .../adobe/epubcheck/util/DefaultReportImpl.java    |  143 +
 .../java/com/adobe/epubcheck/util/EPUBVersion.java |   40 +
 .../com/adobe/epubcheck/util/EpubConstants.java    |   15 +
 .../java/com/adobe/epubcheck/util/FeatureEnum.java |   87 +
 .../adobe/epubcheck/util/FileResourceProvider.java |   51 +
 .../epubcheck/util/GenericResourceProvider.java    |   37 +
 .../java/com/adobe/epubcheck/util/HandlerUtil.java |   58 +
 .../adobe/epubcheck/util/InvalidDateException.java |   21 +
 .../epubcheck/util/InvalidVersionException.java    |   43 +
 .../java/com/adobe/epubcheck/util/JsonWriter.java  |   45 +
 .../com/adobe/epubcheck/util/LocationImpl.java     |   52 +
 .../java/com/adobe/epubcheck/util/Messages.java    |  122 +
 .../com/adobe/epubcheck/util/NamespaceHelper.java  |  346 +
 .../java/com/adobe/epubcheck/util/OPSType.java     |   57 +
 .../java/com/adobe/epubcheck/util/PathUtil.java    |  142 +
 .../com/adobe/epubcheck/util/ReportingLevel.java   |   45 +
 .../com/adobe/epubcheck/util/ResourceUtil.java     |   76 +
 .../com/adobe/epubcheck/util/SearchDictionary.java |  188 +
 .../epubcheck/util/TextSearchDictionaryEntry.java  |   47 +
 .../adobe/epubcheck/util/URLResourceProvider.java  |   52 +
 .../com/adobe/epubcheck/util/WriterReportImpl.java |  159 +
 .../adobe/epubcheck/util/XmlReportAbstract.java    |  319 +
 .../com/adobe/epubcheck/util/XmlReportImpl.java    |  305 +
 .../com/adobe/epubcheck/util/XmpReportImpl.java    |  247 +
 .../java/com/adobe/epubcheck/util/outWriter.java   |   55 +
 .../com/adobe/epubcheck/vocab/AggregateVocab.java  |   34 +
 .../adobe/epubcheck/vocab/AltStylesheetVocab.java  |   18 +
 .../java/com/adobe/epubcheck/vocab/EnumVocab.java  |   91 +
 .../com/adobe/epubcheck/vocab/ForeignVocabs.java   |   33 +
 .../adobe/epubcheck/vocab/MediaOverlaysVocab.java  |   21 +
 .../com/adobe/epubcheck/vocab/PackageVocabs.java   |   79 +
 .../epubcheck/vocab/PrefixDeclarationParser.java   |  215 +
 .../java/com/adobe/epubcheck/vocab/Property.java   |  146 +
 .../com/adobe/epubcheck/vocab/RenditionVocabs.java |   44 +
 .../adobe/epubcheck/vocab/StagingEdupubVocab.java  |   55 +
 .../com/adobe/epubcheck/vocab/StructureVocab.java  |   89 +
 .../com/adobe/epubcheck/vocab/UncheckedVocab.java  |   47 +
 src/main/java/com/adobe/epubcheck/vocab/Vocab.java |   23 +
 .../java/com/adobe/epubcheck/vocab/VocabUtil.java  |  196 +
 .../adobe/epubcheck/xml/DocumentLocatorImpl.java   |   65 +
 .../java/com/adobe/epubcheck/xml/Namespaces.java   |   36 +
 .../java/com/adobe/epubcheck/xml/XMLAttribute.java |   40 +
 .../java/com/adobe/epubcheck/xml/XMLElement.java   |   94 +
 .../java/com/adobe/epubcheck/xml/XMLHandler.java   |   37 +
 src/main/java/com/adobe/epubcheck/xml/XMLNode.java |   54 +
 .../java/com/adobe/epubcheck/xml/XMLParser.java    | 1058 +++
 .../java/com/adobe/epubcheck/xml/XMLValidator.java |  262 +
 .../com/adobe/epubcheck/xml/XMLValidators.java     |   44 +
 .../idpf/epubcheck/util/css/CssContentHandler.java |   88 +
 .../idpf/epubcheck/util/css/CssErrorHandler.java   |   43 +
 .../org/idpf/epubcheck/util/css/CssEscape.java     |  199 +
 .../org/idpf/epubcheck/util/css/CssExceptions.java |  163 +
 .../org/idpf/epubcheck/util/css/CssGrammar.java    | 1405 ++++
 .../idpf/epubcheck/util/css/CssInputStream.java    |  244 +
 .../org/idpf/epubcheck/util/css/CssLocation.java   |  107 +
 .../org/idpf/epubcheck/util/css/CssParser.java     |  746 +++
 .../org/idpf/epubcheck/util/css/CssReader.java     |  389 ++
 .../org/idpf/epubcheck/util/css/CssScanner.java    | 1415 ++++
 .../org/idpf/epubcheck/util/css/CssSource.java     |  102 +
 .../java/org/idpf/epubcheck/util/css/CssToken.java |  532 ++
 .../org/idpf/epubcheck/util/css/CssTokenList.java  |  225 +
 .../java/org/idpf/epubcheck/util/css/Messages.java |  120 +
 .../epubcheck/util/saxon/ColumnNumberFunction.java |   79 +
 .../epubcheck/util/saxon/Int64ValueSequence.java   |   29 +
 .../epubcheck/util/saxon/LineNumberFunction.java   |   80 +
 .../epubcheck/util/saxon/SystemIdFunction.java     |  103 +
 src/main/licenses/Apache-2.0.txt                   |  201 +
 src/main/licenses/BSD-3-Clause.txt                 |   27 +
 src/main/licenses/MPL-1.0.txt                      |  360 +
 src/main/licenses/W3C.txt                          |   16 +
 src/main/licenses/third-party.ftl                  |   36 +
 .../com/adobe/epubcheck/api/project.properties     |    2 +
 .../epubcheck/messages/MessageBundle.properties    |  281 +
 .../epubcheck/messages/MessageBundle_ja.properties |  279 +
 .../com/adobe/epubcheck/ops/registeredSchemas.txt  |   75 +
 .../epubcheck/schema/20/dtd/dtbook-2005-2.dtd      | 2824 ++++++++
 .../adobe/epubcheck/schema/20/dtd/ncx-2005-1.dtd   |  269 +
 .../com/adobe/epubcheck/schema/20/dtd/oeb12.dtdinc | 1136 ++++
 .../com/adobe/epubcheck/schema/20/dtd/oebpkg12.dtd |  388 ++
 .../com/adobe/epubcheck/schema/20/dtd/opf20.dtd    |  296 +
 .../com/adobe/epubcheck/schema/20/dtd/svg11.dtd    | 5790 +++++++++++++++++
 .../epubcheck/schema/20/dtd/xhtml-lat1.dtdinc      |  196 +
 .../epubcheck/schema/20/dtd/xhtml-special.dtdinc   |   80 +
 .../epubcheck/schema/20/dtd/xhtml-symbol.dtdinc    |  237 +
 .../epubcheck/schema/20/dtd/xhtml1-strict.dtd      |  979 +++
 .../schema/20/dtd/xhtml1-transitional.dtd          | 1200 ++++
 .../adobe/epubcheck/schema/20/dtd/xhtml11-ent.dtd  |  324 +
 .../adobe/epubcheck/schema/20/rng/container.rng    |   24 +
 .../adobe/epubcheck/schema/20/rng/content-svg.rng  |   13 +
 .../epubcheck/schema/20/rng/content-xhtml.rng      |   13 +
 .../com/adobe/epubcheck/schema/20/rng/content.rng  |   93 +
 .../epubcheck/schema/20/rng/dtbook-2005-2.rng      | 4110 ++++++++++++
 .../adobe/epubcheck/schema/20/rng/encryption.rng   |   20 +
 .../com/adobe/epubcheck/schema/20/rng/ncx-old.rng  |  253 +
 .../com/adobe/epubcheck/schema/20/rng/ncx.rng      |  304 +
 .../com/adobe/epubcheck/schema/20/rng/opf.rng      |   15 +
 .../com/adobe/epubcheck/schema/20/rng/opf12.rng    |  386 ++
 .../com/adobe/epubcheck/schema/20/rng/opf20.rng    |  509 ++
 .../epubcheck/schema/20/rng/ops/ops-switch.rng     |   51 +
 .../com/adobe/epubcheck/schema/20/rng/ops20.nvdl   |   70 +
 .../com/adobe/epubcheck/schema/20/rng/ops20.rng    |   16 +
 .../adobe/epubcheck/schema/20/rng/signatures.rng   |   15 +
 .../epubcheck/schema/20/rng/svg/svg-animation.rng  |  412 ++
 .../schema/20/rng/svg/svg-animevents-attrib.rng    |   61 +
 .../epubcheck/schema/20/rng/svg/svg-basic-clip.rng |  129 +
 .../schema/20/rng/svg/svg-basic-filter.rng         |  870 +++
 .../epubcheck/schema/20/rng/svg/svg-basic-font.rng |  546 ++
 .../20/rng/svg/svg-basic-graphics-attrib.rng       |   74 +
 .../schema/20/rng/svg/svg-basic-structure.rng      |  667 ++
 .../epubcheck/schema/20/rng/svg/svg-basic-text.rng |  273 +
 .../adobe/epubcheck/schema/20/rng/svg/svg-clip.rng |   37 +
 .../schema/20/rng/svg/svg-conditional.rng          |  124 +
 .../schema/20/rng/svg/svg-container-attrib.rng     |   49 +
 .../schema/20/rng/svg/svg-core-attrib.rng          |   73 +
 .../epubcheck/schema/20/rng/svg/svg-cursor.rng     |   99 +
 .../epubcheck/schema/20/rng/svg/svg-datatypes.rng  |  196 +
 .../schema/20/rng/svg/svg-docevents-attrib.rng     |   87 +
 .../schema/20/rng/svg/svg-extensibility.rng        |  125 +
 .../schema/20/rng/svg/svg-extresources-attrib.rng  |   42 +
 .../epubcheck/schema/20/rng/svg/svg-filter.rng     |  512 ++
 .../adobe/epubcheck/schema/20/rng/svg/svg-font.rng |  146 +
 .../epubcheck/schema/20/rng/svg/svg-gradient.rng   |  259 +
 .../schema/20/rng/svg/svg-graphevents-attrib.rng   |  124 +
 .../schema/20/rng/svg/svg-graphics-attrib.rng      |   95 +
 .../epubcheck/schema/20/rng/svg/svg-hyperlink.rng  |  106 +
 .../epubcheck/schema/20/rng/svg/svg-image.rng      |  104 +
 .../epubcheck/schema/20/rng/svg/svg-marker.rng     |  161 +
 .../adobe/epubcheck/schema/20/rng/svg/svg-mask.rng |  148 +
 .../schema/20/rng/svg/svg-opacity-attrib.rng       |   60 +
 .../schema/20/rng/svg/svg-paint-attrib.rng         |  207 +
 .../epubcheck/schema/20/rng/svg/svg-pattern.rng    |  138 +
 .../epubcheck/schema/20/rng/svg/svg-profile.rng    |   92 +
 .../epubcheck/schema/20/rng/svg/svg-qname.rng      |   98 +
 .../epubcheck/schema/20/rng/svg/svg-script.rng     |   64 +
 .../epubcheck/schema/20/rng/svg/svg-shape.rng      |  433 ++
 .../epubcheck/schema/20/rng/svg/svg-structure.rng  |   92 +
 .../epubcheck/schema/20/rng/svg/svg-style.rng      |  121 +
 .../adobe/epubcheck/schema/20/rng/svg/svg-text.rng |  627 ++
 .../adobe/epubcheck/schema/20/rng/svg/svg-view.rng |   83 +
 .../schema/20/rng/svg/svg-viewport-attrib.rng      |   64 +
 .../schema/20/rng/svg/svg-xlink-attrib.rng         |  194 +
 .../com/adobe/epubcheck/schema/20/rng/svg11.rng    |  231 +
 .../adobe/epubcheck/schema/20/rng/xenc-schema.rng  |  223 +
 .../adobe/epubcheck/schema/20/rng/xhtml/applet.rng |   47 +
 .../epubcheck/schema/20/rng/xhtml/attribs.rng      |   66 +
 .../adobe/epubcheck/schema/20/rng/xhtml/base.rng   |   23 +
 .../epubcheck/schema/20/rng/xhtml/basic-form.rng   |  200 +
 .../epubcheck/schema/20/rng/xhtml/basic-table.rng  |  146 +
 .../adobe/epubcheck/schema/20/rng/xhtml/bdo.rng    |   37 +
 .../epubcheck/schema/20/rng/xhtml/csismap.rng      |  102 +
 .../epubcheck/schema/20/rng/xhtml/datatypes.rng    |  120 +
 .../adobe/epubcheck/schema/20/rng/xhtml/edit.rng   |   55 +
 .../adobe/epubcheck/schema/20/rng/xhtml/events.rng |  208 +
 .../adobe/epubcheck/schema/20/rng/xhtml/form.rng   |  209 +
 .../adobe/epubcheck/schema/20/rng/xhtml/frames.rng |  111 +
 .../epubcheck/schema/20/rng/xhtml/hypertext.rng    |   61 +
 .../adobe/epubcheck/schema/20/rng/xhtml/iframe.rng |   67 +
 .../adobe/epubcheck/schema/20/rng/xhtml/image.rng  |   40 +
 .../epubcheck/schema/20/rng/xhtml/inlstyle.rng     |   11 +
 .../adobe/epubcheck/schema/20/rng/xhtml/legacy.rng |  502 ++
 .../adobe/epubcheck/schema/20/rng/xhtml/link.rng   |   56 +
 .../adobe/epubcheck/schema/20/rng/xhtml/list.rng   |   92 +
 .../adobe/epubcheck/schema/20/rng/xhtml/meta.rng   |   37 +
 .../epubcheck/schema/20/rng/xhtml/nameident.rng    |   39 +
 .../adobe/epubcheck/schema/20/rng/xhtml/object.rng |   82 +
 .../adobe/epubcheck/schema/20/rng/xhtml/param.rng  |   33 +
 .../adobe/epubcheck/schema/20/rng/xhtml/pres.rng   |  107 +
 .../adobe/epubcheck/schema/20/rng/xhtml/ruby.rng   |  102 +
 .../adobe/epubcheck/schema/20/rng/xhtml/script.rng |   70 +
 .../epubcheck/schema/20/rng/xhtml/ssismap.rng      |   14 +
 .../adobe/epubcheck/schema/20/rng/xhtml/struct.rng |   78 +
 .../adobe/epubcheck/schema/20/rng/xhtml/style.rng  |   36 +
 .../adobe/epubcheck/schema/20/rng/xhtml/table.rng  |  257 +
 .../adobe/epubcheck/schema/20/rng/xhtml/target.rng |   31 +
 .../adobe/epubcheck/schema/20/rng/xhtml/text.rng   |  338 +
 .../schema/20/rng/xmldsig-core-schema.rng          |  341 +
 .../adobe/epubcheck/schema/20/sch/id-unique.sch    |   11 +
 .../com/adobe/epubcheck/schema/20/sch/ncx.sch      |   88 +
 .../com/adobe/epubcheck/schema/20/sch/opf.sch      |   14 +
 .../com/adobe/epubcheck/schema/30/LICENSE          |   23 +
 .../adobe/epubcheck/schema/30/collection-do-30.sch |   27 +
 .../epubcheck/schema/30/collection-manifest-30.sch |   17 +
 .../epubcheck/schema/30/edupub/edu-headings.sch    |   68 +
 .../adobe/epubcheck/schema/30/edupub/edu-opf.sch   |   12 +
 .../epubcheck/schema/30/edupub/edu-semantics.sch   |  168 +
 .../adobe/epubcheck/schema/30/epub-nav-30-PREP.sch |   70 +
 .../com/adobe/epubcheck/schema/30/epub-nav-30.nvdl |   16 +
 .../com/adobe/epubcheck/schema/30/epub-nav-30.rnc  |   10 +
 .../com/adobe/epubcheck/schema/30/epub-nav-30.sch  |   72 +
 .../adobe/epubcheck/schema/30/epub-svg-30-PREP.sch |   18 +
 .../com/adobe/epubcheck/schema/30/epub-svg-30.nvdl |   15 +
 .../com/adobe/epubcheck/schema/30/epub-svg-30.rnc  |   15 +
 .../com/adobe/epubcheck/schema/30/epub-svg-30.sch  |   10 +
 .../epubcheck/schema/30/epub-xhtml-30-PREP.sch     |  354 +
 .../adobe/epubcheck/schema/30/epub-xhtml-30.nvdl   |   15 +
 .../adobe/epubcheck/schema/30/epub-xhtml-30.rnc    |   39 +
 .../adobe/epubcheck/schema/30/epub-xhtml-30.sch    |  401 ++
 .../adobe/epubcheck/schema/30/epub30-catalog.xml   |  335 +
 .../epubcheck/schema/30/media-overlay-30-PREP.sch  |   14 +
 .../epubcheck/schema/30/media-overlay-30.nvdl      |   14 +
 .../adobe/epubcheck/schema/30/media-overlay-30.rnc |   46 +
 .../adobe/epubcheck/schema/30/media-overlay-30.sch |    9 +
 .../adobe/epubcheck/schema/30/mod/datatypes.rnc    |  145 +
 .../epubcheck/schema/30/mod/epub-mathml3-30.rnc    |   74 +
 .../epubcheck/schema/30/mod/epub-prefix-attr.rnc   |    8 +
 .../epubcheck/schema/30/mod/epub-ssml-attrs.rnc    |   11 +
 .../epubcheck/schema/30/mod/epub-svg11-30.rnc      |   14 +
 .../epubcheck/schema/30/mod/epub-svg11-re.sch      |    7 +
 .../adobe/epubcheck/schema/30/mod/epub-switch.rnc  |   32 +
 .../adobe/epubcheck/schema/30/mod/epub-trigger.rnc |   22 +
 .../epubcheck/schema/30/mod/epub-type-attr.rnc     |    7 +
 .../schema/30/mod/epub-xhtml-mathml3-30.rnc        |    5 +
 .../schema/30/mod/epub-xhtml-svg11-30.rnc          |    6 +
 .../adobe/epubcheck/schema/30/mod/html5/LICENSE    |   23 +
 .../com/adobe/epubcheck/schema/30/mod/html5/README |   21 +
 .../schema/30/mod/html5/html5-aria-30.rnc          |  106 +
 .../schema/30/mod/html5/html5-attrib-30.rnc        |   44 +
 .../schema/30/mod/html5/html5-document-30.rnc      |   45 +
 .../schema/30/mod/html5/html5-edit-30.rnc          |   24 +
 .../schema/30/mod/html5/html5-embed-30.rnc         |  155 +
 .../schema/30/mod/html5/html5-forms-30.rnc         |  431 ++
 .../schema/30/mod/html5/html5-grouping-30.rnc      |  115 +
 .../schema/30/mod/html5/html5-interactive-30.rnc   |   86 +
 .../epubcheck/schema/30/mod/html5/html5-md.rnc     |   56 +
 .../schema/30/mod/html5/html5-models-30.rnc        |   10 +
 .../schema/30/mod/html5/html5-phrasing-30.rnc      |  134 +
 .../epubcheck/schema/30/mod/html5/html5-rdfa.rnc   |  218 +
 .../schema/30/mod/html5/html5-script-30.rnc        |  164 +
 .../schema/30/mod/html5/html5-sections-30.rnc      |   58 +
 .../schema/30/mod/html5/html5-style-30.rnc         |   18 +
 .../adobe/epubcheck/schema/30/mod/id-unique.sch    |   10 +
 .../adobe/epubcheck/schema/30/mod/mathml/LICENSE   |    3 +
 .../schema/30/mod/mathml/mathml3-common.rnc        |   84 +
 .../schema/30/mod/mathml/mathml3-content.rnc       |  373 ++
 .../schema/30/mod/mathml/mathml3-presentation.rnc  |  536 ++
 .../30/mod/mathml/mathml3-strict-content.rnc       |   60 +
 .../adobe/epubcheck/schema/30/mod/security/LICENSE |    4 +
 .../30/mod/security/Lenient-Encryption11-ghc.rnc   |   41 +
 .../30/mod/security/Lenient-Encryption11.rnc       |   39 +
 .../security/Lenient-Signature-exclusiveC14N.rnc   |   25 +
 ...enient-Signature11-properties-exclusiveC14N.rnc |   32 +
 .../security/Lenient-Signature11-properties.rnc    |   30 +
 .../schema/30/mod/security/Lenient-Signature11.rnc |   28 +
 .../schema/30/mod/security/Strict-Encryption.rnc   |   27 +
 .../schema/30/mod/security/Strict-Signature.rnc    |   22 +
 .../epubcheck/schema/30/mod/security/exc-c14n.rnc  |   39 +
 .../schema/30/mod/security/security_any.rnc        |   15 +
 .../30/mod/security/xenc-allowAnyForeign.rnc       |   25 +
 .../schema/30/mod/security/xenc-schema-11.rnc      |   96 +
 .../schema/30/mod/security/xenc-schema.rnc         |  145 +
 .../30/mod/security/xenc11-allowAnyForeign.rnc     |   19 +
 .../30/mod/security/xmldsig-allowAnyForeign.rnc    |   47 +
 .../schema/30/mod/security/xmldsig-core-schema.rnc |  276 +
 .../schema/30/mod/security/xmldsig-filter2.rnc     |   16 +
 .../30/mod/security/xmldsig-properties-schema.rnc  |   34 +
 .../30/mod/security/xmldsig11-allowAnyForeign.rnc  |   18 +
 .../schema/30/mod/security/xmldsig11-schema.rnc    |  133 +
 .../30/mod/security/xmlsec-ghc-allowAnyForeign.rnc |   21 +
 .../schema/30/mod/security/xmlsec-ghc-schema.rnc   |   42 +
 .../adobe/epubcheck/schema/30/mod/svg11/LICENSE    |    1 +
 .../adobe/epubcheck/schema/30/mod/svg11/README.txt |    8 +
 .../epubcheck/schema/30/mod/svg11/svg11-flat.rnc   | 4000 ++++++++++++
 .../adobe/epubcheck/schema/30/ocf-container-30.rnc |   16 +
 .../epubcheck/schema/30/ocf-encryption-30.rnc      |   12 +
 .../epubcheck/schema/30/ocf-signatures-30.rnc      |    8 +
 .../adobe/epubcheck/schema/30/package-30-PREP.sch  |  127 +
 .../com/adobe/epubcheck/schema/30/package-30.nvdl  |   14 +
 .../com/adobe/epubcheck/schema/30/package-30.rnc   |  132 +
 .../com/adobe/epubcheck/schema/30/package-30.sch   |  279 +
 .../com/adobe/epubcheck/util/messages.properties   |   72 +
 .../adobe/epubcheck/util/messages_ja.properties    |   68 +
 .../datatype/xsd/resources/Messages_ja.properties  |   66 +
 .../pattern/resources/Messages_ja.properties       |  143 +
 .../idpf/epubcheck/util/css/messages.properties    |   20 +
 .../idpf/epubcheck/util/css/messages_ja.properties |   25 +
 src/main/scripts/epubcheck.bat                     |   20 +
 src/main/scripts/epubcheck.sh                      |   13 +
 src/main/util/sch/iso-sch-abstract.xsl             |  103 +
 src/main/util/sch/iso-sch-include.xsl              |   78 +
 .../adobe/epubcheck/api/AbstractEpubCheckTest.java |  191 +
 .../epubcheck/api/Epub20CheckExpandedTest.java     |  162 +
 .../com/adobe/epubcheck/api/Epub20CheckTest.java   |  318 +
 .../epubcheck/api/Epub30CheckExpandedTest.java     |  707 ++
 .../com/adobe/epubcheck/api/Epub30CheckTest.java   |  308 +
 src/test/java/com/adobe/epubcheck/cli/CLITest.java |  229 +
 .../com/adobe/epubcheck/nav/NavCheckerTest.java    |  183 +
 .../com/adobe/epubcheck/ocf/OCFCheckerTest.java    |  504 ++
 .../epubcheck/ocf/OCFFilenameCheckerTest.java      |  111 +
 .../com/adobe/epubcheck/ocf/OCFMockPackage.java    |  114 +
 .../com/adobe/epubcheck/opf/OPFCheckerTest.java    |  690 ++
 .../adobe/epubcheck/opf/OPFCheckerTestChecks.java  |   30 +
 .../com/adobe/epubcheck/ops/OPSCheckerTest.java    |  719 ++
 .../epubcheck/overlay/OverlayCheckerTest.java      |  168 +
 .../com/adobe/epubcheck/stress/StressTest.java     |  372 ++
 .../epubcheck/test/NoExitSecurityManager.java      |   44 +
 .../epubcheck/test/OutputDifferenceListener.java   |   86 +
 .../com/adobe/epubcheck/test/TestRunListener.java  |   72 +
 .../java/com/adobe/epubcheck/test/api_Test.java    |   81 +
 .../adobe/epubcheck/test/command_line_Test.java    |  408 ++
 src/test/java/com/adobe/epubcheck/test/common.java |  178 +
 .../java/com/adobe/epubcheck/test/css_Test.java    |  135 +
 src/test/java/com/adobe/epubcheck/test/debug.java  |   42 +
 .../java/com/adobe/epubcheck/test/dtBook_Test.java |   46 +
 .../java/com/adobe/epubcheck/test/jsonCompare.java |  152 +
 .../com/adobe/epubcheck/test/message_coverage.java |   56 +
 .../java/com/adobe/epubcheck/test/opf_Test.java    |  215 +
 .../com/adobe/epubcheck/test/package_Test.java     |  299 +
 .../java/com/adobe/epubcheck/test/script_Test.java |   62 +
 .../com/adobe/epubcheck/test/single_file_Test.java |   53 +
 .../java/com/adobe/epubcheck/test/toc_Test.java    |   46 +
 .../java/com/adobe/epubcheck/test/xhtml_Test.java  |  133 +
 .../com/adobe/epubcheck/util/ExtraReportTest.java  |    5 +
 .../com/adobe/epubcheck/util/OPFPeekerTest.java    |  247 +
 .../com/adobe/epubcheck/util/PathUtilTest.java     |   44 +
 .../com/adobe/epubcheck/util/ValidationReport.java |  265 +
 .../adobe/epubcheck/vocab/PrefixParsingTest.java   |  188 +
 .../com/adobe/epubcheck/vocab/PropertyTest.java    |   70 +
 .../java/com/adobe/epubcheck/vocab/VocabTest.java  |  281 +
 .../epubcheck/util/css/CssInputStreamTest.java     |  109 +
 .../org/idpf/epubcheck/util/css/CssParserTest.java | 1700 +++++
 .../idpf/epubcheck/util/css/CssScannerTest.java    | 1909 ++++++
 src/test/resources/20/epub/ContainerNotOPF20.epub  |  Bin 0 -> 4660 bytes
 src/test/resources/20/epub/EmptyDir20.epub         |  Bin 0 -> 4528 bytes
 src/test/resources/20/epub/Issue21.epub            |  Bin 0 -> 4316 bytes
 src/test/resources/20/epub/Issue25.epub            |  Bin 0 -> 259264 bytes
 src/test/resources/20/epub/Issue95.epub            |  Bin 0 -> 2551 bytes
 src/test/resources/20/epub/MetaInfNotOPF20.epub    |  Bin 0 -> 4603 bytes
 src/test/resources/20/epub/Non8601Date20.epub      |  Bin 0 -> 4389 bytes
 src/test/resources/20/epub/NullDate20.epub         |  Bin 0 -> 4380 bytes
 .../resources/20/epub/OPFIllegalElement20.epub     |  Bin 0 -> 4381 bytes
 .../20/epub/OPFIllegalElement_UniqueID20.epub      |  Bin 0 -> 4389 bytes
 src/test/resources/20/epub/PageMap20.epub          |  Bin 0 -> 4565 bytes
 src/test/resources/20/epub/Test20.epub             |  Bin 0 -> 4680 bytes
 src/test/resources/20/epub/UniqueIDNotUsed20.epub  |  Bin 0 -> 4322 bytes
 src/test/resources/20/epub/Unmanifested20.epub     |  Bin 0 -> 4798 bytes
 .../20/epub/UnmanifestedGuideItems20.epub          |  Bin 0 -> 4497 bytes
 .../20/epub/invalid/bad_opf_namespace.epub         |  Bin 0 -> 1839 bytes
 .../invalid/filenameSpacesErrorTwice_Issue239.epub |  Bin 0 -> 817189 bytes
 src/test/resources/20/epub/invalid/issue138.epub   |  Bin 0 -> 1601 bytes
 src/test/resources/20/epub/invalid/issue170.epub   |  Bin 0 -> 446852 bytes
 src/test/resources/20/epub/invalid/issue236.epub   |  Bin 0 -> 2565 bytes
 src/test/resources/20/epub/invalid/issue313.epub   |  Bin 0 -> 4095 bytes
 src/test/resources/20/epub/invalid/issue316.epub   |  Bin 0 -> 4034 bytes
 src/test/resources/20/epub/invalid/issue89.epub    |  Bin 0 -> 326638 bytes
 .../resources/20/epub/invalid/lorem-mimetype.epub  |  Bin 0 -> 4048 bytes
 .../20/epub/invalid/mimetypeAndVersion.epub        |  Bin 0 -> 1284 bytes
 .../resources/20/epub/invalid/ncx-dupe-id.epub     |  Bin 0 -> 4046 bytes
 .../resources/20/epub/invalid/no-linear-yes.epub   |  Bin 0 -> 286188 bytes
 .../resources/20/epub/invalid/no-rootfile.epub     |  Bin 0 -> 1825 bytes
 .../invalid/unresolved-internal-xhtml-link.epub    |  Bin 0 -> 4069 bytes
 src/test/resources/20/epub/issues.xml              |   28 +
 src/test/resources/20/epub/tests20.xml             |   91 +
 src/test/resources/20/epub/valid/issue169.epub     |  Bin 0 -> 1935323 bytes
 src/test/resources/20/epub/valid/issue169.txt      |   22 +
 src/test/resources/20/epub/valid/issue194.bad.epub |  Bin 0 -> 4121 bytes
 .../resources/20/epub/valid/issue194.good.epub     |  Bin 0 -> 4047 bytes
 src/test/resources/20/epub/valid/lorem.epub        |  Bin 0 -> 4047 bytes
 src/test/resources/20/epub/valid/lorem.txt         |   11 +
 .../expanded/invalid/custom-ns-attr/EPUB/lorem.css |    6 +
 .../expanded/invalid/custom-ns-attr/EPUB/lorem.ncx |   29 +
 .../expanded/invalid/custom-ns-attr/EPUB/lorem.opf |   17 +
 .../invalid/custom-ns-attr/EPUB/lorem.xhtml        |  100 +
 .../invalid/custom-ns-attr/META-INF/container.xml  |    7 +
 .../20/expanded/invalid/custom-ns-attr/mimetype    |    1 +
 .../20/expanded/invalid/fallbacks-circular.txt     |   13 +
 .../invalid/fallbacks-circular/EPUB/image.abc      |    1 +
 .../invalid/fallbacks-circular/EPUB/image.jpeg     |  Bin 0 -> 1962 bytes
 .../invalid/fallbacks-circular/EPUB/image.xyz      |    1 +
 .../invalid/fallbacks-circular/EPUB/lorem.css      |    6 +
 .../invalid/fallbacks-circular/EPUB/lorem.ncx      |   29 +
 .../invalid/fallbacks-circular/EPUB/lorem.opf      |   20 +
 .../invalid/fallbacks-circular/EPUB/lorem.xhtml    |  108 +
 .../fallbacks-circular/META-INF/container.xml      |    7 +
 .../expanded/invalid/fallbacks-circular/mimetype   |    1 +
 .../expanded/invalid/issue182/EPUB/1-lorem.xhtml   |   98 +
 .../expanded/invalid/issue182/EPUB/2-lorem.xhtml   |   98 +
 .../20/expanded/invalid/issue182/EPUB/lorem.css    |    6 +
 .../20/expanded/invalid/issue182/EPUB/lorem.opf    |   20 +
 .../20/expanded/invalid/issue182/EPUB/nav.ncx      |   38 +
 .../invalid/issue182/META-INF/container.xml        |    7 +
 .../20/expanded/invalid/issue182/mimetype          |    1 +
 .../20/expanded/invalid/lorem-dual-guide.txt       |   10 +
 .../invalid/lorem-dual-guide/EPUB/1-lorem.xhtml    |   98 +
 .../invalid/lorem-dual-guide/EPUB/2-lorem.xhtml    |   98 +
 .../invalid/lorem-dual-guide/EPUB/lorem.css        |    6 +
 .../invalid/lorem-dual-guide/EPUB/lorem.opf        |   23 +
 .../expanded/invalid/lorem-dual-guide/EPUB/nav.ncx |   38 +
 .../lorem-dual-guide/META-INF/container.xml        |    7 +
 .../20/expanded/invalid/lorem-dual-guide/mimetype  |    1 +
 .../20/expanded/invalid/lorem-mimetype.txt         |   10 +
 .../expanded/invalid/lorem-mimetype/EPUB/lorem.css |    6 +
 .../expanded/invalid/lorem-mimetype/EPUB/lorem.ncx |   35 +
 .../expanded/invalid/lorem-mimetype/EPUB/lorem.opf |   17 +
 .../invalid/lorem-mimetype/EPUB/lorem.xhtml        |   98 +
 .../invalid/lorem-mimetype/META-INF/container.xml  |    7 +
 .../20/expanded/invalid/lorem-mimetype/mimetype    |    1 +
 .../invalid/xhtml-extension/EPUB/lorem.css         |    4 +
 .../invalid/xhtml-extension/EPUB/lorem.foo         |  100 +
 .../invalid/xhtml-extension/EPUB/lorem.ncx         |   29 +
 .../invalid/xhtml-extension/EPUB/lorem.opf         |   17 +
 .../invalid/xhtml-extension/META-INF/container.xml |    7 +
 .../20/expanded/invalid/xhtml-extension/mimetype   |    1 +
 src/test/resources/20/expanded/valid/fallbacks.txt |   13 +
 .../20/expanded/valid/fallbacks/EPUB/image.abc     |    1 +
 .../20/expanded/valid/fallbacks/EPUB/image.jpeg    |  Bin 0 -> 1962 bytes
 .../20/expanded/valid/fallbacks/EPUB/image.xyz     |    1 +
 .../20/expanded/valid/fallbacks/EPUB/lorem.css     |    6 +
 .../20/expanded/valid/fallbacks/EPUB/lorem.ncx     |   29 +
 .../20/expanded/valid/fallbacks/EPUB/lorem.opf     |   21 +
 .../20/expanded/valid/fallbacks/EPUB/lorem.xhtml   |  109 +
 .../valid/fallbacks/EPUB/page-template.xpgt        |   44 +
 .../valid/fallbacks/META-INF/container.xml         |    7 +
 .../resources/20/expanded/valid/fallbacks/mimetype |    1 +
 .../20/expanded/valid/issue205/EPUB/lorem.css      |    6 +
 .../20/expanded/valid/issue205/EPUB/lorem.ncx      |   29 +
 .../20/expanded/valid/issue205/EPUB/lorem.opf      |   18 +
 .../20/expanded/valid/issue205/EPUB/lorem.xhtml    |  100 +
 .../expanded/valid/issue205/META-INF/container.xml |    7 +
 .../resources/20/expanded/valid/issue205/mimetype  |    1 +
 .../resources/20/expanded/valid/issue256/.DS_Store |  Bin 0 -> 6148 bytes
 .../20/expanded/valid/issue256/._DS_Store          |    0
 .../expanded/valid/issue256/EPUB/images/Thumbs.db  |    0
 .../valid/issue256/EPUB/images/ehthumbs.db         |    0
 .../expanded/valid/issue256/EPUB/images/image.jpg  |  Bin 0 -> 1962 bytes
 .../20/expanded/valid/issue256/EPUB/lorem.css      |    6 +
 .../20/expanded/valid/issue256/EPUB/lorem.ncx      |   29 +
 .../20/expanded/valid/issue256/EPUB/lorem.opf      |   18 +
 .../20/expanded/valid/issue256/EPUB/lorem.xhtml    |  102 +
 .../expanded/valid/issue256/META-INF/container.xml |    7 +
 .../resources/20/expanded/valid/issue256/mimetype  |    1 +
 src/test/resources/20/expanded/valid/issue267.txt  |    9 +
 .../20/expanded/valid/issue267/EPUB/lorem.css      |    6 +
 .../20/expanded/valid/issue267/EPUB/lorem.ncx      |   29 +
 .../20/expanded/valid/issue267/EPUB/lorem.opf      |   18 +
 .../20/expanded/valid/issue267/EPUB/lorem.xhtml    |  100 +
 .../expanded/valid/issue267/META-INF/container.xml |    7 +
 .../resources/20/expanded/valid/issue267/mimetype  |    1 +
 .../20/expanded/valid/lorem-basic-dual.txt         |    9 +
 .../valid/lorem-basic-dual/EPUB/1-lorem.xhtml      |   98 +
 .../valid/lorem-basic-dual/EPUB/2-lorem.xhtml      |   98 +
 .../expanded/valid/lorem-basic-dual/EPUB/lorem.css |    6 +
 .../expanded/valid/lorem-basic-dual/EPUB/lorem.opf |   19 +
 .../expanded/valid/lorem-basic-dual/EPUB/nav.ncx   |   38 +
 .../valid/lorem-basic-dual/META-INF/container.xml  |    7 +
 .../20/expanded/valid/lorem-basic-dual/mimetype    |    1 +
 .../20/expanded/valid/lorem-dual-guide.txt         |    9 +
 .../valid/lorem-dual-guide/EPUB/1-lorem.xhtml      |   98 +
 .../valid/lorem-dual-guide/EPUB/2-lorem.xhtml      |   98 +
 .../expanded/valid/lorem-dual-guide/EPUB/lorem.css |    6 +
 .../expanded/valid/lorem-dual-guide/EPUB/lorem.opf |   23 +
 .../expanded/valid/lorem-dual-guide/EPUB/nav.ncx   |   38 +
 .../valid/lorem-dual-guide/META-INF/container.xml  |    7 +
 .../20/expanded/valid/lorem-dual-guide/mimetype    |    1 +
 .../20/expanded/valid/lorem-uidspaces.txt          |    6 +
 .../expanded/valid/lorem-uidspaces/EPUB/lorem.css  |    6 +
 .../expanded/valid/lorem-uidspaces/EPUB/lorem.ncx  |   29 +
 .../expanded/valid/lorem-uidspaces/EPUB/lorem.opf  |   18 +
 .../valid/lorem-uidspaces/EPUB/lorem.xhtml         |   98 +
 .../valid/lorem-uidspaces/META-INF/container.xml   |    7 +
 .../20/expanded/valid/lorem-uidspaces/mimetype     |    1 +
 .../valid/lorem-xrenditions-1ops/EPUB/lorem.css    |    6 +
 .../valid/lorem-xrenditions-1ops/EPUB/lorem.ncx    |   29 +
 .../valid/lorem-xrenditions-1ops/EPUB/lorem.opf    |   17 +
 .../valid/lorem-xrenditions-1ops/EPUB/lorem.xhtml  |  100 +
 .../lorem-xrenditions-1ops/META-INF/container.xml  |    7 +
 .../valid/lorem-xrenditions-1ops/TEXT/lorem.txt    |   88 +
 .../expanded/valid/lorem-xrenditions-1ops/mimetype |    1 +
 .../valid/lorem-xrenditions-2ops/EPUB/lorem.css    |    6 +
 .../valid/lorem-xrenditions-2ops/EPUB/lorem.ncx    |   29 +
 .../valid/lorem-xrenditions-2ops/EPUB/lorem.opf    |   17 +
 .../valid/lorem-xrenditions-2ops/EPUB/lorem.xhtml  |  100 +
 .../valid/lorem-xrenditions-2ops/EPUB_2/lorem.css  |    6 +
 .../valid/lorem-xrenditions-2ops/EPUB_2/lorem.ncx  |   29 +
 .../valid/lorem-xrenditions-2ops/EPUB_2/lorem.opf  |   17 +
 .../lorem-xrenditions-2ops/EPUB_2/lorem.xhtml      |  100 +
 .../lorem-xrenditions-2ops/META-INF/container.xml  |    7 +
 .../expanded/valid/lorem-xrenditions-2ops/mimetype |    1 +
 .../20/expanded/valid/lorem/lorem-basic.txt        |    9 +
 .../valid/lorem/lorem-basic/EPUB/lorem.css         |    6 +
 .../valid/lorem/lorem-basic/EPUB/lorem.ncx         |   29 +
 .../valid/lorem/lorem-basic/EPUB/lorem.opf         |   17 +
 .../valid/lorem/lorem-basic/EPUB/lorem.xhtml       |  100 +
 .../valid/lorem/lorem-basic/META-INF/container.xml |    7 +
 .../20/expanded/valid/lorem/lorem-basic/mimetype   |    1 +
 .../20/single/opf/invalid/bad-opf-namespace.opf    |   24 +
 .../resources/20/single/opf/invalid/dupe-id.opf    |   21 +
 .../invalid/filename_contains_spaces_issue239.opf  |   38 +
 .../20/single/opf/invalid/null-identifier.opf      |   20 +
 src/test/resources/20/single/opf/valid.opf         |   30 +
 .../resources/20/single/opf/valid/issue216.opf     |   29 +
 .../resources/20/single/ops/invalid/dupe-id.xhtml  |   10 +
 .../20/single/ops/invalid/unresolved-entity.xhtml  |   10 +
 .../resources/20/single/ops/valid/issue215.xhtml   |   10 +
 .../resources/20/single/ops/valid/issue222.xhtml   |   21 +
 .../20/single/ops/valid/svg-font-face.svg          |   24 +
 .../20/single/ops/valid/svg-foreignObject.xhtml    |   24 +
 .../resources/30/epub/invalid/fallback-cycle.epub  |  Bin 0 -> 3860 bytes
 .../30/epub/invalid/font_no_fallback.epub          |  Bin 0 -> 3847 bytes
 .../resources/30/epub/invalid/invalid-ncx.epub     |  Bin 0 -> 4720 bytes
 src/test/resources/30/epub/invalid/issue137a.epub  |  Bin 0 -> 5898 bytes
 src/test/resources/30/epub/invalid/issue137b.epub  |  Bin 0 -> 5858 bytes
 src/test/resources/30/epub/invalid/issue176.epub   |  Bin 0 -> 67824 bytes
 src/test/resources/30/epub/invalid/issue203.epub   |  Bin 0 -> 4721 bytes
 src/test/resources/30/epub/invalid/issue221.epub   |  Bin 0 -> 4053187 bytes
 src/test/resources/30/epub/invalid/issue239.epub   |  Bin 0 -> 226801 bytes
 src/test/resources/30/epub/invalid/issue265.epub   |  Bin 0 -> 15223 bytes
 src/test/resources/30/epub/invalid/issue265b.epub  |  Bin 0 -> 15235 bytes
 src/test/resources/30/epub/invalid/issue265c.epub  |  Bin 0 -> 14887 bytes
 .../resources/30/epub/invalid/lorem-xht-rng-1.epub |  Bin 0 -> 3755 bytes
 .../resources/30/epub/invalid/lorem-xht-sch-1.epub |  Bin 0 -> 3760 bytes
 .../30/epub/invalid/mimetype-extra-field.epub      |  Bin 0 -> 4739 bytes
 .../30/epub/invalid/mp3-in-spine-no-fallback.epub  |  Bin 0 -> 4365 bytes
 .../resources/30/epub/invalid/nav-invalid.epub     |  Bin 0 -> 3002 bytes
 src/test/resources/30/epub/valid/epub30-spec.epub  |  Bin 0 -> 226787 bytes
 src/test/resources/30/epub/valid/epub30-spec.txt   |   18 +
 src/test/resources/30/epub/valid/extension-1.ePub  |  Bin 0 -> 3712 bytes
 src/test/resources/30/epub/valid/extension-1.txt   |   11 +
 .../resources/30/epub/valid/font-obfuscation.epub  |  Bin 0 -> 20975 bytes
 .../30/epub/valid/font_fallback_chain.epub         |  Bin 0 -> 3859 bytes
 .../30/epub/valid/font_fallback_chain.txt          |   12 +
 src/test/resources/30/epub/valid/georgia-cfi.epub  |  Bin 0 -> 545499 bytes
 src/test/resources/30/epub/valid/issue145.epub     |  Bin 0 -> 138788 bytes
 src/test/resources/30/epub/valid/issue145.txt      |   18 +
 src/test/resources/30/epub/valid/issue156.epub     |  Bin 0 -> 3713 bytes
 src/test/resources/30/epub/valid/issue158.epub     |  Bin 0 -> 2207 bytes
 src/test/resources/30/epub/valid/issue158.txt      |   13 +
 src/test/resources/30/epub/valid/issue262.epub     |  Bin 0 -> 2671 bytes
 .../epub/valid/issue271_xpgt_correctFallback.epub  |  Bin 0 -> 4464 bytes
 src/test/resources/30/epub/valid/lorem.epub        |  Bin 0 -> 3712 bytes
 src/test/resources/30/epub/valid/lorem.txt         |   11 +
 .../resources/30/epub/valid/mp3-in-manifest.epub   |  Bin 0 -> 4362 bytes
 .../resources/30/epub/valid/mp3-in-manifest.txt    |   12 +
 .../resources/30/epub/valid/mp3-with-fallback.epub |  Bin 0 -> 4371 bytes
 .../resources/30/epub/valid/mp3-with-fallback.txt  |   12 +
 src/test/resources/30/epub/valid/test_svg.epub     |  Bin 0 -> 4234 bytes
 src/test/resources/30/epub/valid/test_svg.txt      |   11 +
 src/test/resources/30/epub/valid/valid ncx.epub    |  Bin 0 -> 4719 bytes
 src/test/resources/30/epub/valid/valid_ncx.txt     |   11 +
 .../expanded/invalid/custom-ns-attr/EPUB/lorem.css |    6 +
 .../expanded/invalid/custom-ns-attr/EPUB/lorem.opf |   17 +
 .../invalid/custom-ns-attr/EPUB/lorem.xhtml        |  107 +
 .../invalid/custom-ns-attr/META-INF/container.xml  |    7 +
 .../30/expanded/invalid/custom-ns-attr/mimetype    |    1 +
 .../invalid/epub30-spec/EPUB/css/epub-spec.css     |  586 ++
 .../epub30-spec/EPUB/img/epub_logo_color.jpg       |  Bin 0 -> 134445 bytes
 .../epub30-spec/EPUB/img/idpflogo_web_125.jpg      |  Bin 0 -> 19659 bytes
 .../expanded/invalid/epub30-spec/EPUB/package.opf  |   39 +
 .../EPUB/xhtml/epub30-acknowledgements.xhtml       |    2 +
 .../epub30-spec/EPUB/xhtml/epub30-changes.xhtml    |    2 +
 .../EPUB/xhtml/epub30-contentdocs.xhtml            |  216 +
 .../EPUB/xhtml/epub30-mediaoverlays.xhtml          |  226 +
 .../epub30-spec/EPUB/xhtml/epub30-nav.xhtml        |  565 ++
 .../epub30-spec/EPUB/xhtml/epub30-ocf.xhtml        |  304 +
 .../epub30-spec/EPUB/xhtml/epub30-overview.xhtml   |  974 +++
 .../EPUB/xhtml/epub30-publications.xhtml           |  329 +
 .../epub30-spec/EPUB/xhtml/epub30-references.xhtml |   15 +
 .../EPUB/xhtml/epub30-terminology.xhtml            |    8 +
 .../epub30-spec/EPUB/xhtml/epub30-titlepage.xhtml  |    6 +
 .../invalid/epub30-spec/META-INF/container.xml     |    6 +
 .../30/expanded/invalid/epub30-spec/mimetype       |    1 +
 .../invalid/fallbacks-circular/EPUB/image.abc      |    1 +
 .../invalid/fallbacks-circular/EPUB/image.jpeg     |  Bin 0 -> 1962 bytes
 .../invalid/fallbacks-circular/EPUB/image.xyz      |    1 +
 .../invalid/fallbacks-circular/EPUB/lorem.css      |    6 +
 .../invalid/fallbacks-circular/EPUB/lorem.opf      |   20 +
 .../invalid/fallbacks-circular/EPUB/lorem.xhtml    |  109 +
 .../fallbacks-circular/META-INF/container.xml      |    7 +
 .../expanded/invalid/fallbacks-circular/mimetype   |    1 +
 .../invalid/fallbacks-nonresolving/EPUB/image.abc  |    1 +
 .../invalid/fallbacks-nonresolving/EPUB/image.jpeg |  Bin 0 -> 1962 bytes
 .../invalid/fallbacks-nonresolving/EPUB/image.xyz  |    1 +
 .../invalid/fallbacks-nonresolving/EPUB/lorem.css  |    6 +
 .../invalid/fallbacks-nonresolving/EPUB/lorem.opf  |   20 +
 .../fallbacks-nonresolving/EPUB/lorem.xhtml        |  109 +
 .../fallbacks-nonresolving/META-INF/container.xml  |    7 +
 .../invalid/fallbacks-nonresolving/mimetype        |    1 +
 .../30/expanded/invalid/issue189/EPUB/lorem.css    |    6 +
 .../30/expanded/invalid/issue189/EPUB/lorem.opf    |   17 +
 .../30/expanded/invalid/issue189/EPUB/lorem.xhtml  |   34 +
 .../invalid/issue189/META-INF/container.xml        |    7 +
 .../30/expanded/invalid/issue189/mimetype          |    1 +
 .../lorem-basic-dual-base/EPUB/1-lorem.xhtml       |  101 +
 .../lorem-basic-dual-base/EPUB/2-lorem.xhtml       |  100 +
 .../invalid/lorem-basic-dual-base/EPUB/lorem.css   |    6 +
 .../invalid/lorem-basic-dual-base/EPUB/lorem.opf   |   20 +
 .../invalid/lorem-basic-dual-base/EPUB/nav.xhtml   |   22 +
 .../lorem-basic-dual-base/META-INF/container.xml   |    7 +
 .../invalid/lorem-basic-dual-base/mimetype         |    1 +
 .../EPUB/wasteland-content.xhtml                   | 1091 ++++
 .../lorem-basic-switch/EPUB/wasteland-cover.jpg    |  Bin 0 -> 103477 bytes
 .../lorem-basic-switch/EPUB/wasteland-nav.xhtml    |   31 +
 .../invalid/lorem-basic-switch/EPUB/wasteland.css  |   32 +
 .../invalid/lorem-basic-switch/EPUB/wasteland.opf  |   22 +
 .../lorem-basic-switch/META-INF/container.xml      |    7 +
 .../expanded/invalid/lorem-basic-switch/mimetype   |    1 +
 .../expanded/invalid/lorem-bindings/EPUB/lorem.css |    6 +
 .../expanded/invalid/lorem-bindings/EPUB/lorem.opf |   23 +
 .../invalid/lorem-bindings/EPUB/lorem.xhtml        |  120 +
 .../invalid/lorem-bindings/EPUB/slideshow.xml      |    0
 .../expanded/invalid/lorem-bindings/EPUB/video.avi |    0
 .../invalid/lorem-bindings/META-INF/container.xml  |    7 +
 .../30/expanded/invalid/lorem-bindings/mimetype    |    1 +
 .../invalid/lorem-container/EPUB/lorem.css         |    6 +
 .../invalid/lorem-container/EPUB/lorem.opf         |   17 +
 .../invalid/lorem-container/EPUB/lorem.xhtml       |  108 +
 .../invalid/lorem-container/META-INF/container.xml |    8 +
 .../30/expanded/invalid/lorem-container/mimetype   |    1 +
 .../expanded/invalid/lorem-css-enc/EPUB/lorem.css  |    8 +
 .../expanded/invalid/lorem-css-enc/EPUB/lorem.opf  |   17 +
 .../invalid/lorem-css-enc/EPUB/lorem.xhtml         |  108 +
 .../invalid/lorem-css-enc/META-INF/container.xml   |    7 +
 .../30/expanded/invalid/lorem-css-enc/mimetype     |    1 +
 .../invalid/lorem-css-import-1/EPUB/lorem.css      |    8 +
 .../invalid/lorem-css-import-1/EPUB/lorem.opf      |   19 +
 .../invalid/lorem-css-import-1/EPUB/lorem.xhtml    |  108 +
 .../lorem-css-import-1/META-INF/container.xml      |    7 +
 .../expanded/invalid/lorem-css-import-1/mimetype   |    1 +
 .../invalid/lorem-css-import-2/EPUB/import.css     |    3 +
 .../invalid/lorem-css-import-2/EPUB/lorem.css      |    8 +
 .../invalid/lorem-css-import-2/EPUB/lorem.opf      |   19 +
 .../invalid/lorem-css-import-2/EPUB/lorem.xhtml    |  108 +
 .../lorem-css-import-2/META-INF/container.xml      |    7 +
 .../expanded/invalid/lorem-css-import-2/mimetype   |    1 +
 .../lorem-css-urls-1/EPUB/OldStandard-Regular.otf  |  Bin 0 -> 443980 bytes
 .../invalid/lorem-css-urls-1/EPUB/import.css       |    3 +
 .../invalid/lorem-css-urls-1/EPUB/lorem.css        |  374 ++
 .../invalid/lorem-css-urls-1/EPUB/lorem.opf        |   19 +
 .../invalid/lorem-css-urls-1/EPUB/lorem.xhtml      |  108 +
 .../lorem-css-urls-1/META-INF/container.xml        |    7 +
 .../30/expanded/invalid/lorem-css-urls-1/mimetype  |    1 +
 .../invalid/lorem-css-urls-2/EPUB/lorem.css        |   16 +
 .../invalid/lorem-css-urls-2/EPUB/lorem.opf        |   19 +
 .../invalid/lorem-css-urls-2/EPUB/lorem.xhtml      |   61 +
 .../invalid/lorem-css-urls-2/EPUB/lorem2.xhtml     |   44 +
 .../lorem-css-urls-2/META-INF/container.xml        |    7 +
 .../30/expanded/invalid/lorem-css-urls-2/mimetype  |    1 +
 .../invalid/lorem-css-urls-3/EPUB/lorem.css        |   12 +
 .../invalid/lorem-css-urls-3/EPUB/lorem.opf        |   19 +
 .../invalid/lorem-css-urls-3/EPUB/lorem.xhtml      |   61 +
 .../invalid/lorem-css-urls-3/EPUB/lorem2.xhtml     |   44 +
 .../lorem-css-urls-3/META-INF/container.xml        |    7 +
 .../30/expanded/invalid/lorem-css-urls-3/mimetype  |    1 +
 .../invalid/lorem-css-wrongtype/EPUB/lorem.css     |    6 +
 .../invalid/lorem-css-wrongtype/EPUB/lorem.opf     |   17 +
 .../invalid/lorem-css-wrongtype/EPUB/lorem.xhtml   |  108 +
 .../lorem-css-wrongtype/META-INF/container.xml     |    7 +
 .../expanded/invalid/lorem-css-wrongtype/mimetype  |    1 +
 .../invalid/lorem-encryption/EPUB/lorem.css        |    6 +
 .../invalid/lorem-encryption/EPUB/lorem.opf        |   17 +
 .../invalid/lorem-encryption/EPUB/lorem.xhtml      |  108 +
 .../lorem-encryption/META-INF/container.xml        |    7 +
 .../lorem-encryption/META-INF/encryption.xml       |    7 +
 .../invalid/lorem-encryption/dropped text.txt      |    1 +
 .../30/expanded/invalid/lorem-encryption/mimetype  |    1 +
 .../expanded/invalid/lorem-foreign/EPUB/lorem.css  |    6 +
 .../expanded/invalid/lorem-foreign/EPUB/lorem.opf  |   18 +
 .../invalid/lorem-foreign/EPUB/lorem.xhtml         |  113 +
 .../invalid/lorem-foreign/META-INF/container.xml   |    7 +
 .../30/expanded/invalid/lorem-foreign/mimetype     |    1 +
 .../EPUB/wasteland-content.xhtml                   | 1082 ++++
 .../lorem-mathml-noalt/EPUB/wasteland-cover.jpg    |  Bin 0 -> 103477 bytes
 .../lorem-mathml-noalt/EPUB/wasteland-nav.xhtml    |   31 +
 .../invalid/lorem-mathml-noalt/EPUB/wasteland.css  |   32 +
 .../invalid/lorem-mathml-noalt/EPUB/wasteland.opf  |   22 +
 .../lorem-mathml-noalt/META-INF/container.xml      |    7 +
 .../expanded/invalid/lorem-mathml-noalt/mimetype   |    1 +
 .../invalid/lorem-mimetype-2/EPUB/lorem.css        |    6 +
 .../invalid/lorem-mimetype-2/EPUB/lorem.opf        |   17 +
 .../invalid/lorem-mimetype-2/EPUB/lorem.xhtml      |  108 +
 .../lorem-mimetype-2/META-INF/container.xml        |    7 +
 .../30/expanded/invalid/lorem-mimetype-2/mimetype  |    1 +
 .../expanded/invalid/lorem-mimetype/EPUB/lorem.css |    6 +
 .../expanded/invalid/lorem-mimetype/EPUB/lorem.opf |   17 +
 .../invalid/lorem-mimetype/EPUB/lorem.xhtml        |  108 +
 .../invalid/lorem-mimetype/META-INF/container.xml  |    7 +
 .../30/expanded/invalid/lorem-mimetype/mimetype    |    1 +
 .../expanded/invalid/lorem-poster/EPUB/lorem.css   |    6 +
 .../expanded/invalid/lorem-poster/EPUB/lorem.opf   |   19 +
 .../expanded/invalid/lorem-poster/EPUB/lorem.xhtml |  113 +
 .../expanded/invalid/lorem-poster/EPUB/poster.png  |  Bin 0 -> 3654 bytes
 .../invalid/lorem-poster/META-INF/container.xml    |    7 +
 .../30/expanded/invalid/lorem-poster/mimetype      |    1 +
 .../expanded/invalid/lorem-remote-2/EPUB/lorem.css |    6 +
 .../expanded/invalid/lorem-remote-2/EPUB/lorem.opf |   18 +
 .../invalid/lorem-remote-2/EPUB/lorem.xhtml        |  110 +
 .../invalid/lorem-remote-2/META-INF/container.xml  |    7 +
 .../30/expanded/invalid/lorem-remote-2/mimetype    |    1 +
 .../expanded/invalid/lorem-remote-3/EPUB/lorem.css |    6 +
 .../expanded/invalid/lorem-remote-3/EPUB/lorem.opf |   18 +
 .../invalid/lorem-remote-3/EPUB/lorem.xhtml        |  110 +
 .../invalid/lorem-remote-3/META-INF/container.xml  |    7 +
 .../30/expanded/invalid/lorem-remote-3/mimetype    |    1 +
 .../expanded/invalid/lorem-remote-4/EPUB/lorem.css |    6 +
 .../expanded/invalid/lorem-remote-4/EPUB/lorem.opf |   19 +
 .../invalid/lorem-remote-4/EPUB/lorem.xhtml        |  113 +
 .../invalid/lorem-remote-4/META-INF/container.xml  |    7 +
 .../30/expanded/invalid/lorem-remote-4/mimetype    |    1 +
 .../expanded/invalid/lorem-remote/EPUB/lorem.css   |    6 +
 .../expanded/invalid/lorem-remote/EPUB/lorem.opf   |   18 +
 .../expanded/invalid/lorem-remote/EPUB/lorem.xhtml |  110 +
 .../invalid/lorem-remote/META-INF/container.xml    |    7 +
 .../30/expanded/invalid/lorem-remote/mimetype      |    1 +
 .../invalid/lorem-signatures/EPUB/lorem.css        |    6 +
 .../invalid/lorem-signatures/EPUB/lorem.opf        |   17 +
 .../invalid/lorem-signatures/EPUB/lorem.xhtml      |  108 +
 .../lorem-signatures/META-INF/container.xml        |    7 +
 .../lorem-signatures/META-INF/signatures.xml       |    7 +
 .../30/expanded/invalid/lorem-signatures/mimetype  |    1 +
 .../invalid/lorem-svg-dual-2/EPUB/lorem-1.xhtml    |  120 +
 .../invalid/lorem-svg-dual-2/EPUB/lorem-2.xhtml    |   22 +
 .../invalid/lorem-svg-dual-2/EPUB/lorem.css        |    6 +
 .../invalid/lorem-svg-dual-2/EPUB/lorem.opf        |   20 +
 .../lorem-svg-dual-2/META-INF/container.xml        |    7 +
 .../30/expanded/invalid/lorem-svg-dual-2/mimetype  |    1 +
 .../invalid/lorem-svg-dual/EPUB/lorem-1.xhtml      |  120 +
 .../invalid/lorem-svg-dual/EPUB/lorem-2.xhtml      |   22 +
 .../expanded/invalid/lorem-svg-dual/EPUB/lorem.css |    6 +
 .../expanded/invalid/lorem-svg-dual/EPUB/lorem.opf |   20 +
 .../invalid/lorem-svg-dual/META-INF/container.xml  |    7 +
 .../30/expanded/invalid/lorem-svg-dual/mimetype    |    1 +
 .../lorem-svg-hyperlink-notitle/EPUB/lorem-1.xhtml |  120 +
 .../lorem-svg-hyperlink-notitle/EPUB/lorem-2.xhtml |   29 +
 .../lorem-svg-hyperlink-notitle/EPUB/lorem.css     |    6 +
 .../lorem-svg-hyperlink-notitle/EPUB/lorem.opf     |   19 +
 .../META-INF/container.xml                         |    7 +
 .../invalid/lorem-svg-hyperlink-notitle/mimetype   |    1 +
 .../invalid/lorem-xhtml-rng-1/EPUB/lorem.css       |    6 +
 .../invalid/lorem-xhtml-rng-1/EPUB/lorem.opf       |   17 +
 .../invalid/lorem-xhtml-rng-1/EPUB/lorem.xhtml     |  109 +
 .../lorem-xhtml-rng-1/META-INF/container.xml       |    7 +
 .../30/expanded/invalid/lorem-xhtml-rng-1/mimetype |    1 +
 .../invalid/lorem-xhtml-sch-1/EPUB/lorem.css       |    6 +
 .../invalid/lorem-xhtml-sch-1/EPUB/lorem.opf       |   17 +
 .../invalid/lorem-xhtml-sch-1/EPUB/lorem.xhtml     |  109 +
 .../lorem-xhtml-sch-1/META-INF/container.xml       |    7 +
 .../30/expanded/invalid/lorem-xhtml-sch-1/mimetype |    1 +
 .../lorem-xrenditions-unmanifested/EPUB/lorem.css  |    6 +
 .../lorem-xrenditions-unmanifested/EPUB/lorem.opf  |   17 +
 .../EPUB/lorem.xhtml                               |  108 +
 .../EPUB_2/lorem.css                               |    6 +
 .../EPUB_2/lorem.opf                               |   17 +
 .../EPUB_2/lorem.xhtml                             |  108 +
 .../META-INF/container.xml                         |    7 +
 .../lorem-xrenditions-unmanifested/mimetype        |    1 +
 .../unmanifested.txt                               |    0
 .../invalid/nav-invalid/META-INF/container.xml     |    6 +
 .../30/expanded/invalid/nav-invalid/OEBPS/4.xhtml  |  127 +
 .../invalid/nav-invalid/OEBPS/css/cnib.css         |   79 +
 .../expanded/invalid/nav-invalid/OEBPS/nav.xhtml   |   11 +
 .../30/expanded/invalid/nav-invalid/mimetype       |    1 +
 .../30/expanded/invalid/nav-invalid/package.opf    |   22 +
 .../expanded/invalid/wasteland-otf/EPUB/fonts.css  |   20 +
 .../wasteland-otf/EPUB/wasteland-content.xhtml     | 1069 +++
 .../invalid/wasteland-otf/EPUB/wasteland-cover.jpg |  Bin 0 -> 103477 bytes
 .../invalid/wasteland-otf/EPUB/wasteland-nav.xhtml |   32 +
 .../invalid/wasteland-otf/EPUB/wasteland-night.css |   19 +
 .../invalid/wasteland-otf/EPUB/wasteland.css       |   59 +
 .../invalid/wasteland-otf/EPUB/wasteland.ncx       |   49 +
 .../invalid/wasteland-otf/EPUB/wasteland.opf       |   37 +
 .../invalid/wasteland-otf/META-INF/container.xml   |    7 +
 .../30/expanded/invalid/wasteland-otf/mimetype     |    1 +
 .../invalid/xhtml-extension/EPUB/lorem.css         |    4 +
 .../invalid/xhtml-extension/EPUB/lorem.html        |  108 +
 .../invalid/xhtml-extension/EPUB/lorem.opf         |   17 +
 .../invalid/xhtml-extension/META-INF/container.xml |    7 +
 .../30/expanded/invalid/xhtml-extension/mimetype   |    1 +
 src/test/resources/30/expanded/make.sh             |   12 +
 .../30/expanded/valid/cc-shared-culture.txt        |   34 +
 .../EPUB/audio/asharedculture_soundtrack.mp3       |  Bin 0 -> 3265152 bytes
 .../cc-shared-culture/EPUB/captions/cc-en.vtt      |  225 +
 .../cc-shared-culture/EPUB/captions/cc-en.xml      |   64 +
 .../cc-shared-culture/EPUB/captions/cc-fr.vtt      |  221 +
 .../cc-shared-culture/EPUB/captions/cc-fr.xml      |   63 +
 .../cc-shared-culture/EPUB/css/shared-culture.css  |  125 +
 .../EPUB/fonts/Quicksand_Bold_Oblique.otf          |  Bin 0 -> 38172 bytes
 .../EPUB/fonts/Quicksand_Light.otf                 |  Bin 0 -> 35504 bytes
 .../EPUB/images/2565514353_2ae2073e14.jpg          |  Bin 0 -> 88094 bytes
 .../EPUB/images/326261902_3fa36f548d.jpg           |  Bin 0 -> 279551 bytes
 .../valid/cc-shared-culture/EPUB/package.opf       |   51 +
 .../valid/cc-shared-culture/EPUB/script/shared.js  |   30 +
 .../EPUB/video/shared-culture.mp4                  |  Bin 0 -> 4976488 bytes
 .../EPUB/video/shared-culture.webm                 |  Bin 0 -> 8330669 bytes
 .../valid/cc-shared-culture/EPUB/xhtml/cover.xhtml |   17 +
 .../valid/cc-shared-culture/EPUB/xhtml/p10.xhtml   |   52 +
 .../valid/cc-shared-culture/EPUB/xhtml/p20.xhtml   |   60 +
 .../valid/cc-shared-culture/EPUB/xhtml/p30.xhtml   |   40 +
 .../valid/cc-shared-culture/EPUB/xhtml/p40.xhtml   |   40 +
 .../valid/cc-shared-culture/EPUB/xhtml/p50.xhtml   |   52 +
 .../valid/cc-shared-culture/EPUB/xhtml/p60.xhtml   |   86 +
 .../valid/cc-shared-culture/EPUB/xhtml/toc.xhtml   |   72 +
 .../valid/cc-shared-culture/META-INF/container.xml |    6 +
 .../30/expanded/valid/cc-shared-culture/mimetype   |    1 +
 .../valid/collections-preview/EPUB/chapter1.xhtml  |   99 +
 .../valid/collections-preview/EPUB/chapter2.xhtml  |   99 +
 .../valid/collections-preview/EPUB/chapter3.xhtml  |   99 +
 .../valid/collections-preview/EPUB/lorem.css       |    4 +
 .../valid/collections-preview/EPUB/lorem.opf       |   30 +
 .../valid/collections-preview/EPUB/nav.xhtml       |   18 +
 .../collections-preview/META-INF/container.xml     |    7 +
 .../30/expanded/valid/collections-preview/mimetype |    1 +
 src/test/resources/30/expanded/valid/fallbacks.txt |   13 +
 .../30/expanded/valid/fallbacks/EPUB/image.abc     |    1 +
 .../30/expanded/valid/fallbacks/EPUB/image.jpeg    |  Bin 0 -> 1962 bytes
 .../30/expanded/valid/fallbacks/EPUB/image.xyz     |    1 +
 .../30/expanded/valid/fallbacks/EPUB/lorem.css     |    6 +
 .../30/expanded/valid/fallbacks/EPUB/lorem.opf     |   20 +
 .../30/expanded/valid/fallbacks/EPUB/lorem.xhtml   |  109 +
 .../valid/fallbacks/META-INF/container.xml         |    7 +
 .../resources/30/expanded/valid/fallbacks/mimetype |    1 +
 .../30/expanded/valid/issue188/EPUB/epub+logo.png  |  Bin 0 -> 3654 bytes
 .../30/expanded/valid/issue188/EPUB/lorem.css      |    6 +
 .../30/expanded/valid/issue188/EPUB/lorem.opf      |   18 +
 .../30/expanded/valid/issue188/EPUB/lorem.xhtml    |  109 +
 .../expanded/valid/issue188/META-INF/container.xml |    7 +
 .../resources/30/expanded/valid/issue188/mimetype  |    1 +
 .../expanded/valid/issue198/META-INF/container.xml |    6 +
 .../30/expanded/valid/issue198/OEBPS/content.opf   |   24 +
 .../expanded/valid/issue198/OEBPS/page_0001.xhtml  |   21 +
 .../expanded/valid/issue198/OEBPS/page_0002.xhtml  |   25 +
 .../30/expanded/valid/issue198/OEBPS/toc.ncx       |   27 +
 .../resources/30/expanded/valid/issue198/mimetype  |    1 +
 .../30/expanded/valid/issue211a/EPUB/lorem.css     |    6 +
 .../30/expanded/valid/issue211a/EPUB/lorem.opf     |   17 +
 .../30/expanded/valid/issue211a/EPUB/lorem.xhtml   |  115 +
 .../valid/issue211a/META-INF/container.xml         |    7 +
 .../resources/30/expanded/valid/issue211a/mimetype |    1 +
 .../30/expanded/valid/issue211b/EPUB/lorem.css     |    6 +
 .../30/expanded/valid/issue211b/EPUB/lorem.opf     |   17 +
 .../30/expanded/valid/issue211b/EPUB/lorem.xhtml   |  115 +
 .../valid/issue211b/META-INF/container.xml         |    7 +
 .../resources/30/expanded/valid/issue211b/mimetype |    1 +
 .../30/expanded/valid/issue225/EPUB/lorem.css      |    6 +
 .../30/expanded/valid/issue225/EPUB/lorem.opf      |   17 +
 .../30/expanded/valid/issue225/EPUB/lorem.xhtml    |  108 +
 .../expanded/valid/issue225/META-INF/container.xml |    7 +
 .../resources/30/expanded/valid/issue225/mimetype  |    1 +
 .../30/expanded/valid/issue226/EPUB/doc.pdf        |  Bin 0 -> 8784 bytes
 .../30/expanded/valid/issue226/EPUB/lorem.css      |    6 +
 .../30/expanded/valid/issue226/EPUB/lorem.opf      |   18 +
 .../30/expanded/valid/issue226/EPUB/lorem.xhtml    |  112 +
 .../expanded/valid/issue226/META-INF/container.xml |    7 +
 .../resources/30/expanded/valid/issue226/mimetype  |    1 +
 .../30/expanded/valid/issue237/EPUB/lorem.css      |    8 +
 .../30/expanded/valid/issue237/EPUB/lorem.opf      |   17 +
 .../30/expanded/valid/issue237/EPUB/lorem.xhtml    |  108 +
 .../expanded/valid/issue237/META-INF/container.xml |    7 +
 .../resources/30/expanded/valid/issue237/mimetype  |    1 +
 .../30/expanded/valid/issue249/EPUB/lorem.css      |    6 +
 .../30/expanded/valid/issue249/EPUB/lorem.opf      |   18 +
 .../30/expanded/valid/issue249/EPUB/lorem.xhtml    |  113 +
 .../expanded/valid/issue249/META-INF/container.xml |    7 +
 .../resources/30/expanded/valid/issue249/mimetype  |    1 +
 src/test/resources/30/expanded/valid/issue267.txt  |   14 +
 .../30/expanded/valid/issue267/EPUB/lorem.css      |    6 +
 .../30/expanded/valid/issue267/EPUB/lorem.opf      |   25 +
 .../30/expanded/valid/issue267/EPUB/lorem.xhtml    |  108 +
 .../expanded/valid/issue267/META-INF/container.xml |    7 +
 .../resources/30/expanded/valid/issue267/mimetype  |    1 +
 .../30/expanded/valid/issue270/EPUB/lorem-2.xhtml  |   57 +
 .../30/expanded/valid/issue270/EPUB/lorem.css      |    6 +
 .../30/expanded/valid/issue270/EPUB/lorem.opf      |   19 +
 .../30/expanded/valid/issue270/EPUB/lorem.xhtml    |   62 +
 .../expanded/valid/issue270/META-INF/container.xml |    7 +
 .../resources/30/expanded/valid/issue270/mimetype  |    1 +
 .../resources/30/expanded/valid/lorem-audio.txt    |   12 +
 .../30/expanded/valid/lorem-audio/EPUB/audio.mp3   |    0
 .../30/expanded/valid/lorem-audio/EPUB/audio.mp4   |    0
 .../30/expanded/valid/lorem-audio/EPUB/lorem.css   |    6 +
 .../30/expanded/valid/lorem-audio/EPUB/lorem.opf   |   19 +
 .../30/expanded/valid/lorem-audio/EPUB/lorem.xhtml |  114 +
 .../valid/lorem-audio/META-INF/container.xml       |    7 +
 .../30/expanded/valid/lorem-audio/mimetype         |    1 +
 .../30/expanded/valid/lorem-basic-dual.txt         |   10 +
 .../valid/lorem-basic-dual/EPUB/1-lorem.xhtml      |   99 +
 .../valid/lorem-basic-dual/EPUB/2-lorem.xhtml      |   99 +
 .../expanded/valid/lorem-basic-dual/EPUB/lorem.css |    6 +
 .../expanded/valid/lorem-basic-dual/EPUB/lorem.opf |   20 +
 .../expanded/valid/lorem-basic-dual/EPUB/nav.xhtml |   22 +
 .../valid/lorem-basic-dual/META-INF/container.xml  |    7 +
 .../30/expanded/valid/lorem-basic-dual/mimetype    |    1 +
 .../EPUB/wasteland-content.xhtml                   | 1082 ++++
 .../lorem-basic-mathml/EPUB/wasteland-cover.jpg    |  Bin 0 -> 103477 bytes
 .../lorem-basic-mathml/EPUB/wasteland-nav.xhtml    |   31 +
 .../valid/lorem-basic-mathml/EPUB/wasteland.css    |   32 +
 .../valid/lorem-basic-mathml/EPUB/wasteland.opf    |   22 +
 .../lorem-basic-mathml/META-INF/container.xml      |    7 +
 .../30/expanded/valid/lorem-basic-mathml/mimetype  |    1 +
 .../expanded/valid/lorem-basic-ncx/EPUB/lorem.css  |    6 +
 .../expanded/valid/lorem-basic-ncx/EPUB/lorem.ncx  |   29 +
 .../expanded/valid/lorem-basic-ncx/EPUB/lorem.opf  |   18 +
 .../valid/lorem-basic-ncx/EPUB/lorem.xhtml         |  108 +
 .../valid/lorem-basic-ncx/META-INF/container.xml   |    7 +
 .../30/expanded/valid/lorem-basic-ncx/mimetype     |    1 +
 .../30/expanded/valid/lorem-basic-switch.txt       |   15 +
 .../EPUB/wasteland-content.xhtml                   | 1091 ++++
 .../lorem-basic-switch/EPUB/wasteland-cover.jpg    |  Bin 0 -> 103477 bytes
 .../lorem-basic-switch/EPUB/wasteland-nav.xhtml    |   31 +
 .../valid/lorem-basic-switch/EPUB/wasteland.css    |   32 +
 .../valid/lorem-basic-switch/EPUB/wasteland.opf    |   22 +
 .../lorem-basic-switch/META-INF/container.xml      |    7 +
 .../30/expanded/valid/lorem-basic-switch/mimetype  |    1 +
 .../resources/30/expanded/valid/lorem-basic.txt    |   12 +
 .../30/expanded/valid/lorem-basic/EPUB/lorem.css   |    6 +
 .../30/expanded/valid/lorem-basic/EPUB/lorem.opf   |   17 +
 .../30/expanded/valid/lorem-basic/EPUB/lorem.xhtml |  108 +
 .../valid/lorem-basic/META-INF/container.xml       |    7 +
 .../30/expanded/valid/lorem-basic/mimetype         |    1 +
 .../resources/30/expanded/valid/lorem-bindings.txt |   12 +
 .../expanded/valid/lorem-bindings/EPUB/lorem.css   |    6 +
 .../expanded/valid/lorem-bindings/EPUB/lorem.opf   |   22 +
 .../expanded/valid/lorem-bindings/EPUB/lorem.xhtml |  115 +
 .../valid/lorem-bindings/EPUB/slideshow.xml        |    0
 .../valid/lorem-bindings/META-INF/container.xml    |    7 +
 .../30/expanded/valid/lorem-bindings/mimetype      |    1 +
 .../30/expanded/valid/lorem-css-import.txt         |   10 +
 .../valid/lorem-css-import/EPUB/import.css         |    3 +
 .../expanded/valid/lorem-css-import/EPUB/lorem.css |    8 +
 .../expanded/valid/lorem-css-import/EPUB/lorem.opf |   18 +
 .../valid/lorem-css-import/EPUB/lorem.xhtml        |  108 +
 .../valid/lorem-css-import/META-INF/container.xml  |    7 +
 .../30/expanded/valid/lorem-css-import/mimetype    |    1 +
 .../resources/30/expanded/valid/lorem-foreign.txt  |   12 +
 .../30/expanded/valid/lorem-foreign/EPUB/lorem.css |    6 +
 .../30/expanded/valid/lorem-foreign/EPUB/lorem.opf |   18 +
 .../expanded/valid/lorem-foreign/EPUB/lorem.xhtml  |  113 +
 .../valid/lorem-foreign/META-INF/container.xml     |    7 +
 .../30/expanded/valid/lorem-foreign/mimetype       |    1 +
 .../30/expanded/valid/lorem-image/EPUB/image.png   |  Bin 0 -> 3654 bytes
 .../30/expanded/valid/lorem-image/EPUB/lorem.css   |    6 +
 .../30/expanded/valid/lorem-image/EPUB/lorem.opf   |   18 +
 .../30/expanded/valid/lorem-image/EPUB/lorem.xhtml |  109 +
 .../valid/lorem-image/META-INF/container.xml       |    7 +
 .../30/expanded/valid/lorem-image/mimetype         |    1 +
 .../resources/30/expanded/valid/lorem-link.txt     |   13 +
 .../30/expanded/valid/lorem-link/EPUB/licence.txt  |    1 +
 .../30/expanded/valid/lorem-link/EPUB/lorem.css    |    6 +
 .../30/expanded/valid/lorem-link/EPUB/lorem.opf    |   18 +
 .../30/expanded/valid/lorem-link/EPUB/lorem.xhtml  |  108 +
 .../valid/lorem-link/META-INF/container.xml        |    7 +
 .../30/expanded/valid/lorem-link/mimetype          |    1 +
 .../30/expanded/valid/lorem-object-fallbacks.txt   |   13 +
 .../valid/lorem-object-fallbacks/EPUB/lorem.css    |    6 +
 .../valid/lorem-object-fallbacks/EPUB/lorem.opf    |   23 +
 .../valid/lorem-object-fallbacks/EPUB/lorem.xhtml  |  120 +
 .../lorem-object-fallbacks/EPUB/slideshow.xml      |    0
 .../valid/lorem-object-fallbacks/EPUB/video.avi    |    0
 .../lorem-object-fallbacks/META-INF/container.xml  |    7 +
 .../expanded/valid/lorem-object-fallbacks/mimetype |    1 +
 .../resources/30/expanded/valid/lorem-poster.txt   |   13 +
 .../30/expanded/valid/lorem-poster/EPUB/lorem.css  |    6 +
 .../30/expanded/valid/lorem-poster/EPUB/lorem.opf  |   19 +
 .../expanded/valid/lorem-poster/EPUB/lorem.xhtml   |  113 +
 .../30/expanded/valid/lorem-poster/EPUB/poster.png |  Bin 0 -> 3654 bytes
 .../valid/lorem-poster/META-INF/container.xml      |    7 +
 .../30/expanded/valid/lorem-poster/mimetype        |    1 +
 .../expanded/valid/lorem-remote-2/EPUB/lorem.css   |    6 +
 .../expanded/valid/lorem-remote-2/EPUB/lorem.opf   |   19 +
 .../expanded/valid/lorem-remote-2/EPUB/lorem.xhtml |  113 +
 .../valid/lorem-remote-2/META-INF/container.xml    |    7 +
 .../30/expanded/valid/lorem-remote-2/mimetype      |    1 +
 .../valid/lorem-remote-https/EPUB/lorem.css        |    6 +
 .../valid/lorem-remote-https/EPUB/lorem.opf        |   18 +
 .../valid/lorem-remote-https/EPUB/lorem.xhtml      |  110 +
 .../lorem-remote-https/META-INF/container.xml      |    7 +
 .../30/expanded/valid/lorem-remote-https/mimetype  |    1 +
 .../valid/lorem-remote-queryurl/EPUB/lorem.css     |    6 +
 .../valid/lorem-remote-queryurl/EPUB/lorem.opf     |   18 +
 .../valid/lorem-remote-queryurl/EPUB/lorem.xhtml   |  110 +
 .../lorem-remote-queryurl/META-INF/container.xml   |    7 +
 .../expanded/valid/lorem-remote-queryurl/mimetype  |    1 +
 .../resources/30/expanded/valid/lorem-remote.txt   |   13 +
 .../30/expanded/valid/lorem-remote/EPUB/lorem.css  |    6 +
 .../30/expanded/valid/lorem-remote/EPUB/lorem.opf  |   18 +
 .../expanded/valid/lorem-remote/EPUB/lorem.xhtml   |  110 +
 .../valid/lorem-remote/META-INF/container.xml      |    7 +
 .../30/expanded/valid/lorem-remote/mimetype        |    1 +
 .../resources/30/expanded/valid/lorem-svg-dual.txt |   10 +
 .../valid/lorem-svg-dual/EPUB/lorem-1.xhtml        |  120 +
 .../valid/lorem-svg-dual/EPUB/lorem-2.xhtml        |   29 +
 .../expanded/valid/lorem-svg-dual/EPUB/lorem.css   |    6 +
 .../expanded/valid/lorem-svg-dual/EPUB/lorem.opf   |   19 +
 .../valid/lorem-svg-dual/META-INF/container.xml    |    7 +
 .../30/expanded/valid/lorem-svg-dual/mimetype      |    1 +
 .../30/expanded/valid/lorem-svg-hyperlink.txt      |   11 +
 .../valid/lorem-svg-hyperlink/EPUB/lorem.css       |    6 +
 .../valid/lorem-svg-hyperlink/EPUB/lorem.opf       |   19 +
 .../valid/lorem-svg-hyperlink/EPUB/lorem.xhtml     |  108 +
 .../valid/lorem-svg-hyperlink/EPUB/rect.svg        |   18 +
 .../lorem-svg-hyperlink/META-INF/container.xml     |    7 +
 .../30/expanded/valid/lorem-svg-hyperlink/mimetype |    1 +
 src/test/resources/30/expanded/valid/lorem-svg.txt |   11 +
 .../30/expanded/valid/lorem-svg/EPUB/lorem.css     |    6 +
 .../30/expanded/valid/lorem-svg/EPUB/lorem.opf     |   19 +
 .../30/expanded/valid/lorem-svg/EPUB/lorem.xhtml   |  108 +
 .../30/expanded/valid/lorem-svg/EPUB/rect.svg      |   18 +
 .../valid/lorem-svg/META-INF/container.xml         |    7 +
 .../resources/30/expanded/valid/lorem-svg/mimetype |    1 +
 .../valid/lorem-xrenditions/EPUB/lorem.css         |    6 +
 .../valid/lorem-xrenditions/EPUB/lorem.opf         |   17 +
 .../valid/lorem-xrenditions/EPUB/lorem.xhtml       |  108 +
 .../valid/lorem-xrenditions/EPUB_2/lorem.css       |    6 +
 .../valid/lorem-xrenditions/EPUB_2/lorem.opf       |   17 +
 .../valid/lorem-xrenditions/EPUB_2/lorem.xhtml     |  108 +
 .../valid/lorem-xrenditions/META-INF/container.xml |    7 +
 .../30/expanded/valid/lorem-xrenditions/mimetype   |    1 +
 src/test/resources/30/expanded/valid/svg-cover.txt |   11 +
 .../30/expanded/valid/svg-cover/EPUB/cover.svg     |  262 +
 .../30/expanded/valid/svg-cover/EPUB/lorem.css     |    6 +
 .../30/expanded/valid/svg-cover/EPUB/lorem.opf     |   18 +
 .../30/expanded/valid/svg-cover/EPUB/lorem.xhtml   |  108 +
 .../valid/svg-cover/META-INF/container.xml         |    7 +
 .../resources/30/expanded/valid/svg-cover/mimetype |    1 +
 .../resources/30/expanded/valid/svg-in-spine.txt   |   22 +
 .../valid/svg-in-spine/META-INF/container.xml      |    6 +
 .../svg-in-spine/OPS/Images/Tsuru_wiki-1b.svg      | 1238 ++++
 .../svg-in-spine/OPS/Images/Tsuru_wiki-2b.svg      | 1014 +++
 .../valid/svg-in-spine/OPS/Images/cover.svg        |  262 +
 .../valid/svg-in-spine/OPS/Images/crane1.jpg       |  Bin 0 -> 168654 bytes
 .../valid/svg-in-spine/OPS/Images/crane2.jpg       |  Bin 0 -> 172361 bytes
 .../valid/svg-in-spine/OPS/Images/flyer.jpg        |  Bin 0 -> 422956 bytes
 .../valid/svg-in-spine/OPS/Images/p002.svg         |    4 +
 .../valid/svg-in-spine/OPS/Images/p005.svg         |    4 +
 .../valid/svg-in-spine/OPS/Images/p006.svg         |    4 +
 .../valid/svg-in-spine/OPS/Images/p007.svg         |    4 +
 .../30/expanded/valid/svg-in-spine/OPS/content.opf |   46 +
 .../30/expanded/valid/svg-in-spine/OPS/nav.xhtml   |   18 +
 .../valid/svg-in-spine/OPS/tocimages/bg.png        |  Bin 0 -> 1148 bytes
 .../valid/svg-in-spine/OPS/tocimages/divider.png   |  Bin 0 -> 1073 bytes
 .../svg-in-spine/OPS/tocimages/dividerBig.png      |  Bin 0 -> 1085 bytes
 .../expanded/valid/svg-in-spine/OPS/tocstyle.css   |   80 +
 .../30/expanded/valid/svg-in-spine/mimetype        |    1 +
 .../30/expanded/valid/wasteland-basic.txt          |   14 +
 .../wasteland-basic/EPUB/wasteland-content.xhtml   | 1067 +++
 .../valid/wasteland-basic/EPUB/wasteland-cover.jpg |  Bin 0 -> 103477 bytes
 .../valid/wasteland-basic/EPUB/wasteland-nav.xhtml |   31 +
 .../valid/wasteland-basic/EPUB/wasteland.css       |   32 +
 .../valid/wasteland-basic/EPUB/wasteland.opf       |   22 +
 .../valid/wasteland-basic/META-INF/container.xml   |    7 +
 .../30/expanded/valid/wasteland-basic/mimetype     |    1 +
 .../resources/30/expanded/valid/wasteland-otf.txt  |   22 +
 .../valid/wasteland-otf/EPUB/OldStandard-Bold.otf  |  Bin 0 -> 471892 bytes
 .../wasteland-otf/EPUB/OldStandard-Italic.otf      |  Bin 0 -> 538480 bytes
 .../wasteland-otf/EPUB/OldStandard-Regular.otf     |  Bin 0 -> 443980 bytes
 .../30/expanded/valid/wasteland-otf/EPUB/fonts.css |   20 +
 .../wasteland-otf/EPUB/wasteland-content.xhtml     | 1069 +++
 .../valid/wasteland-otf/EPUB/wasteland-cover.jpg   |  Bin 0 -> 103477 bytes
 .../valid/wasteland-otf/EPUB/wasteland-nav.xhtml   |   32 +
 .../valid/wasteland-otf/EPUB/wasteland-night.css   |   19 +
 .../valid/wasteland-otf/EPUB/wasteland.css         |   59 +
 .../valid/wasteland-otf/EPUB/wasteland.ncx         |   49 +
 .../valid/wasteland-otf/EPUB/wasteland.opf         |   37 +
 .../valid/wasteland-otf/META-INF/container.xml     |    7 +
 .../30/expanded/valid/wasteland-otf/mimetype       |    1 +
 .../resources/30/single/nav/invalid/h-text.xhtml   |   91 +
 .../30/single/nav/invalid/nav-labels-001.xhtml     |   47 +
 .../30/single/nav/invalid/nav-labels-002.xhtml     |   48 +
 .../30/single/nav/invalid/nav-landmarks-001.xhtml  |   47 +
 .../30/single/nav/invalid/nav-landmarks-002.xhtml  |   56 +
 .../30/single/nav/invalid/nav-no-toc.xhtml         |   31 +
 .../30/single/nav/invalid/nav-pagelist-001.xhtml   |   43 +
 .../resources/30/single/nav/invalid/noTocNav.xhtml |   59 +
 .../30/single/nav/invalid/req-heading.xhtml        |   51 +
 .../resources/30/single/nav/valid/issue156.xhtml   |   81 +
 .../resources/30/single/nav/valid/minimal.xhtml    |   23 +
 .../resources/30/single/nav/valid/nav001.xhtml     |   78 +
 .../30/single/opf/invalid/bindings-001.opf         |   32 +
 .../opf/invalid/collection-invalid-do-sch-001.opf  |  193 +
 .../invalid/collection-invalid-manifest-001.opf    |   30 +
 .../30/single/opf/invalid/cover-image.opf          |   27 +
 .../resources/30/single/opf/invalid/date-1.opf     |   16 +
 .../resources/30/single/opf/invalid/date-2.opf     |   17 +
 .../30/single/opf/invalid/fallback-001.opf         |   27 +
 .../30/single/opf/invalid/fallback-002.opf         |   30 +
 .../invalid/filename_contains_spaces_issue239.opf  |   29 +
 .../resources/30/single/opf/invalid/foreign.opf    |   19 +
 .../resources/30/single/opf/invalid/id-unique.opf  |   30 +
 .../30/single/opf/invalid/invalidMetaAbout.opf     |   33 +
 .../30/single/opf/invalid/item-properties.opf      |   28 +
 .../30/single/opf/invalid/itemref-001.opf          |   21 +
 .../opf/invalid/link-rel-record-no-mediatype.opf   |   18 +
 .../single/opf/invalid/link-rel-record-refines.opf |   18 +
 .../resources/30/single/opf/invalid/malformed.opf  |   22 +
 .../30/single/opf/invalid/media-overlay-001.opf    |   31 +
 .../30/single/opf/invalid/media-overlay-002.opf    |   32 +
 .../single/opf/invalid/media-overlay-meta-001.opf  |   36 +
 .../meta-collection-refine-noncollection.opf       |   18 +
 .../opf/invalid/meta-collection-type-norefines.opf |   19 +
 .../meta-collection-type-refines-noncollection.opf |   19 +
 .../opf/invalid/meta-source-of-norefines.opf       |   19 +
 .../opf/invalid/meta-source-of-wrongrefines.opf    |   18 +
 .../opf/invalid/meta-source-of-wrongvalue.opf      |   19 +
 .../resources/30/single/opf/invalid/minlength.opf  |   20 +
 .../30/single/opf/invalid/modified-syntax.opf      |   19 +
 .../resources/30/single/opf/invalid/modified.opf   |   18 +
 .../resources/30/single/opf/invalid/nav-001.opf    |   24 +
 .../resources/30/single/opf/invalid/nav-002.opf    |   28 +
 .../resources/30/single/opf/invalid/nav-003.opf    |   28 +
 .../30/single/opf/invalid/noDcNamespace.opf        |   30 +
 .../resources/30/single/opf/invalid/noDcTitle.opf  |   29 +
 .../30/single/opf/invalid/noMetadataElement.opf    |   25 +
 src/test/resources/30/single/opf/invalid/noNav.opf |   30 +
 src/test/resources/30/single/opf/invalid/order.opf |   28 +
 .../30/single/opf/invalid/prefix-declaration.opf   |   26 +
 .../30/single/opf/invalid/prefixes-001.opf         |   28 +
 .../30/single/opf/invalid/prefixes-002.opf         |   28 +
 .../30/single/opf/invalid/prefixes-003.opf         |   29 +
 .../30/single/opf/invalid/prefixes-004.opf         |   28 +
 .../30/single/opf/invalid/prefixes-redeclare.opf   |   29 +
 .../30/single/opf/invalid/refines-relative.opf     |   20 +
 .../opf/invalid/rendition-globals-badvalues.opf    |   22 +
 .../opf/invalid/rendition-globals-duplicate.opf    |   27 +
 .../opf/invalid/rendition-globals-refines.opf      |   21 +
 .../opf/invalid/rendition-overrides-conflicts.opf  |   25 +
 .../resources/30/single/opf/invalid/scheme-001.opf |   29 +
 .../resources/30/single/opf/invalid/scheme-002.opf |   29 +
 .../resources/30/single/opf/invalid/tocncx-001.opf |   25 +
 .../resources/30/single/opf/invalid/tocncx-002.opf |   28 +
 .../resources/30/single/opf/invalid/uid-001.opf    |   22 +
 .../resources/30/single/opf/invalid/uid-002.opf    |   22 +
 .../30/single/opf/peekData/collectionDCType.opf    |   13 +
 .../resources/30/single/opf/peekData/emptyId.opf   |    6 +
 .../30/single/opf/peekData/idNotOnDCIdentifier.opf |    7 +
 .../resources/30/single/opf/peekData/missingId.opf |    6 +
 .../30/single/opf/peekData/multipleDCType.opf      |    7 +
 .../30/single/opf/peekData/multipleIds.opf         |    7 +
 .../30/single/opf/peekData/negativeVersion.opf     |    3 +
 .../resources/30/single/opf/peekData/noEqual.opf   |    3 +
 .../30/single/opf/peekData/noPackageElement.opf    |    8 +
 .../30/single/opf/peekData/noPointInValue.opf      |    3 +
 .../resources/30/single/opf/peekData/noVersion.opf |    3 +
 .../30/single/opf/peekData/singleDCType.opf        |    6 +
 .../30/single/opf/peekData/spacesBetweenQuotes.opf |    3 +
 .../30/single/opf/peekData/spacesInValue.opf       |    3 +
 .../resources/30/single/opf/peekData/uniqueId.opf  |    6 +
 .../30/single/opf/peekData/validVersion.opf        |    3 +
 .../30/single/opf/peekData/valueWithoutQuotes.opf  |    3 +
 .../30/single/opf/peekData/version123.323.opf      |    3 +
 .../opf/peekData/whitespaceInDCIdentifier.opf      |    6 +
 .../30/single/opf/peekData/whitespaceInDCType.opf  |    8 +
 .../resources/30/single/opf/valid/base-001.opf     |   29 +
 .../resources/30/single/opf/valid/bindings-001.opf |   32 +
 .../30/single/opf/valid/collection-valid-001.opf   |   36 +
 .../30/single/opf/valid/collection-valid-002.opf   |   30 +
 .../single/opf/valid/collection-valid-do-001.opf   |  192 +
 src/test/resources/30/single/opf/valid/date-1.opf  |   16 +
 src/test/resources/30/single/opf/valid/date-2.opf  |   16 +
 src/test/resources/30/single/opf/valid/date-3.opf  |   18 +
 .../resources/30/single/opf/valid/dc-source.opf    |   20 +
 src/test/resources/30/single/opf/valid/dc-type.opf |   19 +
 .../30/single/opf/valid/link-rel-record.opf        |   18 +
 .../30/single/opf/valid/lorem-svg-fallback.opf     |   19 +
 .../resources/30/single/opf/valid/lorem-svg.opf    |   19 +
 .../30/single/opf/valid/media-overlay-001.opf      |   33 +
 .../30/single/opf/valid/media-overlay-002.opf      |   34 +
 .../30/single/opf/valid/meta-collection.opf        |   20 +
 .../30/single/opf/valid/meta-schemaorg.opf         |   18 +
 .../30/single/opf/valid/meta-source-of.opf         |   20 +
 src/test/resources/30/single/opf/valid/minimal.opf |   17 +
 .../resources/30/single/opf/valid/prefixes.opf     |   29 +
 .../30/single/opf/valid/rendition-globals.opf      |   24 +
 .../30/single/opf/valid/rendition-properties.opf   |   24 +
 .../resources/30/single/opf/valid/scheme-001.opf   |   29 +
 .../30/single/overlays/invalid/overlay-001.smil    |   47 +
 .../30/single/overlays/invalid/overlay-002.smil    |   44 +
 .../30/single/overlays/invalid/overlay-003.smil    |   49 +
 .../30/single/overlays/invalid/overlay-004.smil    |   47 +
 .../30/single/overlays/invalid/overlay-005.smil    |   43 +
 .../30/single/overlays/invalid/overlay-006.smil    |   44 +
 .../30/single/overlays/valid/overlay-001.smil      |   42 +
 .../30/single/overlays/valid/overlay-002.smil      |   42 +
 .../30/single/overlays/valid/overlay-003.smil      |   53 +
 .../30/single/overlays/valid/overlay-007.smil      |   44 +
 src/test/resources/30/single/svg/invalid/rect.svg  |   23 +
 .../resources/30/single/svg/valid/issue219.svg     | 2465 +++++++
 .../resources/30/single/svg/valid/issue222.xhtml   |   21 +
 src/test/resources/30/single/svg/valid/rect.svg    |   18 +
 .../30/single/xhtml/invalid/canvas-fallback.xhtml  |   16 +
 .../30/single/xhtml/invalid/doctype-1.xhtml        |   24 +
 .../30/single/xhtml/invalid/http-equiv-1.xhtml     |   16 +
 .../30/single/xhtml/invalid/issue153.xhtml         |   21 +
 .../30/single/xhtml/invalid/issue230.xhtml         |   13 +
 .../resources/30/single/xhtml/invalid/link.xhtml   |   11 +
 .../resources/30/single/xhtml/invalid/md.xhtml     |   11 +
 .../30/single/xhtml/invalid/ops-mathml-001.xhtml   |   31 +
 .../30/single/xhtml/invalid/ops-mathml-002.xhtml   |   61 +
 .../30/single/xhtml/invalid/prefixes-001.xhtml     |   22 +
 .../30/single/xhtml/invalid/sch-001.xhtml          |  164 +
 .../30/single/xhtml/invalid/ssml-empty-ph.xhtml    |   19 +
 .../30/single/xhtml/invalid/style-001.xhtml        |   11 +
 .../30/single/xhtml/invalid/styleAttr001.xhtml     |    8 +
 .../30/single/xhtml/invalid/svg-001.xhtml          |   40 +
 .../30/single/xhtml/invalid/switch-001.xhtml       |   63 +
 .../30/single/xhtml/invalid/trigger.xhtml          |   25 +
 .../resources/30/single/xhtml/invalid/xml11.xhtml  |    7 +
 .../30/single/xhtml/valid/aria-describedAt.xhtml   |    8 +
 .../resources/30/single/xhtml/valid/canvas.xhtml   |   16 +
 .../30/single/xhtml/valid/custom-ns-attrs.xhtml    |    9 +
 .../resources/30/single/xhtml/valid/data.xhtml     |   18 +
 .../30/single/xhtml/valid/doctype-1.xhtml          |   23 +
 .../30/single/xhtml/valid/doctype-2.xhtml          |   23 +
 .../30/single/xhtml/valid/edits-001.xhtml          |   79 +
 .../30/single/xhtml/valid/embed-001.xhtml          |  101 +
 .../30/single/xhtml/valid/forms-001.xhtml          |  363 ++
 .../30/single/xhtml/valid/global-attrs-001.xhtml   |   54 +
 .../30/single/xhtml/valid/http-equiv-1.xhtml       |   16 +
 .../resources/30/single/xhtml/valid/issue153.xhtml |   21 +
 .../resources/30/single/xhtml/valid/issue204.xhtml |   41 +
 .../resources/30/single/xhtml/valid/issue230.xhtml |   13 +
 .../resources/30/single/xhtml/valid/issue248.xhtml |   22 +
 .../resources/30/single/xhtml/valid/link.xhtml     |   11 +
 src/test/resources/30/single/xhtml/valid/md.xhtml  |   37 +
 .../resources/30/single/xhtml/valid/ops-001.xhtml  |  122 +
 .../30/single/xhtml/valid/ops-mathml-001.xhtml     |   89 +
 .../30/single/xhtml/valid/ops-mathml-002.xhtml     |   53 +
 .../30/single/xhtml/valid/ops-svg-001.xhtml        |   36 +
 .../30/single/xhtml/valid/ops-svg-002.xhtml        |   36 +
 .../30/single/xhtml/valid/prefixes-001.xhtml       |   22 +
 .../resources/30/single/xhtml/valid/rdfa.xhtml     |   74 +
 .../resources/30/single/xhtml/valid/ruby-001.xhtml |   47 +
 .../resources/30/single/xhtml/valid/sch-001.xhtml  |  139 +
 .../30/single/xhtml/valid/sections-001.xhtml       |  328 +
 .../resources/30/single/xhtml/valid/ssml.xhtml     |   19 +
 .../30/single/xhtml/valid/style-001.xhtml          |   28 +
 .../30/single/xhtml/valid/styleAttr001.xhtml       |    8 +
 .../30/single/xhtml/valid/svg-rdf-001.xhtml        |   57 +
 .../30/single/xhtml/valid/switch-001.xhtml         |   55 +
 .../30/single/xhtml/valid/tables-001.xhtml         |  114 +
 .../resources/30/single/xhtml/valid/text-001.xhtml |  191 +
 .../resources/30/single/xhtml/valid/trigger.xhtml  |   25 +
 .../resources/30/single/xhtml/valid/video.xhtml    |   17 +
 .../test/DTBook/Basic/META-INF/container.xml       |    6 +
 .../test/DTBook/Basic/OPS/AreYouReadyV3.xml        |  698 ++
 .../epubcheck/test/DTBook/Basic/OPS/content.opf    |   27 +
 .../test/DTBook/Basic/OPS/dtbookbasic.css          |  621 ++
 .../epubcheck/test/DTBook/Basic/OPS/image1.jpg     |  Bin 0 -> 3445 bytes
 .../epubcheck/test/DTBook/Basic/OPS/image11.jpg    |  Bin 0 -> 5586 bytes
 .../epubcheck/test/DTBook/Basic/OPS/image12.jpg    |  Bin 0 -> 4826 bytes
 .../epubcheck/test/DTBook/Basic/OPS/image13.jpg    |  Bin 0 -> 12586 bytes
 .../epubcheck/test/DTBook/Basic/OPS/image14.jpg    |  Bin 0 -> 17587 bytes
 .../epubcheck/test/DTBook/Basic/OPS/image2.jpg     |  Bin 0 -> 8577 bytes
 .../epubcheck/test/DTBook/Basic/OPS/image3.jpg     |  Bin 0 -> 5981 bytes
 .../epubcheck/test/DTBook/Basic/OPS/image4.jpg     |  Bin 0 -> 4720 bytes
 .../epubcheck/test/DTBook/Basic/OPS/image5.jpg     |  Bin 0 -> 6589 bytes
 .../epubcheck/test/DTBook/Basic/OPS/page01.xhtml   |   15 +
 .../adobe/epubcheck/test/DTBook/Basic/OPS/toc.ncx  |   26 +
 .../com/adobe/epubcheck/test/DTBook/Basic/mimetype |    1 +
 .../test/DTBook/Basic_expected_results.json        |  420 ++
 .../test/DTBook/Basic_expected_results.xml         |   52 +
 .../epubcheck/test/api/InputStream_Expected.txt    |    2 +
 .../epubcheck/test/api/PrintWriter_Expected.txt    |    2 +
 .../failonwarnings/META-INF/container.xml          |    6 +
 .../command_line/failonwarnings/OPS/content.opf    |   22 +
 .../failonwarnings/OPS/external_css.xhtml          |   15 +
 .../failonwarnings/OPS/inline_css.xhtml            |   18 +
 .../test/command_line/failonwarnings/OPS/style.css |   10 +
 .../failonwarnings/OPS/style_tag_css.xhtml         |   25 +
 .../test/command_line/failonwarnings/OPS/toc.ncx   |   20 +
 .../test/command_line/failonwarnings/OPS/toc.xhtml |   17 +
 .../test/command_line/failonwarnings/mimetype      |    1 +
 .../failonwarnings_expected_results.json           |  376 ++
 .../command_line/jsonfile/META-INF/container.xml   |    6 +
 .../test/command_line/jsonfile/OPS/content.opf     |   22 +
 .../command_line/jsonfile/OPS/external_css.xhtml   |   15 +
 .../command_line/jsonfile/OPS/inline_css.xhtml     |   18 +
 .../test/command_line/jsonfile/OPS/style.css       |    9 +
 .../command_line/jsonfile/OPS/style_tag_css.xhtml  |   25 +
 .../test/command_line/jsonfile/OPS/toc.ncx         |   20 +
 .../test/command_line/jsonfile/OPS/toc.xhtml       |   17 +
 .../epubcheck/test/command_line/jsonfile/mimetype  |    1 +
 .../command_line/jsonfile_expected_results.json    |  364 ++
 .../listSeverities_expected_results.txt            |  221 +
 .../passonwarnings/META-INF/container.xml          |    6 +
 .../command_line/passonwarnings/OPS/content.opf    |   22 +
 .../passonwarnings/OPS/external_css.xhtml          |   15 +
 .../passonwarnings/OPS/inline_css.xhtml            |   18 +
 .../test/command_line/passonwarnings/OPS/style.css |    9 +
 .../passonwarnings/OPS/style_tag_css.xhtml         |   25 +
 .../test/command_line/passonwarnings/OPS/toc.ncx   |   20 +
 .../test/command_line/passonwarnings/OPS/toc.xhtml |   17 +
 .../test/command_line/passonwarnings/mimetype      |    1 +
 .../passonwarnings_expected_results.json           |  364 ++
 .../command_line/severity/META-INF/container.xml   |    6 +
 .../test/command_line/severity/OPS/content.opf     |   24 +
 .../test/command_line/severity/OPS/cssStyles.css   |   37 +
 .../command_line/severity/OPS/external_css.xhtml   |   28 +
 .../command_line/severity/OPS/inline_css.xhtml     |   17 +
 .../test/command_line/severity/OPS/style.css       |  101 +
 .../command_line/severity/OPS/style_tag_css.xhtml  |   83 +
 .../test/command_line/severity/OPS/toc.ncx         |   20 +
 .../test/command_line/severity/OPS/toc.xhtml       |   17 +
 .../test/command_line/severity/OPS/unused.css      |   69 +
 .../epubcheck/test/command_line/severity/mimetype  |    1 +
 .../severity_error_expected_results.txt            |   12 +
 .../severity_fatal_expected_results.txt            |    5 +
 .../test/command_line/severity_overrideBadId.txt   |    3 +
 .../severity_overrideBadId_expected_results.txt    |   83 +
 .../command_line/severity_overrideBadMessage.txt   |    4 +
 ...everity_overrideBadMessage_expected_results.txt |   84 +
 .../command_line/severity_overrideBadSeverity.txt  |    3 +
 ...verity_overrideBadSeverity_expected_results.txt |   83 +
 ...verity_overrideMissingFile_expected_results.txt |   83 +
 .../test/command_line/severity_overrideOk.txt      |    4 +
 .../severity_overrideOk_expected_results.txt       |   81 +
 .../severity_usage_expected_results.txt            |   82 +
 .../severity_warning_expected_results.txt          |   18 +
 .../command_line/xmlfile/META-INF/container.xml    |    6 +
 .../test/command_line/xmlfile/OPS/content.opf      |   22 +
 .../command_line/xmlfile/OPS/external_css.xhtml    |   15 +
 .../test/command_line/xmlfile/OPS/inline_css.xhtml |   18 +
 .../test/command_line/xmlfile/OPS/style.css        |    9 +
 .../command_line/xmlfile/OPS/style_tag_css.xhtml   |   25 +
 .../test/command_line/xmlfile/OPS/toc.ncx          |   20 +
 .../test/command_line/xmlfile/OPS/toc.xhtml        |   17 +
 .../epubcheck/test/command_line/xmlfile/mimetype   |    1 +
 .../test/command_line/xmlfile_expected_results.xml |   73 +
 .../test/css/alternate/META-INF/container.xml      |    6 +
 .../epubcheck/test/css/alternate/OPS/content.opf   |   22 +
 .../epubcheck/test/css/alternate/OPS/page01.xhtml  |   18 +
 .../epubcheck/test/css/alternate/OPS/page02.xhtml  |   16 +
 .../test/css/alternate/OPS/styles/chocolate.css    |  812 +++
 .../test/css/alternate/OPS/styles/midnight.css     |  812 +++
 .../test/css/alternate/OPS/styles/style.css        |  800 +++
 .../adobe/epubcheck/test/css/alternate/OPS/toc.ncx |   20 +
 .../epubcheck/test/css/alternate/OPS/toc.xhtml     |   15 +
 .../adobe/epubcheck/test/css/alternate/mimetype    |    1 +
 .../test/css/alternate_expected_results.json       |  388 ++
 .../test/css/columns/META-INF/container.xml        |    6 +
 .../epubcheck/test/css/columns/OPS/content.opf     |   22 +
 .../test/css/columns/OPS/external_css.xhtml        |   24 +
 .../test/css/columns/OPS/inline_css.xhtml          |   21 +
 .../adobe/epubcheck/test/css/columns/OPS/style.css |    6 +
 .../test/css/columns/OPS/style_tag_css.xhtml       |   31 +
 .../adobe/epubcheck/test/css/columns/OPS/toc.ncx   |   20 +
 .../adobe/epubcheck/test/css/columns/OPS/toc.xhtml |   17 +
 .../com/adobe/epubcheck/test/css/columns/mimetype  |    1 +
 .../test/css/columns_expected_results.json         |  393 ++
 .../test/css/discouraged/META-INF/container.xml    |    6 +
 .../epubcheck/test/css/discouraged/OPS/content.opf |   24 +
 .../test/css/discouraged/OPS/cssStyles.css         |   37 +
 .../test/css/discouraged/OPS/external_css.xhtml    |   28 +
 .../test/css/discouraged/OPS/inline_css.xhtml      |   17 +
 .../epubcheck/test/css/discouraged/OPS/style.css   |  101 +
 .../test/css/discouraged/OPS/style_tag_css.xhtml   |   83 +
 .../epubcheck/test/css/discouraged/OPS/toc.ncx     |   20 +
 .../epubcheck/test/css/discouraged/OPS/toc.xhtml   |   17 +
 .../epubcheck/test/css/discouraged/OPS/unused.css  |   69 +
 .../adobe/epubcheck/test/css/discouraged/mimetype  |    1 +
 .../test/css/discouraged_expected_results.json     |  775 +++
 .../test/css/discouraged_expected_results.xml      |  131 +
 .../css/excessive_epub3/META-INF/container.xml     |    6 +
 .../test/css/excessive_epub3/OPS/content.opf       |   28 +
 .../css/excessive_epub3/OPS/external_css.xhtml     |   67 +
 .../test/css/excessive_epub3/OPS/style.css         |    4 +
 .../test/css/excessive_epub3/OPS/style10.css       |    4 +
 .../test/css/excessive_epub3/OPS/style11.css       |    4 +
 .../test/css/excessive_epub3/OPS/style2.css        |    4 +
 .../test/css/excessive_epub3/OPS/style3.css        |    4 +
 .../test/css/excessive_epub3/OPS/style4.css        |    4 +
 .../test/css/excessive_epub3/OPS/style5.css        |    4 +
 .../test/css/excessive_epub3/OPS/style6.css        |    4 +
 .../test/css/excessive_epub3/OPS/style7.css        |    4 +
 .../test/css/excessive_epub3/OPS/style8.css        |    4 +
 .../test/css/excessive_epub3/OPS/style9.css        |    4 +
 .../epubcheck/test/css/excessive_epub3/OPS/toc.ncx |   20 +
 .../test/css/excessive_epub3/OPS/toc.xhtml         |   15 +
 .../epubcheck/test/css/excessive_epub3/mimetype    |    1 +
 .../test/css/excessive_epub3_expected_results.json |  454 ++
 .../test/css/font-face/META-INF/container.xml      |    6 +
 .../epubcheck/test/css/font-face/OPS/content.opf   |   25 +
 .../test/css/font-face/OPS/external_css.xhtml      |   66 +
 .../test/css/font-face/OPS/fonts/Fummel.otf        |  Bin 0 -> 6564 bytes
 .../test/css/font-face/OPS/fonts/bloody.woff       |  Bin 0 -> 28712 bytes
 .../test/css/font-face/OPS/fonts/brankovic.ttf     |  Bin 0 -> 36356 bytes
 .../test/css/font-face/OPS/inline_css.xhtml        |   12 +
 .../test/css/font-face/OPS/style_tag_css.xhtml     |   47 +
 .../test/css/font-face/OPS/styles/style.css        |   95 +
 .../adobe/epubcheck/test/css/font-face/OPS/toc.ncx |   20 +
 .../epubcheck/test/css/font-face/OPS/toc.xhtml     |   17 +
 .../adobe/epubcheck/test/css/font-face/mimetype    |    1 +
 .../test/css/font-face_expected_results.json       |  706 ++
 .../font_encryption_adobe/META-INF/container.xml   |    6 +
 .../font_encryption_adobe/META-INF/encryption.xml  |    8 +
 .../font_encryption_adobe/OEBPS/am-font-test.html  |   15 +
 .../css/font_encryption_adobe/OEBPS/content.opf    |   28 +
 .../OEBPS/fonts/ChaparralPro-Regular.otf           |  Bin 0 -> 31804 bytes
 .../css/font_encryption_adobe/OEBPS/template.css   |   35 +
 .../test/css/font_encryption_adobe/OEBPS/toc.ncx   |   20 +
 .../test/css/font_encryption_adobe/mimetype        |    1 +
 .../font_encryption_adobe_expected_results.json    |  312 +
 .../Css-fontface/css/fonts.css                     |   82 +
 .../Css-fontface/fonts/OldStandard-Bold.obf.otf    |  Bin 0 -> 471892 bytes
 .../Css-fontface/fonts/OldStandard-Bold.obf.woff   |  Bin 0 -> 104300 bytes
 .../Css-fontface/fonts/OldStandard-Bold.otf        |  Bin 0 -> 471892 bytes
 .../Css-fontface/fonts/OldStandard-Bold.woff       |  Bin 0 -> 104300 bytes
 .../Css-fontface/fonts/OldStandard-Italic.obf.otf  |  Bin 0 -> 538480 bytes
 .../Css-fontface/fonts/OldStandard-Italic.obf.woff |  Bin 0 -> 118780 bytes
 .../Css-fontface/fonts/OldStandard-Italic.otf      |  Bin 0 -> 538480 bytes
 .../Css-fontface/fonts/OldStandard-Italic.woff     |  Bin 0 -> 118780 bytes
 .../Css-fontface/fonts/OldStandard-Regular.obf.otf |  Bin 0 -> 443980 bytes
 .../fonts/OldStandard-Regular.obf.woff             |  Bin 0 -> 109100 bytes
 .../Css-fontface/fonts/OldStandard-Regular.otf     |  Bin 0 -> 443980 bytes
 .../Css-fontface/fonts/OldStandard-Regular.woff    |  Bin 0 -> 109100 bytes
 .../font_encryption_idpf/Css-fontface/package.opf  |   47 +
 .../Css-fontface/pages/cover.xhtml                 |   14 +
 .../Css-fontface/pages/pg1.xhtml                   |   40 +
 .../Css-fontface/pages/pg2.xhtml                   |   42 +
 .../Css-fontface/pages/pg3.xhtml                   |   42 +
 .../Css-fontface/pages/toc.xhtml                   |   30 +
 .../font_encryption_idpf/META-INF/container.xml    |    6 +
 .../font_encryption_idpf/META-INF/encryption.xml   |   39 +
 .../test/css/font_encryption_idpf/mimetype         |    1 +
 .../css/font_encryption_idpf_expected_results.json |  810 +++
 .../css/font_encryption_idpf_expected_results.xml  |  331 +
 .../font_encryption_unknown/META-INF/container.xml |    6 +
 .../META-INF/encryption.xml                        |    8 +
 .../OEBPS/am-font-test.html                        |   15 +
 .../css/font_encryption_unknown/OEBPS/content.opf  |   28 +
 .../OEBPS/fonts/ChaparralPro-Regular.otf           |  Bin 0 -> 31804 bytes
 .../css/font_encryption_unknown/OEBPS/template.css |   35 +
 .../test/css/font_encryption_unknown/OEBPS/toc.ncx |   20 +
 .../test/css/font_encryption_unknown/mimetype      |    1 +
 .../font_encryption_unknown_expected_results.json  |  324 +
 .../test/css/keyframe/META-INF/container.xml       |    6 +
 .../epubcheck/test/css/keyframe/OPS/content.opf    |   22 +
 .../test/css/keyframe/OPS/external_css.xhtml       |   14 +
 .../test/css/keyframe/OPS/inline_css.xhtml         |   11 +
 .../epubcheck/test/css/keyframe/OPS/style.css      |   38 +
 .../test/css/keyframe/OPS/style_tag_css.xhtml      |   53 +
 .../adobe/epubcheck/test/css/keyframe/OPS/toc.ncx  |   20 +
 .../epubcheck/test/css/keyframe/OPS/toc.xhtml      |   17 +
 .../com/adobe/epubcheck/test/css/keyframe/mimetype |    1 +
 .../test/css/keyframe_expected_results.json        |  381 ++
 .../test/css/multiple_epub2/META-INF/container.xml |    6 +
 .../test/css/multiple_epub2/OPS/content.opf        |   21 +
 .../test/css/multiple_epub2/OPS/external_css.xhtml |   35 +
 .../test/css/multiple_epub2/OPS/inline_css.xhtml   |   12 +
 .../test/css/multiple_epub2/OPS/style.css          |    4 +
 .../test/css/multiple_epub2/OPS/style2.css         |    4 +
 .../css/multiple_epub2/OPS/style_tag_css.xhtml     |   39 +
 .../epubcheck/test/css/multiple_epub2/OPS/toc.ncx  |   20 +
 .../epubcheck/test/css/multiple_epub2/mimetype     |    1 +
 .../test/css/multiple_epub2_expected_results.json  |  145 +
 .../test/css/multiple_epub3/META-INF/container.xml |    6 +
 .../test/css/multiple_epub3/OPS/content.opf        |   24 +
 .../test/css/multiple_epub3/OPS/external_css.xhtml |   47 +
 .../test/css/multiple_epub3/OPS/inline_css.xhtml   |   12 +
 .../test/css/multiple_epub3/OPS/style.css          |    4 +
 .../test/css/multiple_epub3/OPS/style2.css         |    4 +
 .../test/css/multiple_epub3/OPS/styleUTF32.css     |  Bin 0 -> 272 bytes
 .../css/multiple_epub3/OPS/style_tag_css.xhtml     |   39 +
 .../epubcheck/test/css/multiple_epub3/OPS/toc.ncx  |   20 +
 .../test/css/multiple_epub3/OPS/toc.xhtml          |   17 +
 .../epubcheck/test/css/multiple_epub3/mimetype     |    1 +
 .../test/css/multiple_epub3_expected_results.json  |  383 ++
 .../test/css/transform/META-INF/container.xml      |    6 +
 .../epubcheck/test/css/transform/OPS/content.opf   |   22 +
 .../test/css/transform/OPS/external_css.xhtml      |   15 +
 .../test/css/transform/OPS/inline_css.xhtml        |   18 +
 .../epubcheck/test/css/transform/OPS/style.css     |    9 +
 .../test/css/transform/OPS/style_tag_css.xhtml     |   25 +
 .../adobe/epubcheck/test/css/transform/OPS/toc.ncx |   20 +
 .../epubcheck/test/css/transform/OPS/toc.xhtml     |   17 +
 .../adobe/epubcheck/test/css/transform/mimetype    |    1 +
 .../test/css/transform_expected_results.json       |  364 ++
 .../test/css/transition/META-INF/container.xml     |    6 +
 .../epubcheck/test/css/transition/OPS/content.opf  |   22 +
 .../test/css/transition/OPS/external_css.xhtml     |   14 +
 .../test/css/transition/OPS/inline_css.xhtml       |   16 +
 .../epubcheck/test/css/transition/OPS/style.css    |   10 +
 .../test/css/transition/OPS/style_tag_css.xhtml    |   34 +
 .../epubcheck/test/css/transition/OPS/toc.ncx      |   20 +
 .../epubcheck/test/css/transition/OPS/toc.xhtml    |   17 +
 .../adobe/epubcheck/test/css/transition/mimetype   |    1 +
 .../test/css/transition_expected_results.json      |  381 ++
 .../test/css/unused_epub2/META-INF/container.xml   |    6 +
 .../test/css/unused_epub2/OPS/content.opf          |   21 +
 .../test/css/unused_epub2/OPS/external_css.xhtml   |   24 +
 .../test/css/unused_epub2/OPS/inline_css.xhtml     |   12 +
 .../epubcheck/test/css/unused_epub2/OPS/style.css  |    9 +
 .../test/css/unused_epub2/OPS/style_tag_css.xhtml  |   33 +
 .../epubcheck/test/css/unused_epub2/OPS/toc.ncx    |   20 +
 .../epubcheck/test/css/unused_epub2/OPS/unused.css |    4 +
 .../adobe/epubcheck/test/css/unused_epub2/mimetype |    1 +
 .../test/css/unused_epub2_expected_results.json    |   39 +
 .../test/css/unused_epub3/META-INF/container.xml   |    6 +
 .../test/css/unused_epub3/OPS/content.opf          |   23 +
 .../test/css/unused_epub3/OPS/external_css.xhtml   |   24 +
 .../test/css/unused_epub3/OPS/inline_css.xhtml     |   12 +
 .../epubcheck/test/css/unused_epub3/OPS/style.css  |    9 +
 .../test/css/unused_epub3/OPS/style_tag_css.xhtml  |   33 +
 .../epubcheck/test/css/unused_epub3/OPS/toc.ncx    |   20 +
 .../epubcheck/test/css/unused_epub3/OPS/toc.xhtml  |   17 +
 .../epubcheck/test/css/unused_epub3/OPS/unused.css |    4 +
 .../adobe/epubcheck/test/css/unused_epub3/mimetype |    1 +
 .../test/css/unused_epub3_expected_results.json    |   39 +
 .../opf/Epub2_marked_v3/META-INF/container.xml     |    6 +
 .../test/opf/Epub2_marked_v3/OPS/content.opf       |   15 +
 .../test/opf/Epub2_marked_v3/OPS/page01.xhtml      |   15 +
 .../epubcheck/test/opf/Epub2_marked_v3/OPS/toc.ncx |   20 +
 .../epubcheck/test/opf/Epub2_marked_v3/mimetype    |    1 +
 .../test/opf/Epub2_marked_v3_expected_results.json |  238 +
 .../test/opf/Epub2_marked_v3_expected_results.xml  |   59 +
 .../opf/Epub3_marked_v2/META-INF/container.xml     |    6 +
 .../test/opf/Epub3_marked_v2/OPS/content.opf       |   17 +
 .../test/opf/Epub3_marked_v2/OPS/page01.xhtml      |   14 +
 .../epubcheck/test/opf/Epub3_marked_v2/OPS/toc.ncx |   20 +
 .../test/opf/Epub3_marked_v2/OPS/toc.xhtml         |   15 +
 .../epubcheck/test/opf/Epub3_marked_v2/mimetype    |    1 +
 .../test/opf/Epub3_marked_v2_expected_results.json |  260 +
 .../test/opf/Epub3_marked_v2_expected_results.xml  |   64 +
 .../META-INF/container.xml                         |    6 +
 .../Excessive_Spine_Items_epub2/OPS/content.opf    |  213 +
 .../Excessive_Spine_Items_epub2/OPS/page001.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page002.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page003.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page004.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page005.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page006.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page007.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page008.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page009.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page010.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page011.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page012.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page013.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page014.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page015.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page016.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page017.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page018.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page019.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page020.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page021.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page022.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page023.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page024.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page025.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page026.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page027.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page028.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page029.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page030.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page031.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page032.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page033.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page034.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page035.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page036.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page037.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page038.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page039.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page040.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page041.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page042.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page043.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page044.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page045.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page046.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page047.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page048.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page049.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page050.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page051.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page052.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page053.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page054.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page055.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page056.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page057.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page058.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page059.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page060.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page061.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page062.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page063.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page064.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page065.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page066.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page067.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page068.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page069.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page070.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page071.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page072.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page073.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page074.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page075.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page076.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page077.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page078.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page079.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page080.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page081.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page082.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page083.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page084.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page085.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page086.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page087.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page088.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page089.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page090.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page091.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page092.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page093.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page094.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page095.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page096.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page097.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page098.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page099.xhtml  |   11 +
 .../Excessive_Spine_Items_epub2/OPS/page100.xhtml  |   11 +
 .../opf/Excessive_Spine_Items_epub2/OPS/toc.ncx    |   20 +
 .../test/opf/Excessive_Spine_Items_epub2/mimetype  |    1 +
 ...cessive_Spine_Items_epub2_expected_results.json | 2481 +++++++
 .../META-INF/container.xml                         |    6 +
 .../Excessive_Spine_Items_epub3/OPS/content.opf    |  215 +
 .../Excessive_Spine_Items_epub3/OPS/page001.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page002.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page003.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page004.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page005.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page006.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page007.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page008.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page009.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page010.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page011.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page012.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page013.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page014.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page015.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page016.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page017.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page018.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page019.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page020.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page021.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page022.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page023.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page024.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page025.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page026.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page027.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page028.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page029.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page030.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page031.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page032.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page033.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page034.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page035.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page036.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page037.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page038.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page039.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page040.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page041.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page042.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page043.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page044.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page045.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page046.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page047.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page048.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page049.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page050.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page051.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page052.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page053.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page054.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page055.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page056.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page057.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page058.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page059.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page060.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page061.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page062.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page063.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page064.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page065.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page066.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page067.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page068.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page069.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page070.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page071.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page072.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page073.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page074.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page075.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page076.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page077.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page078.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page079.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page080.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page081.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page082.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page083.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page084.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page085.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page086.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page087.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page088.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page089.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page090.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page091.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page092.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page093.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page094.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page095.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page096.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page097.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page098.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page099.xhtml  |   11 +
 .../Excessive_Spine_Items_epub3/OPS/page100.xhtml  |   11 +
 .../opf/Excessive_Spine_Items_epub3/OPS/toc.ncx    |   20 +
 .../opf/Excessive_Spine_Items_epub3/OPS/toc.xhtml  |   15 +
 .../test/opf/Excessive_Spine_Items_epub3/mimetype  |    1 +
 ...cessive_Spine_Items_epub3_expected_results.json | 2789 ++++++++
 .../META-INF/container.xml                         |    6 +
 .../OPS/content.opf                                |  216 +
 .../OPS/page001.xhtml                              |   11 +
 .../OPS/page002.xhtml                              |   11 +
 .../OPS/page003.xhtml                              |   11 +
 .../OPS/page004.xhtml                              |   11 +
 .../OPS/page005.xhtml                              |   11 +
 .../OPS/page006.xhtml                              |   11 +
 .../OPS/page007.xhtml                              |   11 +
 .../OPS/page008.xhtml                              |   11 +
 .../OPS/page009.xhtml                              |   11 +
 .../OPS/page010.xhtml                              |   11 +
 .../OPS/page011.xhtml                              |   11 +
 .../OPS/page012.xhtml                              |   11 +
 .../OPS/page013.xhtml                              |   11 +
 .../OPS/page014.xhtml                              |   11 +
 .../OPS/page015.xhtml                              |   11 +
 .../OPS/page016.xhtml                              |   11 +
 .../OPS/page017.xhtml                              |   11 +
 .../OPS/page018.xhtml                              |   11 +
 .../OPS/page019.xhtml                              |   11 +
 .../OPS/page020.xhtml                              |   11 +
 .../OPS/page021.xhtml                              |   11 +
 .../OPS/page022.xhtml                              |   11 +
 .../OPS/page023.xhtml                              |   11 +
 .../OPS/page024.xhtml                              |   11 +
 .../OPS/page025.xhtml                              |   11 +
 .../OPS/page026.xhtml                              |   11 +
 .../OPS/page027.xhtml                              |   11 +
 .../OPS/page028.xhtml                              |   11 +
 .../OPS/page029.xhtml                              |   11 +
 .../OPS/page030.xhtml                              |   11 +
 .../OPS/page031.xhtml                              |   11 +
 .../OPS/page032.xhtml                              |   11 +
 .../OPS/page033.xhtml                              |   11 +
 .../OPS/page034.xhtml                              |   11 +
 .../OPS/page035.xhtml                              |   11 +
 .../OPS/page036.xhtml                              |   11 +
 .../OPS/page037.xhtml                              |   11 +
 .../OPS/page038.xhtml                              |   11 +
 .../OPS/page039.xhtml                              |   11 +
 .../OPS/page040.xhtml                              |   11 +
 .../OPS/page041.xhtml                              |   11 +
 .../OPS/page042.xhtml                              |   11 +
 .../OPS/page043.xhtml                              |   11 +
 .../OPS/page044.xhtml                              |   11 +
 .../OPS/page045.xhtml                              |   11 +
 .../OPS/page046.xhtml                              |   11 +
 .../OPS/page047.xhtml                              |   11 +
 .../OPS/page048.xhtml                              |   11 +
 .../OPS/page049.xhtml                              |   11 +
 .../OPS/page050.xhtml                              |   11 +
 .../OPS/page051.xhtml                              |   11 +
 .../OPS/page052.xhtml                              |   11 +
 .../OPS/page053.xhtml                              |   11 +
 .../OPS/page054.xhtml                              |   11 +
 .../OPS/page055.xhtml                              |   11 +
 .../OPS/page056.xhtml                              |   11 +
 .../OPS/page057.xhtml                              |   11 +
 .../OPS/page058.xhtml                              |   11 +
 .../OPS/page059.xhtml                              |   11 +
 .../OPS/page060.xhtml                              |   11 +
 .../OPS/page061.xhtml                              |   11 +
 .../OPS/page062.xhtml                              |   11 +
 .../OPS/page063.xhtml                              |   11 +
 .../OPS/page064.xhtml                              |   11 +
 .../OPS/page065.xhtml                              |   11 +
 .../OPS/page066.xhtml                              |   11 +
 .../OPS/page067.xhtml                              |   11 +
 .../OPS/page068.xhtml                              |   11 +
 .../OPS/page069.xhtml                              |   11 +
 .../OPS/page070.xhtml                              |   11 +
 .../OPS/page071.xhtml                              |   11 +
 .../OPS/page072.xhtml                              |   11 +
 .../OPS/page073.xhtml                              |   11 +
 .../OPS/page074.xhtml                              |   11 +
 .../OPS/page075.xhtml                              |   11 +
 .../OPS/page076.xhtml                              |   11 +
 .../OPS/page077.xhtml                              |   11 +
 .../OPS/page078.xhtml                              |   11 +
 .../OPS/page079.xhtml                              |   11 +
 .../OPS/page080.xhtml                              |   11 +
 .../OPS/page081.xhtml                              |   11 +
 .../OPS/page082.xhtml                              |   11 +
 .../OPS/page083.xhtml                              |   11 +
 .../OPS/page084.xhtml                              |   11 +
 .../OPS/page085.xhtml                              |   11 +
 .../OPS/page086.xhtml                              |   11 +
 .../OPS/page087.xhtml                              |   11 +
 .../OPS/page088.xhtml                              |   11 +
 .../OPS/page089.xhtml                              |   11 +
 .../OPS/page090.xhtml                              |   11 +
 .../OPS/page091.xhtml                              |   11 +
 .../OPS/page092.xhtml                              |   11 +
 .../OPS/page093.xhtml                              |   11 +
 .../OPS/page094.xhtml                              |   11 +
 .../OPS/page095.xhtml                              |   11 +
 .../OPS/page096.xhtml                              |   11 +
 .../OPS/page097.xhtml                              |   11 +
 .../OPS/page098.xhtml                              |   11 +
 .../OPS/page099.xhtml                              |   11 +
 .../OPS/page100.xhtml                              |   11 +
 .../OPS/toc.ncx                                    |   20 +
 .../OPS/toc.xhtml                                  |   15 +
 .../mimetype                                       |    1 +
 ..._Items_epub3_fixed_format_expected_results.json | 2926 +++++++++
 .../META-INF/container.xml                         |    6 +
 .../OPS/content.opf                                |  215 +
 .../OPS/page001.xhtml                              |   11 +
 .../OPS/page002.xhtml                              |   11 +
 .../OPS/page003.xhtml                              |   11 +
 .../OPS/page004.xhtml                              |   11 +
 .../OPS/page005.xhtml                              |   11 +
 .../OPS/page006.xhtml                              |   11 +
 .../OPS/page007.xhtml                              |   11 +
 .../OPS/page008.xhtml                              |   11 +
 .../OPS/page009.xhtml                              |   11 +
 .../OPS/page010.xhtml                              |   11 +
 .../OPS/page011.xhtml                              |   11 +
 .../OPS/page012.xhtml                              |   11 +
 .../OPS/page013.xhtml                              |   11 +
 .../OPS/page014.xhtml                              |   11 +
 .../OPS/page015.xhtml                              |   11 +
 .../OPS/page016.xhtml                              |   11 +
 .../OPS/page017.xhtml                              |   11 +
 .../OPS/page018.xhtml                              |   11 +
 .../OPS/page019.xhtml                              |   11 +
 .../OPS/page020.xhtml                              |   11 +
 .../OPS/page021.xhtml                              |   11 +
 .../OPS/page022.xhtml                              |   11 +
 .../OPS/page023.xhtml                              |   11 +
 .../OPS/page024.xhtml                              |   11 +
 .../OPS/page025.xhtml                              |   11 +
 .../OPS/page026.xhtml                              |   11 +
 .../OPS/page027.xhtml                              |   11 +
 .../OPS/page028.xhtml                              |   11 +
 .../OPS/page029.xhtml                              |   11 +
 .../OPS/page030.xhtml                              |   11 +
 .../OPS/page031.xhtml                              |   11 +
 .../OPS/page032.xhtml                              |   11 +
 .../OPS/page033.xhtml                              |   11 +
 .../OPS/page034.xhtml                              |   11 +
 .../OPS/page035.xhtml                              |   11 +
 .../OPS/page036.xhtml                              |   11 +
 .../OPS/page037.xhtml                              |   11 +
 .../OPS/page038.xhtml                              |   11 +
 .../OPS/page039.xhtml                              |   11 +
 .../OPS/page040.xhtml                              |   11 +
 .../OPS/page041.xhtml                              |   11 +
 .../OPS/page042.xhtml                              |   11 +
 .../OPS/page043.xhtml                              |   11 +
 .../OPS/page044.xhtml                              |   11 +
 .../OPS/page045.xhtml                              |   11 +
 .../OPS/page046.xhtml                              |   11 +
 .../OPS/page047.xhtml                              |   11 +
 .../OPS/page048.xhtml                              |   11 +
 .../OPS/page049.xhtml                              |   11 +
 .../OPS/page050.xhtml                              |   11 +
 .../OPS/page051.xhtml                              |   11 +
 .../OPS/page052.xhtml                              |   11 +
 .../OPS/page053.xhtml                              |   11 +
 .../OPS/page054.xhtml                              |   11 +
 .../OPS/page055.xhtml                              |   11 +
 .../OPS/page056.xhtml                              |   11 +
 .../OPS/page057.xhtml                              |   11 +
 .../OPS/page058.xhtml                              |   11 +
 .../OPS/page059.xhtml                              |   11 +
 .../OPS/page060.xhtml                              |   11 +
 .../OPS/page061.xhtml                              |   11 +
 .../OPS/page062.xhtml                              |   11 +
 .../OPS/page063.xhtml                              |   11 +
 .../OPS/page064.xhtml                              |   11 +
 .../OPS/page065.xhtml                              |   11 +
 .../OPS/page066.xhtml                              |   11 +
 .../OPS/page067.xhtml                              |   11 +
 .../OPS/page068.xhtml                              |   11 +
 .../OPS/page069.xhtml                              |   11 +
 .../OPS/page070.xhtml                              |   11 +
 .../OPS/page071.xhtml                              |   11 +
 .../OPS/page072.xhtml                              |   11 +
 .../OPS/page073.xhtml                              |   11 +
 .../OPS/page074.xhtml                              |   11 +
 .../OPS/page075.xhtml                              |   11 +
 .../OPS/page076.xhtml                              |   11 +
 .../OPS/page077.xhtml                              |   11 +
 .../OPS/page078.xhtml                              |   11 +
 .../OPS/page079.xhtml                              |   11 +
 .../OPS/page080.xhtml                              |   11 +
 .../OPS/page081.xhtml                              |   11 +
 .../OPS/page082.xhtml                              |   11 +
 .../OPS/page083.xhtml                              |   11 +
 .../OPS/page084.xhtml                              |   11 +
 .../OPS/page085.xhtml                              |   11 +
 .../OPS/page086.xhtml                              |   11 +
 .../OPS/page087.xhtml                              |   11 +
 .../OPS/page088.xhtml                              |   11 +
 .../OPS/page089.xhtml                              |   11 +
 .../OPS/page090.xhtml                              |   11 +
 .../OPS/page091.xhtml                              |   11 +
 .../OPS/page092.xhtml                              |   11 +
 .../OPS/page093.xhtml                              |   11 +
 .../OPS/page094.xhtml                              |   11 +
 .../OPS/page095.xhtml                              |   11 +
 .../OPS/page096.xhtml                              |   11 +
 .../OPS/page097.xhtml                              |   11 +
 .../OPS/page098.xhtml                              |   11 +
 .../OPS/page099.xhtml                              |   11 +
 .../OPS/page100.xhtml                              |   11 +
 .../OPS/toc.ncx                                    |   20 +
 .../OPS/toc.xhtml                                  |   15 +
 .../mimetype                                       |    1 +
 ...3_fixed_format_properties_expected_results.json | 2926 +++++++++
 .../opf/Fallbacks_epub2/META-INF/container.xml     |    6 +
 .../test/opf/Fallbacks_epub2/OPS/content.opf       |   18 +
 .../test/opf/Fallbacks_epub2/OPS/fallback.xhtml    |   13 +
 .../test/opf/Fallbacks_epub2/OPS/math.xml          |   19 +
 .../test/opf/Fallbacks_epub2/OPS/page01.xhtml      |   14 +
 .../epubcheck/test/opf/Fallbacks_epub2/OPS/toc.ncx |   20 +
 .../epubcheck/test/opf/Fallbacks_epub2/mimetype    |    1 +
 .../test/opf/Fallbacks_epub2_expected_results.json |  234 +
 .../opf/Fallbacks_epub3/META-INF/container.xml     |    6 +
 .../test/opf/Fallbacks_epub3/OPS/content.opf       |   20 +
 .../test/opf/Fallbacks_epub3/OPS/fallback.xhtml    |   13 +
 .../test/opf/Fallbacks_epub3/OPS/math.xml          |   19 +
 .../test/opf/Fallbacks_epub3/OPS/page01.xhtml      |   14 +
 .../epubcheck/test/opf/Fallbacks_epub3/OPS/toc.ncx |   20 +
 .../test/opf/Fallbacks_epub3/OPS/toc.xhtml         |   15 +
 .../epubcheck/test/opf/Fallbacks_epub3/mimetype    |    1 +
 .../test/opf/Fallbacks_epub3_expected_results.json |  297 +
 .../opf/Media-type_handler/META-INF/container.xml  |    6 +
 .../test/opf/Media-type_handler/OPS/content.opf    |   36 +
 .../opf/Media-type_handler/OPS/duplicate.xhtml     |   14 +
 .../Media-type_handler/OPS/images/PlaceHolder.gif  |  Bin 0 -> 2065 bytes
 .../opf/Media-type_handler/OPS/images/image1.jpg   |  Bin 0 -> 20337 bytes
 .../opf/Media-type_handler/OPS/images/image2.jpg   |  Bin 0 -> 20337 bytes
 .../opf/Media-type_handler/OPS/images/image3.jpg   |  Bin 0 -> 20337 bytes
 .../opf/Media-type_handler/OPS/images/image4.jpg   |  Bin 0 -> 20337 bytes
 .../test/opf/Media-type_handler/OPS/impl.xhtml     |   61 +
 .../test/opf/Media-type_handler/OPS/impl2.xhtml    |   10 +
 .../test/opf/Media-type_handler/OPS/page01.xhtml   |   22 +
 .../test/opf/Media-type_handler/OPS/quiz.xml       |    6 +
 .../test/opf/Media-type_handler/OPS/settings.xml   |    6 +
 .../test/opf/Media-type_handler/OPS/slideshow.xml  |    6 +
 .../test/opf/Media-type_handler/OPS/toc.ncx        |   20 +
 .../test/opf/Media-type_handler/OPS/toc.xhtml      |   15 +
 .../epubcheck/test/opf/Media-type_handler/mimetype |    1 +
 .../opf/Media-type_handler_expected_results.json   |  558 ++
 .../META-INF/container.xml                         |    6 +
 .../test/opf/Mismatched_mimetypes_epub2/OPS/blank  |    0
 .../opf/Mismatched_mimetypes_epub2/OPS/content.opf |   22 +
 .../Mismatched_mimetypes_epub2/OPS/css/style.css   |    1 +
 .../opf/Mismatched_mimetypes_epub2/OPS/image1.jpg  |  Bin 0 -> 20337 bytes
 .../Mismatched_mimetypes_epub2/OPS/page01.xhtml    |   13 +
 .../Mismatched_mimetypes_epub2/OPS/page02.xhtml    |   14 +
 .../opf/Mismatched_mimetypes_epub2/OPS/sample.mov  |  Bin 0 -> 101602 bytes
 .../opf/Mismatched_mimetypes_epub2/OPS/toc.ncx     |   20 +
 .../test/opf/Mismatched_mimetypes_epub2/mimetype   |    1 +
 ...ismatched_mimetypes_epub2_expected_results.json |  377 ++
 .../META-INF/container.xml                         |    6 +
 .../test/opf/Mismatched_mimetypes_epub3/OPS/blank  |    0
 .../opf/Mismatched_mimetypes_epub3/OPS/content.opf |   23 +
 .../opf/Mismatched_mimetypes_epub3/OPS/image1.jpg  |  Bin 0 -> 20337 bytes
 .../Mismatched_mimetypes_epub3/OPS/page01.xhtml    |   13 +
 .../Mismatched_mimetypes_epub3/OPS/page02.xhtml    |   18 +
 .../opf/Mismatched_mimetypes_epub3/OPS/sample.mov  |  Bin 0 -> 101602 bytes
 .../opf/Mismatched_mimetypes_epub3/OPS/toc.ncx     |   20 +
 .../opf/Mismatched_mimetypes_epub3/OPS/toc.xhtml   |   15 +
 .../test/opf/Mismatched_mimetypes_epub3/mimetype   |    1 +
 ...ismatched_mimetypes_epub3_expected_results.json |  423 ++
 .../opf/Missing_NAV_epub2/META-INF/container.xml   |    6 +
 .../test/opf/Missing_NAV_epub2/OPS/content.opf     |   15 +
 .../test/opf/Missing_NAV_epub2/OPS/page01.xhtml    |   13 +
 .../test/opf/Missing_NAV_epub2/OPS/toc.ncx         |   20 +
 .../epubcheck/test/opf/Missing_NAV_epub2/mimetype  |    1 +
 .../opf/Missing_NAV_epub2_expected_results.json    |  166 +
 .../opf/Missing_NAV_epub3/META-INF/container.xml   |    6 +
 .../test/opf/Missing_NAV_epub3/OPS/content.opf     |   16 +
 .../test/opf/Missing_NAV_epub3/OPS/page01.xhtml    |   14 +
 .../test/opf/Missing_NAV_epub3/OPS/toc.ncx         |   20 +
 .../epubcheck/test/opf/Missing_NAV_epub3/mimetype  |    1 +
 .../opf/Missing_NAV_epub3_expected_results.json    |  202 +
 .../opf/Missing_NCX_epub2/META-INF/container.xml   |    6 +
 .../test/opf/Missing_NCX_epub2/OPS/content.opf     |   14 +
 .../test/opf/Missing_NCX_epub2/OPS/page01.xhtml    |   13 +
 .../epubcheck/test/opf/Missing_NCX_epub2/mimetype  |    1 +
 .../opf/Missing_NCX_epub2_expected_results.json    |  156 +
 .../opf/Missing_NCX_epub3/META-INF/container.xml   |    6 +
 .../test/opf/Missing_NCX_epub3/OPS/content.opf     |   16 +
 .../test/opf/Missing_NCX_epub3/OPS/page01.xhtml    |   14 +
 .../test/opf/Missing_NCX_epub3/OPS/toc.xhtml       |   15 +
 .../epubcheck/test/opf/Missing_NCX_epub3/mimetype  |    1 +
 .../opf/Missing_NCX_epub3_expected_results.json    |  190 +
 .../opf/Missing_Spine_epub2/META-INF/container.xml |    6 +
 .../test/opf/Missing_Spine_epub2/OPS/content.opf   |   12 +
 .../test/opf/Missing_Spine_epub2/OPS/page01.xhtml  |   14 +
 .../test/opf/Missing_Spine_epub2/OPS/toc.ncx       |   20 +
 .../test/opf/Missing_Spine_epub2/mimetype          |    1 +
 .../opf/Missing_Spine_epub2_expected_results.json  |  190 +
 .../opf/Missing_Spine_epub3/META-INF/container.xml |    6 +
 .../test/opf/Missing_Spine_epub3/OPS/content.opf   |   13 +
 .../test/opf/Missing_Spine_epub3/OPS/page01.xhtml  |   14 +
 .../test/opf/Missing_Spine_epub3/OPS/toc.xhtml     |   15 +
 .../test/opf/Missing_Spine_epub3/mimetype          |    1 +
 .../opf/Missing_Spine_epub3_expected_results.json  |  226 +
 .../opf/Missing_Spine_epub3_expected_results.xml   |   62 +
 .../Missing_metadata_epub2/META-INF/container.xml  |    6 +
 .../opf/Missing_metadata_epub2/OPS/content.opf     |   13 +
 .../opf/Missing_metadata_epub2/OPS/page01.xhtml    |   13 +
 .../test/opf/Missing_metadata_epub2/OPS/toc.ncx    |   20 +
 .../test/opf/Missing_metadata_epub2/mimetype       |    1 +
 .../Missing_metadata_epub2_expected_results.json   |  202 +
 .../Missing_metadata_epub3/META-INF/container.xml  |    6 +
 .../opf/Missing_metadata_epub3/OPS/content.opf     |   11 +
 .../opf/Missing_metadata_epub3/OPS/page01.xhtml    |   14 +
 .../test/opf/Missing_metadata_epub3/OPS/toc.ncx    |   20 +
 .../test/opf/Missing_metadata_epub3/OPS/toc.xhtml  |   15 +
 .../test/opf/Missing_metadata_epub3/mimetype       |    1 +
 .../Missing_metadata_epub3_expected_results.json   |  248 +
 .../opf/Missing_unique_id/META-INF/container.xml   |    6 +
 .../test/opf/Missing_unique_id/OPS/content.opf     |   17 +
 .../test/opf/Missing_unique_id/OPS/page01.xhtml    |   14 +
 .../test/opf/Missing_unique_id/OPS/toc.ncx         |   20 +
 .../test/opf/Missing_unique_id/OPS/toc.xhtml       |   15 +
 .../epubcheck/test/opf/Missing_unique_id/mimetype  |    1 +
 .../opf/Missing_unique_id_expected_results.json    |  248 +
 .../test/opf/Properties/META-INF/container.xml     |    6 +
 .../epubcheck/test/opf/Properties/OPS/content.opf  |   23 +
 .../epubcheck/test/opf/Properties/OPS/page01.xhtml |   12 +
 .../epubcheck/test/opf/Properties/OPS/page02.xhtml |   12 +
 .../epubcheck/test/opf/Properties/OPS/page03.xhtml |   27 +
 .../epubcheck/test/opf/Properties/OPS/page04.xhtml |   27 +
 .../epubcheck/test/opf/Properties/OPS/toc.ncx      |   20 +
 .../epubcheck/test/opf/Properties/OPS/toc.xhtml    |   15 +
 .../adobe/epubcheck/test/opf/Properties/mimetype   |    1 +
 .../test/opf/Properties_expected_results.json      |  426 ++
 .../META-INF/container.xml                         |    6 +
 .../opf/Publication_Metadata_epub3/OPS/content.opf |   42 +
 .../Publication_Metadata_epub3/OPS/page01.xhtml    |   14 +
 .../opf/Publication_Metadata_epub3/OPS/toc.ncx     |   20 +
 .../opf/Publication_Metadata_epub3/OPS/toc.xhtml   |   15 +
 .../test/opf/Publication_Metadata_epub3/mimetype   |    1 +
 ...ublication_Metadata_epub3_expected_results.json |  212 +
 ...Publication_Metadata_epub3_expected_results.xml |  113 +
 .../epubcheck/test/opf/excessiveSpineItems.js      |   59 +
 .../test/opf/oebps12/META-INF/container.xml        |    6 +
 .../com/adobe/epubcheck/test/opf/oebps12/mimetype  |    1 +
 .../adobe/epubcheck/test/opf/oebps12/oebps12.css   |    4 +
 .../adobe/epubcheck/test/opf/oebps12/oebps12.opf   |   22 +
 .../adobe/epubcheck/test/opf/oebps12/page01.html   |   13 +
 .../adobe/epubcheck/test/opf/oebps12/page02.html   |   13 +
 .../adobe/epubcheck/test/opf/oebps12/style2.css    |    4 +
 .../test/opf/oebps12_expected_results.json         |  311 +
 .../opf/rendition_valid/META-INF/container.xml     |    6 +
 .../test/opf/rendition_valid/OPS/content.opf       |   24 +
 .../test/opf/rendition_valid/OPS/page01.xhtml      |   14 +
 .../test/opf/rendition_valid/OPS/page02.xhtml      |   14 +
 .../test/opf/rendition_valid/OPS/page03.xhtml      |   14 +
 .../epubcheck/test/opf/rendition_valid/OPS/toc.ncx |   20 +
 .../test/opf/rendition_valid/OPS/toc.xhtml         |   15 +
 .../epubcheck/test/opf/rendition_valid/mimetype    |    1 +
 .../test/opf/rendition_valid_expected_results.json |  317 +
 .../test/opf/viewport/META-INF/container.xml       |    6 +
 .../epubcheck/test/opf/viewport/OPS/content.opf    |   35 +
 .../epubcheck/test/opf/viewport/OPS/page001.xhtml  |   12 +
 .../epubcheck/test/opf/viewport/OPS/page002.xhtml  |   12 +
 .../epubcheck/test/opf/viewport/OPS/page003.xhtml  |   12 +
 .../epubcheck/test/opf/viewport/OPS/page004.xhtml  |   12 +
 .../epubcheck/test/opf/viewport/OPS/page005.svg    |    8 +
 .../epubcheck/test/opf/viewport/OPS/page005.xhtml  |   11 +
 .../epubcheck/test/opf/viewport/OPS/page006.svg    |    8 +
 .../epubcheck/test/opf/viewport/OPS/page007.svg    |    8 +
 .../epubcheck/test/opf/viewport/OPS/page008.svg    |    8 +
 .../adobe/epubcheck/test/opf/viewport/OPS/toc.ncx  |   68 +
 .../epubcheck/test/opf/viewport/OPS/toc.xhtml      |   25 +
 .../com/adobe/epubcheck/test/opf/viewport/mimetype |    1 +
 .../test/opf/viewport2/META-INF/container.xml      |    6 +
 .../epubcheck/test/opf/viewport2/OPS/content.opf   |   25 +
 .../epubcheck/test/opf/viewport2/OPS/page001.xhtml |   12 +
 .../epubcheck/test/opf/viewport2/OPS/page002.xhtml |   11 +
 .../epubcheck/test/opf/viewport2/OPS/page003.xhtml |   12 +
 .../epubcheck/test/opf/viewport2/OPS/page004.xhtml |   12 +
 .../adobe/epubcheck/test/opf/viewport2/OPS/toc.ncx |   44 +
 .../epubcheck/test/opf/viewport2/OPS/toc.xhtml     |   20 +
 .../adobe/epubcheck/test/opf/viewport2/mimetype    |    1 +
 .../test/opf/viewport2_expected_results.json       |  317 +
 .../test/opf/viewport_expected_results.json        |  528 ++
 .../adobe/epubcheck/test/package/PlaceHolder.epub  |  Bin 0 -> 2065 bytes
 .../com/adobe/epubcheck/test/package/blank.epub    |    0
 .../adobe/epubcheck/test/package/corrupt_file.epub |  Bin 0 -> 40960 bytes
 .../package/corrupt_file_expected_results.json     |   56 +
 .../epubcheck/test/package/empty_archive.epub      |  Bin 0 -> 22 bytes
 .../package/empty_archive_expected_results.json    |   57 +
 .../adobe/epubcheck/test/package/empty_dir.epub    |  Bin 0 -> 138 bytes
 .../test/package/empty_dir_expected_results.json   |   80 +
 .../test/package/empty_mimetype/mime.type          |    0
 .../package/empty_mimetype_expected_results.json   |   80 +
 .../package/image_types/META-INF/container.xml     |    6 +
 .../test/package/image_types/OPS/content.opf       |   22 +
 .../test/package/image_types/OPS/images/BigRed.png |  Bin 0 -> 31984 bytes
 .../package/image_types/OPS/images/PlaceHolder.gif |  Bin 0 -> 2065 bytes
 .../package/image_types/OPS/images/PlaceHolder.png |  Bin 0 -> 2065 bytes
 .../OPS/images/PrincessBrideReunion.png            |  Bin 0 -> 6800022 bytes
 .../test/package/image_types/OPS/images/kitty.jpeg |  Bin 0 -> 10995 bytes
 .../test/package/image_types/OPS/page01.xhtml      |   18 +
 .../epubcheck/test/package/image_types/OPS/toc.ncx |   20 +
 .../test/package/image_types/OPS/toc.xhtml         |   15 +
 .../epubcheck/test/package/image_types/mimetype    |    1 +
 .../test/package/image_types_expected_results.json |  334 +
 .../interesting_paths_epub2/META-INF/container.xml |    6 +
 .../OPS Content/More XHTML Content/page01.xhtml    |   16 +
 .../OPS Content/content.opf                        |   17 +
 .../interesting_paths_epub2/OPS Content/toc.ncx    |   26 +
 .../XHTML Content/page02.xhtml                     |   15 +
 .../test/package/interesting_paths_epub2/mimetype  |    1 +
 .../interesting_paths_epub2_expected_results.json  |  215 +
 .../interesting_paths_epub2_expected_results.xml   |   55 +
 .../interesting_paths_epub3/META-INF/container.xml |    6 +
 .../OPS Content/Cyrillic_phi.xhtml                 |   16 +
 .../OPS Content/More XHTML Content/page01.xhtml    |   16 +
 .../OPS Content/content.opf                        |   24 +
 .../OPS Content/page{03}.xhtml                     |   15 +
 .../interesting_paths_epub3/OPS Content/toc.ncx    |   26 +
 .../interesting_paths_epub3/OPS Content/toc.xhtml  |   16 +
 .../XHTML Content/page 02.xhtml                    |   14 +
 .../test/package/interesting_paths_epub3/mimetype  |    1 +
 .../interesting_paths_epub3_expected_results.json  |  480 ++
 .../interesting_paths_epub3_expected_results.xml   |   79 +
 .../com/adobe/epubcheck/test/package/mimetype      |    0
 .../missing_container_file_epub2/OPS/content.opf   |   15 +
 .../missing_container_file_epub2/OPS/page01.xhtml  |   13 +
 .../missing_container_file_epub2/OPS/toc.ncx       |   20 +
 .../package/missing_container_file_epub2/mimetype  |    1 +
 ...sing_container_file_epub2_expected_results.json |   68 +
 .../missing_container_file_epub3/OPS/content.opf   |   17 +
 .../missing_container_file_epub3/OPS/page01.xhtml  |   14 +
 .../missing_container_file_epub3/OPS/toc.ncx       |   20 +
 .../missing_container_file_epub3/OPS/toc.xhtml     |   15 +
 .../package/missing_container_file_epub3/mimetype  |    1 +
 ...sing_container_file_epub3_expected_results.json |   68 +
 .../package/missing_file_expected_results.json     |   56 +
 .../META-INF/container.xml                         |    6 +
 .../missing_mimetype_file_epub2/OPS/content.opf    |   15 +
 .../missing_mimetype_file_epub2/OPS/page01.xhtml   |   13 +
 .../missing_mimetype_file_epub2/OPS/toc.ncx        |   20 +
 ...ssing_mimetype_file_epub2_expected_results.json |  156 +
 .../META-INF/container.xml                         |    6 +
 .../missing_mimetype_file_epub3/OPS/content.opf    |   17 +
 .../missing_mimetype_file_epub3/OPS/page01.xhtml   |   14 +
 .../missing_mimetype_file_epub3/OPS/toc.ncx        |   20 +
 .../missing_mimetype_file_epub3/OPS/toc.xhtml      |   15 +
 ...ssing_mimetype_file_epub3_expected_results.json |  202 +
 .../missing_ncx_file/META-INF/container.xml        |    6 +
 .../test/package/missing_ncx_file/OPS/content.opf  |   15 +
 .../test/package/missing_ncx_file/OPS/page01.xhtml |   14 +
 .../test/package/missing_ncx_file/mimetype         |    1 +
 .../package/missing_ncx_file_expected_results.json |  166 +
 .../missing_opf_epub_file_expected_results.json    |   56 +
 .../missing_opf_file/META-INF/container.xml        |    7 +
 .../test/package/missing_opf_file/OPS/content.opf  |   17 +
 .../test/package/missing_opf_file/OPS/page01.xhtml |   14 +
 .../test/package/missing_opf_file/OPS/toc.ncx      |   20 +
 .../test/package/missing_opf_file/OPS/toc.xhtml    |   15 +
 .../test/package/missing_opf_file/mimetype         |    1 +
 .../package/missing_opf_file_expected_results.json |  158 +
 .../missing_toc_file/META-INF/container.xml        |    6 +
 .../test/package/missing_toc_file/OPS/content.opf  |   17 +
 .../test/package/missing_toc_file/OPS/page01.xhtml |   14 +
 .../test/package/missing_toc_file/OPS/toc.ncx      |   20 +
 .../test/package/missing_toc_file/mimetype         |    1 +
 .../package/missing_toc_file_expected_results.json |  224 +
 .../epubcheck/test/package/path_resolution/A.xhtml |   13 +
 .../test/package/path_resolution/Hydrangeas.jpg    |  Bin 0 -> 595284 bytes
 .../package/path_resolution/META-INF/container.xml |    6 +
 .../test/package/path_resolution/MathML2.xhtml     |   23 +
 .../package/path_resolution/OPS/Description.xhtml  |   13 +
 .../test/package/path_resolution/OPS/MathML1.xhtml |   23 +
 .../path_resolution/OPS/images/Lighthouse.jpg      |  Bin 0 -> 561276 bytes
 .../path_resolution/OPS/images/equation_1.png      |  Bin 0 -> 3469 bytes
 .../test/package/path_resolution/OPS/toc.ncx       |   21 +
 .../test/package/path_resolution/OPS/toc.xhtml     |   18 +
 .../test/package/path_resolution/content.opf       |   28 +
 .../test/package/path_resolution/equation_2.png    |  Bin 0 -> 3672 bytes
 .../test/package/path_resolution/mimetype          |    1 +
 .../package/path_resolution_expected_results.json  |  413 ++
 .../com/adobe/epubcheck/test/package/period.js     |   19 +
 .../epubcheck/test/package/wrong_extension.zip     |  Bin 0 -> 5361 bytes
 .../package/wrong_extension_expected_results.json  |  281 +
 .../test/package/wrong_type_expected_results.json  |   68 +
 .../scripts/XMLHttpRequest/META-INF/container.xml  |    6 +
 .../test/scripts/XMLHttpRequest/OPS/Test.txt       |    1 +
 .../test/scripts/XMLHttpRequest/OPS/content.opf    |   23 +
 .../XMLHttpRequest/OPS/external_script.xhtml       |   14 +
 .../scripts/XMLHttpRequest/OPS/inline_script.xhtml |   11 +
 .../test/scripts/XMLHttpRequest/OPS/sample.js      |    8 +
 .../scripts/XMLHttpRequest/OPS/script_tag.xhtml    |   39 +
 .../test/scripts/XMLHttpRequest/OPS/toc.ncx        |   20 +
 .../test/scripts/XMLHttpRequest/OPS/toc.xhtml      |   16 +
 .../epubcheck/test/scripts/XMLHttpRequest/mimetype |    1 +
 .../scripts/XMLHttpRequest_expected_results.json   |  460 ++
 .../test/scripts/epub2/META-INF/container.xml      |    6 +
 .../epubcheck/test/scripts/epub2/OPS/content.opf   |   20 +
 .../test/scripts/epub2/OPS/external_script.xhtml   |   14 +
 .../test/scripts/epub2/OPS/inline_script.xhtml     |   13 +
 .../epubcheck/test/scripts/epub2/OPS/sample.js     |    6 +
 .../test/scripts/epub2/OPS/script_tag.xhtml        |   28 +
 .../adobe/epubcheck/test/scripts/epub2/OPS/toc.ncx |   20 +
 .../adobe/epubcheck/test/scripts/epub2/mimetype    |    1 +
 .../test/scripts/epub2_expected_results.json       |  312 +
 .../test/scripts/eval/META-INF/container.xml       |    6 +
 .../epubcheck/test/scripts/eval/OPS/content.opf    |   22 +
 .../test/scripts/eval/OPS/external_script.xhtml    |   14 +
 .../test/scripts/eval/OPS/inline_script.xhtml      |   11 +
 .../epubcheck/test/scripts/eval/OPS/sample.js      |    7 +
 .../test/scripts/eval/OPS/script_tag.xhtml         |   17 +
 .../adobe/epubcheck/test/scripts/eval/OPS/toc.ncx  |   20 +
 .../epubcheck/test/scripts/eval/OPS/toc.xhtml      |   16 +
 .../com/adobe/epubcheck/test/scripts/eval/mimetype |    1 +
 .../test/scripts/eval_expected_results.json        |  449 ++
 .../test/scripts/properties/META-INF/container.xml |    6 +
 .../test/scripts/properties/OPS/content.opf        |   28 +
 .../scripts/properties/OPS/external_script.xhtml   |   14 +
 .../OPS/external_script_not_marked.xhtml           |   14 +
 .../scripts/properties/OPS/inline_script.xhtml     |   15 +
 .../properties/OPS/inline_script_not_marked.xhtml  |   13 +
 .../test/scripts/properties/OPS/sample.js          |    6 +
 .../test/scripts/properties/OPS/script_tag.xhtml   |   20 +
 .../properties/OPS/script_tag_not_marked.xhtml     |   20 +
 .../epubcheck/test/scripts/properties/OPS/toc.ncx  |   20 +
 .../test/scripts/properties/OPS/toc.xhtml          |   16 +
 .../epubcheck/test/scripts/properties/mimetype     |    1 +
 .../test/scripts/properties_expected_results.json  |  621 ++
 .../test/scripts/storage/META-INF/container.xml    |    6 +
 .../epubcheck/test/scripts/storage/OPS/content.opf |   22 +
 .../test/scripts/storage/OPS/external_script.xhtml |   14 +
 .../test/scripts/storage/OPS/inline_script.xhtml   |   14 +
 .../epubcheck/test/scripts/storage/OPS/sample.js   |   14 +
 .../test/scripts/storage/OPS/script_tag.xhtml      |   23 +
 .../epubcheck/test/scripts/storage/OPS/toc.ncx     |   20 +
 .../epubcheck/test/scripts/storage/OPS/toc.xhtml   |   16 +
 .../adobe/epubcheck/test/scripts/storage/mimetype  |    1 +
 .../test/scripts/storage_expected_results.json     |  474 ++
 .../test/scripts/unused/META-INF/container.xml     |    6 +
 .../epubcheck/test/scripts/unused/OPS/content.opf  |   23 +
 .../test/scripts/unused/OPS/external_script.xhtml  |   23 +
 .../test/scripts/unused/OPS/inline_script.xhtml    |   13 +
 .../epubcheck/test/scripts/unused/OPS/sample.js    |   20 +
 .../test/scripts/unused/OPS/script_tag.xhtml       |   36 +
 .../epubcheck/test/scripts/unused/OPS/toc.ncx      |   20 +
 .../epubcheck/test/scripts/unused/OPS/toc.xhtml    |   16 +
 .../epubcheck/test/scripts/unused/OPS/unused.js    |    6 +
 .../adobe/epubcheck/test/scripts/unused/mimetype   |    1 +
 .../test/scripts/unused_expected_results.json      |  422 ++
 .../test/toc/fragments/META-INF/container.xml      |    6 +
 .../epubcheck/test/toc/fragments/OPS/content.opf   |   19 +
 .../epubcheck/test/toc/fragments/OPS/page01.xhtml  |   15 +
 .../epubcheck/test/toc/fragments/OPS/page02.xhtml  |   14 +
 .../adobe/epubcheck/test/toc/fragments/OPS/toc.ncx |   20 +
 .../epubcheck/test/toc/fragments/OPS/toc.xhtml     |   29 +
 .../adobe/epubcheck/test/toc/fragments/mimetype    |    1 +
 .../test/toc/fragments_expected_results.json       |  251 +
 .../test/toc/invalid_ncx/META-INF/container.xml    |    6 +
 .../epubcheck/test/toc/invalid_ncx/OPS/content.opf |   17 +
 .../test/toc/invalid_ncx/OPS/page01.xhtml          |   14 +
 .../epubcheck/test/toc/invalid_ncx/OPS/toc.ncx     |   30 +
 .../epubcheck/test/toc/invalid_ncx/OPS/toc.xhtml   |   15 +
 .../adobe/epubcheck/test/toc/invalid_ncx/mimetype  |    1 +
 .../test/toc/invalid_ncx_expected_results.json     |  265 +
 .../toc/missing_epub_type/META-INF/container.xml   |    6 +
 .../test/toc/missing_epub_type/OPS/content.opf     |   17 +
 .../test/toc/missing_epub_type/OPS/page01.xhtml    |   14 +
 .../test/toc/missing_epub_type/OPS/toc.ncx         |   20 +
 .../test/toc/missing_epub_type/OPS/toc.xhtml       |   16 +
 .../epubcheck/test/toc/missing_epub_type/mimetype  |    1 +
 .../toc/missing_epub_type_expected_results.json    |  241 +
 .../xhtml/External_media/META-INF/container.xml    |    6 +
 .../test/xhtml/External_media/OPS/audio.xhtml      |   17 +
 .../test/xhtml/External_media/OPS/content.opf      |   23 +
 .../test/xhtml/External_media/OPS/sample.jpg       |  Bin 0 -> 20337 bytes
 .../test/xhtml/External_media/OPS/toc.ncx          |   20 +
 .../test/xhtml/External_media/OPS/toc.xhtml        |   16 +
 .../test/xhtml/External_media/OPS/video.xhtml      |   17 +
 .../epubcheck/test/xhtml/External_media/mimetype   |    1 +
 .../xhtml/External_media_expected_results.json     |  339 +
 .../xhtml/accessibility/META-INF/container.xml     |    6 +
 .../xhtml/accessibility/OPS/ImageMap_target.xhtml  |   40 +
 .../accessibility/OPS/Navigation_ImageMap.xhtml    |   25 +
 .../test/xhtml/accessibility/OPS/content.opf       |   22 +
 .../xhtml/accessibility/OPS/images/devices2.jpg    |  Bin 0 -> 36298 bytes
 .../test/xhtml/accessibility/OPS/page01.xhtml      |   15 +
 .../epubcheck/test/xhtml/accessibility/OPS/toc.ncx |   20 +
 .../test/xhtml/accessibility/OPS/toc.xhtml         |   15 +
 .../epubcheck/test/xhtml/accessibility/mimetype    |    1 +
 .../test/xhtml/accessibility_expected_results.json |  417 ++
 .../test/xhtml/dtd/META-INF/container.xml          |    6 +
 .../adobe/epubcheck/test/xhtml/dtd/OPS/content.opf |   29 +
 .../test/xhtml/dtd/OPS/external_dtd.xhtml          |   15 +
 .../epubcheck/test/xhtml/dtd/OPS/inline_dtd.xhtml  |   17 +
 .../test/xhtml/dtd/OPS/internal_dtd.xhtml          |   15 +
 .../test/xhtml/dtd/OPS/internal_dtd2.xhtml         |   17 +
 .../test/xhtml/dtd/OPS/internal_xhtml_dtd.xml      |   15 +
 .../adobe/epubcheck/test/xhtml/dtd/OPS/sample.dtd  |   14 +
 .../com/adobe/epubcheck/test/xhtml/dtd/OPS/toc.ncx |   21 +
 .../adobe/epubcheck/test/xhtml/dtd/OPS/toc.xhtml   |   16 +
 .../epubcheck/test/xhtml/dtd/OPS/xhtml-lat1.ent    |  121 +
 .../epubcheck/test/xhtml/dtd/OPS/xhtml-special.ent |   82 +
 .../epubcheck/test/xhtml/dtd/OPS/xhtml-symbol.ent  |  204 +
 .../epubcheck/test/xhtml/dtd/OPS/xhtml1-strict.dtd |  979 +++
 .../com/adobe/epubcheck/test/xhtml/dtd/mimetype    |    1 +
 .../epubcheck/test/xhtml/dtd_expected_results.json |  644 ++
 .../test/xhtml/epubcfi/META-INF/container.xml      |    6 +
 .../test/xhtml/epubcfi/OPS/Intra_Publication.xhtml |   15 +
 .../test/xhtml/epubcfi/OPS/Outer_Publication.xhtml |   14 +
 .../epubcheck/test/xhtml/epubcfi/OPS/content.opf   |   19 +
 .../adobe/epubcheck/test/xhtml/epubcfi/OPS/toc.ncx |   20 +
 .../epubcheck/test/xhtml/epubcfi/OPS/toc.xhtml     |   15 +
 .../adobe/epubcheck/test/xhtml/epubcfi/mimetype    |    1 +
 .../test/xhtml/epubcfi_expected_results.json       |  302 +
 .../html5_deprecated_epub3/META-INF/container.xml  |    6 +
 .../xhtml/html5_deprecated_epub3/OPS/content.opf   |   17 +
 .../xhtml/html5_deprecated_epub3/OPS/html5.xhtml   |   26 +
 .../test/xhtml/html5_deprecated_epub3/OPS/toc.ncx  |   20 +
 .../xhtml/html5_deprecated_epub3/OPS/toc.xhtml     |   15 +
 .../test/xhtml/html5_deprecated_epub3/mimetype     |    1 +
 .../html5_deprecated_epub3_expected_results.json   |  260 +
 .../test/xhtml/html5_epub2/META-INF/container.xml  |    6 +
 .../test/xhtml/html5_epub2/OPS/content.opf         |   16 +
 .../test/xhtml/html5_epub2/OPS/html5.xhtml         |   25 +
 .../test/xhtml/html5_epub2/OPS/sample.m4a          |  Bin 0 -> 43256 bytes
 .../epubcheck/test/xhtml/html5_epub2/OPS/toc.ncx   |   20 +
 .../epubcheck/test/xhtml/html5_epub2/mimetype      |    1 +
 .../test/xhtml/html5_epub2_expected_results.json   |  244 +
 .../test/xhtml/html5_epub3/META-INF/container.xml  |    6 +
 .../test/xhtml/html5_epub3/OPS/content.opf         |   20 +
 .../test/xhtml/html5_epub3/OPS/html5.xhtml         |   26 +
 .../test/xhtml/html5_epub3/OPS/sample.m4a          |  Bin 0 -> 43256 bytes
 .../epubcheck/test/xhtml/html5_epub3/OPS/toc.ncx   |   20 +
 .../epubcheck/test/xhtml/html5_epub3/OPS/toc.xhtml |   15 +
 .../test/xhtml/html5_epub3/OPS/xml_version.xhtml   |   12 +
 .../epubcheck/test/xhtml/html5_epub3/mimetype      |    1 +
 .../test/xhtml/html5_epub3_expected_results.json   |  333 +
 .../test/xhtml/hyperlinks/META-INF/container.xml   |    6 +
 .../test/xhtml/hyperlinks/OPS/content.opf          |   26 +
 .../test/xhtml/hyperlinks/OPS/images/mathml.png    |  Bin 0 -> 4957 bytes
 .../test/xhtml/hyperlinks/OPS/images/sample.jpg    |  Bin 0 -> 20337 bytes
 .../test/xhtml/hyperlinks/OPS/link_target.xhtml    |   20 +
 .../test/xhtml/hyperlinks/OPS/links.xhtml          |   61 +
 .../test/xhtml/hyperlinks/OPS/mathMl.xhtml         |   15 +
 .../epubcheck/test/xhtml/hyperlinks/OPS/style.css  |    3 +
 .../test/xhtml/hyperlinks/OPS/svg_links.xhtml      |   30 +
 .../epubcheck/test/xhtml/hyperlinks/OPS/toc.ncx    |   26 +
 .../epubcheck/test/xhtml/hyperlinks/OPS/toc.xhtml  |   16 +
 .../adobe/epubcheck/test/xhtml/hyperlinks/mimetype |    1 +
 .../test/xhtml/hyperlinks_expected_results.json    |  723 +++
 .../test/xhtml/lang/META-INF/container.xml         |    6 +
 .../epubcheck/test/xhtml/lang/OPS/content.opf      |   21 +
 .../test/xhtml/lang/OPS/invalid_lang.xhtml         |   13 +
 .../test/xhtml/lang/OPS/mismatched_lang.xhtml      |   13 +
 .../epubcheck/test/xhtml/lang/OPS/no_lang.xhtml    |   13 +
 .../adobe/epubcheck/test/xhtml/lang/OPS/toc.ncx    |   20 +
 .../adobe/epubcheck/test/xhtml/lang/OPS/toc.xhtml  |   15 +
 .../com/adobe/epubcheck/test/xhtml/lang/mimetype   |    1 +
 .../test/xhtml/lang_expected_results.json          |  372 ++
 .../test/xhtml/lorem_noxmlns/EPUB/lorem.css        |    6 +
 .../test/xhtml/lorem_noxmlns/EPUB/lorem.ncx        |   29 +
 .../test/xhtml/lorem_noxmlns/EPUB/lorem.opf        |   17 +
 .../test/xhtml/lorem_noxmlns/EPUB/lorem.xhtml      |  100 +
 .../xhtml/lorem_noxmlns/META-INF/container.xml     |    7 +
 .../epubcheck/test/xhtml/lorem_noxmlns/mimetype    |    1 +
 .../test/xhtml/lorem_noxmlns_expected_results.json |  246 +
 .../test/xhtml/lorem_pagemaps1/EPUB/lorem.css      |    6 +
 .../test/xhtml/lorem_pagemaps1/EPUB/lorem.ncx      |   47 +
 .../test/xhtml/lorem_pagemaps1/EPUB/lorem.opf      |   20 +
 .../test/xhtml/lorem_pagemaps1/EPUB/lorem.xhtml    |   99 +
 .../test/xhtml/lorem_pagemaps1/EPUB/nav.xhtml      |   33 +
 .../test/xhtml/lorem_pagemaps1/EPUB/page-map.xml   |    6 +
 .../xhtml/lorem_pagemaps1/META-INF/container.xml   |    7 +
 .../epubcheck/test/xhtml/lorem_pagemaps1/mimetype  |    1 +
 .../xhtml/lorem_pagemaps1_expected_results.json    |  350 +
 .../test/xhtml/lorem_pagemaps2/EPUB/lorem.css      |    6 +
 .../test/xhtml/lorem_pagemaps2/EPUB/lorem.ncx      |   29 +
 .../test/xhtml/lorem_pagemaps2/EPUB/lorem.opf      |   19 +
 .../test/xhtml/lorem_pagemaps2/EPUB/lorem.xhtml    |   99 +
 .../test/xhtml/lorem_pagemaps2/EPUB/nav.xhtml      |   33 +
 .../xhtml/lorem_pagemaps2/META-INF/container.xml   |    7 +
 .../epubcheck/test/xhtml/lorem_pagemaps2/mimetype  |    1 +
 .../xhtml/lorem_pagemaps2_expected_results.json    |  285 +
 .../test/xhtml/lorem_pagemaps3/EPUB/lorem.css      |    6 +
 .../test/xhtml/lorem_pagemaps3/EPUB/lorem.ncx      |   47 +
 .../test/xhtml/lorem_pagemaps3/EPUB/lorem.opf      |   19 +
 .../test/xhtml/lorem_pagemaps3/EPUB/lorem.xhtml    |   99 +
 .../test/xhtml/lorem_pagemaps3/EPUB/nav.xhtml      |   33 +
 .../test/xhtml/lorem_pagemaps3/EPUB/page-map.xml   |    6 +
 .../xhtml/lorem_pagemaps3/META-INF/container.xml   |    7 +
 .../epubcheck/test/xhtml/lorem_pagemaps3/mimetype  |    1 +
 .../xhtml/lorem_pagemaps3_expected_results.json    |  374 ++
 .../xhtml/media_overlays/META-INF/container.xml    |    6 +
 .../media_overlays/OPS/audio/echild_s01_all.m4a    |  Bin 0 -> 68669 bytes
 .../OPS/audio/mobydick_001_002_melville.mp4        |  Bin 0 -> 9131982 bytes
 .../xhtml/media_overlays/OPS/chapter_001.xhtml     |   37 +
 .../media_overlays/OPS/chapter_001_overlay.smil    |  172 +
 .../test/xhtml/media_overlays/OPS/content.opf      |   30 +
 .../xhtml/media_overlays/OPS/css/stylesheet.css    |  373 ++
 .../media_overlays/OPS/fonts/iwonacond-bold.otf    |  Bin 0 -> 142404 bytes
 .../OPS/fonts/iwonacond-bolditalic.otf             |  Bin 0 -> 143912 bytes
 .../media_overlays/OPS/fonts/iwonacond-italic.otf  |  Bin 0 -> 143656 bytes
 .../media_overlays/OPS/fonts/iwonacond-regular.otf |  Bin 0 -> 141748 bytes
 .../test/xhtml/media_overlays/OPS/page01.smil      |   10 +
 .../test/xhtml/media_overlays/OPS/page01.xhtml     |   14 +
 .../test/xhtml/media_overlays/OPS/toc.ncx          |   20 +
 .../test/xhtml/media_overlays/OPS/toc.xhtml        |   15 +
 .../epubcheck/test/xhtml/media_overlays/mimetype   |    1 +
 .../xhtml/media_overlays_expected_results.json     |  772 +++
 .../test/xhtml/namespaces/META-INF/container.xml   |    6 +
 .../test/xhtml/namespaces/OPS/content.opf          |   17 +
 .../test/xhtml/namespaces/OPS/html5.xhtml          |   26 +
 .../epubcheck/test/xhtml/namespaces/OPS/toc.ncx    |   20 +
 .../epubcheck/test/xhtml/namespaces/OPS/toc.xhtml  |   15 +
 .../adobe/epubcheck/test/xhtml/namespaces/mimetype |    1 +
 .../test/xhtml/namespaces_expected_results.json    |  272 +
 .../test/xhtml/nesting/META-INF/container.xml      |    6 +
 .../epubcheck/test/xhtml/nesting/OPS/content.opf   |   20 +
 .../test/xhtml/nesting/OPS/deep_nesting.xhtml      |   15 +
 .../test/xhtml/nesting/OPS/standard_nesting.xhtml  |   49 +
 .../test/xhtml/nesting/OPS/stylesheet.css          |   97 +
 .../adobe/epubcheck/test/xhtml/nesting/OPS/toc.ncx |   20 +
 .../epubcheck/test/xhtml/nesting/OPS/toc.xhtml     |   15 +
 .../adobe/epubcheck/test/xhtml/nesting/mimetype    |    1 +
 .../test/xhtml/nesting_expected_results.json       |  334 +
 .../test/xhtml/singleline/META-INF/container.xml   |    1 +
 .../test/xhtml/singleline/OEBPS/content.opf        |   20 +
 .../test/xhtml/singleline/OEBPS/moby.html          |    1 +
 .../epubcheck/test/xhtml/singleline/OEBPS/moby.ncx |    1 +
 .../test/xhtml/singleline/OEBPS/stylesheet.css     |    1 +
 .../adobe/epubcheck/test/xhtml/singleline/mimetype |    1 +
 .../test/xhtml/singleline_expected_results.json    |  268 +
 src/test/resources/css/bom-charset15.css           |    7 +
 src/test/resources/css/bom-utf16be-charset.css     |  Bin 0 -> 84 bytes
 src/test/resources/css/bom-utf16be.css             |  Bin 0 -> 42 bytes
 src/test/resources/css/bom-utf16le-charset.css     |  Bin 0 -> 86 bytes
 src/test/resources/css/bom-utf16le.css             |  Bin 0 -> 120 bytes
 src/test/resources/css/caja.css                    |  367 ++
 src/test/resources/css/charset-empty.css           |    2 +
 src/test/resources/css/charset-malformed.css       |    2 +
 src/test/resources/css/charset-utf8.css            |    2 +
 src/test/resources/css/counter-styles.css          |  217 +
 src/test/resources/css/flexbox.css                 |   62 +
 src/test/resources/css/issue231-crlf.css           |  102 +
 src/test/resources/css/issue231-lf.css             |  102 +
 src/test/resources/css/issue240-1.css              |  233 +
 src/test/resources/css/issue240-2.css              |  161 +
 src/test/resources/css/issue241.css                |   37 +
 src/test/resources/css/issue262.css                |    5 +
 src/test/resources/css/misc.css                    |   93 +
 src/test/resources/css/none.css                    |    1 +
 src/test/resources/css/other-rule.css              |    2 +
 src/test/resources/css/other.txt                   |    1 +
 src/test/resources/css/samples.css                 | 6845 ++++++++++++++++++++
 src/test/resources/stress/EPUB/content_00000.xhtml |  101 +
 src/test/resources/stress/EPUB/image_00000.png     |  Bin 0 -> 3654 bytes
 src/test/resources/stress/EPUB/nav.xhtml           |   16 +
 src/test/resources/stress/EPUB/package.opf         |   19 +
 src/test/resources/stress/EPUB/style_00000.css     |    6 +
 src/test/resources/stress/META-INF/container.xml   |    7 +
 src/test/resources/stress/mimetype                 |    1 +
 src/tools/BookReporter.py                          |  865 +++
 src/tools/CompareResults.py                        |  200 +
 src/tools/CompareResultsUtil.py                    |   45 +
 src/tools/CompareVersions.py                       |  194 +
 src/tools/Dictionary.py                            |   39 +
 2616 files changed, 197674 insertions(+), 2 deletions(-)

diff --git a/COPYING.txt b/COPYING.txt
new file mode 100644
index 0000000..01e94a5
--- /dev/null
+++ b/COPYING.txt
@@ -0,0 +1,19 @@
+Copyright (c) 2007 Adobe Systems Incorporated
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..df11007
--- /dev/null
+++ b/README.md
@@ -0,0 +1,65 @@
+EpubCheck
+=========
+
+*epubcheck 4.0 repository Pre-Release (`master` branch contains current 4.0 development in alpha stage)*
+
+EpubCheck is a tool to validate EPUB files. It can detect many
+types of errors in EPUB. OCF container structure, OPF and OPS mark-up,
+and internal reference consistency are checked. EpubCheck can be run
+as a standalone command-line tool or used as a Java library.
+
+
+## Releases
+
+Check the [release page](https://github.com/IDPF/epubcheck/releases) to get the latest distribution.
+
+[EpubCheck 3.0.1](https://github.com/IDPF/epubcheck/releases/tag/v3.0.1) is the latest recommended version to validate both EPUB 2 and 3 files.
+
+
+## Documentation
+
+Documentation on how to **use** or how to **contribute** is available on the [EpubCheck wiki](https://github.com/IDPF/epubcheck/wiki).
+
+Technical discussions are hosted on the [EpubCheck Google Group](https://groups.google.com/forum/#!forum/epubcheck)
+
+
+## Credits
+
+EpubCheck is a project coordinated by [IDPF](http://idpf.org/). Most of the EpubCheck functionality comes from the schema validation tool [Jing](http://www.thaiopensource.com/relaxng/jing.html) and schemas that were developed by [IDPF](http://www.idpf.org/) and [DAISY](http://www.daisy.org/). Initial EpubCheck development was largely done at [Adobe Systems](http://www.adobe.com/).
+
+Authors and contributors to EpubCheck include:
+
+ * Peter Sorotokin
+ * Garth Conboy
+ * Markus Gylling
+ * Piotr Kula
+ * Paul Norton
+ * Jessica Hekman
+ * Liza Daly
+ * George Bina
+ * Bogdan Iordache
+ * Romain Deltour
+ * Thomas Ledoux
+ * Tobias Fischer
+ * Steve Antoch
+ * Arwen Pond
+ * Masayoshi Takahashi
+ * Satoshi KOJIMA
+
+## License
+
+EpubCheck is made available under the terms of the [New BSD License](http://opensource.org/licenses/BSD-3-Clause)
+ 
+## Building the 4.0 pre-release
+
+To build epubcheck from the sources you need Java Development Kit (JDK) 1.6 or above and [Apache Maven](http://maven.apache.org/) 2.3 or above installed.
+On Windows, you should build in a git bash shell (see http://github.com)
+
+You will also need Python to be able to run the BookReporter and related tools.
+
+
+Build and run tests:
+
+```
+$ mvn install
+```
diff --git a/debian/changelog b/debian/changelog
index bfd5486..e447dc0 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-epubcheck (4.0.0~alpha11-2) UNRELEASED; urgency=medium
+epubcheck (4.0.0-alpha11-2) UNRELEASED; urgency=medium
 
   * Moved the package to Git
 
diff --git a/debian/rules b/debian/rules
index e956d2c..577f862 100755
--- a/debian/rules
+++ b/debian/rules
@@ -16,4 +16,4 @@ debian/epubcheck.1: debian/epubcheck.1.in
 		--no-info --help-option="-help" `basename $@ .1` --version-string=$(VER_FULL)
 
 get-orig-source:
-	uscan --download-version $(DEB_UPSTREAM_VERSION) --force-download --rename
+	uscan --download-current-version --force-download --rename --verbose
diff --git a/docs/BookReporter.docx b/docs/BookReporter.docx
new file mode 100644
index 0000000..149b692
Binary files /dev/null and b/docs/BookReporter.docx differ
diff --git a/docs/BookReporter.pdf b/docs/BookReporter.pdf
new file mode 100644
index 0000000..a4ab3c8
Binary files /dev/null and b/docs/BookReporter.pdf differ
diff --git a/docs/ePubCheck-4.0-Preview.docx b/docs/ePubCheck-4.0-Preview.docx
new file mode 100644
index 0000000..7c63c83
Binary files /dev/null and b/docs/ePubCheck-4.0-Preview.docx differ
diff --git a/docs/ePubCheck-4.0-Preview.pdf b/docs/ePubCheck-4.0-Preview.pdf
new file mode 100644
index 0000000..c7f3168
Binary files /dev/null and b/docs/ePubCheck-4.0-Preview.pdf differ
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..2897e92
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,529 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.sonatype.oss</groupId>
+        <artifactId>oss-parent</artifactId>
+        <version>7</version>
+    </parent>
+
+    <groupId>org.idpf</groupId>
+    <artifactId>epubcheck</artifactId>
+    <version>4.0.0-alpha11</version>
+
+    <packaging>jar</packaging>
+
+    <name>EpubCheck :: Validation Tool for EPUB</name>
+    <description>EpubCheck is a tool to validate IDPF EPUB files. It can detect many types of errors in EPUB.
+        OCF container structure, OPF and OPS mark-up, and internal reference consistency are checked.
+        EpubCheck can be run as a standalone command-line tool, installed as a Java server-side web application
+        or used as a Java library.</description>
+    <url>http://code.google.com/p/epubcheck/</url>
+    <inceptionYear>2007</inceptionYear>
+    <organization>
+        <name>International Digital Publishing Forum</name>
+        <url>http://www.idpf.org/</url>
+    </organization>
+    <licenses>
+        <license>
+            <name>New BSD License</name>
+            <url>http://www.opensource.org/licenses/bsd-license.php</url>
+        </license>
+    </licenses>
+    <developers>
+        <developer>
+            <name>Peter Sorotokin</name>
+            <id>sorotokin</id>
+            <email>sorotokin at gmail.com</email>
+            <url>http://www.adobe.com</url>
+            <organization>Adobe Systems Inc.</organization>
+        </developer>
+        <developer>
+            <name>Garth Conboy</name>
+            <id>garthconboy</id>
+            <email>garth at google.com</email>
+        </developer>
+        <developer>
+            <name>Markus Gylling</name>
+            <id>markus.gylling</id>
+            <email>markus.gylling at gmail.com</email>
+        </developer>
+        <developer>
+            <name>Piotr Kula</name>
+            <id>PiotrFKula</id>
+            <email>PiotrFKula at gmail.com</email>
+        </developer>
+        <developer>
+            <name>Paul Norton</name>
+            <id>cold.geek</id>
+            <email>cold.geek at gmail.com</email>
+        </developer>
+        <developer>
+            <name>Liza Daly</name>
+            <id>liza31337</id>
+            <email>liza31337 at gmail.com</email>
+        </developer>
+        <developer>
+            <name>Jessica Hekman</name>
+            <id>sorotokin</id>
+            <email>sorotokin at gmail.com</email>
+        </developer>
+        <developer>
+            <name>George Bina</name>
+            <id>georgebina76</id>
+            <email>georgebina76 at gmail.com</email>
+        </developer>
+        <developer>
+            <name>Bogdan Iordache</name>
+            <id>biordach</id>
+            <email>biordach at gmail.com</email>
+            <url>http://www.adobe.com</url>
+            <organization>Adobe Systems Inc.</organization>
+        </developer>
+        <developer>
+            <name>Ionut-Maxim Margelatu</name>
+            <id>ionut.margelatu</id>
+            <email>ionut.margelatu at gmail.com</email>
+            <url>http://www.adobe.com</url>
+            <organization>Adobe Systems Inc.</organization>
+        </developer>
+        <developer>
+            <name>Romain Deltour</name>
+            <id>rdeltour</id>
+            <email>rdeltour at gmail.com</email>
+        </developer>
+        <developer>
+            <name>Thomas Ledoux</name>
+            <id>tledoux</id>
+            <email>tledouxfr at gmail.com</email>
+        </developer>
+        <developer>
+            <name>Tobias Fischer</name>
+            <id>tofi86</id>
+            <email>tobias.carl.fischer at gmail.com</email>
+        </developer>
+        <developer>
+            <name>Steve Antoch</name>
+            <id>santoch</id>
+            <url>http://www.barnesandnoble.com/</url>
+            <email>santoch6 at gmail.com</email>
+        </developer>
+        <developer>
+            <name>Arwen Pond</name>
+            <id>apond</id>
+            <url>http://www.barnesandnoble.com/</url>
+            <email>arwenpond at hotmail.com</email>
+        </developer>
+        <developer>
+            <name>Masayoshi Takahashi</name>
+            <id>takahashim</id>
+            <email>maki at rubycolor.org</email>
+        </developer>
+        <developer>
+            <name>Satoshi KOJIMA</name>
+            <id>skoji</id>
+            <email>skoji at mac.com</email>
+        </developer>
+    </developers>
+    <mailingLists>
+        <mailingList>
+            <name>epubcheck discussion</name>
+            <subscribe>http://groups.google.com/group/epubcheck/subscribe</subscribe>
+            <unsubscribe>epubcheck+unsubscribe at googlegroups.com</unsubscribe>
+            <post>epubcheck at googlegroups.com</post>
+            <archive>https://groups.google.com/forum/#!forum/epubcheck</archive>
+        </mailingList>
+    </mailingLists>
+    <scm>
+        <connection>scm:git:ssh://git@github.com:IDPF/epubcheck.git</connection>
+        <developerConnection>scm:git:ssh://git@github.com:IDPF/epubcheckgit</developerConnection>
+        <url>https://github.com/IDPF/epubcheck</url>
+        <tag>v4.0.0-alpha11</tag>
+    </scm>
+    <issueManagement>
+        <system>Github</system>
+        <url>https://github.com/IDPF/epubcheck/issues</url>
+    </issueManagement>
+
+    <properties>
+        <java.version>1.6</java.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <maven.build.timestamp.format>yyyy-MM-dd</maven.build.timestamp.format>
+        <tool.build.date>${maven.build.timestamp}</tool.build.date>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>net.sf.saxon</groupId>
+            <artifactId>Saxon-HE</artifactId>
+            <version>9.5.1-5</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-compress</artifactId>
+            <version>1.5</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.tukaani</groupId>
+                    <artifactId>xz</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.daisy.libs</groupId>
+            <artifactId>jing</artifactId>
+            <version>20120724.0.0</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>xml-apis</groupId>
+                    <artifactId>xml-apis</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.w3c.css</groupId>
+            <artifactId>sac</artifactId>
+            <version>1.3</version>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.10</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <version>14.0.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.jackson</groupId>
+            <artifactId>jackson-core-asl</artifactId>
+            <version>1.9.12</version>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.jackson</groupId>
+            <artifactId>jackson-mapper-asl</artifactId>
+            <version>1.9.12</version>
+        </dependency>
+        <dependency>
+            <groupId>xmlunit</groupId>
+            <artifactId>xmlunit</artifactId>
+            <version>1.3</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.javatuples</groupId>
+            <artifactId>javatuples</artifactId>
+            <version>1.2</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <resources>
+            <resource>
+                <filtering>false</filtering>
+                <directory>src/tools</directory>
+                <targetPath>${project.build.directory}</targetPath>
+            </resource>
+            <resource>
+                <directory>src/main/resources</directory>
+                <excludes>
+                    <exclude>com/adobe/epubcheck/schema/30/*.sch</exclude>
+                </excludes>
+            </resource>
+            <resource>
+                <directory>src/main/resources</directory>
+                <includes>
+                    <include>com/adobe/epubcheck/api/project.properties</include>
+                </includes>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <version>2.6</version>
+                <executions>
+                    <execution>
+                        <id>copy</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
+                            <overWriteReleases>false</overWriteReleases>
+                            <overWriteSnapshots>true</overWriteSnapshots>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>2.3.2</version>
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <version>2.3.7</version>
+                <extensions>true</extensions>
+                <executions>
+                    <execution>
+                        <id>bundle-manifest</id>
+                        <phase>process-classes</phase>
+                        <goals>
+                            <goal>manifest</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <instructions>
+                        <_removeheaders>Include-Resource,Private-Package</_removeheaders>
+                    </instructions>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>2.12.4</version>
+                <configuration>
+                    <argLine>-Xmx1g -Duser.language=en</argLine>
+                    <workingDirectory>${project.build.directory}/test-classes</workingDirectory>
+                    <!-- manifestFile>${project.build.directory}/classes/META-INF/MANIFEST.MF</manifestFile -->
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>default-test</id>
+                        <phase>test</phase>
+                        <goals>
+                            <goal>test</goal>
+                        </goals>
+                        <configuration>
+                            <excludes>
+                                <exclude>**/message_coverage.java</exclude>
+                            </excludes>
+                            <properties>
+                                <property>
+                                    <name>listener</name>
+                                    <value>com.adobe.epubcheck.test.TestRunListener</value>
+                                </property>
+                            </properties>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>coverage-test</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>test</goal>
+                        </goals>
+                        <configuration>
+                            <includes>
+                                <include>**/message_coverage.java</include>
+                            </includes>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>xml-maven-plugin</artifactId>
+                <version>1.0</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>transform</goal>
+                        </goals>
+                        <phase>process-resources</phase>
+                    </execution>
+                </executions>
+                <configuration>
+                    <transformationSets>
+                        <transformationSet>
+                            <dir>src/main/resources/com/adobe/epubcheck/schema/30</dir>
+                            <includes>
+                                <include>*-30.sch</include>
+                            </includes>
+                            <stylesheet>src/main/util/sch/iso-sch-include.xsl</stylesheet>
+                            <outputDir>${project.build.directory}/generated-resources/intermediate-schema</outputDir>
+                        </transformationSet>
+                        <transformationSet>
+                            <dir>${project.build.directory}/generated-resources/intermediate-schema</dir>
+                            <includes>
+                                <include>*-30.sch</include>
+                            </includes>
+                            <stylesheet>src/main/util/sch/iso-sch-abstract.xsl</stylesheet>
+                            <outputDir>${project.build.outputDirectory}/com/adobe/epubcheck/schema/30</outputDir>
+                        </transformationSet>
+                    </transformationSets>
+                </configuration>
+                <dependencies>
+                    <dependency>
+                        <groupId>net.sf.saxon</groupId>
+                        <artifactId>Saxon-HE</artifactId>
+                        <version>9.4</version>
+                    </dependency>
+                </dependencies>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>license-maven-plugin</artifactId>
+                <version>1.3</version>
+                <executions>
+                    <execution>
+                        <id>thirdparty-licenses</id>
+                        <goals>
+                            <goal>add-third-party</goal>
+                        </goals>
+                        <configuration>
+                            <includedScopes>runtime,compile</includedScopes>
+                            <fileTemplate>src/main/licenses/third-party.ftl</fileTemplate>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <version>2.4</version>
+                <configuration>
+                    <finalName>${project.artifactId}</finalName>
+                    <archive>
+                        <!--TODO Using the Manifest.MF file instead of the tag below is a work around for including two
+         libraries that are not in the Nexus.  Currently they are checked into the lib directory.-->
+                        <manifest>
+                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
+                            <mainClass>com.adobe.epubcheck.tool.Checker</mainClass>
+                            <addClasspath>true</addClasspath>
+                            <classpathPrefix>lib/</classpathPrefix>
+                        </manifest>
+                        <manifestFile>${project.build.directory}/classes/META-INF/MANIFEST.MF</manifestFile>
+                        <manifestEntries>
+                            <project-url>${project.url}</project-url>
+                            <scm-location>${project.scm.developerConnection}</scm-location>
+                            <build-user>${env.USER}</build-user>
+                            <build-user-name>${user.name}</build-user-name>
+                            <build-user-dir>${user.dir}</build-user-dir>
+                            <build-user-home>${user.home}</build-user-home>
+                            <build-os-name>${os.name}</build-os-name>
+                            <build-os-version>${os.version}</build-os-version>
+                        </manifestEntries>
+                    </archive>
+                </configuration>
+            </plugin>
+            <plugin>
+                <!-- required to work around issues with git 1.8.5 and release-plugin -->
+                <!-- https://jira.codehaus.org/browse/SCM-738 -->
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-release-plugin</artifactId>
+                <version>2.4.2</version>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.apache.maven.scm</groupId>
+                        <artifactId>maven-scm-provider-gitexe</artifactId>
+                        <version>1.8.1</version>
+                    </dependency>
+                </dependencies>
+                <configuration>
+                    <tagNameFormat>v@{project.version}</tagNameFormat>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <version>2.3</version>
+                <executions>
+                    <execution>
+                        <id>dist-assembly</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                        <configuration>
+                            <descriptors>
+                                <descriptor>src/main/assembly/dist.xml</descriptor>
+                            </descriptors>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>src-assembly</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                        <configuration>
+                            <descriptors>
+                                <descriptor>src/main/assembly/src.xml</descriptor>
+                            </descriptors>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+        <pluginManagement>
+            <plugins>
+                <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
+                <plugin>
+                    <groupId>org.eclipse.m2e</groupId>
+                    <artifactId>lifecycle-mapping</artifactId>
+                    <version>1.0.0</version>
+                    <configuration>
+                        <lifecycleMappingMetadata>
+                            <pluginExecutions>
+                                <pluginExecution>
+                                    <pluginExecutionFilter>
+                                        <groupId>org.codehaus.mojo</groupId>
+                                        <artifactId>xml-maven-plugin</artifactId>
+                                        <versionRange>[1.0,)</versionRange>
+                                        <goals>
+                                            <goal>transform</goal>
+                                        </goals>
+                                    </pluginExecutionFilter>
+                                    <action>
+                                        <execute />
+                                    </action>
+                                </pluginExecution>
+                                <pluginExecution>
+                                    <pluginExecutionFilter>
+                                        <groupId>org.codehaus.mojo</groupId>
+                                        <artifactId>license-maven-plugin</artifactId>
+                                        <versionRange>[1.0,)</versionRange>
+                                        <goals>
+                                            <goal>add-third-party</goal>
+                                        </goals>
+                                    </pluginExecutionFilter>
+                                    <action>
+                                        <ignore />
+                                    </action>
+                                </pluginExecution>
+                                <pluginExecution>
+                                    <pluginExecutionFilter>
+                                        <groupId> org.apache.felix </groupId>
+                                        <artifactId> maven-bundle-plugin </artifactId>
+                                        <versionRange> [2.3.7,) </versionRange>
+                                        <goals>
+                                            <goal>manifest</goal>
+                                        </goals>
+                                    </pluginExecutionFilter>
+                                    <action>
+                                        <execute />
+                                    </action>
+                                </pluginExecution>
+                            </pluginExecutions>
+                        </lifecycleMappingMetadata>
+                    </configuration>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+</project>
diff --git a/src/main/assembly/README-dist.txt b/src/main/assembly/README-dist.txt
new file mode 100644
index 0000000..141f308
--- /dev/null
+++ b/src/main/assembly/README-dist.txt
@@ -0,0 +1,60 @@
+This folder contains the distribution of epubcheck project.
+
+EpubCheck is a tool to validate IDPF Epub files. It can detect many
+types of errors in Epub. OCF container structure, OPF and OPS mark-up,
+and internal reference consistency are checked. EpubCheck can be run
+as a standalone command-line tool, installed as a web application or
+used as a library.
+
+EpubCheck project home: https://github.com/idpf/epubcheck
+
+
+RUNNING
+
+To run the tool you need Java Runtime (1.6 or above). Any OS should do. Run
+it from the command line: 
+
+java -jar epubcheck.jar file.epub
+
+All detected errors are simply printed to stderr.
+
+
+USING AS A LIBRARY
+
+You can also use EpubCheck as a library in your Java application. EpubCheck
+public interfaces can be found in com.adobe.epubcheck.api package. EpubCheck
+class can be used to instantiate a validation engine. Use one of its
+constructors and then call validate() method. Report is an interface that
+you can implement to get a list of the errors and warnings reported by the
+validation engine (instead of the error list being printed out).
+
+
+LICENSING
+
+See COPYING.txt and THIRD-PARTY.txt
+
+
+AUTHORS / CONTRIBUTORS
+
+Peter Sorotokin 
+Garth Conboy 
+Markus Gylling 
+Piotr Kula
+Paul Norton
+Jessica Hekman
+Liza Daly
+George Bina
+Bogdan Iordache
+Ionut-Maxim Margelatu
+Romain Deltour
+Thomas Ledoux
+Tobias Fischer
+Steve Antoch
+Arwen Pond
+Masayoshi Takahashi
+Satoshi KOJIMA
+
+
+Most of the EpubCheck functionality comes from the schema validation tool Jing
+and schemas that were developed by IDPF and DAISY. EpubCheck development was
+largely done at Adobe Systems. 
diff --git a/src/main/assembly/dist.xml b/src/main/assembly/dist.xml
new file mode 100644
index 0000000..a5f70db
--- /dev/null
+++ b/src/main/assembly/dist.xml
@@ -0,0 +1,64 @@
+<assembly
+    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+    <id>dist</id>
+    <formats>
+        <format>zip</format>
+    </formats>
+    <files>
+        <file>
+            <source>COPYING.txt</source>
+        </file>
+        <file>
+            <source>src/main/assembly/README-dist.txt</source>
+            <destName>README.txt</destName>
+        </file>
+        <file>
+            <source>${project.build.directory}/generated-sources/license/THIRD-PARTY.txt</source>
+        </file>
+        <file>
+            <source>${project.build.directory}/${artifact.artifactId}.jar</source>
+        </file>
+    </files>
+    <fileSets>
+        <fileSet>
+            <outputDirectory>licenses</outputDirectory>
+            <directory>src/main/licenses</directory>
+            <includes>
+                <include>*.txt</include>
+            </includes>
+        </fileSet>
+        <fileSet>
+            <outputDirectory>docs</outputDirectory>
+            <directory>docs</directory>
+            <includes>
+                <include>*.docx</include>
+                <include>*.pdf</include>
+            </includes>
+        </fileSet>
+        <fileSet>
+            <outputDirectory></outputDirectory>
+            <directory>target</directory>
+            <includes>
+                <include>*.py</include>
+                <include>*.pdf</include>
+            </includes>
+        </fileSet>
+    </fileSets>
+    <dependencySets>
+        <dependencySet>
+            <useProjectArtifact>true</useProjectArtifact>
+            <useTransitiveDependencies>false</useTransitiveDependencies>
+            <includes>
+                <include>com.adobe:epubcheck</include>
+            </includes>
+            <outputFileNameMapping>${artifact.artifactId}.${artifact.extension}</outputFileNameMapping>
+        </dependencySet>
+        <dependencySet>
+            <outputDirectory>lib</outputDirectory>
+            <useProjectArtifact>false</useProjectArtifact>
+            <useTransitiveDependencies>true</useTransitiveDependencies>
+        </dependencySet>
+    </dependencySets>
+</assembly>
\ No newline at end of file
diff --git a/src/main/assembly/src.xml b/src/main/assembly/src.xml
new file mode 100644
index 0000000..0314dfb
--- /dev/null
+++ b/src/main/assembly/src.xml
@@ -0,0 +1,21 @@
+<assembly
+    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+    <id>src</id>
+    <formats>
+        <format>zip</format>
+    </formats>
+    <fileSets>
+        <fileSet>
+            <directory>${project.basedir}</directory>
+            <includes>
+                <include>*.txt</include>
+                <include>pom.xml</include>
+                <include>src/**/*</include>
+                <include>docs/**/*</include>
+                <include>node_server/**/*</include>
+            </includes>
+        </fileSet>
+    </fileSets>
+</assembly>
\ No newline at end of file
diff --git a/src/main/java/com/adobe/epubcheck/api/EpubCheck.java b/src/main/java/com/adobe/epubcheck/api/EpubCheck.java
new file mode 100644
index 0000000..8b1bfa9
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/api/EpubCheck.java
@@ -0,0 +1,333 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+package com.adobe.epubcheck.api;
+
+import com.adobe.epubcheck.ctc.CheckManager;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.ocf.OCFChecker;
+import com.adobe.epubcheck.ocf.OCFPackage;
+import com.adobe.epubcheck.ocf.OCFZipPackage;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.util.CheckUtil;
+import com.adobe.epubcheck.util.DefaultReportImpl;
+import com.adobe.epubcheck.util.ResourceUtil;
+import com.adobe.epubcheck.util.WriterReportImpl;
+
+import java.io.*;
+import java.util.Properties;
+import java.util.Set;
+import java.util.zip.ZipFile;
+
+/**
+ * Public interface to epub validator.
+ */
+public class EpubCheck implements DocumentValidator
+{
+  private static String VERSION = null;
+	private static String BUILD_DATE = null; 
+  private File epubFile;
+  private Report report;
+
+  public static String version()
+  {
+    if (VERSION == null)
+    {
+      Properties prop = new Properties();
+      InputStream in = EpubCheck.class.getResourceAsStream("project.properties");
+      try
+      {
+        prop.load(in);
+      }
+      catch (Exception e)
+      {
+         System.err.println("Couldn't read project properties: " + e.getMessage());
+      }
+      finally
+      {
+        if (in != null)
+        {
+          try
+          {
+            in.close();
+          }
+          catch (IOException ignored)
+          {
+          }
+        }
+      }
+      VERSION = prop.getProperty("version");
+			BUILD_DATE = prop.getProperty("buildDate");
+    }
+    return VERSION;
+  }
+	public static String buildDate()
+  {
+		return BUILD_DATE;
+	}
+
+  /*
+    * Create an epub validator to validate the given file. Issues will be
+    * reported to standard error.
+    */
+  public EpubCheck(File epubFile)
+  {
+    this(epubFile, new DefaultReportImpl(epubFile.getName()));
+  }
+
+  /*
+    * Create an epub validator to validate the given file. Issues will be
+    * reported to the given PrintWriter.
+    */
+  public EpubCheck(File epubFile, PrintWriter out)
+  {
+    this(epubFile, new WriterReportImpl(out));
+  }
+
+  /*
+    * Create an epub validator to validate the given file and report issues to
+    * a given Report object.
+    */
+  public EpubCheck(File epubFile, Report report)
+  {
+    this.epubFile = epubFile;
+    setReport(report);
+  }
+
+  private void setReport(Report report)
+  {
+    this.report = report;
+  }
+
+  public EpubCheck(InputStream inputStream, Report report, String uri)
+  {
+    File epubFile;
+    OutputStream out = null;
+    try
+    {
+      epubFile = File.createTempFile("epub", "." + ResourceUtil.getExtension(uri));
+      epubFile.deleteOnExit();
+      out = new FileOutputStream(epubFile);
+
+      byte[] bytes = new byte[1024];
+      int read;
+      while ((read = inputStream.read(bytes)) != -1)
+      {
+        out.write(bytes, 0, read);
+      }
+
+      this.epubFile = epubFile;
+      setReport(report);
+    }
+    catch (IOException e)
+    {
+      throw new RuntimeException(e);
+    }
+    finally
+    {
+      if (inputStream != null)
+      {
+        try
+        {
+          inputStream.close();
+        }
+        catch (IOException ignored)
+        {
+        }
+      }
+      if (out != null)
+      {
+        try
+        {
+          out.flush();
+          out.close();
+        }
+        catch (IOException ignored)
+        {
+        }
+      }
+    }
+  }
+
+  /**
+  * Validate the file. Return true if no errors or warnings found.
+  */
+  public boolean validate()
+  {
+    int validateResult = doValidate();
+    return validateResult > 0;
+  }
+
+  public int doValidate()
+  {
+    ZipFile zip = null;
+    FileInputStream epubIn = null;
+    try
+    {
+      MasterReport.resetLocalMessageIds();
+
+      String extension = ResourceUtil.getExtension(epubFile.getName());
+      checkExtension(extension);
+
+      if (!epubFile.exists())
+      {
+        report.message(MessageId.PKG_018, new MessageLocation(epubFile.getName(), -1, -1));
+        return 2;
+      }
+
+      epubIn = new FileInputStream(epubFile);
+      checkEpubHeader(epubIn);
+      zip = new ZipFile(epubFile);
+
+      /***Here are called custom checks (CTC Package)**/
+      CheckManager c = new CheckManager(zip, report);
+      c.checkPackage();
+
+      OCFPackage ocf = new OCFZipPackage(zip);
+      OCFChecker checker = new OCFChecker(ocf, report, null);
+      checker.runChecks();
+
+      CheckMultiplePaginationSchemes();
+
+    }
+    catch (IOException e)
+    {
+      report.message(MessageId.PKG_008, new MessageLocation(epubFile.getName(), 0, 0, ""), e.getMessage());
+    }
+    finally
+    {
+      try
+      {
+        if (epubIn != null)
+        {
+          epubIn.close();
+        }
+        if (zip != null)
+        {
+          zip.close();
+        }
+      }
+      catch (IOException ignored)
+      {
+      }
+    }
+
+    int returnValue = 0;
+    if (report.getFatalErrorCount() != 0)
+      returnValue |= 4;
+    if (report.getErrorCount() != 0)
+      returnValue |= 2;
+    if (report.getWarningCount() != 0)
+      returnValue |= 1;
+    return returnValue;
+  }
+
+  public void CheckMultiplePaginationSchemes()
+  {
+    Set<MessageId> reported = MasterReport.localReportedMessageIds;
+    if (reported.contains(MessageId.NAV_002) && reported.contains(MessageId.HTM_050))
+    {
+      report.message(MessageId.NAV_003, new MessageLocation(epubFile.getName(), -1, -1));
+    }
+    if (reported.contains(MessageId.NCX_005) && reported.contains(MessageId.OPF_062))
+    {
+      report.message(MessageId.NCX_006, new MessageLocation(epubFile.getName(), -1, -1));
+    }
+  }
+
+  void checkExtension(String extension)
+  {
+    if (extension != null)
+    {
+      if (!extension.equals("epub"))
+      {
+        if (extension.matches("[Ee][Pp][Uu][Bb]"))
+        {
+          report.message(MessageId.PKG_016, new MessageLocation(epubFile.getName(), -1, -1));
+        }
+        else
+        {
+          report.message(MessageId.PKG_017, new MessageLocation(epubFile.getName(), -1, -1, extension));
+        }
+      }
+    }
+  }
+
+  void checkEpubHeader(FileInputStream epubIn) throws IOException
+  {
+    byte[] header = new byte[58];
+
+    int readCount = epubIn.read(header);
+    if (readCount != -1)
+    {
+      while (readCount < header.length)
+      {
+        int read = epubIn.read(header, readCount, header.length - readCount);
+        // break on eof
+        if (read == -1)
+        {
+          break;
+        }
+        readCount += read;
+      }
+    }
+
+    if (readCount != header.length)
+    {
+      report.message(MessageId.PKG_003, new MessageLocation(epubFile.getName(), 0, 0, ""));
+    }
+    else
+    {
+      int fnsize = getIntFromBytes(header, 26);
+      int extsize = getIntFromBytes(header, 28);
+
+      if (header[0] != 'P' && header[1] != 'K')
+      {
+        report.message(MessageId.PKG_004, new MessageLocation(epubFile.getName(), 0, 0));
+      }
+      else if (fnsize != 8)
+      {
+        report.message(MessageId.PKG_006, new MessageLocation(epubFile.getName(), 0, 0));
+      }
+      else if (extsize != 0)
+      {
+        report.message(MessageId.PKG_005, new MessageLocation(epubFile.getName(), 0, 0), extsize);
+      }
+      else if (!CheckUtil.checkString(header, 30, "mimetype"))
+      {
+        report.message(MessageId.PKG_006, new MessageLocation(epubFile.getName(), 0, 0));
+      }
+      else if (!CheckUtil.checkString(header, 38,
+          "application/epub+zip"))
+      {
+        report.message(MessageId.PKG_007, new MessageLocation(epubFile.getName(), 0, 0));
+      }
+    }
+  }
+
+  private int getIntFromBytes(byte[] bytes, int offset)
+  {
+    int hi = 0xFF & bytes[offset + 1];
+    int lo = 0xFF & bytes[offset];
+    return hi << 8 | lo;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/api/EpubCheckFactory.java b/src/main/java/com/adobe/epubcheck/api/EpubCheckFactory.java
new file mode 100644
index 0000000..ae21cc7
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/api/EpubCheckFactory.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.api;
+
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.opf.DocumentValidatorFactory;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.GenericResourceProvider;
+
+import java.io.File;
+import java.io.IOException;
+
+public class EpubCheckFactory implements DocumentValidatorFactory
+{
+  static private final EpubCheckFactory instance = new EpubCheckFactory();
+
+  static public EpubCheckFactory getInstance()
+  {
+    return instance;
+  }
+
+  public DocumentValidator newInstance(Report report,
+      String path,
+      GenericResourceProvider resourceProvider,
+      String mimeType,
+      EPUBVersion version)
+  {
+    if (path.startsWith("http://") || path.startsWith("https://"))
+    {
+      try
+      {
+        return new EpubCheck(resourceProvider.getInputStream(path), report, path);
+      }
+      catch (IOException e)
+      {
+        throw new RuntimeException(e);
+      }
+    }
+    else
+    {
+      return new EpubCheck(new File(path), report);
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/api/MasterReport.java b/src/main/java/com/adobe/epubcheck/api/MasterReport.java
new file mode 100644
index 0000000..aaa01cc
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/api/MasterReport.java
@@ -0,0 +1,148 @@
+package com.adobe.epubcheck.api;
+
+import com.adobe.epubcheck.messages.*;
+import com.adobe.epubcheck.util.ReportingLevel;
+import org.codehaus.jackson.annotate.JsonProperty;
+
+import java.io.File;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Reports are derived from this so that we can test for message Id coverage as well as have a centralized location for
+ * severity reporting level testing.
+ */
+public abstract class MasterReport implements Report
+{
+  public static Set<MessageId> localReportedMessageIds = new HashSet<MessageId>();
+  public static Set<MessageId> allReportedMessageIds = new HashSet<MessageId>();
+  int errorCount, warningCount, fatalErrorCount, usageCount = 0;
+  int reportingLevel = ReportingLevel.Info;
+  private String ePubName;
+  private MessageDictionary dictionary = new MessageDictionary(null, this);
+
+  @Override
+  public MessageDictionary getDictionary()
+  {
+    return dictionary;
+  }
+
+  protected MasterReport()
+  {
+  }
+
+  @Override
+  public void setOverrideFile(File overrideFile)
+  {
+    getDictionary().setOverrideFile(overrideFile);
+  }
+
+  @JsonProperty
+  String customMessageFileName = null;
+
+  public static void resetLocalMessageIds()
+  {
+    localReportedMessageIds.clear();
+  }
+
+  private void reportMessageId(MessageId id)
+  {
+    allReportedMessageIds.add(id);
+    localReportedMessageIds.add(id);
+  }
+
+  @Override
+  public void message(MessageId id, MessageLocation location, Object... args)
+  {
+    Message message = getDictionary().getMessage(id);
+    assert (message != null);
+    Severity severity = message.getSeverity();
+    if (ReportingLevel.getReportingLevel(severity) >= getReportingLevel())
+    {
+      if (severity.equals(Severity.ERROR))
+      {
+        errorCount++;
+      }
+      else if (severity.equals(Severity.WARNING))
+      {
+        warningCount++;
+      }
+      else if (severity.equals(Severity.FATAL))
+      {
+        fatalErrorCount++;
+      }
+      else if (severity.equals(Severity.USAGE))
+      {
+        usageCount++;
+      }
+      this.message(message, location, args);
+    }
+    reportMessageId(id);
+  }
+
+  @Override
+  public void setCustomMessageFile(String customMessageFileName)
+  {
+    this.customMessageFileName = customMessageFileName;
+  }
+
+  @Override
+  public String getCustomMessageFile()
+  {
+    return this.customMessageFileName;
+  }
+
+  @Override
+  public int getReportingLevel()
+  {
+    return reportingLevel;
+  }
+
+  @Override
+  public void setReportingLevel(int reportingLevel)
+  {
+    if (reportingLevel >= ReportingLevel.Usage && reportingLevel <= ReportingLevel.Fatal)
+    {
+      this.reportingLevel = reportingLevel;
+    }
+    else
+    {
+      System.err.printf("Attempted to set invalid reporting level: %1d", reportingLevel);
+    }
+  }
+
+  @Override
+  public String getEpubFileName()
+  {
+    return this.ePubName;
+  }
+
+  @Override
+  public void setEpubFileName(String value)
+  {
+    this.ePubName = value;
+  }
+
+  @Override
+  public int getErrorCount()
+  {
+    return errorCount;
+  }
+
+  @Override
+  public int getWarningCount()
+  {
+    return warningCount;
+  }
+
+  @Override
+  public int getFatalErrorCount()
+  {
+    return fatalErrorCount;
+  }
+
+  @Override
+  public void close()
+  {
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/api/QuietReport.java b/src/main/java/com/adobe/epubcheck/api/QuietReport.java
new file mode 100644
index 0000000..ed20d99
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/api/QuietReport.java
@@ -0,0 +1,39 @@
+package com.adobe.epubcheck.api;
+
+import com.adobe.epubcheck.messages.Message;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.util.FeatureEnum;
+
+public final class QuietReport extends MasterReport
+{
+
+  public static final Report INSTANCE = new QuietReport();
+
+  private QuietReport()
+  {
+    super();
+  }
+
+  @Override
+  public void message(Message message, MessageLocation location, Object... args)
+  {
+
+  }
+
+  @Override
+  public void info(String resource, FeatureEnum feature, String value)
+  {
+  }
+
+  @Override
+  public int generate()
+  {
+    return 0;
+  }
+
+  @Override
+  public void initialize()
+  {
+  }
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/api/Report.java b/src/main/java/com/adobe/epubcheck/api/Report.java
new file mode 100755
index 0000000..cbbe5c2
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/api/Report.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.api;
+
+import com.adobe.epubcheck.messages.Message;
+import com.adobe.epubcheck.messages.MessageDictionary;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.util.FeatureEnum;
+
+import java.io.File;
+
+/**
+ * Interface that is used to report issues found in epub.
+ */
+public interface Report
+{
+  /**
+   * Called when a violation of the standard is found in epub.
+   *
+   * @param id       Id of the message being reported
+   * @param location location information for the message
+   * @param args     Arguments referenced by the format
+   *                 string for the message.
+   */
+  public void message(MessageId id, MessageLocation location, Object... args);
+
+  /**
+   * Called when a violation of the standard is found in epub.
+   *
+   * @param message  The message being reported
+   * @param location location information for the message
+   * @param args     Arguments referenced by the format
+   *                 string for the message.
+   */
+  void message(Message message, MessageLocation location, Object... args);
+
+  /**
+   * Called when when a feature is found in epub.
+   *
+   * @param resource name of the resource in the epub zip container that has this feature
+   *                 or null if the feature is on the container level.
+   * @param feature  a keyword to know what kind of feature has been found
+   * @param value    value found
+   */
+  public void info(String resource, FeatureEnum feature, String value);
+
+  public int getErrorCount();
+
+  public int getWarningCount();
+
+  public int getFatalErrorCount();
+
+  /**
+   * Called to create a report after the checks have been made
+   */
+  public int generate();
+
+  /**
+   * Called when a report if first created
+   */
+  public void initialize();
+
+  public void setEpubFileName(String value);
+
+  public String getEpubFileName();
+
+  void setCustomMessageFile(String customMessageFileName);
+
+  String getCustomMessageFile();
+
+  public int getReportingLevel();
+
+  public void setReportingLevel(int level);
+
+  void close();
+
+  void setOverrideFile(File customMessageFile);
+
+  MessageDictionary getDictionary();
+}
diff --git a/src/main/java/com/adobe/epubcheck/bitmap/BitmapChecker.java b/src/main/java/com/adobe/epubcheck/bitmap/BitmapChecker.java
new file mode 100755
index 0000000..1cda10a
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/bitmap/BitmapChecker.java
@@ -0,0 +1,319 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.bitmap;
+
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Iterator;
+
+import javax.imageio.ImageIO;
+import javax.imageio.ImageReader;
+import javax.imageio.stream.ImageInputStream;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.ocf.OCFPackage;
+import com.adobe.epubcheck.ocf.OCFZipPackage;
+import com.adobe.epubcheck.opf.ContentChecker;
+import com.adobe.epubcheck.util.CheckUtil;
+
+public class BitmapChecker implements ContentChecker
+{
+  private final OCFPackage ocf;
+  private final Report report;
+  private final String path;
+  private final String mimeType;
+  private static final int HEIGHT_MAX = 2 * 1080;
+  private static final int WIDTH_MAX = 2 * 1920;
+  private static final long IMAGESIZE_MAX = 4 * 1024 * 1024;
+
+  BitmapChecker(OCFPackage ocf, Report report, String path, String mimeType)
+  {
+    this.ocf = ocf;
+    this.report = report;
+    this.path = path;
+    this.mimeType = mimeType;
+  }
+
+  private void checkHeader(byte[] header)
+  {
+    boolean passed;
+    if (mimeType.equals("image/jpeg"))
+    {
+      passed = header[0] == (byte) 0xFF && header[1] == (byte) 0xD8;
+    }
+    else if (mimeType.equals("image/gif"))
+    {
+      passed = header[0] == (byte) 'G' && header[1] == (byte) 'I'
+          && header[2] == (byte) 'F' && header[3] == (byte) '8';
+    }
+    else
+    {
+      passed = !mimeType.equals("image/png") || header[0] == (byte) 0x89 && header[1] == (byte) 'P' && header[2] == (byte) 'N' && header[3] == (byte) 'G';
+    }
+    if (!passed)
+    {
+      report.message(MessageId.OPF_029, new MessageLocation(this.ocf.getName(), 0, 0), path, mimeType);
+    }
+  }
+
+
+  /**
+   * Gets image dimensions for given file
+   *
+   * @param imgFileName image file
+   * @return dimensions of image
+   * @throws IOException if the file is not a known image
+   */
+  public ImageHeuristics getImageSizes(String imgFileName) throws
+      IOException
+  {
+    int pos = imgFileName.lastIndexOf(".");
+    if (pos == -1)
+    {
+      throw new IOException("No extension for file: " + imgFileName);
+    }
+
+    String suffix = imgFileName.substring(pos + 1);
+    File tempFile = null;
+    if ("svg".compareToIgnoreCase(suffix) == 0)
+    {
+      tempFile = getImageFile(ocf, imgFileName);
+      if (tempFile != null)
+      {
+        return new ImageHeuristics(0, 0, tempFile.length());
+      }
+      return null;
+    }
+    
+    // Determine format by file extension and by inspecting the file
+    tempFile = getImageFile(ocf, imgFileName);
+    String formatFromInputStream = null;
+    String formatFromSuffix = null;
+    ImageInputStream imageInputStream = ImageIO.createImageInputStream(tempFile);
+    Iterator<ImageReader> imageReaderIteratorFromInputStream = ImageIO.getImageReaders(imageInputStream);
+    while (imageReaderIteratorFromInputStream.hasNext()) {
+      ImageReader imageReaderFromInputStream = imageReaderIteratorFromInputStream.next();
+      formatFromInputStream = imageReaderFromInputStream.getFormatName();
+        
+      Iterator<ImageReader> imageReaderIteratorFromSuffix = ImageIO.getImageReadersBySuffix(suffix);
+        while (imageReaderIteratorFromSuffix.hasNext()) {
+          ImageReader reader = imageReaderIteratorFromSuffix.next();
+          formatFromSuffix = reader.getFormatName();
+          
+          if (formatFromSuffix != null && formatFromSuffix.equals(formatFromInputStream)) break;
+        }
+        if (formatFromSuffix != null && formatFromSuffix.equals(formatFromInputStream)) break;
+    }
+    
+    if (formatFromSuffix != null && formatFromSuffix.equals(formatFromInputStream)) {
+      // file format and file extension matches; read image file
+      
+      try {
+        BufferedImage image = ImageIO.read(tempFile);
+        if (image == null) {
+          report.message(MessageId.PKG_021, new MessageLocation(imgFileName, -1, -1, imgFileName));
+          return null;
+          
+        } else {
+          int width          = image.getWidth();
+          int height         = image.getHeight();
+          return new ImageHeuristics(width, height, tempFile.length());
+        }
+      }
+      catch (IOException e)
+      {
+        report.message(MessageId.PKG_021, new MessageLocation(imgFileName, -1, -1, imgFileName));
+        return null;
+      }
+      catch (IllegalArgumentException argex)
+      {
+        report.message(MessageId.PKG_021, new MessageLocation(imgFileName, -1, -1, imgFileName));
+        return null;
+      }
+  
+    } else if (formatFromSuffix != null) {
+      // file format and file extension differs
+      
+      report.message(MessageId.PKG_022, new MessageLocation(imgFileName, -1, -1, imgFileName), formatFromInputStream, suffix);
+      return null;
+      
+    } else {
+      // file format could not be determined
+      
+      throw new IOException("Not a known image file: " + imgFileName);
+    }
+  }
+
+  private File getImageFile(OCFPackage ocf, String imgFileName) throws IOException
+  {
+    if (ocf.getClass() == OCFZipPackage.class)
+    {
+      return getTempImageFile((OCFZipPackage) ocf, imgFileName);
+    }
+    else
+    {
+      return new File(ocf.getPackagePath() + File.separator + imgFileName);
+    }
+  }
+
+  private class ImageHeuristics
+  {
+    public int width;
+    public int height;
+    public long length;
+
+    public ImageHeuristics(int width, int height, long length)
+    {
+      this.width = width;
+      this.height = height;
+      this.length = length;
+    }
+  }
+
+  private File getTempImageFile(OCFZipPackage ocf, String imgFileName) throws IOException
+  {
+    File file = null;
+    FileOutputStream os = null;
+    InputStream is = null;
+    try
+    {
+      int pos = imgFileName.lastIndexOf(".");
+      if (pos == -1)
+      {
+        throw new IOException("No extension for file: " + imgFileName);
+      }
+      String suffix = imgFileName.substring(pos);
+      String prefix = "img";
+
+      file = File.createTempFile(prefix, suffix);
+      file.deleteOnExit();
+      os = new FileOutputStream(file);
+
+      is = ocf.getInputStream(imgFileName);
+      if (is == null)
+      {
+        return null;
+      }
+      byte[] bytes = new byte[32 * 1024];
+      int read;
+      while ((read = is.read(bytes)) > 0)
+      {
+        os.write(bytes, 0, read);
+      }
+    }
+    finally
+    {
+      if (os != null)
+      {
+        os.flush();
+        os.close();
+      }
+      if (is != null)
+      {
+        is.close();
+      }
+    }
+    return file;  //To change body of created methods use File | Settings | File Templates.
+  }
+
+  private void checkImageDimensions(String imageFileName)
+  {
+    try
+    {
+      ImageHeuristics h = getImageSizes(imageFileName);
+      if (h != null)
+      {
+        if (h.height >= HEIGHT_MAX || h.width >= WIDTH_MAX)
+        {
+          report.message(MessageId.OPF_051, new MessageLocation(imageFileName, -1, -1, imageFileName));
+        }
+        if (h.length >= IMAGESIZE_MAX)
+        {
+          report.message(MessageId.OPF_057, new MessageLocation(imageFileName, -1, -1, imageFileName));
+        }
+      }
+    }
+    catch (IOException ex)
+    {
+      report.message(MessageId.PKG_021, new MessageLocation(imageFileName, -1, -1, imageFileName) );
+    }
+  }
+
+  public void runChecks()
+  {
+    if (!ocf.hasEntry(path))
+    {
+      report.message(MessageId.RSC_001, new MessageLocation(this.ocf.getName(), -1, -1), path);
+    }
+    else if (!ocf.canDecrypt(path))
+    {
+      report.message(MessageId.RSC_004, new MessageLocation(this.ocf.getName(), 0, 0), path);
+    }
+    else
+    {
+      InputStream in = null;
+      try
+      {
+        in = ocf.getInputStream(path);
+        if (in == null)
+        {
+          report.message(MessageId.RSC_001, new MessageLocation(this.ocf.getName(), 0, 0), path);
+        }
+        byte[] header = new byte[4];
+        int rd = CheckUtil.readBytes(in, header, 0, 4);
+        if (rd < 4)
+        {
+          report.message(MessageId.MED_004, new MessageLocation(path, 0, 0));
+        }
+        else
+        {
+          checkHeader(header);
+        }
+        checkImageDimensions(path);
+      }
+      catch (IOException e)
+      {
+        report.message(MessageId.PKG_021, new MessageLocation(path, 0, 0, path));
+      }
+      finally
+      {
+        try
+        {
+          if (in != null)
+          {
+            in.close();
+          }
+        }
+        catch (IOException ignored)
+        {
+          // eat it
+        }
+      }
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/bitmap/BitmapCheckerFactory.java b/src/main/java/com/adobe/epubcheck/bitmap/BitmapCheckerFactory.java
new file mode 100755
index 0000000..207011b
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/bitmap/BitmapCheckerFactory.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.bitmap;
+
+import java.util.Set;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ocf.OCFPackage;
+import com.adobe.epubcheck.opf.ContentChecker;
+import com.adobe.epubcheck.opf.ContentCheckerFactory;
+import com.adobe.epubcheck.opf.XRefChecker;
+import com.adobe.epubcheck.util.EPUBVersion;
+
+public class BitmapCheckerFactory implements ContentCheckerFactory
+{
+  static private final BitmapCheckerFactory instance = new BitmapCheckerFactory();
+
+  public ContentChecker newInstance(OCFPackage ocf, Report report,
+      String path, String mimeType, String properties,
+      XRefChecker xrefChecker, EPUBVersion version, Set<String> types)
+  {
+    return new BitmapChecker(ocf, report, path, mimeType);
+  }
+
+  static public BitmapCheckerFactory getInstance()
+  {
+    return instance;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/css/CSSChecker.java b/src/main/java/com/adobe/epubcheck/css/CSSChecker.java
new file mode 100644
index 0000000..2005072
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/css/CSSChecker.java
@@ -0,0 +1,183 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.css;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.ocf.OCFPackage;
+import com.adobe.epubcheck.opf.ContentChecker;
+import com.adobe.epubcheck.opf.XRefChecker;
+import com.adobe.epubcheck.util.EPUBVersion;
+import org.idpf.epubcheck.util.css.CssExceptions;
+import org.idpf.epubcheck.util.css.CssParser;
+import org.idpf.epubcheck.util.css.CssSource;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringReader;
+
+public class CSSChecker implements ContentChecker
+{
+  private final OCFPackage ocf;
+  private final Report report;
+  private final String path; //css file path when Mode.FILE, host path when Mode.STRING
+  private final XRefChecker xrefChecker;
+  private final EPUBVersion version;
+  private final Mode mode;
+
+  //Below only used when checking css strings
+  private String value; //css string
+  private int line;  //where css string occurs in host
+  private boolean isStyleAttribute;
+
+  private enum Mode
+  {
+    FILE, STRING
+  }
+
+  /**
+   * Constructor for CSS files.
+   */
+  public CSSChecker(OCFPackage ocf, Report report, String path,
+      XRefChecker xrefChecker, EPUBVersion version)
+  {
+    this.ocf = ocf;
+    this.report = report;
+    this.path = path;
+    this.xrefChecker = xrefChecker;
+    this.version = version;
+    this.mode = Mode.FILE;
+  }
+
+  /**
+   * Constructor for CSS strings (html style attributes and elements) .
+   */
+  public CSSChecker(OCFPackage ocf, Report report, String value, boolean isStyleAttribute, String path, int line,
+      XRefChecker xrefChecker, EPUBVersion version)
+  {
+    this.ocf = ocf;
+    this.report = report;
+    this.path = path;
+    this.xrefChecker = xrefChecker;
+    this.version = version;
+    this.value = value;
+    this.line = line;
+    this.isStyleAttribute = isStyleAttribute;
+    this.mode = Mode.STRING;
+  }
+
+  public void runChecks()
+  {
+    CssSource source = null;
+
+    try
+    {
+      if (this.mode == Mode.FILE && !ocf.hasEntry(path))
+      {
+        report.message(MessageId.RSC_001, new MessageLocation(this.ocf.getName(), -1, -1), path);
+        return;
+      }
+
+      CSSHandler handler = new CSSHandler(path, xrefChecker, report, version);
+      if (this.mode == Mode.STRING && this.line > -1)
+      {
+        handler.setStartingLineNumber(this.line);
+      }
+
+      source = getCssSource();
+      parseItem(source, handler);
+      handler.setStartingLineNumber(-1);
+      this.line = -1;
+    }
+    catch (Exception e)
+    {
+      report.message(MessageId.PKG_008, new MessageLocation(path, -1, -1), e.getMessage());
+    }
+    finally
+    {
+      if (source != null)
+      {
+        try
+        {
+          InputStream iStream = source.getInputStream();
+          if (iStream != null)
+          {
+            iStream.close();
+          }
+        }
+        catch (IOException ignored)
+        {
+          // eat it
+        }
+      }
+    }
+  }
+
+  CssSource getCssSource() throws
+      IOException
+  {
+    CssSource source = null;
+    if (this.mode == Mode.FILE)
+    {
+      source = new CssSource(this.path, ocf.getInputStream(this.path));
+      String charset;
+      if (source.getInputStream().getBomCharset().isPresent())
+      {
+        charset = source.getInputStream().getBomCharset().get().toLowerCase();
+        if (!charset.equals("utf-8") && !charset.startsWith("utf-16"))
+        {
+          report.message(MessageId.CSS_004, new MessageLocation(path, -1, -1, ""), charset);
+        }
+      }
+      if (source.getInputStream().getCssCharset().isPresent())
+      {
+        charset = source.getInputStream().getCssCharset().get().toLowerCase();
+        if (!charset.equals("utf-8") && !charset.startsWith("utf-16"))
+        {
+          report.message(MessageId.CSS_003, new MessageLocation(path, 0, 0, ""), charset);
+        }
+      }
+    }
+    return source;
+  }
+
+  void parseItem(CssSource source, CSSHandler handler) throws IOException, CssExceptions.CssException
+  {
+    if (!isStyleAttribute)
+    {
+      if (this.mode == Mode.FILE)
+      {
+        new CssParser().parse(source, handler, handler);
+      }
+      else
+      {
+        new CssParser().parse(new StringReader(this.value), this.path, handler, handler);
+      }
+    }
+    else
+    {
+      new CssParser().parseStyleAttribute(new StringReader(this.value), this.path, handler, handler);
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/css/CSSCheckerFactory.java b/src/main/java/com/adobe/epubcheck/css/CSSCheckerFactory.java
new file mode 100644
index 0000000..6395dba
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/css/CSSCheckerFactory.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+package com.adobe.epubcheck.css;
+
+import java.util.Set;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ocf.OCFPackage;
+import com.adobe.epubcheck.opf.ContentChecker;
+import com.adobe.epubcheck.opf.ContentCheckerFactory;
+import com.adobe.epubcheck.opf.XRefChecker;
+import com.adobe.epubcheck.util.EPUBVersion;
+
+public class CSSCheckerFactory implements ContentCheckerFactory
+{
+  /*
+    * (non-Javadoc)
+    * @see com.adobe.epubcheck.opf.ContentCheckerFactory#newInstance(com.adobe.epubcheck.ocf.OCFPackage, com.adobe.epubcheck.api.Report, java.lang.String, java.lang.String, java.lang.String, com.adobe.epubcheck.opf.XRefChecker, com.adobe.epubcheck.util.EPUBVersion)
+    */
+  public ContentChecker newInstance(OCFPackage ocf, Report report,
+      String path, String mimeType, String properties,
+      XRefChecker xrefChecker, EPUBVersion version, Set<String> types)
+  {
+
+    return new CSSChecker(ocf, report, path, xrefChecker, version);
+  }
+
+  /**
+   * Additional constructor for validating CSS strings (style attributes and elements)
+   */
+  public ContentChecker newInstance(OCFPackage ocf, Report report,
+      String value, boolean isStyleAttribute, String path, int line, int col,
+      XRefChecker xrefChecker, EPUBVersion version)
+  {
+    return new CSSChecker(ocf, report, value, isStyleAttribute, path, line, xrefChecker, version);
+  }
+
+  static private final CSSCheckerFactory instance = new CSSCheckerFactory();
+
+  static public CSSCheckerFactory getInstance()
+  {
+    return instance;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/css/CSSHandler.java b/src/main/java/com/adobe/epubcheck/css/CSSHandler.java
new file mode 100644
index 0000000..74cab6b
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/css/CSSHandler.java
@@ -0,0 +1,344 @@
+package com.adobe.epubcheck.css;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.opf.OPFChecker;
+import com.adobe.epubcheck.opf.OPFChecker30;
+import com.adobe.epubcheck.opf.XRefChecker;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.FeatureEnum;
+import com.adobe.epubcheck.util.PathUtil;
+import com.google.common.base.CharMatcher;
+import org.idpf.epubcheck.util.css.CssContentHandler;
+import org.idpf.epubcheck.util.css.CssErrorHandler;
+import org.idpf.epubcheck.util.css.CssExceptions.CssException;
+import org.idpf.epubcheck.util.css.CssGrammar.*;
+import org.idpf.epubcheck.util.css.CssLocation;
+
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class CSSHandler implements CssContentHandler, CssErrorHandler
+{
+  final String path;
+  final XRefChecker xrefChecker;
+  final Report report;
+  final EPUBVersion version;
+  int startingLineNumber = 0; //append to line info from css parser
+  int startingColumnNumber = 0;
+  static final CharMatcher SPACE_AND_QUOTES = CharMatcher.anyOf(" \t\n\r\f\"'").precomputed();
+
+  //vars for font-face info
+  String fontFamily;
+  String fontStyle;
+  String fontWeight;
+  String fontUri;
+  boolean inFontFace = false;
+  boolean hasFontFaceDeclarations = false;
+  boolean inKeyFrames = false;
+  CssAtRule atRule = null;
+
+  public CSSHandler(String path, XRefChecker xrefChecker, Report report,
+      EPUBVersion version)
+  {
+    this.path = path;
+    this.xrefChecker = xrefChecker;
+    this.report = report;
+    this.version = version;
+  }
+
+  private MessageLocation getCorrectedMessageLocation(String fileName, int lineNumber, int columnNumber, String context)
+  {
+    lineNumber = correctedLineNumber(lineNumber);
+    columnNumber = correctedColumnNumber(lineNumber, columnNumber);
+    return new MessageLocation(fileName, lineNumber, columnNumber, context);
+  }
+
+  private int correctedLineNumber(int lineNumber)
+  {
+    return startingLineNumber + lineNumber;
+  }
+
+  private int correctedColumnNumber(int lineNumber, int columnNumber)
+  {
+    if (lineNumber != 0)
+    {
+      return columnNumber;
+    }
+    return startingColumnNumber + columnNumber;
+  }
+
+
+  static final Pattern invalidTokenStringFinder = Pattern.compile("Token '[0-9]+%' not allowed here");
+
+  @Override
+  public void error(CssException e) throws
+      CssException
+  {
+    String message = e.getMessage();
+
+    if (inKeyFrames)
+    {
+      Matcher m = invalidTokenStringFinder.matcher(message);
+      if (m.matches())
+      {
+        return;
+      }
+    }
+    CssLocation location = e.getLocation();
+    report.message(MessageId.CSS_008, getCorrectedMessageLocation(path, location.getLine(), location.getColumn(), null), e.getMessage());
+  }
+
+  @Override
+  public void startDocument()
+  {
+  }
+
+  @Override
+  public void endDocument()
+  {
+  }
+
+  static final Pattern keyframesPattern = Pattern.compile("@((keyframes)|(-moz-keyframes)|(-webkit-keyframes)|(-o-keyframes))");
+
+  @Override
+  public void startAtRule(CssAtRule atRule)
+  {
+    String ruleName = atRule.getName().get();
+    this.atRule = atRule;
+    if (ruleName.equals("@import"))
+    {
+      CssConstruct uriOrString = atRule.getComponents().get(0);
+      if (uriOrString != null)
+      {
+        int line = uriOrString.getLocation().getLine();
+        int col = uriOrString.getLocation().getColumn();
+        String uri = null;
+        if (uriOrString.getType() == CssConstruct.Type.URI)
+        {
+          uri = ((CssURI) uriOrString).toUriString();
+        }
+        else if (uriOrString.getType() == CssConstruct.Type.STRING)
+        {
+          uri = CharMatcher.anyOf("\"'").trimFrom(uriOrString.toCssString());
+        }
+        else
+        {
+          //syntax error, url must be first parameter
+        }
+        if (uri != null)
+        {
+          resolveAndRegister(uri, line, col, atRule.toCssString());
+        }
+      }
+    }
+    else if(atRule.getName().get().equals("@namespace"))
+    {
+	    //do not register namespace URIs as resources...
+    }
+    else
+    {
+      //check generically for urls in other atrules
+      registerURIs(atRule.getComponents(),
+          atRule.getLocation().getLine(),
+          atRule.getLocation().getColumn());
+    }
+
+    if (ruleName.equals("@font-face"))
+    {
+      inFontFace = true;
+    }
+    else if (keyframesPattern.matcher(ruleName).matches())
+    {
+      inKeyFrames=true;
+    }
+  }
+
+  @Override
+  public void endAtRule(String name)
+  {
+    if (inFontFace)
+    {
+      inFontFace = false;
+      handleFontFaceInfo();
+      if (!hasFontFaceDeclarations)
+      {
+        report.message(MessageId.CSS_019, new MessageLocation(path, atRule.getLocation().getLine(), atRule.getLocation().getColumn(), atRule.toCssString()));
+      }
+      hasFontFaceDeclarations = false;
+    }
+    if (inKeyFrames)
+    {
+      inKeyFrames = false;
+    }
+    atRule = null;
+  }
+
+  @Override
+  public void selectors(List<CssSelector> selectors)
+  {
+  }
+
+  @Override
+  public void endSelectors(List<CssSelector> selectors)
+  {
+  }
+
+  @Override
+  public void declaration(CssDeclaration declaration)
+  {
+    registerURIs(declaration.getComponents(),
+        declaration.getLocation().getLine(),
+        declaration.getLocation().getColumn());
+
+    String propertyName = declaration.getName().get();
+    if (propertyName == null)
+    {
+      return;
+    }
+
+    if (propertyName.equals("position"))
+    {
+      CssConstruct cns = declaration.getComponents().get(0);
+      if (cns != null)
+      {
+        String value = cns.toCssString();
+        if (value != null && value.equalsIgnoreCase("fixed"))
+        {
+          report.message(MessageId.CSS_006, getCorrectedMessageLocation(path, declaration.getLocation().getLine(), declaration.getLocation().getColumn(), declaration.toCssString()));
+        }
+      }
+    }
+    if (version == EPUBVersion.VERSION_3)
+    {
+      if (propertyName.equals("direction") || propertyName.equals("unicode-bidi"))
+      {
+        report.message(MessageId.CSS_001, getCorrectedMessageLocation(path, declaration.getLocation().getLine(), declaration.getLocation().getColumn(), declaration.toCssString()), propertyName);
+      }
+    }
+
+    if (inFontFace)
+    {
+      hasFontFaceDeclarations = true;
+
+      //collect for info
+      if (propertyName.equals("font-family"))
+      {
+        CssConstruct cc = declaration.getComponents().get(0);
+        if (cc != null)
+        {
+          fontFamily = SPACE_AND_QUOTES.trimFrom(cc.toCssString());
+        }
+      }
+      else if (propertyName.equals("font-style"))
+      {
+        CssConstruct cc = declaration.getComponents().get(0);
+        fontStyle = cc.toCssString();
+      }
+      else if (propertyName.equals("font-weight"))
+      {
+        CssConstruct cc = declaration.getComponents().get(0);
+        fontWeight = cc.toCssString();
+      }
+      else if (propertyName.equals("src"))
+      {
+        for (CssConstruct construct : declaration.getComponents())
+        {
+          if (construct.getType() == CssConstruct.Type.URI)
+          {
+            fontUri = ((CssURI) construct).toUriString();
+            fontUri = PathUtil.resolveRelativeReference(path, fontUri, null);
+            //check font mimetypes
+            String fontMimeType = xrefChecker.getMimeType(fontUri);
+            if (fontMimeType != null)
+            {
+              boolean blessed = true;
+              if (version == EPUBVersion.VERSION_2)
+              {
+                blessed = OPFChecker.isBlessedFontMimetype20(fontMimeType);
+              }
+              else if (version == EPUBVersion.VERSION_3)
+              {
+                blessed = OPFChecker30.isBlessedFontType(fontMimeType);
+              }
+              if (!blessed)
+              {
+                report.message(MessageId.CSS_007,
+                    getCorrectedMessageLocation(path, declaration.getLocation().getLine(), declaration.getLocation().getColumn(), declaration.toCssString()),
+                    fontUri,
+                    fontMimeType);
+              }
+            }
+            else
+            {
+              //errors sb reported elsewhere
+            }
+          }
+        }
+      }
+      report.message(MessageId.CSS_028,
+          getCorrectedMessageLocation(path,
+                                      declaration.getLocation().getLine(),
+                                      declaration.getLocation().getColumn(),
+              fontUri  != null ? fontUri : "null")
+      );
+    }
+  }
+
+  private void registerURIs(List<CssConstruct> constructs, int line, int col)
+  {
+    for (CssConstruct construct : constructs)
+    {
+      if (construct.getType() == CssConstruct.Type.URI)
+      {
+        resolveAndRegister(((CssURI) construct).toUriString(), line, col, construct.toCssString());
+      }
+    }
+  }
+
+  private void resolveAndRegister(String relativeRef, int line, int col, String context)
+  {
+    if (relativeRef != null && relativeRef.trim().length() > 0)
+    {
+      String resolved = PathUtil.resolveRelativeReference(path, relativeRef, null);
+      xrefChecker.registerReference(path, line + startingLineNumber, col, resolved, XRefChecker.RT_GENERIC);
+    }
+    else
+    {
+      report.message(MessageId.CSS_002,getCorrectedMessageLocation(path, line, col, context));
+    }
+  }
+
+  private void handleFontFaceInfo()
+  {
+    if (fontFamily != null)
+    {
+      if (fontUri != null && !fontUri.startsWith("http"))
+      {
+        report.info(path, FeatureEnum.FONT_EMBEDDED, fontFamily +
+            (((fontStyle != null) && !"normal".equalsIgnoreCase(fontStyle)) ? "," + fontStyle : "") +
+            (((fontWeight != null) && !"normal".equalsIgnoreCase(fontWeight)) ? "," + fontWeight : "")
+        );
+      }
+      else
+      {
+        report.info(path, FeatureEnum.FONT_REFERENCE, fontFamily +
+            (((fontStyle != null) && !"normal".equalsIgnoreCase(fontStyle)) ? "," + fontStyle : "") +
+            (((fontWeight != null) && !"normal".equalsIgnoreCase(fontWeight)) ? "," + fontWeight : "")
+        );
+        report.info(path, FeatureEnum.REFERENCE, fontUri);
+      }
+    }
+  }
+
+  public void setStartingLineNumber(int offset)
+  {
+    this.startingLineNumber = offset - 1;
+    if (this.startingLineNumber < 0)
+    {
+      this.startingLineNumber = 0;
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/CheckManager.java b/src/main/java/com/adobe/epubcheck/ctc/CheckManager.java
new file mode 100644
index 0000000..359ba3a
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/CheckManager.java
@@ -0,0 +1,73 @@
+package com.adobe.epubcheck.ctc;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ctc.ContentValidator.ValidationType;
+import com.adobe.epubcheck.ctc.epubpackage.EpubPackage;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.outWriter;
+import com.adobe.epubcheck.util.Messages;
+
+import java.util.zip.ZipFile;
+
+public class CheckManager
+{
+  private final EpubPackage epack;
+  private final EpubCheckContentFactory factory;
+  private Report report;
+
+  public CheckManager(ZipFile zip, Report report)
+  {
+    setReport(report);
+    PackageReader pr = new PackageReader(zip, report);
+    epack = pr.readPackageData();
+    factory = EpubCheckContentFactory.getInstance();
+  }
+
+  private void setReport(Report report)
+  {
+    this.report = report;
+  }
+
+  public void checkPackage()
+  {
+    if (epack == null)
+    {
+      return;
+    }
+
+    EPUBVersion version = epack.getVersion();
+    outWriter.println(String.format(Messages.get("validating_against_epub_version"), version));
+
+    if (version != null && version.equals(EPUBVersion.VERSION_3))
+    {
+      factory.newInstance(report, ValidationType.RENDITION, epack).validate();
+      factory.newInstance(report, ValidationType.CFI, epack).validate();
+      factory.newInstance(report, ValidationType.METADATA_V3, epack).validate();
+      factory.newInstance(report, ValidationType.NAV, epack).validate();
+    }
+    else if (version != null && EPUBVersion.VERSION_2.equals(version))
+    {
+      factory.newInstance(report, ValidationType.EPUB3_STRUCTURE, epack).validate();
+      factory.newInstance(report, ValidationType.METADATA_V2, epack).validate();
+    }
+    else
+    {
+      report.message(MessageId.OPF_024, new MessageLocation(epack.getFileName(), -1, -1), version);
+    }
+
+    factory.newInstance(report, ValidationType.NCX, epack).validate();
+    factory.newInstance(report, ValidationType.MULTIPLE_CSS, epack).validate();
+    factory.newInstance(report, ValidationType.HTML_STRUCTURE, epack).validate();
+    factory.newInstance(report, ValidationType.LINK, epack).validate();
+    factory.newInstance(report, ValidationType.CSS_SEARCH, epack).validate();
+    factory.newInstance(report, ValidationType.TOC, epack).validate();
+    factory.newInstance(report, ValidationType.LANG, epack).validate();
+    factory.newInstance(report, ValidationType.SPINE, epack).validate();
+    factory.newInstance(report, ValidationType.TEXT, epack).validate();
+    factory.newInstance(report, ValidationType.SCRIPT, epack).validate();
+    factory.newInstance(report, ValidationType.SPAN, epack).validate();
+    factory.newInstance(report, ValidationType.SVG, epack).validate();
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/ContentValidator.java b/src/main/java/com/adobe/epubcheck/ctc/ContentValidator.java
new file mode 100644
index 0000000..04463d1
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/ContentValidator.java
@@ -0,0 +1,16 @@
+package com.adobe.epubcheck.ctc;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ctc.epubpackage.EpubPackage;
+import com.adobe.epubcheck.opf.DocumentValidator;
+
+
+public interface ContentValidator
+{
+  public enum ValidationType
+  {
+    TEXT, CONTENT, SPINE, NCX, NAV, SCRIPT, SPAN, STYLE, METADATA_V3, METADATA_V2, LANG, CSS_SEARCH, LINK, RENDITION, CFI, HTML_STRUCTURE, MULTIPLE_CSS, EPUB3_STRUCTURE, TOC, SVG
+  }
+
+  public DocumentValidator newInstance(Report report, ValidationType vt, EpubPackage epack);
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/EntitySearch.java b/src/main/java/com/adobe/epubcheck/ctc/EntitySearch.java
new file mode 100644
index 0000000..8f07134
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/EntitySearch.java
@@ -0,0 +1,187 @@
+package com.adobe.epubcheck.ctc;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.ocf.EncryptionFilter;
+import com.adobe.epubcheck.util.EPUBVersion;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+class EntitySearch
+{
+  private final ZipFile zip;
+  private final Hashtable<String, EncryptionFilter> enc;
+  private final Report report;
+  private final EPUBVersion version;
+
+  static final Pattern entityPattern = Pattern.compile("&([A-Za-z0-9]+)([;|\\s])");
+  static final HashSet<String> legalEntities2_0;
+  static final HashSet<String> legalEntities3_0;
+
+  MessageId ENTITY_INVALID = MessageId.HTM_023;
+  MessageId ENTITY_OK = MessageId.HTM_006;
+  MessageId ENTITY_IMPROPER = MessageId.HTM_024;
+
+  static
+  {
+    legalEntities3_0 = new HashSet<String>();
+    Collections.addAll(legalEntities3_0, "&", "'", """, "<", ">");
+
+    legalEntities2_0 = new HashSet<String>();
+    Collections.addAll(legalEntities2_0, " ", "¡", "¢", "£", "¤",
+        "¥", "&brvbar", "§", "¨", "©", "ª", "«", "¬", "­", "®",
+        "¯", "°", "±", "&sup2;", "&sup3;", "´", "µ", "¶", "·", "¸",
+        "&sup1;", "º", "»", "&frac14;", "&frac12;", "&frac34;", "¿", "À", "Á",
+        "Â", "Ã", "Ä", "Å", "Æ", "Ç", "È", "É", "Ê", "Ë",
+        "Ì", "Í", "Î", "Ï", "Ð", "Ñ", "Ò", "Ó", "Ô", "Õ",
+        "Ö", "×", "Ø", "Ù", "Ú", "Û", "Ü", "Ý", "Þ", "ß",
+        "à", "á", "â", "ã", "ä", "å", "æ", "ç", "è", "é",
+        "ê", "ë", "ì", "í", "î", "ï", "ð", "ñ", "ò", "ó",
+        "ô", "õ", "ö", "÷", "ø", "ù", "ú", "û", "ü", "ý",
+        "þ", "ÿ", "Œ", "œ", "Š", "š", "Ÿ", "ƒ", "ˆ", "˜",
+        "Α", "Β", "Γ", "Δ", "Ε", "Ζ", "Η", "Θ", "Ι", "Κ",
+        "Λ", "Μ", "Ν", "Ξ", "Ο", "Π", "Ρ", "Σ", "Τ", "Υ", "Φ", "Χ",
+        "Ψ", "Ω", "α", "β", "γ", "δ", "ε", "ζ", "η", "θ", "ι",
+        "κ", "λ", "μ", "ν", "ξ", "ο", "π", "ρ", "ς", "σ", "τ",
+        "υ", "φ", "χ", "ψ", "ω", "ϑ", "ϒ", "ϖ", " ", " ", " ",
+        "‌", "‍", "‎", "‏", "–", "—", "‘", "’", "‚", "“", "”",
+        "„", "†", "‡", "•", "…", "‰", "′", "″", "‹", "›",
+        "‾", "⁄", "€", "ℑ", "℘", "ℜ", "™", "ℵ", "←", "↑",
+        "→", "↓", "↔", "↵", "⇐", "⇑", "⇒", "⇓", "⇔", "∀", "∂",
+        "∃", "∅", "∇", "∈", "∉", "∋", "∏", "∑", "−", "∗", "√",
+        "∝", "∞", "∠", "∧", "∨", "∩", "∪", "∫", "&there4;", "∼", "≅", "≈",
+        "≠", "≡", "≤", "≥", "⊂", "⊃", "⊄", "⊆", "⊇", "⊕", "⊗", "⊥",
+        "⋅", "⋮", "⌈", "⌉", "⌊", "⌋", "⟨", "⟩", "◊", "♠", "♣",
+        "♥", "♦");
+
+  }
+
+  public EntitySearch(EPUBVersion version, ZipFile zip, Report report)
+  {
+    this.zip = zip;
+    this.enc = new Hashtable<String, EncryptionFilter>();
+    this.report = report;
+    this.version = version;
+  }
+
+  InputStream getInputStream(String name) throws
+      IOException
+  {
+    ZipEntry entry = zip.getEntry(name);
+    if (entry == null)
+    {
+      return null;
+    }
+    InputStream in = zip.getInputStream(entry);
+    EncryptionFilter filter = enc.get(name);
+    if (filter == null)
+    {
+      return in;
+    }
+    if (filter.canDecrypt())
+    {
+      return filter.decrypt(in);
+    }
+    return null;
+  }
+
+  public Vector<String> Search(String entry)
+  {
+    Vector<String> result = new Vector<String>();
+    InputStream is = null;
+    try
+    {
+      is = getInputStream(entry);
+      Scanner in = new Scanner(is);
+      int lineCounter = 1;
+
+      while (in.hasNextLine())
+      {
+        String line = in.nextLine();
+        Matcher matcher = entityPattern.matcher(line);
+        int position = 0;
+
+        while (matcher.find(position))
+        {
+          MessageId messageCode = ENTITY_INVALID;
+          position = matcher.end();
+          String matchedText = line.substring(matcher.start(), matcher.end());
+          if (version == EPUBVersion.VERSION_2)
+          {
+            if (legalEntities3_0.contains(matchedText) || legalEntities2_0.contains(matchedText))
+            {
+              // its in either the legal 2.0 list or the 3.0 list. Simply emit a usage message
+              messageCode = ENTITY_OK;
+            }
+          }
+          else if (version == EPUBVersion.VERSION_3)
+          {
+            if (legalEntities3_0.contains(matchedText))
+            {
+              // its in the 3.0 list.  just emit a usage message
+              messageCode = ENTITY_OK;
+            }
+            else if (legalEntities2_0.contains(matchedText))
+            {
+              // its in the 2.0 list.  Emit a usage message saying that only & ' etc. are allowed
+              messageCode = ENTITY_IMPROPER;
+            }
+          }
+
+          int contextStart = Math.max(0, matcher.start() - 20);
+          int contextEnd = Math.min(contextStart + 40, line.length() - 1);
+          String context = line.substring(contextStart, contextEnd);
+
+          if (messageCode == ENTITY_INVALID)
+          {
+            // emit the erroneous text along with the message
+            report.message(messageCode, new MessageLocation(entry, lineCounter, matcher.start(), context.trim()), matchedText);
+          }
+          else
+          {
+            report.message(messageCode, new MessageLocation(entry, lineCounter, matcher.start(), context.trim()));
+          }
+        }
+        lineCounter++;
+      }
+    }
+    catch (FileNotFoundException e1)
+    {
+      String fileName = new File(zip.getName()).getName();
+      report.message(MessageId.RSC_001, new MessageLocation(fileName, -1, -1), entry);
+    }
+    catch (IOException e1)
+    {
+      String fileName = new File(zip.getName()).getName();
+      report.message(MessageId.PKG_008, new MessageLocation(fileName, -1, -1), entry);
+    }
+    catch (Exception e)
+    {
+      e.printStackTrace();
+      report.message(MessageId.RSC_005, new MessageLocation(entry, -1, -1), e.getMessage());
+    }
+    finally
+    {
+      if (is != null)
+      {
+        try
+        {
+          is.close();
+        }
+        catch (Exception ignored)
+        {
+        }
+      }
+    }
+    return result;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/Epub3StructureCheck.java b/src/main/java/com/adobe/epubcheck/ctc/Epub3StructureCheck.java
new file mode 100644
index 0000000..6506999
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/Epub3StructureCheck.java
@@ -0,0 +1,64 @@
+package com.adobe.epubcheck.ctc;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ctc.epubpackage.EpubPackage;
+import com.adobe.epubcheck.ctc.epubpackage.ManifestItem;
+import com.adobe.epubcheck.ctc.xml.Epub3StructureHandler;
+import com.adobe.epubcheck.ctc.xml.XMLContentDocParser;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.util.PathUtil;
+import com.adobe.epubcheck.util.SearchDictionary;
+import com.adobe.epubcheck.util.SearchDictionary.DictionaryType;
+
+import java.util.zip.ZipEntry;
+
+public class Epub3StructureCheck implements DocumentValidator
+{
+  private final Report report;
+  private final EpubPackage epack;
+
+  public Epub3StructureCheck(EpubPackage epack, Report report)
+  {
+    this.report = report;
+    this.epack = epack;
+  }
+
+
+  @Override
+  public boolean validate()
+  {
+    boolean result = false;
+
+    SearchDictionary vtsd = new SearchDictionary(DictionaryType.VALID_TEXT_MEDIA_TYPES);
+
+    for (int i = 0; i < epack.getManifest().itemsLength(); i++)
+    {
+      ManifestItem mi = epack.getManifest().getItem(i);
+      if (vtsd.isValidMediaType(mi.getMediaType()))
+      {
+        XMLContentDocParser parser = new XMLContentDocParser(epack.getZip(), report);
+        Epub3StructureHandler epub3StructureHandler = new Epub3StructureHandler();
+        String fileToParse = epack.getManifestItemFileName(mi);
+
+        ZipEntry entry = epack.getZip().getEntry(fileToParse);
+        if (entry == null)
+        {
+          report.message(MessageId.RSC_001, new MessageLocation(epack.getFileName(), -1, -1), fileToParse);
+          continue;
+        }
+
+        epub3StructureHandler.setFileName(epack.getFileName());
+        epub3StructureHandler.setReport(report);
+        parser.parseDoc(fileToParse, epub3StructureHandler);
+
+        if (epub3StructureHandler.getSpecificTagsCount() > 0)
+        {
+          result = true;
+        }
+      }
+    }
+    return result;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/EpubCSSCheck.java b/src/main/java/com/adobe/epubcheck/ctc/EpubCSSCheck.java
new file mode 100644
index 0000000..11edbaa
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/EpubCSSCheck.java
@@ -0,0 +1,214 @@
+package com.adobe.epubcheck.ctc;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ctc.css.EpubCSSCheckCSSHandler;
+import com.adobe.epubcheck.ctc.epubpackage.EpubPackage;
+import com.adobe.epubcheck.ctc.epubpackage.ManifestItem;
+import com.adobe.epubcheck.ctc.xml.CSSStyleAttributeHandler;
+import com.adobe.epubcheck.ctc.xml.XMLContentDocParser;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.ocf.EncryptionFilter;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.util.PathUtil;
+import com.adobe.epubcheck.util.SearchDictionary;
+import com.adobe.epubcheck.util.SearchDictionary.DictionaryType;
+import com.adobe.epubcheck.util.TextSearchDictionaryEntry;
+import org.idpf.epubcheck.util.css.CssParser;
+import org.idpf.epubcheck.util.css.CssSource;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Collection;
+import java.util.Hashtable;
+import java.util.Vector;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+public class EpubCSSCheck implements DocumentValidator
+{
+  final ZipFile zip;
+  final Report report;
+  final EpubPackage epack;
+  final Hashtable<String, EncryptionFilter> enc;
+  static final int EXCESSIVE_CSS_THRESHOLD = 10;
+  final boolean isGlobalFixed;
+
+  public EpubCSSCheck(EpubPackage epack, Report report)
+  {
+    this.epack = epack;
+    this.zip = epack.getZip();
+    this.enc = new Hashtable<String, EncryptionFilter>();
+    this.report = report;
+    this.isGlobalFixed = EpubPackage.isGlobalFixed(epack);
+  }
+
+  public boolean validate()
+  {
+    boolean hasFixedFormatItems = getHasFixedFormatItems(epack);
+    SearchDictionary tsd = new SearchDictionary(DictionaryType.CSS_VALUES);
+    SearchDictionary cssTypes = new SearchDictionary(DictionaryType.CSS_FILES);
+    SearchDictionary validTypes = new SearchDictionary(DictionaryType.VALID_TEXT_MEDIA_TYPES);
+    EpubCSSCheckCSSHandler handler = new EpubCSSCheckCSSHandler(report, isGlobalFixed, hasFixedFormatItems);
+    int numCssFiles = 0;
+
+    for (int i = 0; i < epack.getManifest().itemsLength(); i++)
+    {
+      ManifestItem itemEntry = epack.getManifest().getItem(i);
+
+      if (cssTypes.isValidMediaType(itemEntry.getMediaType()))
+      {
+        ++numCssFiles;
+        String fileToParse = getEntryFileName(itemEntry, epack);
+
+        ZipEntry entry = epack.getZip().getEntry(fileToParse);
+        if (entry == null)
+        {
+          report.message(MessageId.RSC_001, new MessageLocation(epack.getFileName(), -1, -1), fileToParse);
+          continue;
+        }
+
+        try
+        {
+          InputStream inputStream = getInputStream(fileToParse);
+          CssSource source = new CssSource(fileToParse, inputStream);
+          CssParser parser = new CssParser();
+          handler.setPath(fileToParse);
+
+          parser.parse(source, handler, handler);
+        }
+        catch (Exception e)
+        {
+          e.printStackTrace();
+        }
+      }
+    }
+
+    for (int i = 0; i < epack.getManifest().itemsLength(); i++)
+    {
+      ManifestItem itemEntry = epack.getManifest().getItem(i);
+      if (validTypes.isValidMediaType(itemEntry.getMediaType()))
+      {
+        String fileToParse = getEntryFileName(itemEntry, epack);
+        ZipEntry entry = epack.getZip().getEntry(fileToParse);
+        if (entry == null)
+        {
+          report.message(MessageId.RSC_001, new MessageLocation(epack.getFileName(), -1, -1), fileToParse);
+          continue;
+        }
+
+        XMLContentDocParser parser;
+        String properties = itemEntry.getProperties();
+        boolean itemIsFixedFormat = (properties != null && properties.contains("rendition:layout-pre-paginated"));
+
+        parser = new XMLContentDocParser(epack.getZip(), report);
+        CSSStyleAttributeHandler h = new CSSStyleAttributeHandler(isGlobalFixed, itemIsFixedFormat);
+        h.setCssHandler(handler);
+        h.setReport(report);
+        h.setFileName(fileToParse);
+        parser.parseDoc(fileToParse, h);
+        Vector<CSSStyleAttributeHandler.StyleAttribute> styleTags = h.getStyleTagValues();
+
+        for (int t = 0; t < styleTags.size(); t++)
+        {
+          CSSStyleAttributeHandler.StyleAttribute value = styleTags.elementAt(t);
+          searchInsideValue(value, tsd, fileToParse);
+        }
+
+        Collection<CSSStyleAttributeHandler.StyleAttribute> styleAttributes = h.getStyleAttributesValues();
+        for (CSSStyleAttributeHandler.StyleAttribute value : styleAttributes)
+        {
+          searchInsideValue(value, tsd, fileToParse);
+          report.message(MessageId.ACC_013, new MessageLocation(fileToParse, value.getLine(), value.getColumn(), value.getValue()));
+        }
+      }
+    }
+
+    CheckUnusedCSSClassSelectors(handler, report);
+
+    if (numCssFiles > EXCESSIVE_CSS_THRESHOLD)
+    {
+      report.message(MessageId.CSS_011, new MessageLocation(epack.getFileName(), -1, -1));
+    }
+    return true;
+  }
+
+  boolean getHasFixedFormatItems(EpubPackage epack)
+  {
+    for (int i = 0; i < epack.getManifest().itemsLength(); i++)
+    {
+      ManifestItem itemEntry = epack.getManifest().getItem(i);
+      String properties = itemEntry.getProperties();
+      if (properties != null && properties.contains("rendition:layout-pre-paginated"))
+      {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  void CheckUnusedCSSClassSelectors(EpubCSSCheckCSSHandler handler, Report report)
+  {
+    if (handler != null)
+    {
+      handler.CheckUnusedCSSClassSelectors(report);
+    }
+  }
+
+  static String getEntryFileName(ManifestItem itemEntry, EpubPackage epack)
+  {
+    String fileToParse;
+    if (epack.getPackageMainPath() != null && epack.getPackageMainPath().length() > 0)
+    {
+      fileToParse = PathUtil.resolveRelativeReference(epack.getPackageMainFile(), itemEntry.getHref(), null);
+    }
+    else
+    {
+      fileToParse = itemEntry.getHref();
+    }
+    return fileToParse;
+  }
+
+  InputStream getInputStream(String name) throws
+      IOException
+  {
+    ZipEntry entry = zip.getEntry(name);
+    if (entry == null)
+    {
+      return null;
+    }
+    InputStream in = zip.getInputStream(entry);
+    EncryptionFilter filter = enc.get(name);
+    if (filter == null)
+    {
+      return in;
+    }
+    if (filter.canDecrypt())
+    {
+      return filter.decrypt(in);
+    }
+    return null;
+  }
+
+  void searchInsideValue(CSSStyleAttributeHandler.StyleAttribute entry, SearchDictionary tds, String file)
+  {
+    for (int s = 0; s < tds.getDictEntries().size(); s++)
+    {
+      TextSearchDictionaryEntry de = tds.getDictEntries().get(s);
+      MessageId messageCode = de.getErrorCode();
+      Pattern p = de.getPattern();
+
+      Matcher matcher = p.matcher(entry.getValue());
+      int position = 0;
+      while (matcher.find(position))
+      {
+        position = matcher.end();
+        report.message(messageCode, new MessageLocation(file, entry.getLine(), entry.getColumn(), entry.getValue().trim()));
+      }
+    }
+  }
+}
+
+
diff --git a/src/main/java/com/adobe/epubcheck/ctc/EpubCfiCheck.java b/src/main/java/com/adobe/epubcheck/ctc/EpubCfiCheck.java
new file mode 100644
index 0000000..297df82
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/EpubCfiCheck.java
@@ -0,0 +1,83 @@
+package com.adobe.epubcheck.ctc;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ctc.epubpackage.EpubPackage;
+import com.adobe.epubcheck.ctc.epubpackage.ManifestItem;
+import com.adobe.epubcheck.ctc.xml.AnchorTagHandler;
+import com.adobe.epubcheck.ctc.xml.XMLContentDocParser;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.util.PathUtil;
+import com.adobe.epubcheck.util.SearchDictionary;
+import com.adobe.epubcheck.util.SearchDictionary.DictionaryType;
+
+import java.io.File;
+import java.util.Vector;
+import java.util.zip.ZipEntry;
+
+
+public class EpubCfiCheck implements DocumentValidator
+{
+  private final Report report;
+  private final EpubPackage epack;
+
+  public EpubCfiCheck(EpubPackage epack, Report report)
+  {
+    this.epack = epack;
+    this.report = report;
+  }
+
+
+  public boolean validate()
+  {
+    SearchDictionary validTypes = new SearchDictionary(DictionaryType.VALID_TEXT_MEDIA_TYPES);
+
+    for (int i = 0; i < epack.getManifest().itemsLength(); i++)
+    {
+      ManifestItem itemEntry = epack.getManifest().getItem(i);
+      if (validTypes.isValidMediaType(itemEntry.getMediaType()))
+      {
+        String fileToParse = epack.getManifestItemFileName(itemEntry);
+        ZipEntry entry = epack.getZip().getEntry(fileToParse);
+        if (entry == null)
+        {
+          report.message(MessageId.RSC_001, new MessageLocation(epack.getFileName(), -1, -1), fileToParse);
+          continue;
+        }
+
+        XMLContentDocParser parser = new XMLContentDocParser(epack.getZip(), report);
+        AnchorTagHandler h = new AnchorTagHandler();
+        parser.parseDoc(fileToParse, h);
+        Vector<AnchorTagHandler.DocTagContent> v = h.getHrefAttributesValues();
+
+        for (int e = 0; e < v.size(); e++)
+        {
+          AnchorTagHandler.DocTagContent value = v.elementAt(e);
+          searchInsideValue(value, fileToParse);
+        }
+      }
+    }
+
+    return true;
+  }
+
+  private void searchInsideValue(AnchorTagHandler.DocTagContent entry, String file)
+  {
+    String url = entry.getValue();
+    int frag = entry.getValue().indexOf("#epubcfi");
+    if (frag > -1)
+    {
+      String fileName = url.substring(0, frag);
+      fileName = new File(fileName).getName();
+      if (entry.getValue().contains(".epub") && fileName.compareTo(file) != 0)
+      {
+        report.message(MessageId.HTM_012, new MessageLocation(file, entry.getLine(), entry.getColumn(), entry.getValue()));
+      }
+      else
+      {
+        report.message(MessageId.HTM_013, new MessageLocation(file, entry.getLine(), entry.getColumn(), entry.getValue()));
+      }
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/EpubCheckContentFactory.java b/src/main/java/com/adobe/epubcheck/ctc/EpubCheckContentFactory.java
new file mode 100644
index 0000000..482de45
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/EpubCheckContentFactory.java
@@ -0,0 +1,96 @@
+package com.adobe.epubcheck.ctc;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ctc.epubpackage.EpubPackage;
+import com.adobe.epubcheck.opf.DocumentValidator;
+
+public class EpubCheckContentFactory implements ContentValidator
+{
+  static private final EpubCheckContentFactory instance = new EpubCheckContentFactory();
+
+  static public EpubCheckContentFactory getInstance()
+  {
+    return instance;
+  }
+
+  @Override
+  public DocumentValidator newInstance(Report report, ValidationType vt, EpubPackage epack)
+  {
+    if (vt.equals(ValidationType.METADATA_V3))
+    {
+      return new EpubMetaDataV3Check(epack, report);
+    }
+    if (vt.equals(ValidationType.METADATA_V2))
+    {
+      return new EpubMetaDataV2Check(epack, report);
+    }
+    if (vt.equals(ValidationType.TEXT))
+    {
+      return new EpubTextContentCheck(report, epack);
+    }
+    else if (vt.equals(ValidationType.NAV))
+    {
+      return new EpubNavCheck(epack, report);
+    }
+    else if (vt.equals(ValidationType.NCX))
+    {
+      return new EpubNCXCheck(epack, report);
+    }
+    else if (vt.equals(ValidationType.SPINE))
+    {
+      return new EpubSpineCheck(epack, report);
+    }
+    else if (vt.equals(ValidationType.SCRIPT))
+    {
+      return new EpubScriptCheck(epack, report);
+    }
+    else if (vt.equals(ValidationType.SPAN))
+    {
+      return new EpubSpanCheck(epack, report);
+    }
+    else if (vt.equals(ValidationType.LANG))
+    {
+      return new EpubLangCheck(epack, report);
+    }
+    else if (vt.equals(ValidationType.CSS_SEARCH))
+    {
+      return new EpubCSSCheck(epack, report);
+    }
+    else if (vt.equals(ValidationType.LINK))
+    {
+      return new EpubExtLinksCheck(epack, report);
+    }
+    else if (vt.equals(ValidationType.RENDITION))
+    {
+      return new EpubRenditionCheck(epack, report);
+    }
+    else if (vt.equals(ValidationType.CFI))
+    {
+      return new EpubCfiCheck(epack, report);
+    }
+    else if (vt.equals(ValidationType.HTML_STRUCTURE))
+    {
+      return new EpubHTML5StructureCheck(epack, report);
+    }
+    else if (vt.equals(ValidationType.MULTIPLE_CSS))
+    {
+      return new EpubStyleSheetsCheck(epack, report);
+    }
+    else if (vt.equals(ValidationType.EPUB3_STRUCTURE))
+    {
+      return new Epub3StructureCheck(epack, report);
+    }
+    else if (vt.equals(ValidationType.TOC))
+    {
+      return new EpubTocCheck(epack, report);
+    }
+    else if (vt.equals(ValidationType.SVG))
+    {
+      return new EpubSVGCheck(epack, report);
+    }
+    else
+    {
+      return null;
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/EpubExtLinksCheck.java b/src/main/java/com/adobe/epubcheck/ctc/EpubExtLinksCheck.java
new file mode 100644
index 0000000..2bb14db
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/EpubExtLinksCheck.java
@@ -0,0 +1,114 @@
+package com.adobe.epubcheck.ctc;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ctc.epubpackage.EpubPackage;
+import com.adobe.epubcheck.ctc.epubpackage.ManifestItem;
+import com.adobe.epubcheck.ctc.xml.AnchorTagHandler;
+import com.adobe.epubcheck.ctc.xml.XMLContentDocParser;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.util.PathUtil;
+import com.adobe.epubcheck.util.SearchDictionary;
+import com.adobe.epubcheck.util.SearchDictionary.DictionaryType;
+import com.adobe.epubcheck.util.TextSearchDictionaryEntry;
+
+import java.util.Vector;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.zip.ZipEntry;
+
+
+public class EpubExtLinksCheck implements DocumentValidator
+{
+  private final Report report;
+  private final EpubPackage epack;
+
+  public EpubExtLinksCheck(EpubPackage epack, Report report)
+  {
+    this.epack = epack;
+    this.report = report;
+  }
+
+  public boolean validate()
+  {
+    SearchDictionary tsd = new SearchDictionary(DictionaryType.LINK_VALUES);
+    SearchDictionary validTypes = new SearchDictionary(DictionaryType.VALID_TEXT_MEDIA_TYPES);
+
+    for (int i = 0; i < epack.getManifest().itemsLength(); i++)
+    {
+      ManifestItem itemEntry = epack.getManifest().getItem(i);
+
+      if (validTypes.isValidMediaType(itemEntry.getMediaType()))
+      {
+        String fileToParse = epack.getManifestItemFileName(itemEntry);
+
+        XMLContentDocParser parser;
+        parser = new XMLContentDocParser(epack.getZip(), report);
+        AnchorTagHandler h = new AnchorTagHandler();
+
+        ZipEntry entry = epack.getZip().getEntry(fileToParse);
+        if (entry == null)
+        {
+          report.message(MessageId.RSC_001, new MessageLocation(epack.getFileName(), -1, -1), fileToParse);
+          continue;
+        }
+
+        parser.parseDoc(fileToParse, h);
+        Vector<AnchorTagHandler.DocTagContent> v = h.getHrefAttributesValues();
+
+        for (int e = 0; e < v.size(); e++)
+        {
+          AnchorTagHandler.DocTagContent value = v.elementAt(e);
+          searchInsideValue(value, tsd, fileToParse);
+          String type = value.getType();
+          if ("img".compareToIgnoreCase(type) == 0 || "altimg".compareToIgnoreCase(type) == 0)
+          {
+            // ensure that this image is in the manifest
+            String imageFile = value.getValue();
+            if (imageFile.matches("^[^:/?#]+://.*"))
+            {
+              report.message(MessageId.RSC_006, new MessageLocation(fileToParse, value.getLine(), value.getColumn(), value.getContext()), value.getValue());
+              continue;
+            }
+
+            imageFile = PathUtil.resolveRelativeReference(fileToParse, imageFile, null);
+            int index = imageFile.lastIndexOf("#");
+            if (index > 0)
+            {
+              imageFile = imageFile.substring(0, index);
+            }
+
+            ZipEntry imgentry = epack.getZip().getEntry(imageFile);
+            if (imgentry == null)
+            {
+              MessageId id = "img".compareToIgnoreCase(type) == 0 ? MessageId.RSC_001 : MessageId.RSC_018;
+              report.message(id, new MessageLocation(fileToParse, value.getLine(), value.getColumn(), value.getContext()), value.getValue());
+            }
+          }
+        }
+      }
+    }
+    return true;
+  }
+
+  private void searchInsideValue(AnchorTagHandler.DocTagContent entry, SearchDictionary tds, String file)
+  {
+    for (int s = 0; s < tds.getDictEntries().size(); s++)
+    {
+      TextSearchDictionaryEntry de = tds.getDictEntries().get(s);
+      MessageId messageCode = de.getErrorCode();
+
+      Pattern p = de.getPattern();
+      Matcher matcher = p.matcher(entry.getValue());
+      int position = 0;
+      while (matcher.find(position))
+      {
+        position = matcher.end();
+        report.message(messageCode, new MessageLocation(file, entry.getLine(), entry.getColumn(), entry.getValue()));
+      }
+    }
+  }
+}
+
+
diff --git a/src/main/java/com/adobe/epubcheck/ctc/EpubHTML5StructureCheck.java b/src/main/java/com/adobe/epubcheck/ctc/EpubHTML5StructureCheck.java
new file mode 100644
index 0000000..b04fa8d
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/EpubHTML5StructureCheck.java
@@ -0,0 +1,292 @@
+package com.adobe.epubcheck.ctc;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Hashtable;
+import java.util.Scanner;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ctc.epubpackage.EpubPackage;
+import com.adobe.epubcheck.ctc.epubpackage.ManifestItem;
+import com.adobe.epubcheck.ctc.epubpackage.SpineItem;
+import com.adobe.epubcheck.ctc.xml.HTMLTagsAnalyseHandler;
+import com.adobe.epubcheck.ctc.xml.XMLContentDocParser;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.ocf.EncryptionFilter;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.FeatureEnum;
+import com.adobe.epubcheck.util.SearchDictionary;
+import com.adobe.epubcheck.util.SearchDictionary.DictionaryType;
+
+public class EpubHTML5StructureCheck implements DocumentValidator
+{
+  static final int hasHtml = 1;
+  static final int hasPublic = 2;
+  static final int hasW3C = 4;
+  static final int hasXhtml = 8;
+  static final int hasHTML5 = hasHtml;
+  static final int hasHTML4 = hasPublic | hasW3C | hasXhtml;
+
+  final ZipFile zip;
+  final Report report;
+  final EpubPackage epubPackage;
+  final Hashtable<String, EncryptionFilter> enc;
+
+  public EpubHTML5StructureCheck(EpubPackage epack, Report report)
+  {
+    this.zip = epack.getZip();
+    this.report = report;
+    this.epubPackage = epack;
+    this.enc = new Hashtable<String, EncryptionFilter>();
+  }
+
+  @Override
+  public boolean validate()
+  {
+    boolean result = false;
+    SearchDictionary vtsd = new SearchDictionary(DictionaryType.VALID_TEXT_MEDIA_TYPES);
+    int landmarkNavCount = 0;
+    boolean isGlobalFixed = EpubPackage.isGlobalFixed(this.epubPackage);
+
+    Hashtable<String, SpineItem> spineItems = new Hashtable<String, SpineItem>();
+    for (int i = 0; i < epubPackage.getSpine().itemsLength(); ++i)
+    {
+      SpineItem si = epubPackage.getSpine().getItem(i);
+      spineItems.put(si.getIdref(), si);
+    }
+
+    for (int i = 0; i < epubPackage.getManifest().itemsLength(); i++)
+    {
+      ManifestItem mi = epubPackage.getManifest().getItem(i);
+      if (vtsd.isValidMediaType(mi.getMediaType()))
+      {
+        XMLContentDocParser parser = new XMLContentDocParser(epubPackage.getZip(), report);
+        HTMLTagsAnalyseHandler sh = new HTMLTagsAnalyseHandler();
+        sh.setReport(report);
+        SpineItem si = spineItems.get(mi.getId());
+        boolean itemIsFixedFormat = isGlobalFixed;
+        if (si != null)
+        {
+
+          String properties = si.getProperties();
+          if (properties != null)
+          {
+            if (properties != null && !properties.equals(""))
+            {
+              properties = properties.replaceAll("[\\s]+", " ");
+              String propertyArray[] = properties.split(" ");
+              for (String prop : propertyArray)
+              {
+                if (prop.equals("rendition:layout-pre-paginated"))
+                {
+                  itemIsFixedFormat = true;
+                }
+                else if (prop.equals("rendition:layout-reflowable"))
+                {
+                  itemIsFixedFormat = false;
+                }
+              }
+            }
+          }
+          sh.setIsFixed(itemIsFixedFormat);
+        }
+
+        String fileToParse = epubPackage.getManifestItemFileName(mi);
+
+        ZipEntry entry = zip.getEntry(fileToParse);
+        if (entry == null)
+        {
+          String fileName = new File(zip.getName()).getName();
+          report.message(MessageId.RSC_001, new MessageLocation(fileName, -1, -1), fileToParse);
+          continue;
+        }
+        sh.setVersion(epubPackage.getVersion());
+        sh.setFileName(fileToParse);
+        //parser.parseDoc(fileToParse, sh);
+        /***VALIDATE FILE EXTENSION***/
+
+        String fileExtension = mi.getHref().substring(mi.getHref().lastIndexOf('.') + 1, mi.getHref().length());
+        if (epubPackage.getVersion() == EPUBVersion.VERSION_2
+            && !(fileExtension.compareToIgnoreCase("html") == 0
+                || fileExtension.compareToIgnoreCase("htm") == 0 
+                || fileExtension.compareToIgnoreCase("xhtml") == 0))
+        {
+          // Note: extension is already checked in OPFChecker30 for EPUB 3 
+          report.message(MessageId.HTM_014, new MessageLocation(mi.getHref(), -1, -1));
+        }
+
+        /***VALIDATE DOCTYPE***/
+        int docTypeMatches = findMatchingDocumentTypePatterns(fileToParse);
+
+        if ((0 != (docTypeMatches & hasHTML4)) && (epubPackage.getVersion() == EPUBVersion.VERSION_3))
+        {
+          report.message(MessageId.HTM_015, new MessageLocation(mi.getHref(), -1, -1));
+        }
+        else if ((0 != (docTypeMatches & hasHTML5)) && ((hasXhtml != (docTypeMatches & hasXhtml)))  &&  (epubPackage.getVersion() == EPUBVersion.VERSION_2))
+        {
+          report.message(MessageId.HTM_016, new MessageLocation(mi.getHref(), -1, -1));
+        }
+        parser.parseDoc(fileToParse, sh);
+
+        if (sh.getHtml5SpecTagsCounter() > 0)
+        {
+          report.info(fileToParse, FeatureEnum.HAS_HTML5, "true");
+          if (epubPackage.isSpineItem(mi.getId()))
+          {
+            // Report that there is HTML5 for the entire publication only if it is in a spine item.
+            // This is used for the 'is backward compatible' check.
+            // This is so the HTML5 (nav tag) in a toc document will be ignored for backwards compatibility testing.
+            report.info(null, FeatureEnum.HAS_HTML5, "true");
+          }
+        }
+        landmarkNavCount += sh.getLandmarkNavCount();
+      }
+    }
+    if (landmarkNavCount != 1 && epubPackage.getVersion() == EPUBVersion.VERSION_3)
+    {
+      File zipFile = new File(zip.getName());
+      report.message(MessageId.ACC_008, new MessageLocation(zipFile.getName(), -1, -1));
+    }
+
+    return result;
+  }
+
+  InputStream getInputStream(String name) throws
+      IOException
+  {
+    ZipEntry entry = zip.getEntry(name);
+    if (entry == null)
+    {
+      return null;
+    }
+    InputStream in = zip.getInputStream(entry);
+    EncryptionFilter filter = enc.get(name);
+    if (filter == null)
+    {
+      return in;
+    }
+    if (filter.canDecrypt())
+    {
+      return filter.decrypt(in);
+    }
+    return null;
+  }
+
+  static final Pattern patternDocTypeElement = Pattern.compile("<*!*[Dd][Oo][Cc][Tt][Yy][Pp][Ee]");
+  static final Pattern patternHtmlElement = Pattern.compile("([^Xx][Hh][Tt][Mm][Ll])");
+  static final Pattern patternPublicElement = Pattern.compile("[Pp][Uu][Bb][Ll][Ii][Cc]");
+  static final Pattern patternW3CElement = Pattern.compile("[Ww][3][Cc]//[Dd][Tt][Dd]");
+  static final Pattern patternXhtmlElement = Pattern.compile("[Xx][Hh][Tt][Mm][Ll]");
+
+  int findMatchingDocumentTypePatterns(String entry)
+  {
+    InputStream is = null;
+    int matchingPatterns = 0;
+    try
+    {
+      is = getInputStream(entry);
+      if (is == null)
+      {
+        throw new IOException("Input Stream not found: '" + entry + "'");
+      }
+
+      Scanner in = new Scanner(is);
+      StringBuilder sb = new StringBuilder();
+      int numBracketsToClose = 0;
+      String line = null;
+
+      // skip over every line until we find the !DOCTYPE
+      while (in.hasNextLine())
+      {
+        line = in.nextLine();
+        Matcher matcher = patternDocTypeElement.matcher(line);
+        if (matcher.find())
+        {
+          numBracketsToClose = 1;
+          int i = matcher.start();
+          if (i >= 0)
+          {
+            // prime it here so we can enter the loop below
+            sb.append("<");
+            line = line.substring(i + 1);
+            break;
+          }
+        }
+      }
+
+      // now start appending characters until we close all nested '<' with matching '>'
+      while ((numBracketsToClose > 0) && (line != null))
+      {
+        int i = 0;
+        while ((numBracketsToClose > 0) && (i < line.length()))
+        {
+          Character ch = line.charAt(i);
+          if (ch == '<')
+          {
+            ++numBracketsToClose;
+          }
+          else if (ch == '>')
+          {
+            --numBracketsToClose;
+          }
+          sb.append(ch);
+          ++i;
+        }
+        if (in.hasNextLine())
+        {
+          sb.append(" ");
+          line = in.nextLine();
+        }
+        else
+        {
+          line = null;
+        }
+      }
+
+      if (numBracketsToClose > 0)
+      {
+        // There's an error.  We ran out of characters before finding the matching '>'
+        return -1;
+      }
+
+      line = sb.toString();
+
+      matchingPatterns |= checkPattern(line, patternHtmlElement, hasHtml);
+      matchingPatterns |= checkPattern(line, patternPublicElement, hasPublic);
+      matchingPatterns |= checkPattern(line, patternW3CElement, hasW3C);
+      matchingPatterns |= checkPattern(line, patternXhtmlElement, hasXhtml);
+    }
+    catch (Exception e)
+    {
+      e.printStackTrace();
+      report.message(MessageId.PKG_008, new MessageLocation(entry, -1, -1), e.getMessage());
+    }
+    finally
+    {
+      if (is != null)
+      {
+        try
+        {
+          is.close();
+        }
+        catch (Exception ignore)
+        {
+        }
+      }
+    }
+    return matchingPatterns;
+  }
+
+  int checkPattern(String line, Pattern patternElement, int mask)
+  {
+    Matcher matcherElement = patternElement.matcher(line);
+    return (matcherElement.find()) ? mask : 0;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/EpubLangCheck.java b/src/main/java/com/adobe/epubcheck/ctc/EpubLangCheck.java
new file mode 100644
index 0000000..b898411
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/EpubLangCheck.java
@@ -0,0 +1,273 @@
+package com.adobe.epubcheck.ctc;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ctc.epubpackage.EpubPackage;
+import com.adobe.epubcheck.ctc.epubpackage.ManifestItem;
+import com.adobe.epubcheck.ctc.xml.LangAttributeHandler;
+import com.adobe.epubcheck.ctc.xml.XMLContentDocParser;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.util.PathUtil;
+import com.adobe.epubcheck.util.SearchDictionary;
+import com.adobe.epubcheck.util.SearchDictionary.DictionaryType;
+
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+public class EpubLangCheck implements DocumentValidator
+{
+  private final ZipFile zip;
+  private final Report report;
+  private final EpubPackage epack;
+
+  public EpubLangCheck(EpubPackage epack, Report report)
+  {
+    this.zip = epack.getZip();
+    this.report = report;
+    this.epack = epack;
+  }
+
+  @Override
+  public boolean validate()
+  {
+    boolean result = false;
+    SearchDictionary vtsd = new SearchDictionary(DictionaryType.VALID_TEXT_MEDIA_TYPES);
+    for (int i = 0; i < epack.getManifest().itemsLength(); i++)
+    {
+      ManifestItem mi = epack.getManifest().getItem(i);
+      if (vtsd.isValidMediaType(mi.getMediaType()))
+      {
+        XMLContentDocParser parser = new XMLContentDocParser(this.zip, report);
+        LangAttributeHandler sh = new LangAttributeHandler();
+        String fileToParse = epack.getManifestItemFileName(mi);
+
+        ZipEntry entry = this.zip.getEntry(fileToParse);
+        if (entry == null)
+        {
+          report.message(MessageId.RSC_001, new MessageLocation(this.epack.getFileName(), -1, -1), fileToParse);
+          continue;
+        }
+
+        parser.parseDoc(fileToParse, sh);
+        String langAttribute = sh.getLangAttr();
+        String xmlLangAttribute = sh.getXmlLangAttr();
+        if (langAttribute != null && xmlLangAttribute != null)
+        {
+          if (xmlLangAttribute.compareToIgnoreCase(langAttribute) != 0)
+          {
+            report.message(MessageId.HTM_017, new MessageLocation(fileToParse, -1, -1));
+          }
+
+          if (!isValidLanguageDefinition(xmlLangAttribute))
+          {
+            report.message(MessageId.HTM_018, new MessageLocation(fileToParse, -1, -1));
+          }
+          if (!isValidLanguageDefinition(langAttribute))
+          {
+            report.message(MessageId.HTM_019, new MessageLocation(fileToParse, -1, -1));
+          }
+        }
+        else
+        {
+          if (xmlLangAttribute == null)
+          {
+            report.message(MessageId.HTM_020, new MessageLocation(fileToParse, -1, -1));
+          }
+          if (langAttribute == null)
+          {
+            report.message(MessageId.HTM_021, new MessageLocation(fileToParse, -1, -1));
+          }
+        }
+      }
+    }
+    return result;
+  }
+
+  private boolean isValidLanguageDefinition(String language)
+  {
+    // ignore language subclasses like en-us or fr-ca.
+    int pos = language.indexOf("-");
+    if (pos >= 0)
+    {
+      language = language.substring(0, pos);
+    }
+
+    for (String[] langValue : langValues)
+    {
+      if (language.compareToIgnoreCase(langValue[1]) == 0)
+      {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  private final String[][] langValues = new String[][]
+      {
+          {"Abkhazian", "ab"},
+          {"Afar", "aa"},
+          {"Afrikaans", "af"},
+          {"Albanian", "sq"},
+          {"Amharic", "am"},
+          {"Arabic", "ar"},
+          {"Aragonese", "an"},
+          {"Armenian", "hy"},
+          {"Assamese", "as"},
+          {"Aymara", "ay"},
+          {"Azerbaijani", "az"},
+          {"Bashkir", "ba"},
+          {"Basque", "eu"},
+          {"Bengali (Bangla)", "bn"},
+          {"Bhutani", "dz"},
+          {"Bihari", "bh"},
+          {"Bislama", "bi"},
+          {"Breton", "br"},
+          {"Bulgarian", "bg"},
+          {"Burmese", "my"},
+          {"Byelorussian (Belarusian)", "be"},
+          {"Cambodian", "km"},
+          {"Catalan", "ca"},
+          {"Cherokee", " "},
+          {"Chewa", " "},
+          {"Chinese (Simplified)", "zh"},
+          {"Chinese (Traditional)", "zh"},
+          {"Corsican", "co"},
+          {"Croatian", "hr"},
+          {"Czech", "cs"},
+          {"Danish", "da"},
+          {"Divehi", " "},
+          {"Dutch", "nl"},
+          {"Edo", " "},
+          {"English", "en"},
+          {"Esperanto", "eo"},
+          {"Estonian", "et"},
+          {"Faeroese", "fo"},
+          {"Farsi", "fa"},
+          {"Fiji", "fj"},
+          {"Finnish", "fi"},
+          {"Flemish", " "},
+          {"French", "fr"},
+          {"Frisian", "fy"},
+          {"Fulfulde", " "},
+          {"Galician", "gl"},
+          {"Gaelic (Scottish)", "gd"},
+          {"Gaelic (Manx)", "gv"},
+          {"Georgian", "ka"},
+          {"German", "de"},
+          {"Greek", "el"},
+          {"Greenlandic", "kl"},
+          {"Guarani", "gn"},
+          {"Gujarati", "gu"},
+          {"Haitian Creole", "ht"},
+          {"Hausa", "ha"},
+          {"Hawaiian", " "},
+          {"Hebrew", "he, iw"},
+          {"Hindi", "hi"},
+          {"Hungarian", "hu"},
+          {"Ibibio", " "},
+          {"Icelandic", "is"},
+          {"Ido", "io"},
+          {"Igbo", " "},
+          {"Indonesian", "id, in"},
+          {"Interlingua", "ia"},
+          {"Interlingue", "ie"},
+          {"Inuktitut", "iu"},
+          {"Inupiak", "ik"},
+          {"Irish", "ga"},
+          {"Italian", "it"},
+          {"Japanese", "ja"},
+          {"Javanese", "jv"},
+          {"Kannada", "kn"},
+          {"Kanuri", " "},
+          {"Kashmiri", "ks"},
+          {"Kazakh", "kk"},
+          {"Kinyarwanda (Ruanda)", "rw"},
+          {"Kirghiz", "ky"},
+          {"Kirundi (Rundi)", "rn"},
+          {"Konkani", " "},
+          {"Korean", "ko"},
+          {"Kurdish", "ku"},
+          {"Laothian", "lo"},
+          {"Latin", "la"},
+          {"Latvian (Lettish)", "lv"},
+          {"Limburgish ( Limburger)", "li"},
+          {"Lingala", "ln"},
+          {"Lithuanian", "lt"},
+          {"Macedonian", "mk"},
+          {"Malagasy", "mg"},
+          {"Malay", "ms"},
+          {"Malayalam", "ml"},
+          {" ", " "},
+          {"Maltese", "mt"},
+          {"Maori", "mi"},
+          {"Marathi", "mr"},
+          {"Moldavian", "mo"},
+          {"Mongolian", "mn"},
+          {"Nauru", "na"},
+          {"Nepali", "ne"},
+          {"Norwegian", "no"},
+          {"Occitan", "oc"},
+          {"Oriya", "or"},
+          {"Oromo (Afaan Oromo)", "om"},
+          {"Papiamentu", " "},
+          {"Pashto (Pushto)", "ps"},
+          {"Polish", "pl"},
+          {"Portuguese", "pt"},
+          {"Punjabi", "pa"},
+          {"Quechua", "qu"},
+          {"Rhaeto-Romance", "rm"},
+          {"Romanian", "ro"},
+          {"Russian", "ru"},
+          {"Sami (Lappish)", " "},
+          {"Samoan", "sm"},
+          {"Sangro", "sg"},
+          {"Sanskrit", "sa"},
+          {"Serbian", "sr"},
+          {"Serbo-Croatian", "sh"},
+          {"Sesotho", "st"},
+          {"Setswana", "tn"},
+          {"Shona", "sn"},
+          {"Sichuan Yi", "ii"},
+          {"Sindhi", "sd"},
+          {"Sinhalese", "si"},
+          {"Siswati", "ss"},
+          {"Slovak", "sk"},
+          {"Slovenian", "sl"},
+          {"Somali", "so"},
+          {"Spanish", "es"},
+          {"Sundanese", "su"},
+          {"Swahili (Kiswahili)", "sw"},
+          {"Swedish", "sv"},
+          {"Syriac", " "},
+          {"Tagalog", "tl"},
+          {"Tajik", "tg"},
+          {"Tamazight", " "},
+          {"Tamil", "ta"},
+          {"Tatar", "tt"},
+          {"Telugu", "te"},
+          {"Thai", "th"},
+          {"Tibetan", "bo"},
+          {"Tigrinya", "ti"},
+          {"Tonga", "to"},
+          {"Tsonga", "ts"},
+          {"Turkish", "tr"},
+          {"Turkmen", "tk"},
+          {"Twi", "tw"},
+          {"Uighur", "ug"},
+          {"Ukrainian", "uk"},
+          {"Urdu", "ur"},
+          {"Uzbek", "uz"},
+          {"Venda", " "},
+          {"Vietnamese", "vi"},
+          {"Volapük", "vo"},
+          {"Wallon", "wa"},
+          {"Welsh", "cy"},
+          {"Wolof", "wo"},
+          {"Xhosa", "xh"},
+          {"Yi", " "},
+          {"Yiddish", "yi, ji"},
+          {"Yoruba", "yo"},
+          {"Zulu", "zu"},
+      };
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/EpubMetaDataV2Check.java b/src/main/java/com/adobe/epubcheck/ctc/EpubMetaDataV2Check.java
new file mode 100644
index 0000000..b9f155e
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/EpubMetaDataV2Check.java
@@ -0,0 +1,33 @@
+package com.adobe.epubcheck.ctc;
+
+import org.w3c.dom.Document;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ctc.epubpackage.EpubPackage;
+import com.adobe.epubcheck.opf.DocumentValidator;
+
+public class EpubMetaDataV2Check implements DocumentValidator
+{
+  private final Document doc;
+  private final String pathRootFile;
+  @SuppressWarnings("unused")
+  private final Report report;
+
+  public EpubMetaDataV2Check(EpubPackage epack, Report report)
+  {
+    this.doc = epack.getPackDoc();
+    this.pathRootFile = epack.getPackageMainFile();
+    this.report = report;
+  }
+
+  @Override
+  public boolean validate()
+  {
+    return isMetaDataValid(doc, pathRootFile);
+  }
+
+  private boolean isMetaDataValid(Document doc, String pathRootFile)
+  {
+    return true; // no custom checks
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/EpubMetaDataV3Check.java b/src/main/java/com/adobe/epubcheck/ctc/EpubMetaDataV3Check.java
new file mode 100644
index 0000000..c9d19a6
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/EpubMetaDataV3Check.java
@@ -0,0 +1,34 @@
+package com.adobe.epubcheck.ctc;
+
+import org.w3c.dom.Document;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ctc.epubpackage.EpubPackage;
+import com.adobe.epubcheck.opf.DocumentValidator;
+
+public class EpubMetaDataV3Check implements DocumentValidator
+{
+
+  private final Document doc;
+  private final String pathRootFile;
+  @SuppressWarnings("unused")
+  private final Report report;
+
+  public EpubMetaDataV3Check(EpubPackage epack, Report report)
+  {
+    this.doc = epack.getPackDoc();
+    this.pathRootFile = epack.getPackageMainFile();
+    this.report = report;
+  }
+
+  @Override
+  public boolean validate()
+  {
+    return isMetaDataValid(doc, pathRootFile);
+  }
+
+  private boolean isMetaDataValid(Document doc, String pathRootFile)
+  {
+    return true; // no custom checks
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/EpubNCXCheck.java b/src/main/java/com/adobe/epubcheck/ctc/EpubNCXCheck.java
new file mode 100644
index 0000000..a08d58e
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/EpubNCXCheck.java
@@ -0,0 +1,226 @@
+package com.adobe.epubcheck.ctc;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ctc.epubpackage.*;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.reporting.CheckingReport;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.EpubConstants;
+import com.adobe.epubcheck.util.FeatureEnum;
+import com.adobe.epubcheck.util.PathUtil;
+import org.w3c.dom.*;
+
+import java.util.HashSet;
+
+public class EpubNCXCheck implements DocumentValidator
+{
+  private final XmlDocParser docParser;
+  private final Document doc;
+  private final String pathRootFile;
+  private final Report report;
+  private final EpubPackage epack;
+  private String ncxDoc;
+
+
+  public EpubNCXCheck(EpubPackage epack, Report report)
+  {
+    this.doc = epack.getPackDoc();
+    this.report = report;
+    this.pathRootFile = epack.getPackageMainFile();
+    this.epack = epack;
+    docParser = new XmlDocParser(epack.getZip(), report);
+  }
+
+  @Override
+  public boolean validate()
+  {
+    boolean result = isNCXDefined(doc);
+    if (result)
+    {
+      String fileToParse = epack.getManifestItemFileName(ncxDoc);
+      checkNcxDoc(fileToParse);
+    }
+
+    if (!result && epack.getVersion() != EPUBVersion.VERSION_2)
+    {
+      if (report.getClass() == CheckingReport.class)
+      {
+        report.message(MessageId.NCX_003, new MessageLocation(pathRootFile, -1, -1));
+      }
+      else
+      {
+        report.info(pathRootFile, FeatureEnum.HAS_NCX, "false");
+      }
+    }
+
+    return result;
+  }
+
+  private boolean isNCXDefined(Document doc)
+  {
+    boolean isNCXdefined = false;
+    NodeList spineList = doc.getElementsByTagName("spine");
+    if (spineList.getLength() > 0)
+    {
+      for (int i = 0; i < spineList.getLength(); i++)
+      {
+        NamedNodeMap attrs = spineList.item(i).getAttributes();
+        Node n = attrs.getNamedItem("toc");
+        if (n != null)
+        {
+          String tocID = n.getNodeValue();
+          NodeList manifestList = doc.getElementsByTagName("manifest");
+          for (int m = 0; m < manifestList.getLength(); m++)
+          {
+            Node manifestNode = manifestList.item(m);
+            NodeList itemNodes = manifestNode.getChildNodes();
+
+            for (int it = 0; it < itemNodes.getLength(); it++)
+            {
+              NamedNodeMap itemNodeAttributes = itemNodes.item(it).getAttributes();
+              if (itemNodeAttributes != null)
+              {
+                String manifestNodeID = itemNodeAttributes.getNamedItem("id").getNodeValue();
+                if (manifestNodeID != null && manifestNodeID.compareToIgnoreCase(tocID) == 0 && itemNodeAttributes.getNamedItem("href").getNodeValue() != null)
+                {
+                  isNCXdefined = true;
+                  this.ncxDoc = itemNodeAttributes.getNamedItem("href").getNodeValue();
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+
+    return isNCXdefined;
+  }
+
+  private void checkNcxDoc(String navDocEntry)
+  {
+    Document doc = docParser.parseDocument(navDocEntry);
+
+    if (doc != null)
+    {
+      HashSet<String> tocLinkSet = new HashSet<String>();
+      String ncxNS = "http://www.daisy.org/z3986/2005/ncx/";
+      NodeList n = doc.getElementsByTagNameNS(ncxNS, "navPoint");
+      for (int i = 0; i < n.getLength(); i++)
+      {
+        Element navElement = (Element) n.item(i);
+        String playOrder = navElement.getAttributeNS(ncxNS, "playOrder");
+        NodeList contentNodes = navElement.getElementsByTagNameNS(ncxNS, "content");
+        if (contentNodes.getLength() > 0)
+        {
+          Element content = (Element) contentNodes.item(0);
+          String path = content.getAttributeNS(ncxNS, "src");
+          int hash = path.indexOf("#");
+          if (hash >= 0)
+          {
+            path = path.substring(0, hash);
+          }
+          try
+          {
+            path = PathUtil.resolveRelativeReference(navDocEntry, path, null);
+          }
+          catch (IllegalArgumentException ex)
+          {
+            report.message(MessageId.OPF_022, new MessageLocation(navDocEntry, getElementLineNumber(content), getElementColumnNumber(content)), path);
+          }
+          if (!path.equals(""))
+          {
+            tocLinkSet.add(path);
+            playOrder = playOrder != null ? playOrder.trim() : playOrder;
+            if (validateInt(playOrder))
+            {
+              report.info(path, FeatureEnum.NAVIGATION_ORDER, playOrder);
+            }
+          }
+        }
+      }
+      n = doc.getElementsByTagNameNS(ncxNS, "pageList");
+      if (n.getLength() > 0)
+      {
+        Element pageList = (Element) n.item(0);
+        report.message(MessageId.NCX_005, new MessageLocation(navDocEntry, getElementLineNumber(pageList), getElementColumnNumber(pageList), pageList.getTagName()));
+      }
+
+      PackageManifest manifest = epack.getManifest();
+      PackageSpine spine = epack.getSpine();
+
+      if (spine != null)
+      {
+        String tocFileName = spine.getToc();
+        for (int i = 0; i < spine.itemsLength(); ++i)
+        {
+          SpineItem si = spine.getItem(i);
+          ManifestItem mi = manifest.getItem(si.getIdref());
+          if (mi != null)
+          {
+            String path = mi.getHref();
+            path = PathUtil.resolveRelativeReference(navDocEntry, path,  null);
+
+            if (path != null && !path.equals(tocFileName) && !path.equals(navDocEntry) && !tocLinkSet.contains(path))
+            {
+              report.message(MessageId.OPF_059, new MessageLocation(navDocEntry, -1, -1, path));
+            }
+          }
+          else
+          {
+            // id not found in manifest
+            report.message(MessageId.OPF_049, new MessageLocation(navDocEntry, -1, -1, epack.getPackageMainPath()), si.getIdref());
+          }
+        }
+      }
+    }
+  }
+
+  private boolean validateInt(String number)
+  {
+    if (number == null || number.length() == 0)
+    {
+      return false;
+    }
+    try
+    {
+      Integer.parseInt(number);
+      return true;
+    }
+    catch (NumberFormatException ex)
+    {
+      return false;
+    }
+  }
+
+  public static int getElementLineNumber(Element e)
+  {
+     return getElementIntAttribute( e, EpubConstants.ElementLineNumberAttribute);
+  }
+
+  public static int getElementColumnNumber(Element e)
+  {
+    return getElementIntAttribute( e, EpubConstants.ElementColumnNumberAttribute);
+
+  }
+
+  static int getElementIntAttribute(Element e, String whichAttribute)
+  {
+    int val = -1;
+    String number = e.getAttribute(whichAttribute);
+    if (number != null)
+    {
+      try
+      {
+        val = Integer.parseInt(number.trim());
+      }
+      catch (NumberFormatException ex)
+      {
+       val = -1;
+      }
+    }
+    return val;
+  }
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/EpubNavCheck.java b/src/main/java/com/adobe/epubcheck/ctc/EpubNavCheck.java
new file mode 100644
index 0000000..545f9c8
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/EpubNavCheck.java
@@ -0,0 +1,177 @@
+package com.adobe.epubcheck.ctc;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ctc.epubpackage.*;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.util.EpubConstants;
+import com.adobe.epubcheck.util.FeatureEnum;
+import com.adobe.epubcheck.util.HandlerUtil;
+import com.adobe.epubcheck.util.PathUtil;
+import org.w3c.dom.*;
+
+import java.util.HashSet;
+import java.util.Vector;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+public class EpubNavCheck implements DocumentValidator
+{
+
+  private final XmlDocParser docParser;
+  private final Document packageMainDocument;
+  private final EpubPackage epack;
+  private final Report report;
+
+  public EpubNavCheck(EpubPackage epack, Report report)
+  {
+    ZipFile zip = epack.getZip();
+    this.packageMainDocument = epack.getPackDoc();
+    this.epack = epack;
+    docParser = new XmlDocParser(zip, report);
+    this.report = report;
+  }
+
+
+  @Override
+  public boolean validate()
+  {
+    boolean result = false;
+    Vector<String> navDocPath = getNAVDocuments(packageMainDocument);
+
+    if (navDocPath != null && navDocPath.size() > 0)
+    {
+      for (String navDoc : navDocPath)
+      {
+        if (navDoc != null)
+        {
+          String fileToParse;
+          if (epack.getPackageMainPath() != null && epack.getPackageMainPath().length() > 0)
+          {
+            fileToParse = PathUtil.resolveRelativeReference(epack.getPackageMainFile(), navDoc, null);
+          }
+          else
+          {
+            fileToParse = navDoc;
+          }
+
+          ZipEntry entry = epack.getZip().getEntry(fileToParse);
+          if (entry == null)
+          {
+            report.message(MessageId.RSC_001, new MessageLocation(epack.getFileName(), -1, -1), fileToParse);
+            continue;
+          }
+
+          checkNavDoc(fileToParse);
+        }
+      }
+    }
+
+    return result;
+  }
+
+  private Vector<String> getNAVDocuments(Document doc)
+  {
+    Vector<String> navItems = new Vector<String>();
+
+    NodeList manifestList = doc.getElementsByTagName("manifest");
+    for (int m = 0; m < manifestList.getLength(); m++)
+    {
+      Node manifestNode = manifestList.item(m);
+      NodeList itemNodes = manifestNode.getChildNodes();
+
+      for (int it = 0; it < itemNodes.getLength(); it++)
+      {
+        NamedNodeMap itemNodeAttributes = itemNodes.item(it).getAttributes();
+        if (itemNodeAttributes != null && itemNodeAttributes.getNamedItem("properties") != null)
+        {
+          String nodePropertiesAttr = itemNodeAttributes.getNamedItem("properties").getNodeValue();
+          if (nodePropertiesAttr != null && nodePropertiesAttr.compareToIgnoreCase("nav") == 0)
+          {
+            String hrefValue = null;
+            if (itemNodeAttributes.getNamedItem("href").getNodeValue() != null)
+            {
+              hrefValue = itemNodeAttributes.getNamedItem("href").getNodeValue();
+            }
+
+            navItems.add(hrefValue);
+          }
+        }
+      }
+    }
+    return navItems;
+  }
+
+  private boolean checkNavDoc(String navDocEntry)
+  {
+    HashSet<String> tocLinkSet = new HashSet<String>();
+    boolean containsNavElements = false;
+    Document doc = docParser.parseDocument(navDocEntry);
+    if (doc == null)
+    {
+      // no need to report an error here because it was already reported inside of the docParser.
+      return false;
+    }
+    NodeList n = doc.getElementsByTagName("nav");
+
+    for (int i = 0; i < n.getLength(); i++)
+    {
+      Element navElement = (Element) n.item(i);
+      String type = navElement.getAttributeNS(EpubConstants.EpubTypeNamespaceUri, "type");
+      if (type != null)
+      {
+        if(type.equals("toc"))
+        {
+          containsNavElements = true;
+          NodeList links = navElement.getElementsByTagName("a");
+          int navOrder = 1;
+          for (int j = 0; j < links.getLength(); j++)
+          {
+            Element link = (Element) links.item(j);
+            String href = link.getAttribute("href");
+            String path = href;
+            int hash = href.indexOf("#");
+            if (hash >= 0)
+            {
+              path = href.substring(0, hash);
+            }
+            path = PathUtil.resolveRelativeReference(navDocEntry, path, null);
+
+            if (!path.equals("") && !tocLinkSet.contains(path))
+            {
+              report.info(path, FeatureEnum.NAVIGATION_ORDER, String.valueOf(navOrder));
+              navOrder++;
+              tocLinkSet.add(path);
+            }
+          }
+        }
+        else if (type.equals("page-list"))
+        {
+          report.message(MessageId.NAV_002, new MessageLocation(navDocEntry, HandlerUtil.getElementLineNumber(navElement), HandlerUtil.getElementColumnNumber(navElement), "page-list"));
+        }
+      }
+    }
+
+    PackageManifest manifest = epack.getManifest();
+    PackageSpine spine = epack.getSpine();
+
+    if (spine != null)
+    {
+      String tocFileName = spine.getToc();
+      for (int i = 0; i < spine.itemsLength(); ++i)
+      {
+        SpineItem si = spine.getItem(i);
+        ManifestItem mi = manifest.getItem(si.getIdref());
+        String path = mi.getHref();
+        path = PathUtil.resolveRelativeReference(epack.getPackageMainFile(), path,  null);
+
+        if (path != null && !path.equals(tocFileName) && !path.equals(navDocEntry) && !tocLinkSet.contains(path))
+        {
+          report.message(MessageId.OPF_058, new MessageLocation(navDocEntry, -1, -1, path));
+        }
+      }
+    }
+    return containsNavElements;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/EpubRenditionCheck.java b/src/main/java/com/adobe/epubcheck/ctc/EpubRenditionCheck.java
new file mode 100644
index 0000000..33ea806
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/EpubRenditionCheck.java
@@ -0,0 +1,145 @@
+package com.adobe.epubcheck.ctc;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ctc.epubpackage.EpubPackage;
+import com.adobe.epubcheck.ctc.epubpackage.ManifestItem;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.util.FeatureEnum;
+import com.adobe.epubcheck.util.PathUtil;
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+public class EpubRenditionCheck implements DocumentValidator
+{
+  private final Document doc;
+  private final EpubPackage epack;
+  private final Report report;
+
+  public EpubRenditionCheck(EpubPackage epack, Report report)
+  {
+    this.epack = epack;
+    this.doc = epack.getPackDoc();
+    this.report = report;
+  }
+
+  @Override
+  public boolean validate()
+  {
+    return isRenditionDefined(doc);
+  }
+
+  private boolean isRenditionDefined(Document doc)
+  {
+    boolean result = false;
+    NodeList nList = doc.getElementsByTagName("metadata");
+    if (nList.getLength() > 0)
+    {
+      Node metadata = nList.item(0);
+      NodeList metaNodes = metadata.getChildNodes();
+
+      for (int i = 0; i < metaNodes.getLength(); i++)
+      {
+        if (metaNodes.item(i).getNodeName().compareToIgnoreCase("meta") == 0)
+        {
+          Node n = metaNodes.item(i);
+          String nodeValue;
+          if (n.hasChildNodes())
+          {
+            nodeValue = n.getFirstChild().getNodeValue();
+          }
+          else
+          {
+            nodeValue = n.getNodeValue();
+          }
+
+          NamedNodeMap attrs = n.getAttributes();
+          Node p = attrs.getNamedItem("property");
+          if (p != null)
+          {
+            if (p.getNodeValue().contains("rendition:layout"))
+            {
+              report.info(null, FeatureEnum.RENDITION_LAYOUT, nodeValue);
+              result = true;
+            }
+            if (p.getNodeValue().contains("rendition:orientation"))
+            {
+              report.info(null, FeatureEnum.RENDITION_ORIENTATION, nodeValue);
+              result = true;
+            }
+            if (p.getNodeValue().contains("rendition:spread"))
+            {
+              report.info(null, FeatureEnum.RENDITION_SPREAD, nodeValue);
+              result = true;
+            }
+          }
+        }
+      }
+    }
+
+    NodeList mList = doc.getElementsByTagName("spine");
+    if (mList.getLength() > 0)
+    {
+      Node manifest = mList.item(0);
+      NodeList itemNodes = manifest.getChildNodes();
+      String renditionLayout = "rendition:layout-";
+      String renditionOrientation = "rendition:orientation-";
+      String renditionSpread = "rendition:spread-";
+
+      for (int i = 0; i < itemNodes.getLength(); i++)
+      {
+        if (itemNodes.item(i).getNodeName().compareToIgnoreCase("itemref") == 0)
+        {
+          Node n = itemNodes.item(i);
+
+          String nodeValue;
+          NamedNodeMap attrs = n.getAttributes();
+          Node p = attrs.getNamedItem("properties");
+          Node idrefNode = attrs.getNamedItem("idref");
+          String idref;
+          ManifestItem manifestItem;
+          String href = "";
+          if (idrefNode != null)
+          {
+            idref = idrefNode.getNodeValue();
+            manifestItem = epack.getManifest().getItem(idref);
+            if (manifestItem != null)
+            {
+              href = epack.getManifestItemFileName(manifestItem);
+            }
+          }
+
+          if (p != null)
+          {  //<itemref idref="page001" properties="rendition:layout-pre-paginated" />
+            if (p.hasChildNodes())
+            {
+              nodeValue = p.getFirstChild().getNodeValue();
+            }
+            else
+            {
+              nodeValue = p.getNodeValue();
+            }
+
+            if (p.getNodeValue().contains(renditionLayout))
+            {
+              report.info(href, FeatureEnum.RENDITION_LAYOUT, nodeValue.substring(renditionLayout.length()));
+              result = true;
+            }
+            if (p.getNodeValue().contains(renditionOrientation))
+            {
+              report.info(href, FeatureEnum.RENDITION_ORIENTATION, nodeValue.substring(renditionOrientation.length()));
+              result = true;
+            }
+            if (p.getNodeValue().contains(renditionSpread))
+            {
+              report.info(href, FeatureEnum.RENDITION_SPREAD, nodeValue.substring(renditionSpread.length()));
+              result = true;
+            }
+          }
+        }
+      }
+    }
+    return result;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/EpubSVGCheck.java b/src/main/java/com/adobe/epubcheck/ctc/EpubSVGCheck.java
new file mode 100644
index 0000000..681b448
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/EpubSVGCheck.java
@@ -0,0 +1,144 @@
+package com.adobe.epubcheck.ctc;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ctc.epubpackage.EpubPackage;
+import com.adobe.epubcheck.ctc.epubpackage.ManifestItem;
+import com.adobe.epubcheck.ctc.epubpackage.SpineItem;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.util.SearchDictionary;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+import java.util.Hashtable;
+import java.util.zip.ZipEntry;
+
+public class EpubSVGCheck implements DocumentValidator
+{
+  private static final String svgNS = "http://www.w3.org/2000/svg";
+  private static final String xlinkNS = "http://www.w3.org/1999/xlink";
+  private final XmlDocParser docParser;
+  private final Report report;
+  private final EpubPackage epack;
+  private boolean isGlobalFixedFormat;
+
+
+  public EpubSVGCheck(EpubPackage epack, Report report)
+  {
+    this.report = report;
+    this.epack = epack;
+    docParser = new XmlDocParser(epack.getZip(), report);
+    this.isGlobalFixedFormat = EpubPackage.isGlobalFixed(epack);
+  }
+
+  @Override
+  public boolean validate()
+  {
+    SearchDictionary validTypes = new SearchDictionary(SearchDictionary.DictionaryType.SVG_MEDIA_TYPES);
+
+    boolean isGlobalFixed = EpubPackage.isGlobalFixed(this.epack);
+
+    Hashtable<String, SpineItem> spineItems = new Hashtable<String, SpineItem>();
+    for (int i = 0; i < epack.getSpine().itemsLength(); ++i)
+    {
+      SpineItem si = epack.getSpine().getItem(i);
+      spineItems.put(si.getIdref(), si);
+    }
+
+    for (int i = 0; i < epack.getManifest().itemsLength(); i++)
+    {
+      ManifestItem itemEntry = epack.getManifest().getItem(i);
+
+      if (validTypes.isValidMediaType(itemEntry.getMediaType()))
+      {
+        String fileToParse = epack.getManifestItemFileName(itemEntry);
+
+        ZipEntry entry = epack.getZip().getEntry(fileToParse);
+        if (entry == null)
+        {
+          report.message(MessageId.RSC_001, new MessageLocation(epack.getFileName(), -1, -1), fileToParse);
+          continue;
+        }
+
+        SpineItem si = spineItems.get(itemEntry.getId());
+        boolean itemIsFixedFormat = isGlobalFixed;
+        if (si != null)
+        {
+
+          String properties = si.getProperties();
+          if (properties != null)
+          {
+            if (properties.length() != 0)
+            {
+              properties = properties.replaceAll("[\\s]+", " ");
+              String propertyArray[] = properties.split(" ");
+              for (String prop : propertyArray)
+              {
+                if (prop.equals("rendition:layout-pre-paginated"))
+                {
+                  itemIsFixedFormat = true;
+                }
+                else if (prop.equals("rendition:layout-reflowable"))
+                {
+                  itemIsFixedFormat = false;
+                }
+              }
+            }
+          }
+        }
+        if (itemIsFixedFormat)
+        {
+          checkSvgDoc(fileToParse);
+        }
+      }
+    }
+    return true;
+  }
+
+  void checkSvgDoc(String svgDocEntry)
+  {
+    Document doc = docParser.parseDocument(svgDocEntry);
+    if (doc != null)
+    {
+      checkViewBox(svgDocEntry, doc);
+      checkImageXlinkHrefInline(svgDocEntry, doc);
+    }
+  }
+
+  void checkViewBox(String svgDocEntry, Document doc)
+  {
+    NodeList n = doc.getElementsByTagNameNS(svgNS, "svg");
+    for (int i = 0; i < n.getLength(); i++)
+    {
+      Element svgElement = (Element) n.item(i);
+      String viewport = svgElement.getAttributeNS(svgNS, "viewBox");
+      if (viewport == null || viewport.length() == 0)
+      {
+        report.message(MessageId.HTM_048, new MessageLocation(svgDocEntry, XmlDocParser.getElementLineNumber(svgElement), XmlDocParser.getElementColumnNumber(svgElement)));
+      }
+    }
+  }
+  void checkImageXlinkHrefInline(String svgDocEntry, Document doc)
+  {
+    NodeList n = doc.getElementsByTagNameNS(svgNS, "image");
+    for (int i = 0; i < n.getLength(); i++)
+    {
+      Element svgElement = (Element) n.item(i);
+      String href = svgElement.getAttributeNS(xlinkNS, "href");
+      if (href != null && href.length() > 0)
+      {
+        if (!href.startsWith("data:image"))
+        {
+          report.message(MessageId.MED_006, new MessageLocation(svgDocEntry, XmlDocParser.getElementLineNumber(svgElement), XmlDocParser.getElementColumnNumber(svgElement)));
+        }
+      }
+    }
+  }
+
+  public boolean isGlobalFixedFormat()
+  {
+    return isGlobalFixedFormat;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/EpubScriptCheck.java b/src/main/java/com/adobe/epubcheck/ctc/EpubScriptCheck.java
new file mode 100644
index 0000000..ec9334c
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/EpubScriptCheck.java
@@ -0,0 +1,220 @@
+package com.adobe.epubcheck.ctc;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ctc.epubpackage.EpubPackage;
+import com.adobe.epubcheck.ctc.epubpackage.ManifestItem;
+import com.adobe.epubcheck.ctc.xml.ScriptTagHandler;
+import com.adobe.epubcheck.ctc.xml.XMLContentDocParser;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.FeatureEnum;
+import com.adobe.epubcheck.util.SearchDictionary;
+import com.adobe.epubcheck.util.SearchDictionary.DictionaryType;
+
+import java.io.*;
+import java.util.regex.Matcher;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+public class EpubScriptCheck implements DocumentValidator
+{
+  private final ZipFile zip;
+  private final Report report;
+  private final EpubPackage epack;
+
+  public EpubScriptCheck(EpubPackage epack, Report report)
+  {
+    this.zip = epack.getZip();
+    this.report = report;
+    this.epack = epack;
+  }
+
+  @Override
+  public boolean validate()
+  {
+    boolean result = false;
+    SearchDictionary vtsd = new SearchDictionary(DictionaryType.VALID_TEXT_MEDIA_TYPES);
+    for (int i = 0; i < epack.getManifest().itemsLength(); i++)
+    {
+      ManifestItem mi = epack.getManifest().getItem(i);
+      if (vtsd.isValidMediaType(mi.getMediaType()))
+      {
+        XMLContentDocParser parser = new XMLContentDocParser(this.zip, report);
+        ScriptTagHandler sh = new ScriptTagHandler(this.report);
+        String fileToParse = epack.getManifestItemFileName(mi);
+        ZipEntry entry = this.zip.getEntry(fileToParse);
+        if (entry == null)
+        {
+          report.message(MessageId.RSC_001, new MessageLocation(this.epack.getFileName(), -1, -1), fileToParse);
+          continue;
+        }
+        sh.setFileName(fileToParse);
+        sh.setVersion(epack.getVersion());
+        parser.parseDoc(fileToParse, sh);
+        if (sh.getScriptElementCount() > 0 || sh.getInlineScriptCount() > 0)
+        {
+          if (sh.getInlineScriptCount() > 0)
+          {
+            report.info(fileToParse, FeatureEnum.SCRIPT, "inline");
+          }
+          if (sh.getScriptElementCount() > 0)
+          {
+            report.info(fileToParse, FeatureEnum.SCRIPT, "tag");
+          }
+          if (epack.getVersion() != EPUBVersion.VERSION_2)
+          {
+            report.message(MessageId.SCP_010, new MessageLocation(fileToParse, -1, -1));
+            if (mi.getProperties() == null || !mi.getProperties().contains("scripted"))
+            {
+              report.message(MessageId.SCP_005, new MessageLocation(fileToParse, -1, -1));
+            }
+          }
+        }
+      }
+
+      checkJavascript(mi);
+    }
+    return result;
+  }
+
+  void checkJavascript(ManifestItem mi)
+  {
+    InputStream is = null;
+    BufferedReader reader = null;
+    String mediaType = mi.getMediaType();
+    if (mediaType != null && "text/javascript".equalsIgnoreCase(mediaType))
+    {
+      String fileToParse = epack.getManifestItemFileName(mi);
+      ZipEntry entry = this.zip.getEntry(fileToParse);
+      if (entry == null)
+      {
+        report.message(MessageId.RSC_001, new MessageLocation(fileToParse, -1, -1), fileToParse);
+        return;
+      }
+      report.info(fileToParse, FeatureEnum.SCRIPT, "javascript");
+      report.info(fileToParse, FeatureEnum.HAS_SCRIPTS, "");
+
+      if (epack.getVersion() == EPUBVersion.VERSION_2)
+      {
+        report.message(MessageId.SCP_004, new MessageLocation(fileToParse, -1, -1));
+      }
+      else
+      {
+        report.message(MessageId.SCP_010, new MessageLocation(fileToParse, -1, -1));
+      }
+
+      try
+      {
+        is = zip.getInputStream(entry);
+        reader = new BufferedReader(new InputStreamReader(is));
+        int lineNumber = 0;
+        while (reader.ready())
+        {
+          String line = reader.readLine();
+          ++lineNumber;
+          CheckForInner(fileToParse, lineNumber, line);
+        }
+        reader.close();
+        is.close();
+      }
+      catch (FileNotFoundException ex)
+      {
+        report.message(MessageId.RSC_001, new MessageLocation(fileToParse, -1, -1), fileToParse);
+      }
+      catch (IOException ex)
+      {
+        report.message(MessageId.PKG_008, new MessageLocation(fileToParse, -1, -1), fileToParse);
+      }
+      finally
+      {
+        if (reader != null)
+        {
+          try
+          {
+            reader.close();
+          }
+          catch (IOException ignored)
+          {
+          }
+        }
+        if (is != null)
+        {
+          try
+          {
+            is.close();
+          }
+          catch (IOException ignored)
+          {
+          }
+        }
+      }
+    }
+  }
+
+  public void CheckForInner(String fileName, int line, String script)
+  {
+    String lower = script.toLowerCase();
+    int column = lower.indexOf("innerhtml");
+    if (column >= 0)
+    {
+      report.message(MessageId.SCP_007, new MessageLocation(fileName, line, column, trimContext(script, column)));
+    }
+
+    column = lower.indexOf("innertext");
+    if (column >= 0)
+    {
+      report.message(MessageId.SCP_008, new MessageLocation(fileName, line, column, trimContext(script, column)));
+    }
+
+    // the exact pattern is very complex and it slows down all script checking.
+    //  what we can do here is use a blunt check (for the word "eval").  if it is not found, keep moving.
+    //  If it is found, look closely using the exact pattern to see if the line truly matches the exact eval() function and report that.
+    Matcher m = null;
+    if (script.contains("eval"))
+    {
+      m = ScriptTagHandler.evalPattern.matcher(script);
+      if (m.find())
+      {
+        report.message(MessageId.SCP_001, new MessageLocation(fileName, line, m.start(0), trimContext(script, m.start())));
+      }
+    }
+
+    m = ScriptTagHandler.localStoragePattern.matcher(script);
+    if (m.find())
+    {
+      report.message(MessageId.SCP_003, new MessageLocation(fileName, line, m.start(0), trimContext(script, m.start())));
+    }
+    m = ScriptTagHandler.sessionStoragePattern.matcher(script);
+    if (m.find())
+    {
+      report.message(MessageId.SCP_003, new MessageLocation(fileName, line, m.start(0), trimContext(script, m.start())));
+    }
+    m = ScriptTagHandler.xmlHttpRequestPattern.matcher(script);
+    if (m.find())
+    {
+      report.message(MessageId.SCP_002, new MessageLocation(fileName, line, m.start(0), trimContext(script, m.start())));
+    }
+    m = ScriptTagHandler.microsoftXmlHttpRequestPattern.matcher(script);
+    if (m.find())
+    {
+      report.message(MessageId.SCP_002, new MessageLocation(fileName, line, m.start(0), trimContext(script, m.start())));
+    }
+  }
+
+  static public String trimContext(String context, int start)
+  {
+    String trimmed = context.substring(start).trim();
+    int end = trimmed.indexOf("\n");
+    if (end < 0 && trimmed.length() < 60)
+    {
+      return trimmed;
+    }
+    else
+    {
+      int newEnd = Math.min(60, (end > 0 ? end : trimmed.length()));
+      return  trimmed.substring(0, newEnd);
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/EpubSpanCheck.java b/src/main/java/com/adobe/epubcheck/ctc/EpubSpanCheck.java
new file mode 100644
index 0000000..2158cc0
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/EpubSpanCheck.java
@@ -0,0 +1,62 @@
+package com.adobe.epubcheck.ctc;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ctc.epubpackage.EpubPackage;
+import com.adobe.epubcheck.ctc.epubpackage.ManifestItem;
+import com.adobe.epubcheck.ctc.xml.SpanTagHandler;
+import com.adobe.epubcheck.ctc.xml.XMLContentDocParser;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.util.PathUtil;
+import com.adobe.epubcheck.util.SearchDictionary;
+import com.adobe.epubcheck.util.SearchDictionary.DictionaryType;
+
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+public class EpubSpanCheck implements DocumentValidator
+{
+  private final ZipFile zip;
+  private final Report report;
+  private final EpubPackage epack;
+
+  public EpubSpanCheck(EpubPackage epack, Report report)
+  {
+    this.zip = epack.getZip();
+    this.report = report;
+    this.epack = epack;
+  }
+
+  @Override
+  public boolean validate()
+  {
+    boolean result = false;
+    SearchDictionary vtsd = new SearchDictionary(DictionaryType.VALID_TEXT_MEDIA_TYPES);
+    for (int i = 0; i < epack.getManifest().itemsLength(); i++)
+    {
+      ManifestItem mi = epack.getManifest().getItem(i);
+      if (vtsd.isValidMediaType(mi.getMediaType()))
+      {
+        XMLContentDocParser parser = new XMLContentDocParser(this.zip, report);
+        SpanTagHandler sh = new SpanTagHandler();
+        String fileToParse = epack.getManifestItemFileName(mi);
+
+        ZipEntry entry = this.zip.getEntry(fileToParse);
+        if (entry == null)
+        {
+          report.message(MessageId.RSC_001, new MessageLocation(this.epack.getFileName(), -1, -1), fileToParse);
+          continue;
+        }
+
+        parser.parseDoc(fileToParse, sh);
+        sh.countNestedElements(sh.getTopElement());
+        if (sh.getGenerateMessage() > 0)
+        {
+          report.message(MessageId.HTM_022, new MessageLocation(mi.getHref(), -1, -1));
+        }
+      }
+    }
+    return result;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/EpubSpineCheck.java b/src/main/java/com/adobe/epubcheck/ctc/EpubSpineCheck.java
new file mode 100644
index 0000000..5e7d2a2
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/EpubSpineCheck.java
@@ -0,0 +1,99 @@
+package com.adobe.epubcheck.ctc;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ctc.epubpackage.EpubPackage;
+import com.adobe.epubcheck.ctc.epubpackage.MetadataElement;
+import com.adobe.epubcheck.ctc.epubpackage.SpineItem;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.util.EpubConstants;
+import com.adobe.epubcheck.util.outWriter;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+public class EpubSpineCheck implements DocumentValidator
+{
+  private static final int MAX_SPINE_ITEM_THRESHOLD = 100;
+  private final EpubPackage epubPack;
+  private final Document doc;
+  private final String pathRootFile;
+  private final Report report;
+
+  public EpubSpineCheck(EpubPackage epubPack, Report report)
+  {
+    this.epubPack = epubPack;
+    this.doc = epubPack.getPackDoc();
+    pathRootFile = epubPack.getPackageMainFile();
+    this.report = report;
+  }
+
+  public boolean validate()
+  {
+    boolean resExists = isSpineDefined(doc, pathRootFile);
+    boolean resElements = tooManySpineElements(doc, pathRootFile, MAX_SPINE_ITEM_THRESHOLD);
+
+    return (resExists && resElements);
+  }
+
+  private boolean isSpineDefined(Document doc, String pathRootFile)
+  {
+    NodeList spines = doc.getElementsByTagNameNS(EpubConstants.OpfNamespaceUri, "spine");
+    Node spine = spines.getLength() > 0 ? spines.item(0) : null;
+    if (spine == null)
+    {
+      report.message(MessageId.OPF_019, new MessageLocation(pathRootFile, -1, -1));
+      outWriter.println("Spine element not found within package root document " + pathRootFile);
+      return false;
+    }
+    return true;
+  }
+
+  private boolean tooManySpineElements(Document doc, String pathRootFile, int maxSpineElements)
+  {
+    boolean isFixedFormat = false;
+    for (SpineItem si : epubPack.getSpine().getItems())
+    {
+      String val = si.getProperties();
+      if (val != null && val.equalsIgnoreCase("rendition:layout-pre-paginated"))
+      {
+        isFixedFormat = true;
+        break;
+      }
+    }
+
+    if (!isFixedFormat)
+    {
+      for (MetadataElement e : epubPack.getMetadata().getMetaElements())
+      {
+        if (e.getName().equals("meta"))
+        {
+          String val = e.getAttribute("property");
+          {
+            if (val != null && val.equalsIgnoreCase("rendition:layout"))
+            {
+              isFixedFormat = e.getValue().equalsIgnoreCase("pre-paginated");
+              break;
+            }
+          }
+        }
+      }
+    }
+
+    if (!isFixedFormat)
+    {
+      NodeList spine = doc.getElementsByTagName("spine");
+      if (spine.getLength() > 0)
+      {
+        NodeList spineElements = spine.item(0).getChildNodes();
+        if (spineElements.getLength() > maxSpineElements)
+        {
+          report.message(MessageId.OPF_020, new MessageLocation(pathRootFile, -1, -1));
+          return false;
+        }
+      }
+    }
+    return true;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/EpubStyleSheetsCheck.java b/src/main/java/com/adobe/epubcheck/ctc/EpubStyleSheetsCheck.java
new file mode 100644
index 0000000..7292902
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/EpubStyleSheetsCheck.java
@@ -0,0 +1,59 @@
+package com.adobe.epubcheck.ctc;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ctc.epubpackage.EpubPackage;
+import com.adobe.epubcheck.ctc.epubpackage.ManifestItem;
+import com.adobe.epubcheck.ctc.xml.LinkTagHandler;
+import com.adobe.epubcheck.ctc.xml.XMLContentDocParser;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.util.PathUtil;
+import com.adobe.epubcheck.util.SearchDictionary;
+import com.adobe.epubcheck.util.SearchDictionary.DictionaryType;
+
+import java.util.zip.ZipEntry;
+
+
+public class EpubStyleSheetsCheck implements DocumentValidator
+{
+  private final Report report;
+  private final EpubPackage epack;
+
+  public EpubStyleSheetsCheck(EpubPackage epack, Report report)
+  {
+    this.epack = epack;
+    this.report = report;
+  }
+
+  public boolean validate()
+  {
+    SearchDictionary validTypes = new SearchDictionary(DictionaryType.VALID_TEXT_MEDIA_TYPES);
+
+    for (int i = 0; i < epack.getManifest().itemsLength(); i++)
+    {
+      ManifestItem mi = epack.getManifest().getItem(i);
+
+      if (validTypes.isValidMediaType(mi.getMediaType()))
+      {
+        String fileToParse = epack.getManifestItemFileName(mi);
+
+        ZipEntry entry = epack.getZip().getEntry(fileToParse);
+        if (entry == null)
+        {
+          report.message(MessageId.RSC_001, new MessageLocation(this.epack.getFileName(), -1, -1), fileToParse);
+          continue;
+        }
+
+        XMLContentDocParser parser = new XMLContentDocParser(epack.getZip(), report);
+        LinkTagHandler h = new LinkTagHandler(report);
+
+        parser.parseDoc(fileToParse, h);
+        h.checkForMultipleStyleSheets(fileToParse);
+      }
+    }
+    return true;
+  }
+}
+
+
diff --git a/src/main/java/com/adobe/epubcheck/ctc/EpubTextContentCheck.java b/src/main/java/com/adobe/epubcheck/ctc/EpubTextContentCheck.java
new file mode 100644
index 0000000..e28517e
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/EpubTextContentCheck.java
@@ -0,0 +1,52 @@
+package com.adobe.epubcheck.ctc;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ctc.epubpackage.EpubPackage;
+import com.adobe.epubcheck.ctc.epubpackage.ManifestItem;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.util.SearchDictionary;
+import com.adobe.epubcheck.util.SearchDictionary.DictionaryType;
+
+import java.util.zip.ZipEntry;
+
+public class EpubTextContentCheck implements DocumentValidator
+{
+  private final Report report;
+  private final EpubPackage epack;
+  private final EntitySearch search;
+
+  public EpubTextContentCheck(Report report, EpubPackage epack)
+  {
+    this.epack = epack;
+    this.search = new EntitySearch(epack.getVersion(), epack.getZip(), report);
+    this.report = report;
+  }
+
+  public boolean validate()
+  {
+    SearchDictionary validScriptTypes = new SearchDictionary(DictionaryType.VALID_TEXT_MEDIA_TYPES);
+
+    for (int i = 0; i < epack.getManifest().itemsLength(); i++)
+    {
+      ManifestItem itemEntry = epack.getManifest().getItem(i);
+      if (validScriptTypes.isValidMediaType(itemEntry.getMediaType()))
+      {
+        String fileToParse = epack.getManifestItemFileName(itemEntry);
+
+        ZipEntry entry = epack.getZip().getEntry(fileToParse);
+        if (entry == null)
+        {
+          report.message(MessageId.RSC_001, new MessageLocation(this.epack.getFileName(), -1, -1), fileToParse);
+          continue;
+        }
+        this.search.Search(fileToParse);
+      }
+    }
+    return true;
+  }
+
+}
+
+
diff --git a/src/main/java/com/adobe/epubcheck/ctc/EpubTocCheck.java b/src/main/java/com/adobe/epubcheck/ctc/EpubTocCheck.java
new file mode 100644
index 0000000..0f48d21
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/EpubTocCheck.java
@@ -0,0 +1,36 @@
+package com.adobe.epubcheck.ctc;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ctc.epubpackage.EpubPackage;
+import com.adobe.epubcheck.ctc.epubpackage.PackageSpine;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.util.EPUBVersion;
+
+public class EpubTocCheck implements DocumentValidator
+{
+  private final String pathRootFile;
+  private final EpubPackage epack;
+  private final Report report;
+
+  public EpubTocCheck(EpubPackage epack, Report report)
+  {
+    this.pathRootFile = epack.getPackageMainFile();
+    this.epack = epack;
+    this.report = report;
+  }
+
+  @Override
+  public boolean validate()
+  {
+    boolean result = true;
+    PackageSpine spine = epack.getSpine();
+    if (spine == null || (spine.getToc() == null && epack.getVersion() == EPUBVersion.VERSION_2))
+    {
+      report.message(MessageId.NCX_002, new MessageLocation(pathRootFile, -1, -1));
+      result = false;
+    }
+    return result;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/PackageReader.java b/src/main/java/com/adobe/epubcheck/ctc/PackageReader.java
new file mode 100644
index 0000000..4e0ffdd
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/PackageReader.java
@@ -0,0 +1,321 @@
+package com.adobe.epubcheck.ctc;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ctc.epubpackage.*;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.EpubConstants;
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import java.util.Vector;
+import java.util.zip.ZipFile;
+
+class PackageReader
+{
+  private static final String containerEntry = "META-INF/container.xml";
+  private ZipFile zip;
+  private Report report;
+  private String version;
+  private EpubPackage epack;
+  private String mainPackageFile;
+
+  public PackageReader(ZipFile zip, Report report)
+  {
+    this.zip = zip;
+    this.report = report;
+  }
+
+  public EpubPackage readPackageData()
+  {
+    Vector<String> pathToRootFile = getPathToRootFile();
+
+    XmlDocParser p = new XmlDocParser(zip, report);
+    for (String path : pathToRootFile)
+    {
+      setMainPackageFile(path);
+      Document doc = p.parseDocument(path);
+      if (doc != null)
+      {
+        epack = new EpubPackage(path, zip, doc);
+        epack.setPackageMainFile(getMainPackageFile());
+        epack.setVersion(getEpubVersion(doc));
+        getMetadata(doc, epack);
+        getManifest(doc, epack);
+        getSpine(doc, epack);
+      }
+    }
+    return epack;
+  }
+
+  String getMainPackageFile()
+  {
+    return mainPackageFile;
+  }
+
+  void setMainPackageFile(String mainPackageFile)
+  {
+    this.mainPackageFile = mainPackageFile;
+  }
+
+  private Vector<String> getPathToRootFile()
+  {
+    Vector<String> rootFiles = new Vector<String>();
+
+    XmlDocParser p = new XmlDocParser(zip, report);
+    Document doc = p.parseDocument(containerEntry);
+    if (doc != null)
+    {
+      NodeList nList = doc.getElementsByTagName("rootfiles");
+
+      for (int i = 0; i < nList.getLength(); i++)
+      {
+        Node n = nList.item(i);
+        if (n.getNodeName().compareToIgnoreCase("rootfiles") == 0)
+        {
+          NodeList cn = n.getChildNodes();
+          for (int j = 0; j < cn.getLength(); j++)
+          {
+            Node currentNode = cn.item(j);
+            if (currentNode.getNodeName().compareToIgnoreCase("rootfile") == 0)
+            {
+              NamedNodeMap attr = currentNode.getAttributes();
+              Node path = attr.getNamedItem("full-path");
+              if (path != null)
+              {
+                String nodeValue = path.getNodeValue();
+                rootFiles.add(nodeValue);
+              }
+            }
+          }
+        }
+      }
+    }
+    return rootFiles;
+  }
+
+  private void getMetadata(Document doc, EpubPackage epack)
+  {
+    NodeList nList = doc.getElementsByTagNameNS(EpubConstants.OpfNamespaceUri, "metadata");
+    if (nList.getLength() > 0)
+    {
+      Node metadata = nList.item(0);
+      NodeList metaNodes = metadata.getChildNodes();
+
+      for (int i = 0; i < metaNodes.getLength(); i++)
+      {
+        String nodeName = metaNodes.item(i).getLocalName();
+        if (nodeName != null && !nodeName.startsWith("#"))
+        {
+          MetadataElement meta = new MetadataElement();
+
+          Node n = metaNodes.item(i);
+          meta.setName(n.getNodeName());
+
+          if (n.hasChildNodes())
+          {
+            //outWriter.println("Dodaje element o nazwie "+metaNodes.item(i).getNodeName()+" z wartoscia "+n.getFirstChild().getNodeValue());
+            meta.setValue(n.getFirstChild().getNodeValue());
+          }
+          else
+          {
+            //outWriter.println("Dodaje element o nazwie "+metaNodes.item(i).getNodeName()+" z wartoscia "+n.getNodeValue());
+            meta.setValue(n.getNodeValue());
+          }
+
+          NamedNodeMap attrs = metaNodes.item(i).getAttributes();
+          for (int a = 0; a < attrs.getLength(); a++)
+          {
+            //outWriter.println("	Dodaje attrybut "+attrs.item(a).getNodeName()+" z wartoscia "+attrs.item(a).getNodeValue());
+            if (attrs.item(a).getNodeName().compareToIgnoreCase("elementLineNumber") != 0 && attrs.item(a).getNodeName().compareToIgnoreCase("elementColumnNumber") != 0)
+            {
+              meta.addAttribute(attrs.item(a).getNodeName(), attrs.item(a).getNodeValue());
+            }
+          }
+          epack.getMetadata().addMetaElement(meta);
+        }
+      }
+    }
+  }
+
+  private void getManifest(Document doc, EpubPackage epack)
+  {
+    NodeList nList = doc.getElementsByTagNameNS(EpubConstants.OpfNamespaceUri, "manifest");
+
+    for (int i = 0; i < nList.getLength(); i++)
+    {
+      Node n = nList.item(i);
+      String ln = n.getLocalName();
+      if (ln.compareToIgnoreCase("manifest") == 0)
+      {
+        PackageManifest manifest = new PackageManifest();
+        epack.setManifest(manifest);
+        NodeList cn = n.getChildNodes();
+        for (int j = 0; j < cn.getLength(); j++)
+        {
+          Node currentNode = cn.item(j);
+          String childName = currentNode.getLocalName();
+          if (childName != null && childName.compareToIgnoreCase("item") == 0)
+          {
+            ManifestItem item = new ManifestItem();
+            NamedNodeMap attr = currentNode.getAttributes();
+
+            Node hrefNode = attr.getNamedItem("href");
+            String hrefValue;
+            if (hrefNode != null)
+            {
+              hrefValue = hrefNode.getNodeValue();
+              item.setHref(hrefValue);
+            }
+
+            Node mediaTypeNode = attr.getNamedItem("media-type");
+            String mediaTypeValue;
+
+            if (mediaTypeNode != null)
+            {
+              mediaTypeValue = mediaTypeNode.getNodeValue();
+              item.setMediaType(mediaTypeValue);
+            }
+
+            Node propertiesNode = attr.getNamedItem("properties");
+            String propertiesValue;
+
+            if (propertiesNode != null)
+            {
+              propertiesValue = propertiesNode.getNodeValue();
+              item.setProperties(propertiesValue);
+            }
+
+            Node idNode = attr.getNamedItem("id");
+            String idValue;
+
+            if (idNode != null)
+            {
+              idValue = idNode.getNodeValue();
+              item.setId(idValue);
+            }
+
+            manifest.addItem(item);
+          }
+        }
+      }
+    }
+  }
+
+  private void getSpine(Document doc, EpubPackage epack)
+  {
+    NodeList nList = doc.getElementsByTagNameNS(EpubConstants.OpfNamespaceUri, "spine");
+
+    for (int i = 0; i < nList.getLength(); i++)
+    {
+      Node n = nList.item(i);
+      String ln = n.getLocalName();
+      if (ln.compareToIgnoreCase("spine") == 0)
+      {
+        PackageSpine spine = new PackageSpine();
+        epack.setSpine(spine);
+        NamedNodeMap spineAttrs = n.getAttributes();
+
+        Node idNode = spineAttrs.getNamedItem("id");
+        if (idNode != null)
+        {
+          spine.setId(idNode.getNodeValue());
+        }
+
+        Node tocNode = spineAttrs.getNamedItem("toc");
+        if (tocNode != null)
+        {
+          spine.setToc(tocNode.getNodeValue());
+        }
+
+        Node pageProgressionDirectionNode = spineAttrs.getNamedItem("page-progression-direction");
+        if (pageProgressionDirectionNode != null)
+        {
+          spine.setPageProgressionDirection(pageProgressionDirectionNode.getNodeValue());
+        }
+
+        NodeList cn = n.getChildNodes();
+        for (int j = 0; j < cn.getLength(); j++)
+        {
+          Node currentNode = cn.item(j);
+          String itemRefName = currentNode.getLocalName();
+          if (itemRefName != null && "itemref".compareToIgnoreCase(itemRefName) == 0)
+          {
+            SpineItem item = new SpineItem();
+            NamedNodeMap attr = currentNode.getAttributes();
+
+            Node idrefNode = attr.getNamedItem("idref");
+            if (idrefNode != null)
+            {
+              String idRef = idrefNode.getNodeValue();
+              if (idRef != null && idRef.length() > 0)
+              {
+                item.setIdref(idrefNode.getNodeValue());
+              }
+              else
+              {
+                continue;
+              }
+            }
+
+            Node idSpineNode = attr.getNamedItem("id");
+            if (idSpineNode != null)
+            {
+              item.setId(idSpineNode.getNodeValue());
+            }
+
+            Node linearNode = attr.getNamedItem("linear");
+            if (linearNode != null)
+            {
+              item.setLinear(linearNode.getNodeValue());
+            }
+
+            Node propertiesNode = attr.getNamedItem("properties");
+            if (propertiesNode != null)
+            {
+              item.setProperties(propertiesNode.getNodeValue());
+            }
+            spine.addItem(item);
+          }
+        }
+      }
+    }
+  }
+
+  private EPUBVersion getEpubVersion(Document doc)
+  {
+    NodeList packageNode = doc.getElementsByTagNameNS(EpubConstants.OpfNamespaceUri, "package");
+    if (packageNode == null)
+    {
+      return EPUBVersion.Unknown;
+    }
+
+    Node firstItem = packageNode.item(0);
+    if (firstItem == null)
+    {
+      return EPUBVersion.Unknown;
+    }
+
+    NamedNodeMap packageNodeAttr = firstItem.getAttributes();
+    if (packageNodeAttr == null)
+    {
+      return EPUBVersion.Unknown;
+    }
+
+    Node node = packageNodeAttr.getNamedItem("version");
+    if (node != null)
+    {
+      version = node.getNodeValue();
+    }
+    if (version != null && version.startsWith("3"))
+    {
+      return EPUBVersion.VERSION_3;
+    }
+    else if (version != null && version.startsWith("2"))
+    {
+      return EPUBVersion.VERSION_2;
+    }
+    return EPUBVersion.Unknown;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/XmlDocParser.java b/src/main/java/com/adobe/epubcheck/ctc/XmlDocParser.java
new file mode 100644
index 0000000..683d3e8
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/XmlDocParser.java
@@ -0,0 +1,247 @@
+package com.adobe.epubcheck.ctc;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.ocf.EncryptionFilter;
+import com.adobe.epubcheck.util.EpubConstants;
+import com.adobe.epubcheck.util.NamespaceHelper;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import javax.xml.parsers.*;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Hashtable;
+import java.util.Stack;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+class XmlDocParser
+{
+  private final ZipFile zip;
+  private final Hashtable<String, EncryptionFilter> enc;
+  private final Report report;
+
+  public XmlDocParser(ZipFile zip, Report report)
+  {
+    this.zip = zip;
+    this.enc = new Hashtable<String, EncryptionFilter>();
+    this.report = report;
+
+  }
+
+  public Document parseDocument(String fileEntry)
+  {
+    Document doc = null;
+    InputStream is = null;
+
+    try
+    {
+      is = getInputStream(fileEntry);
+      if (is == null)
+      {
+        String fileName = new File(zip.getName()).getName();
+        report.message(MessageId.RSC_001, new MessageLocation(fileName, -1, -1), fileEntry);
+      }
+      else
+      {
+        doc = readXML(report, fileEntry, is, EpubConstants.ElementLineNumberAttribute, EpubConstants.ElementColumnNumberAttribute);
+      }
+    }
+    catch (IOException e)
+    {
+      report.message(MessageId.PKG_008, new MessageLocation(fileEntry, -1, -1), fileEntry);
+    }
+    catch (SAXException e)
+    {
+      report.message(MessageId.RSC_005, new MessageLocation(fileEntry, -1, -1), e.getMessage());
+      doc = null;
+    }
+    finally
+    {
+      if (is != null)
+      {
+        try
+        {
+          is.close();
+        }
+        catch (Exception ignore)
+        {
+        }
+      }
+    }
+
+    return doc;
+  }
+
+  InputStream getInputStream(String name) throws
+      IOException
+  {
+    ZipEntry entry = zip.getEntry(name);
+    if (entry == null)
+    {
+      return null;
+    }
+    InputStream in = zip.getInputStream(entry);
+    EncryptionFilter filter = enc.get(name);
+    if (filter == null)
+    {
+      return in;
+    }
+    if (filter.canDecrypt())
+    {
+      return filter.decrypt(in);
+    }
+    return null;
+  }
+
+  private Document readXML(Report report, String fileEntry, InputStream is, final String lineNumAttribName, final String columnNumAttribName) throws
+      IOException,
+      SAXException
+  {
+    final Document doc;
+    SAXParser parser;
+    try
+    {
+      SAXParserFactory factory = SAXParserFactory.newInstance();
+      factory.setFeature("http://xml.org/sax/features/namespaces", true); //default false
+      factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);//default true
+      parser = factory.newSAXParser();
+      //tell parser about the lexical handler
+      DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
+      DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
+      doc = docBuilder.newDocument();
+    }
+    catch (ParserConfigurationException e)
+    {
+      throw new RuntimeException("Can't create SAX parser / DOM builder.", e);
+    }
+
+    MyHandler handler = new MyHandler(doc, report, fileEntry, lineNumAttribName, columnNumAttribName);
+    parser.parse(is, handler);
+    return doc;
+  }
+
+  static public int getElementLineNumber(Element element)
+  {
+    return getElementAttributeAsInt(element, EpubConstants.ElementLineNumberAttribute);
+  }
+
+  static public int getElementColumnNumber(Element element)
+  {
+    return getElementAttributeAsInt(element, EpubConstants.ElementColumnNumberAttribute);
+  }
+
+  static int getElementAttributeAsInt(Element whichElement, String whichAttribute)
+  {
+    int result = -1;
+    String attr = whichElement.getAttribute(whichAttribute);
+    if (attr != null && attr.length() > 0)
+    {
+      result = Integer.parseInt(attr);
+    }
+    return result;
+  }
+
+  class MyHandler extends DefaultHandler
+  {
+    private Locator locator;
+    private final NamespaceHelper namespaceHelper = new NamespaceHelper();
+    private Report report;
+    private String fileName;
+    private Document doc;
+    private String lineNumAttribName;
+    private String columnNumAttribName;
+    final Stack<Element> elementStack = new Stack<Element>();
+    final StringBuilder textBuffer = new StringBuilder();
+
+    public MyHandler(Document doc, Report report, String fileName, String lineNumAttribName, String columnNumAttribName)
+    {
+      this.doc = doc;
+      this.report = report;
+      this.fileName = fileName;
+      this.lineNumAttribName = lineNumAttribName;
+      this.columnNumAttribName = columnNumAttribName;
+    }
+    @Override
+    public void setDocumentLocator(Locator locator)
+    {
+      this.locator = locator; //Save the locator, so that it can be used later for line tracking when traversing nodes.
+    }
+    public void setReport(Report report)
+    {
+      this.report = report;
+    }
+
+    @Override
+    public void startPrefixMapping (String prefix, String uri) throws SAXException
+    {
+      namespaceHelper.declareNamespace(prefix, uri, new MessageLocation(fileName, locator.getLineNumber(), locator.getColumnNumber(), prefix), report);
+    }
+
+    @Override
+    public void startElement(String uri, String localName, String qName, Attributes attributes) throws
+        SAXException
+    {
+      namespaceHelper.onStartElement(fileName, locator, uri, qName, attributes, report);
+      addTextIfNeeded();
+      Element el = doc.createElementNS(uri, qName);
+      for (int i = 0; i < attributes.getLength(); i++)
+      {
+        String attributeURI = attributes.getURI(i);
+        if (attributeURI == null || attributeURI.equals(""))
+        {
+          attributeURI = uri;
+        }
+        el.setAttributeNS(attributeURI, attributes.getQName(i), attributes.getValue(i));
+      }
+      el.setAttribute(lineNumAttribName, String.valueOf(locator.getLineNumber()));
+      el.setAttribute(columnNumAttribName, String.valueOf(locator.getColumnNumber()));
+      elementStack.push(el);
+    }
+
+    @Override
+    public void endElement(String uri, String localName, String qName)
+    {
+      addTextIfNeeded();
+      Element closedEl = elementStack.pop();
+      if (elementStack.isEmpty())
+      { // Is this the root element?
+        doc.appendChild(closedEl);
+      }
+      else
+      {
+        Element parentEl = elementStack.peek();
+        parentEl.appendChild(closedEl);
+      }
+      namespaceHelper.onEndElement(report);
+    }
+
+    @Override
+    public void characters(char ch[], int start, int length) throws
+        SAXException
+    {
+      textBuffer.append(ch, start, length);
+    }
+
+    // Outputs text accumulated under the current node
+    private void addTextIfNeeded()
+    {
+      if (textBuffer.length() > 0)
+      {
+        Element el = elementStack.peek();
+        Node textNode = doc.createTextNode(textBuffer.toString());
+        el.appendChild(textNode);
+        textBuffer.delete(0, textBuffer.length());
+      }
+    }
+  };
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/css/CSSSelector.java b/src/main/java/com/adobe/epubcheck/ctc/css/CSSSelector.java
new file mode 100644
index 0000000..d2e796e
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/css/CSSSelector.java
@@ -0,0 +1,45 @@
+package com.adobe.epubcheck.ctc.css;
+
+import javax.xml.stream.Location;
+import java.util.HashMap;
+
+public class CSSSelector
+{
+  private final String name;
+  private final Location location;
+  private final boolean isClass;
+  private final HashMap<String, CSSSelectorAttribute> attributes = new HashMap<String, CSSSelectorAttribute>();
+
+  public CSSSelector(String name, Location location, boolean isClass)
+  {
+    this.name = name;
+    this.location = location;
+    this.isClass = isClass;
+  }
+
+  public String getName()
+  {
+    return name;
+  }
+
+  public boolean isClass()
+  {
+    return isClass;
+  }
+
+
+  public Location getLocation()
+  {
+    return location;
+  }
+
+  public HashMap<String, CSSSelectorAttribute> getAttributes()
+  {
+    return attributes;
+  }
+
+  public void addAttribute(CSSSelectorAttribute attribute)
+  {
+    attributes.put(attribute.getName(), attribute);
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/css/CSSSelectorAttribute.java b/src/main/java/com/adobe/epubcheck/ctc/css/CSSSelectorAttribute.java
new file mode 100644
index 0000000..02cd583
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/css/CSSSelectorAttribute.java
@@ -0,0 +1,37 @@
+package com.adobe.epubcheck.ctc.css;
+
+class CSSSelectorAttribute
+{
+  private final String name;
+  private final String value;
+  private final boolean isImportant;
+  private final CSSSelector originatingSelector;
+
+  public CSSSelectorAttribute(String name, String value, boolean isImportant, CSSSelector originatingSelector)
+  {
+    this.name = name;
+    this.value = value;
+    this.isImportant = isImportant;
+    this.originatingSelector = originatingSelector;
+  }
+
+  public String getName()
+  {
+    return name;
+  }
+
+  public String getValue()
+  {
+    return value;
+  }
+
+  public boolean isImportant()
+  {
+    return isImportant;
+  }
+
+  public CSSSelector getOriginatingSelector()
+  {
+    return originatingSelector;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/css/CSSSelectorCollection.java b/src/main/java/com/adobe/epubcheck/ctc/css/CSSSelectorCollection.java
new file mode 100644
index 0000000..2febd50
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/css/CSSSelectorCollection.java
@@ -0,0 +1,38 @@
+package com.adobe.epubcheck.ctc.css;
+
+import javax.xml.stream.Location;
+import java.util.HashMap;
+
+public class CSSSelectorCollection
+{
+  private final String name;
+  private final int scopeId;
+  private final Location location;
+  private final HashMap<String, CSSSelector> selectors = new HashMap<String, CSSSelector>();
+
+  public CSSSelectorCollection(String name, Location location, int scopeId)
+  {
+    this.name = name;
+    this.location = location;
+    this.scopeId = scopeId;
+  }
+
+  public HashMap<String, CSSSelector> getSelectors()
+  {
+    return selectors;
+  }
+
+  public void addSelector(CSSSelector selector)
+  {
+    CSSSelector existing = selectors.get(selector.getName());
+    if (existing != null)
+    {
+      for (CSSSelectorAttribute attribute : selector.getAttributes().values())
+      {
+        existing.addAttribute(attribute);
+      }
+      selector = existing;
+    }
+    selectors.put(selector.getName(), selector);
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/css/EpubCSSCheckCSSHandler.java b/src/main/java/com/adobe/epubcheck/ctc/css/EpubCSSCheckCSSHandler.java
new file mode 100644
index 0000000..3260254
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/css/EpubCSSCheckCSSHandler.java
@@ -0,0 +1,879 @@
+package com.adobe.epubcheck.ctc.css;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Queue;
+import java.util.Vector;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.xml.stream.Location;
+
+import org.idpf.epubcheck.util.css.CssContentHandler;
+import org.idpf.epubcheck.util.css.CssErrorHandler;
+import org.idpf.epubcheck.util.css.CssExceptions;
+import org.idpf.epubcheck.util.css.CssGrammar;
+import org.idpf.epubcheck.util.css.CssLocation;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.util.LocationImpl;
+import com.adobe.epubcheck.util.TextSearchDictionaryEntry;
+import com.google.common.base.Optional;
+
+public class EpubCSSCheckCSSHandler implements CssContentHandler, CssErrorHandler
+{
+  String path;
+  Report report;
+  boolean isGlobalFixedFormat;
+  boolean hasIndividualFixedFormatDocuments;
+  int scopeId;
+  boolean isBody;
+  boolean inKeyFrames;
+  CSSSelectorCollection currentFileSelectorCollection;
+  CSSSelectorCollection inProgressSelectorCollection;
+  final Vector<TextSearchDictionaryEntry> declarationComponentItems = new Vector<TextSearchDictionaryEntry>();
+  final Vector<TextSearchDictionaryEntry> functionComponentItems = new Vector<TextSearchDictionaryEntry>();
+  final Vector<TextSearchDictionaryEntry> atRuleComponentItems = new Vector<TextSearchDictionaryEntry>();
+  int startingLineNumber;
+  int startingColumnNumber;
+  boolean inFontFace;
+  boolean hasFontFaceDeclarations;
+  CssGrammar.CssAtRule atRule;
+
+  public HashMap<String, ClassUsage> getClassMap()
+  {
+    return classMap;
+  }
+
+  public boolean IncrementGlobalCssClassCount(String attrValue)
+  {
+
+    ClassUsage val = getClassMap().get(attrValue);
+    if (val != null)
+    {
+      ++val.Count;
+      return true;
+    }
+    return false;
+  }
+
+  public void CheckUnusedCSSClassSelectors(Report report)
+  {
+    HashMap<String, ClassUsage> map = getClassMap();
+    for (ClassUsage cu : map.values())
+    {
+      if (cu.Count == 0)
+      {
+        assert (cu.Name != null && !cu.Name.isEmpty());
+        report.message(MessageId.CSS_024, getCorrectedMessageLocation(cu.FileName, cu.Location.getLineNumber(), cu.Location.getColumnNumber(), cu.Name));
+      }
+    }
+  }
+
+  int correctedLineNumber(int lineNumber)
+  {
+    return startingLineNumber + lineNumber;
+  }
+
+  int correctedColumnNumber(int lineNumber, int columnNumber)
+  {
+    if (lineNumber != 0)
+    {
+      return columnNumber;
+    }
+    return startingColumnNumber + columnNumber;
+  }
+
+  public class ClassUsage
+  {
+    public String Name;
+    public Location Location;
+    public String FileName;
+    public int Count;
+  }
+
+  HashMap<String, ClassUsage> classMap = new HashMap<String, ClassUsage>();
+
+  public EpubCSSCheckCSSHandler(Report report, boolean isGlobalFixedFormat, boolean hasIndividualFixedFormatDocuments)
+  {
+    startingLineNumber = 0;
+    startingColumnNumber = 0;
+    this.isGlobalFixedFormat = isGlobalFixedFormat;
+    this.hasIndividualFixedFormatDocuments = hasIndividualFixedFormatDocuments;
+    setReport(report);
+    setScopeId(0);
+    buildCssSearchDictionaries();
+  }
+
+  public EpubCSSCheckCSSHandler(Report report, int startingLineNumber, int startingColumnNumber, boolean isGlobalFixedFormat, boolean hasIndividualFixedFormatDocuments)
+  {
+    this.startingLineNumber = startingLineNumber - 1;   // To get the right final Line number need to be added using 0 based starting point instead of 1 based.
+    this.startingColumnNumber = startingColumnNumber;
+    this.isGlobalFixedFormat = isGlobalFixedFormat;
+    this.hasIndividualFixedFormatDocuments = hasIndividualFixedFormatDocuments;
+    setReport(report);
+    setScopeId(0);
+    buildCssSearchDictionaries();
+  }
+
+  public String getPath()
+  {
+    return path;
+  }
+
+  public void setPath(String path)
+  {
+    this.path = path;
+  }
+
+  Report getReport()
+  {
+    return report;
+  }
+
+  void setReport(Report report)
+  {
+    this.report = report;
+  }
+
+  void setScopeId(int scopeId)
+  {
+    this.scopeId = scopeId;
+  }
+
+  void buildCssSearchDictionaries()
+  {
+    String description;
+    String value;
+    TextSearchDictionaryEntry de;
+
+    //search eval() expression
+    description = "rotateX()";
+    value = "rotatex";
+    de = new TextSearchDictionaryEntry(description, value, MessageId.CSS_009);
+    functionComponentItems.add(de);
+
+    description = "rotateY()";
+    value = "rotatey";
+    de = new TextSearchDictionaryEntry(description, value, MessageId.CSS_009);
+    functionComponentItems.add(de);
+
+    description = "columns";
+    value = "columns";
+    de = new TextSearchDictionaryEntry(description, value, MessageId.CSS_009);
+    declarationComponentItems.add(de);
+
+    description = "column-count";
+    value = "column-count";
+    de = new TextSearchDictionaryEntry(description, value, MessageId.CSS_009);
+    declarationComponentItems.add(de);
+
+    description = "column-gap";
+    value = "column-gap";
+    de = new TextSearchDictionaryEntry(description, value, MessageId.CSS_009);
+    declarationComponentItems.add(de);
+
+    description = "column-rule";
+    value = "column-rule";
+    de = new TextSearchDictionaryEntry(description, value, MessageId.CSS_009);
+    declarationComponentItems.add(de);
+
+    description = "keyframes";
+    value = "keyframes";
+    de = new TextSearchDictionaryEntry(description, value, MessageId.CSS_009);
+    atRuleComponentItems.add(de);
+
+    description = "transition";
+    value = "transition";
+    de = new TextSearchDictionaryEntry(description, value, MessageId.CSS_009);
+    declarationComponentItems.add(de);
+
+    description = "box-sizing";
+    value = "box-sizing";
+    de = new TextSearchDictionaryEntry(description, value, MessageId.CSS_009);
+    declarationComponentItems.add(de);
+  }
+
+  @Override
+  public void startDocument()
+  {
+    currentFileSelectorCollection = new CSSSelectorCollection(path, new LocationImpl(-1, -1, -1, path, path), scopeId);
+  }
+
+  @Override
+  public void endDocument()
+  {
+    currentFileSelectorCollection = null;
+    ++scopeId;
+  }
+
+  static final Pattern keyframesPattern = Pattern.compile("@((keyframes)|(-moz-keyframes)|(-webkit-keyframes)|(-o-keyframes))");
+
+  @Override
+  public void startAtRule(CssGrammar.CssAtRule atRule)
+  {
+    this.atRule = atRule;
+    if (atRule.getName() != Optional.<String>absent())
+    {
+      String ruleName = atRule.getName().get().toLowerCase();
+      CssLocation location = atRule.getLocation();
+      if (ruleName.startsWith("@media"))
+      {
+        getReport().message(MessageId.CSS_023, getCorrectedMessageLocation(path, location.getLine(), location.getColumn(), atRule.toCssString()));
+      }
+      else if (keyframesPattern.matcher(ruleName).matches())
+      {
+        inKeyFrames=true;
+      }
+      else if (ruleName.equals("@font-face"))
+      {
+        inFontFace = true;
+      }
+      searchInsideValue(ruleName, atRule.getLocation().getLine(), location.getColumn(), atRuleComponentItems, path, atRule.toCssString());
+    }
+  }
+
+  MessageLocation getCorrectedMessageLocation(String fileName, int lineNumber, int columnNumber, String context)
+  {
+    lineNumber = correctedLineNumber(lineNumber);
+    columnNumber = correctedColumnNumber(lineNumber, columnNumber);
+    return new MessageLocation(fileName, lineNumber, columnNumber, context);
+  }
+
+  @Override
+  public void endAtRule(String ruleName)
+  {
+    if (ruleName.equals("@font-face"))
+    {
+      if (!hasFontFaceDeclarations)
+      {
+        getReport().message(MessageId.CSS_019, getCorrectedMessageLocation(path, atRule.getLocation().getLine(), atRule.getLocation().getColumn(), atRule.toCssString()), atRule.toCssString());
+      }
+    }
+    inKeyFrames = false;
+    inFontFace = false;
+    hasFontFaceDeclarations=false;
+    atRule = null;
+  }
+
+  @Override
+  public void selectors(List<CssGrammar.CssSelector> selectors)
+  {
+    inProgressSelectorCollection = new CSSSelectorCollection(path, getCorrectedLocationFromCssLocation(selectors.get(0).getLocation()), scopeId);
+    Queue<CssGrammar.CssConstruct> selectorQueue = new LinkedList<CssGrammar.CssConstruct>();
+
+    isBody = getIsBody(selectors, selectorQueue);
+
+    while (!selectorQueue.isEmpty())
+    {
+      CssGrammar.CssConstruct construct = selectorQueue.remove();
+      CssGrammar.CssConstruct.Type type = construct.getType();
+      switch (type)
+      {
+        case CLASSNAME:
+        {//.ident
+          CssGrammar.CssClassName className = ((CssGrammar.CssClassName) construct);
+          Location location = getCorrectedLocationFromCssLocation(className.getLocation());
+          CSSSelector newSelector = new CSSSelector(className.toCssString(), location, true);
+          inProgressSelectorCollection.addSelector(newSelector);
+          addClassSelector(newSelector, path, location);
+          break;
+        }
+
+        case STRING:
+        case KEYWORD:
+        case COMBINATOR:         //space, plus, gt, tilde
+          break;
+        case ATTRIBUTE_MATCH:       // "~=", "|=", "^=","$=" "*="
+        {
+          CssGrammar.CssAttributeMatchSelector attributeMatchSelector = ((CssGrammar.CssAttributeMatchSelector) construct);
+          Location location = getCorrectedLocationFromCssLocation(attributeMatchSelector.getLocation());
+          CSSSelector newSelector = new CSSSelector(attributeMatchSelector.toCssString(), location, false);
+          inProgressSelectorCollection.addSelector(newSelector);
+          break;
+        }
+        case HASHNAME:          //#ident
+        {//.ident
+          CssGrammar.CssHashName hashName = ((CssGrammar.CssHashName) construct);
+          Location location = getCorrectedLocationFromCssLocation(hashName.getLocation());
+          CSSSelector newSelector = new CSSSelector(hashName.toCssString(), location, false);
+          inProgressSelectorCollection.addSelector(newSelector);
+          break;
+        }
+        case ATRULE:
+        case QUANTITY:
+        case URANGE:
+        case URI:
+        case SYMBOL:            //a single char, eg operators
+        case FUNCTION:
+        case DECLARATION:
+          break;
+        case PSEUDO:            //element and class
+        {
+          CssGrammar.CssPseudoSelector psuedoSelector = ((CssGrammar.CssPseudoSelector) construct);
+          Location location = getCorrectedLocationFromCssLocation(psuedoSelector.getLocation());
+          CSSSelector newSelector = new CSSSelector(psuedoSelector.toCssString(), location, false);
+          inProgressSelectorCollection.addSelector(newSelector);
+          break;
+        }
+        case TYPE_SELECTOR:        //ns|E, *|E, |E, E, *
+        {
+          CssGrammar.CssTypeSelector typeSelector = ((CssGrammar.CssTypeSelector) construct);
+          Location location = getCorrectedLocationFromCssLocation(typeSelector.getLocation());
+          CSSSelector newSelector = new CSSSelector(typeSelector.toCssString(), location, false);
+          inProgressSelectorCollection.addSelector(newSelector);
+          break;
+        }
+        case SELECTOR:
+        {
+          CssGrammar.CssSelector selector = ((CssGrammar.CssSelector) construct);
+          for (CssGrammar.CssConstruct c : selector.getComponents())
+          {
+            selectorQueue.add(c);
+          }
+          break;
+        }
+        case SIMPLE_SELECTOR_SEQ:
+        {
+          CssGrammar.CssSimpleSelectorSequence sequence = ((CssGrammar.CssSimpleSelectorSequence) construct);
+          for (CssGrammar.CssConstruct c : sequence.getComponents())
+          {
+            selectorQueue.add(c);
+          }
+          break;
+        }
+        case ATTRIBUTE_SELECTOR:      //[...]
+        {
+          CssGrammar.CssAttributeSelector attributeSelector = ((CssGrammar.CssAttributeSelector) construct);
+          Location location = getCorrectedLocationFromCssLocation(attributeSelector.getLocation());
+          CSSSelector newSelector = new CSSSelector(attributeSelector.toCssString(), location, false);
+          inProgressSelectorCollection.addSelector(newSelector);
+          break;
+        }
+        case SCOPEDGROUP:        //(...) and [...], the latter when not an attr selector segment
+          break;
+      }
+    }
+  }
+
+  static boolean getIsBody(List<CssGrammar.CssSelector> selectors, Queue<CssGrammar.CssConstruct> selectorQueue)
+  {
+    boolean isBody = false;
+    for (CssGrammar.CssSelector selector : selectors)
+    {
+      selectorQueue.add(selector);
+      if (!isBody)
+      {
+        String selectorName = selector.toCssString();
+        if ("body".equalsIgnoreCase(selectorName))
+        {
+          isBody = true;
+        }
+      }
+    }
+    return isBody;
+  }
+
+  void addClassSelector(CSSSelector selector, String path, Location location)
+  {
+    if (selector.isClass())
+    {
+      String name = selector.getName();
+      ClassUsage c = getClassMap().get(name);
+
+      if (c == null)
+      {
+        c = new ClassUsage();
+        c.Count = 0;
+        c.FileName = path;
+        c.Location = location;
+        c.Name = selector.getName();
+        getClassMap().put(name, c);
+      }
+    }
+  }
+
+  Location getCorrectedLocationFromCssLocation(CssLocation location)
+  {
+    return new LocationImpl(correctedLineNumber(location.getLine()), correctedColumnNumber(location.getLine(), location.getColumn()), location.getCharOffset(), location.getSystemID(), location.getSystemID());
+  }
+
+  @Override
+  public void endSelectors(List<CssGrammar.CssSelector> selectors)
+  {
+    for (CSSSelector selector : inProgressSelectorCollection.getSelectors().values())
+    {
+      currentFileSelectorCollection.addSelector(selector);
+    }
+    inProgressSelectorCollection = null;
+    isBody = false;
+  }
+
+
+  @Override
+  public void declaration(CssGrammar.CssDeclaration declaration)
+  {
+    if (declaration.getName() != Optional.<String>absent())
+    {
+      String text = declaration.getName().get();
+      searchInsideValue(text, declaration.getLocation().getLine(), declaration.getLocation().getColumn(), declarationComponentItems, path, declaration.toCssString());
+      checkTermsAndValues(declaration);
+      boolean isImportant = CheckImportant(declaration);
+      boolean added = false;
+      boolean isFontSize = ("font-size".equalsIgnoreCase(text));
+      boolean isFont = ("font".equalsIgnoreCase(text));
+      StringBuilder sb = new StringBuilder();
+
+      if (isFont)
+      {
+        CheckFont(declaration);
+      }
+      if (isBody)
+      {
+        CheckBody(declaration);
+      }
+
+      for (CssGrammar.CssConstruct construct : declaration.getComponents())
+      {
+        Vector<TextSearchDictionaryEntry> searchItems;
+        String searchText;
+        if (isFontSize)
+        {
+          CheckFontSize(construct, declaration);
+        }
+
+        switch (construct.getType())
+        {
+          case FUNCTION:
+          {
+            CssGrammar.CssFunction function = (CssGrammar.CssFunction) construct;
+            searchItems = functionComponentItems;
+            searchText = function.getName().isPresent() ? function.getName().get() : null;
+            break;
+          }
+          default:
+          {
+            searchItems = declarationComponentItems;
+            searchText = construct.toCssString();
+            if (inProgressSelectorCollection != null && searchText != null)
+            {
+              if (added)
+              {
+                sb.append(" ");
+              }
+              sb.append(searchText);
+              added = true;
+            }
+            break;
+          }
+        }
+        if (searchText != null)
+        {
+          searchInsideValue(searchText, construct.getLocation().getLine(), construct.getLocation().getColumn(), searchItems, path, declaration.toCssString());
+        }
+      }
+      if (inProgressSelectorCollection != null)
+      {
+        String value = sb.toString();
+        for (CSSSelector selector : inProgressSelectorCollection.getSelectors().values())
+        {
+          CSSSelectorAttribute attribute = new CSSSelectorAttribute(text, value, isImportant, selector);
+          selector.addAttribute(attribute);
+        }
+      }
+      if (inFontFace)
+      {
+        hasFontFaceDeclarations = true;
+      }
+    }
+  }
+
+  void checkTermsAndValues(CssGrammar.CssDeclaration declaration)
+  {
+    if (!isGlobalFixedFormat || hasIndividualFixedFormatDocuments)
+    {
+      MessageId id = hasIndividualFixedFormatDocuments ? MessageId.CSS_027 : MessageId.CSS_017;
+      if ("position".compareToIgnoreCase(declaration.getName().get()) == 0)
+      {
+        for (CssGrammar.CssConstruct construct : declaration.getComponents())
+        {
+          if (construct.getType() == CssGrammar.CssConstruct.Type.KEYWORD &&
+              "absolute".compareToIgnoreCase(construct.toCssString()) == 0)
+          {
+            getReport().message(id, getCorrectedMessageLocation(path, declaration.getLocation().getLine(), declaration.getLocation().getColumn(), declaration.toCssString()), declaration.getName().get());
+            break;
+          }
+        }
+      }
+    }
+  }
+
+  boolean CheckImportant(CssGrammar.CssDeclaration declaration)
+  {
+    boolean isImportant = declaration.getImportant();
+    if (isImportant)
+    {
+      getReport().message(MessageId.CSS_013, getCorrectedMessageLocation(path, declaration.getLocation().getLine(), declaration.getLocation().getColumn(), declaration.toCssString()));
+    }
+    return isImportant;
+  }
+
+  void CheckBody(CssGrammar.CssDeclaration declaration)
+  {
+    String declarationName = declaration.toCssString().toLowerCase();
+    if (declarationName.startsWith("margin-") || declarationName.equals("margin"))
+    {
+      getReport().message(MessageId.CSS_022, getCorrectedMessageLocation(path, declaration.getLocation().getLine(), declaration.getLocation().getColumn(), declaration.toCssString()), declarationName);
+    }
+  }
+
+
+  void CheckFontSize(CssGrammar.CssConstruct construct, CssGrammar.CssDeclaration declaration)
+  {
+    MessageId id = hasIndividualFixedFormatDocuments ? MessageId.ACC_016 : MessageId.ACC_014;
+    switch (construct.getType())
+    {
+      case KEYWORD:
+      {
+        if (!isGlobalFixedFormat || hasIndividualFixedFormatDocuments)
+        {
+          String value = construct.toCssString().toLowerCase();
+          if (("smaller".compareTo(value) != 0) && ("larger".compareTo(value) != 0) && ("inherit".compareTo(value) != 0))
+          {
+            getReport().message(id, getCorrectedMessageLocation(path, declaration.getLocation().getLine(), declaration.getLocation().getColumn(), declaration.toCssString()));
+          }
+        }
+        break;
+      }
+      case QUANTITY:
+        if (!isGlobalFixedFormat || hasIndividualFixedFormatDocuments)
+        {
+          CssGrammar.CssQuantity quantity = (CssGrammar.CssQuantity) construct;
+          switch (quantity.getUnit())
+          {
+            case EMS:
+            case REMS:
+            case PERCENTAGE:
+              break;
+            default:
+              getReport().message(id, getCorrectedMessageLocation(path, declaration.getLocation().getLine(), declaration.getLocation().getColumn(), declaration.toCssString()));
+              break;
+          }
+        }
+        break;
+      default:
+        break;
+    }
+  }
+
+  void CheckFont(CssGrammar.CssDeclaration declaration)
+  {
+    boolean assignedFontStyle = false;
+    boolean assignedFontVariant = false;
+    boolean assignedFontWeight = false;
+
+    int i = 0;
+
+    List<CssGrammar.CssConstruct> components = declaration.getComponents();
+    CssGrammar.CssConstruct construct;
+
+    if (!matchesSystemFont(declaration))
+    {
+      while (i < components.size())
+      {
+        construct = components.get(i);
+        if (!assignedFontStyle && isFontStyle(construct))
+        {
+          assignedFontStyle = true;
+          ++i;
+          continue;
+        }
+        if (!assignedFontVariant && isFontVariant(construct))
+        {
+          assignedFontVariant = true;
+          ++i;
+          continue;
+        }
+        if (!assignedFontWeight && isFontWeight(construct))
+        {
+          assignedFontWeight = true;
+          ++i;
+          continue;
+        }
+        if (!assignedFontStyle || !assignedFontVariant || !assignedFontWeight)
+        {
+          String value = construct.toCssString();
+          if (isNormal(value) || isInherit(value))
+          {
+            if (!assignedFontStyle)
+            {
+              assignedFontStyle = true;
+              ++i;
+              continue;
+            }
+            else if (!assignedFontVariant)
+            {
+              assignedFontVariant = true;
+              ++i;
+              continue;
+            }
+            else
+            {
+              assignedFontWeight = true;
+              ++i;
+              continue;
+            }
+          }
+        }
+        if (isFontSize(construct))
+        {
+          CheckFontSize(construct, declaration);
+          if (i <= components.size() - 2)
+          {
+            construct = components.get(++i);
+            if (construct.getType() == CssGrammar.CssConstruct.Type.SYMBOL && construct.toCssString().equals("/"))
+            {
+              construct = components.get(++i);
+              CheckLineHeight(construct, declaration);
+            }
+          }
+          return;
+        }
+        else
+        {
+          // we got into a state where we didn't recognize the token as a font-size, but it didn't match style/variant/weight either.
+          getReport().message(MessageId.CSS_020, getCorrectedMessageLocation(path, declaration.getLocation().getLine(), declaration.getLocation().getColumn(), declaration.toCssString()), construct.toCssString());
+          return;
+        }
+      }
+    }
+  }
+
+  HashSet<String> fontSizes;
+
+  boolean isFontSize(CssGrammar.CssConstruct construct)
+  {
+    if (null == fontSizes)
+    {
+      String[] fontSizeStrings = {
+          "xx-small",
+          "x-small",
+          "small",
+          "medium",
+          "large",
+          "x-large",
+          "xx-large",
+          "larger",
+          "smaller",
+      };
+      fontSizes = getHashSetFromStrings(fontSizeStrings);
+    }
+
+    if (valueMatchesLowercaseLegalValues(construct, fontSizes))
+    {
+      return true;
+    }
+    if (construct.getType() == CssGrammar.CssConstruct.Type.QUANTITY)
+    {
+      CssGrammar.CssQuantity quantity = (CssGrammar.CssQuantity) (construct);
+      CssGrammar.CssQuantity.Unit unit = quantity.getUnit();
+      switch (unit)
+      {
+        case PERCENTAGE:
+        case EMS:
+        case LENGTH:
+          return true;
+      }
+    }
+    return false;
+  }
+
+  void CheckLineHeight(CssGrammar.CssConstruct construct, CssGrammar.CssDeclaration declaration)
+  {
+    if (!isGlobalFixedFormat || hasIndividualFixedFormatDocuments)
+    {
+      MessageId id = hasIndividualFixedFormatDocuments ? MessageId.ACC_017 : MessageId.ACC_015;
+      if (construct.getType() == CssGrammar.CssConstruct.Type.QUANTITY)
+      {
+        CssGrammar.CssQuantity quantity = (CssGrammar.CssQuantity) (construct);
+        CssGrammar.CssQuantity.Unit unit = quantity.getUnit();
+        switch (unit)
+        {
+          case PERCENTAGE:
+          case EMS:
+            break;
+          case NUMBER:
+            break;
+          case LENGTH:
+            getReport().message(id, getCorrectedMessageLocation(path, declaration.getLocation().getLine(), declaration.getLocation().getColumn(), declaration.toCssString()));
+            break;
+        }
+      }
+    }
+  }
+
+  HashSet<String> fontVariants;
+
+  boolean isFontVariant(CssGrammar.CssConstruct construct)
+  {
+    if (null == fontVariants)
+    {
+      final String[] fontVariantsStrings =
+          {
+              "small-caps",
+          };
+      fontVariants = getHashSetFromStrings(fontVariantsStrings);
+    }
+    return valueMatchesLowercaseLegalValues(construct, fontVariants);
+  }
+
+  HashSet<String> fontStyles;
+
+  boolean isFontStyle(CssGrammar.CssConstruct construct)
+  {
+    if (null == fontStyles)
+    {
+      final String[] fontStylesStrings = {
+          "italic",
+          "oblique",
+      };
+      fontStyles = getHashSetFromStrings(fontStylesStrings);
+    }
+    return valueMatchesLowercaseLegalValues(construct, fontStyles);
+  }
+
+  boolean isNormal(String value)
+  {
+    return "normal".compareToIgnoreCase(value) == 0;
+  }
+
+  boolean isInherit(String value)
+  {
+    return "inherit".compareToIgnoreCase(value) == 0;
+  }
+
+  HashSet<String> fontWeightStrings;
+
+  boolean isFontWeightString(String value)
+  {
+    if (fontWeightStrings == null)
+    {
+      final String[] fontWeights = {
+          "bold",
+          "bolder",
+          "lighter",
+          "100", "200", "300", "400", "500", "600", "700", "800", "900",
+      };
+      fontWeightStrings = getHashSetFromStrings(fontWeights);
+    }
+    return valueMatchesLowercaseLegalValues(value, fontWeightStrings);
+  }
+
+  HashSet<String> getHashSetFromStrings(String[] strings)
+  {
+    HashSet<String> hashSet = new HashSet<String>();
+    Collections.addAll(hashSet, strings);
+    return hashSet;
+  }
+
+  boolean valueMatchesLowercaseLegalValues(CssGrammar.CssConstruct construct, HashSet<String> legalValues)
+  {
+    return valueMatchesLowercaseLegalValues(construct.toCssString(), legalValues);
+  }
+
+  boolean valueMatchesLowercaseLegalValues(String value, HashSet<String> legalValues)
+  {
+    if (null == value || value.isEmpty())
+    {
+      return false;
+    }
+
+    return legalValues.contains(value.toLowerCase());
+  }
+
+  boolean isFontWeight(CssGrammar.CssConstruct construct)
+  {
+    switch (construct.getType())
+    {
+      case KEYWORD:
+      case STRING:
+        return isFontWeightString(construct.toCssString());
+      case QUANTITY:
+        CssGrammar.CssQuantity quantity = (CssGrammar.CssQuantity) construct;
+
+        if (quantity.getUnit() == CssGrammar.CssQuantity.Unit.INTEGER)
+        {
+          return isFontWeightString(quantity.toCssString());
+        }
+        break;
+    }
+    return false;
+  }
+
+  HashSet<String> validSystemFontNames;
+
+  boolean matchesSystemFont(CssGrammar.CssDeclaration declaration)
+  {
+    List<CssGrammar.CssConstruct> components = declaration.getComponents();
+    if (components.size() == 1 && components.get(0).getType() == CssGrammar.CssConstruct.Type.KEYWORD)
+    {
+      String name = components.get(0).toCssString();
+      if (!isValidSystemFontName(name))
+      {
+        // report error here  = missing size or font family
+        getReport().message(MessageId.CSS_021, getCorrectedMessageLocation(path, declaration.getLocation().getLine(), declaration.getLocation().getColumn(), declaration.toCssString()));
+      }
+      return true; // return true here because we have handled the case of only 1 attribute in the list
+    }
+    return false;
+  }
+
+  boolean isValidSystemFontName(String name)
+  {
+    if (validSystemFontNames == null)
+    {
+      String[] validSystemFontNamesStrings = {"caption", "icon", "menu", "message-box", "small-caption", "status-bar", "fantasy", "inherit"};
+      validSystemFontNames = getHashSetFromStrings(validSystemFontNamesStrings);
+    }
+    return valueMatchesLowercaseLegalValues(name, validSystemFontNames);
+  }
+
+  static final Pattern invalidTokenStringFinder = Pattern.compile("Token '[0-9]+%' not allowed here");
+
+  @Override
+  public void error(CssExceptions.CssException e) throws CssExceptions.CssException
+  {
+    String message = e.getMessage();
+
+    if (inKeyFrames)
+    {
+      Matcher m = invalidTokenStringFinder.matcher(message);
+      if (m.matches())
+      {
+        return;
+      }
+    }
+    CssLocation location = e.getLocation();
+    report.message(MessageId.CSS_008, new MessageLocation(path, location.getLine(), location.getColumn()), message);
+  }
+
+  void searchInsideValue(String entry, int line, int column, Vector<TextSearchDictionaryEntry> tds, String file, String context)
+  {
+    for (TextSearchDictionaryEntry de : tds)
+    {
+      Pattern p = de.getPattern();
+      Matcher matcher = p.matcher(entry);
+      int position = 0;
+      while (matcher.find(position))
+      {
+        position = matcher.end();
+        report.message(de.getErrorCode(), getCorrectedMessageLocation(file, line, column, context));
+      }
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/epubpackage/EpubPackage.java b/src/main/java/com/adobe/epubcheck/ctc/epubpackage/EpubPackage.java
new file mode 100644
index 0000000..a0a0f16
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/epubpackage/EpubPackage.java
@@ -0,0 +1,193 @@
+package com.adobe.epubcheck.ctc.epubpackage;
+
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.PathUtil;
+import org.w3c.dom.Document;
+
+import java.io.File;
+import java.util.zip.ZipFile;
+
+public class EpubPackage
+{
+  private String packageMainFilePath;
+  private ZipFile zip;
+  private Document packDoc;
+  private String packageMainPath = "";
+  private PackageManifest manifest = new PackageManifest();
+  private PackageSpine spine = new PackageSpine();
+  private PackageMetadata metadata = new PackageMetadata();
+  private EPUBVersion version;
+  private final String fileName;
+
+  public String getFileName()
+  {
+    return this.fileName;
+  }
+
+  public Document getPackDoc()
+  {
+    return packDoc;
+  }
+
+  void setPackDoc(Document packDoc)
+  {
+    this.packDoc = packDoc;
+  }
+
+  public PackageMetadata getMetadata()
+  {
+    return metadata;
+  }
+
+  public void setMetadata(PackageMetadata metadata)
+  {
+    this.metadata = metadata;
+  }
+
+  public EPUBVersion getVersion()
+  {
+    return version;
+  }
+
+  public void setVersion(EPUBVersion version)
+  {
+    this.version = version;
+  }
+
+  public EpubPackage(String packageMainFile, ZipFile zip, Document doc)
+  {
+    setPackageMainFile(packageMainFile);
+    setZip(zip);
+    setPackDoc(doc);
+    if (packageMainFile.lastIndexOf('/') > 0)
+    {
+      setPackageMainPath(packageMainFile.substring(0, packageMainFile.lastIndexOf('/')));
+    }
+    setManifest(new PackageManifest());
+    setSpine(new PackageSpine());
+    File file = new File(zip.getName());
+    this.fileName = file.getName();
+  }
+
+  public String getPackageMainFile()
+  {
+    return packageMainFilePath;
+  }
+
+  public void setPackageMainFile(String packageMainFile)
+  {
+    this.packageMainFilePath = packageMainFile;
+  }
+
+  public String getPackageMainPath()
+  {
+    return packageMainPath;
+  }
+
+  void setPackageMainPath(String packageMainPath)
+  {
+    this.packageMainPath = packageMainPath;
+  }
+
+  public PackageManifest getManifest()
+  {
+    return manifest;
+  }
+
+  public void setManifest(PackageManifest manifest)
+  {
+    this.manifest = manifest;
+  }
+
+  public PackageSpine getSpine()
+  {
+    return spine;
+  }
+
+  public void setSpine(PackageSpine spine)
+  {
+    this.spine = spine;
+  }
+
+  public ZipFile getZip()
+  {
+    return zip;
+  }
+
+  void setZip(ZipFile zip)
+  {
+    this.zip = zip;
+  }
+
+  public boolean isSpineItem(String id)
+  {
+    if (id == null || id.equals(""))
+    {
+      return false;
+    }
+
+    for (SpineItem item : spine.getItems())
+    {
+      if (id.equals(item.getIdref()))
+      {
+        return true;
+      }
+    }
+
+    return false;
+  }
+
+  public static boolean isGlobalFixed(EpubPackage epack)
+  {
+    for (MetadataElement me : epack.getMetadata().getMetaElements())
+    {
+      if ("rendition:layout".equals(me.getName()))
+      {
+        return ("pre-paginated".equals(me.getValue()));
+      }
+      else if ("meta".equals(me.getName()))
+      {
+        String property = me.getAttribute("property");
+        if ("rendition:layout".equals(property))
+        {
+          return ("pre-paginated".equals(me.getValue()));
+        }
+      }
+    }
+    return false;
+  }
+
+  public String getManifestItemFileName(ManifestItem mi)
+  {
+    if (mi != null)
+    {
+      return getManifestItemFileName(mi.getHref());
+    }
+    return "";
+  }
+
+  public String getManifestItemFileName(String entryName)
+  {
+    if (entryName == null)
+      return "";
+
+    String fileToParse;
+
+    if (this.getPackageMainPath() != null && this.getPackageMainPath().length() > 0)
+    {
+      fileToParse = PathUtil.resolveRelativeReference(this.getPackageMainFile(), entryName, null);
+    }
+    else
+    {
+      fileToParse = entryName;
+    }
+    int hash = fileToParse.lastIndexOf("#");
+    if (hash > 0)
+    {
+      fileToParse = fileToParse.substring(0, hash);
+    }
+    return fileToParse;
+  }
+
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/epubpackage/ManifestItem.java b/src/main/java/com/adobe/epubcheck/ctc/epubpackage/ManifestItem.java
new file mode 100644
index 0000000..3ab587f
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/epubpackage/ManifestItem.java
@@ -0,0 +1,49 @@
+package com.adobe.epubcheck.ctc.epubpackage;
+
+public class ManifestItem
+{
+  private String id;
+  private String href;
+  private String mediaType;
+  private String properties;
+
+  public String getId()
+  {
+    return id;
+  }
+
+  public void setId(String id)
+  {
+    this.id = id;
+  }
+
+  public String getHref()
+  {
+    return href;
+  }
+
+  public void setHref(String href)
+  {
+    this.href = href;
+  }
+
+  public String getMediaType()
+  {
+    return mediaType;
+  }
+
+  public void setMediaType(String mediaType)
+  {
+    this.mediaType = mediaType;
+  }
+
+  public String getProperties()
+  {
+    return properties;
+  }
+
+  public void setProperties(String properties)
+  {
+    this.properties = properties;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/epubpackage/MetadataElement.java b/src/main/java/com/adobe/epubcheck/ctc/epubpackage/MetadataElement.java
new file mode 100644
index 0000000..fc34f48
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/epubpackage/MetadataElement.java
@@ -0,0 +1,45 @@
+package com.adobe.epubcheck.ctc.epubpackage;
+
+import java.util.HashMap;
+
+public class MetadataElement
+{
+  private final HashMap<String, String> attributes = new HashMap<String, String>();
+  private String value = "";
+  private String name = "";
+
+  public void addAttribute(String attrName, String attrValue)
+  {
+    attributes.put(attrName, attrValue);
+  }
+
+  public HashMap getAllAttributes()
+  {
+    return attributes;
+  }
+
+  public String getAttribute(String attrName)
+  {
+    return attributes.get(attrName);
+  }
+
+  public String getName()
+  {
+    return name;
+  }
+
+  public void setName(String name)
+  {
+    this.name = name;
+  }
+
+  public String getValue()
+  {
+    return value;
+  }
+
+  public void setValue(String value)
+  {
+    this.value = value;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/epubpackage/PackageManifest.java b/src/main/java/com/adobe/epubcheck/ctc/epubpackage/PackageManifest.java
new file mode 100644
index 0000000..8904a32
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/epubpackage/PackageManifest.java
@@ -0,0 +1,44 @@
+package com.adobe.epubcheck.ctc.epubpackage;
+
+import java.util.Vector;
+
+public class PackageManifest
+{
+  private final Vector<ManifestItem> items = new Vector<ManifestItem>();
+
+  public Vector getItems()
+  {
+    return items;
+  }
+
+  public int itemsLength()
+  {
+    return items.size();
+  }
+
+  public void addItem(ManifestItem mi)
+  {
+    items.add(mi);
+  }
+
+  public ManifestItem getItem(int i)
+  {
+    return items.get(i);
+  }
+
+  public ManifestItem getItem(String id)
+  {
+    if (id == null || id.equals(""))
+    {
+      return null;
+    }
+    for (ManifestItem item : items)
+    {
+      if (id.equals(item.getId()))
+      {
+        return item;
+      }
+    }
+    return null;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/epubpackage/PackageMetadata.java b/src/main/java/com/adobe/epubcheck/ctc/epubpackage/PackageMetadata.java
new file mode 100644
index 0000000..b30951e
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/epubpackage/PackageMetadata.java
@@ -0,0 +1,18 @@
+package com.adobe.epubcheck.ctc.epubpackage;
+
+import java.util.Vector;
+
+public class PackageMetadata
+{
+  private final Vector<MetadataElement> m = new Vector<MetadataElement>();
+
+  public Vector<MetadataElement> getMetaElements()
+  {
+    return m;
+  }
+
+  public void addMetaElement(MetadataElement meta)
+  {
+    m.add(meta);
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/epubpackage/PackageSpine.java b/src/main/java/com/adobe/epubcheck/ctc/epubpackage/PackageSpine.java
new file mode 100644
index 0000000..1eccf34
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/epubpackage/PackageSpine.java
@@ -0,0 +1,61 @@
+package com.adobe.epubcheck.ctc.epubpackage;
+
+import java.util.Vector;
+
+public class PackageSpine
+{
+  private String toc;
+  private String id;
+  private String pageProgressionDirection;
+  private final Vector<SpineItem> items = new Vector<SpineItem>();
+
+  public Vector<SpineItem> getItems()
+  {
+    return items;
+  }
+
+  public int itemsLength()
+  {
+    return items.size();
+  }
+
+  public void addItem(SpineItem mi)
+  {
+    items.add(mi);
+  }
+
+  public SpineItem getItem(int i)
+  {
+    return items.get(i);
+  }
+
+  public String getToc()
+  {
+    return toc;
+  }
+
+  public void setToc(String toc)
+  {
+    this.toc = toc;
+  }
+
+  public String getId()
+  {
+    return id;
+  }
+
+  public void setId(String id)
+  {
+    this.id = id;
+  }
+
+  public String getPageProgressionDirection()
+  {
+    return pageProgressionDirection;
+  }
+
+  public void setPageProgressionDirection(String pageProgressionDirection)
+  {
+    this.pageProgressionDirection = pageProgressionDirection;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/epubpackage/SpineItem.java b/src/main/java/com/adobe/epubcheck/ctc/epubpackage/SpineItem.java
new file mode 100644
index 0000000..4877f00
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/epubpackage/SpineItem.java
@@ -0,0 +1,49 @@
+package com.adobe.epubcheck.ctc.epubpackage;
+
+public class SpineItem
+{
+  private String idref;
+  private String id;
+  private String linear;
+  private String properties;
+
+  public String getIdref()
+  {
+    return idref;
+  }
+
+  public void setIdref(String idref)
+  {
+    this.idref = idref;
+  }
+
+  public String getId()
+  {
+    return id;
+  }
+
+  public void setId(String id)
+  {
+    this.id = id;
+  }
+
+  public String getLinear()
+  {
+    return linear;
+  }
+
+  public void setLinear(String linear)
+  {
+    this.linear = linear;
+  }
+
+  public String getProperties()
+  {
+    return properties;
+  }
+
+  public void setProperties(String properties)
+  {
+    this.properties = properties;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/xml/AnchorTagHandler.java b/src/main/java/com/adobe/epubcheck/ctc/xml/AnchorTagHandler.java
new file mode 100644
index 0000000..20c0ca1
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/xml/AnchorTagHandler.java
@@ -0,0 +1,234 @@
+package com.adobe.epubcheck.ctc.xml;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import java.util.HashMap;
+import java.util.Vector;
+
+public class AnchorTagHandler extends DefaultHandler
+{
+
+  public static final String MATH_ML_NAMESPACE = "http://www.w3.org/1998/Math/MathML";
+  private Vector<DocTagContent> tagsContent = new Vector<DocTagContent>();
+  private DocTagContent currentScriptTag = null;
+  private boolean scriptReading = false;
+  private Locator locator;
+  private HashMap<String, Integer> prefixes = new HashMap<String, Integer>();
+
+  public Vector<DocTagContent> getHrefAttributesValues()
+  {
+    return tagsContent;
+  }
+
+  public void setDocumentLocator(Locator locator)
+  {
+    this.locator = locator;
+  }
+
+  @Override
+  public void endDocument()
+  {
+    prefixes.clear();
+  }
+
+  public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException
+  {
+    if (qName.compareToIgnoreCase("script") == 0)
+    {
+      scriptReading = true;
+      currentScriptTag = new DocTagContent();
+      currentScriptTag.setLine(locator.getLineNumber());
+      currentScriptTag.setColumn(locator.getColumnNumber());
+      currentScriptTag.setType("script");
+      currentScriptTag.setContext("script");
+      tagsContent.add(currentScriptTag);
+    }
+
+    if (qName.compareToIgnoreCase("html") == 0)
+    {
+      for (int i = 0; i < attributes.getLength(); i++)
+      {
+        String attrName = attributes.getQName(i);
+        String attrValue = attributes.getValue(i);
+        if (attrName.startsWith("xmlns:") && attrValue.compareToIgnoreCase(MATH_ML_NAMESPACE) == 0)
+        {
+          String prefix = attrName.substring("xmlns:".length());
+          startPrefixMapping (prefix, attrValue);
+        }
+      }
+    }
+    else if (qName.compareToIgnoreCase("A") == 0)
+    {
+      for (int i = 0; i < attributes.getLength(); i++)
+      {
+        String attrName = attributes.getQName(i);
+        String attrValue = attributes.getValue(i);
+        if (attrName.compareToIgnoreCase("href") == 0)
+        {
+          DocTagContent sa = new DocTagContent();
+          sa.setValue(attrValue);
+          sa.setType("A");
+          sa.setLine(locator.getLineNumber());
+          sa.setColumn(locator.getColumnNumber());
+          sa.setContext("href");
+          tagsContent.add(sa);
+        }
+      }
+    }
+    else if (qName.compareToIgnoreCase("iframe") == 0)
+    {
+      for (int i = 0; i < attributes.getLength(); i++)
+      {
+        String attrName = attributes.getQName(i);
+        String attrValue = attributes.getValue(i);
+        if (attrName.compareToIgnoreCase("src") == 0)
+        {
+          DocTagContent sa = new DocTagContent();
+          sa.setValue(attrValue);
+          sa.setType("iframe:src");
+          sa.setLine(locator.getLineNumber());
+          sa.setColumn(locator.getColumnNumber());
+          sa.setContext("src");
+          tagsContent.add(sa);
+        }
+      }
+    }
+    else if (qName.compareToIgnoreCase("img") == 0)
+    {
+      for (int i = 0; i < attributes.getLength(); i++)
+      {
+        String attrName = attributes.getQName(i);
+        String attrValue = attributes.getValue(i);
+        if (attrName.compareToIgnoreCase("src") == 0)
+        {
+          DocTagContent sa = new DocTagContent();
+          sa.setValue(attrValue);
+          sa.setType("img");
+          sa.setLine(locator.getLineNumber());
+          sa.setColumn(locator.getColumnNumber());
+          sa.setContext("img");
+          tagsContent.add(sa);
+        }
+      }
+    }
+    else if (isMath(qName))
+    {
+      int imageIndex = attributes.getIndex("altimg");
+      if (imageIndex >= 0)
+      {
+        String attrValue = attributes.getValue(imageIndex);
+        DocTagContent sa = new DocTagContent();
+        sa.setValue(attrValue);
+        sa.setType("altimg");
+        sa.setLine(locator.getLineNumber());
+        sa.setColumn(locator.getColumnNumber());
+        sa.setContext("altimg");
+        tagsContent.add(sa);
+      }
+    }
+  }
+
+    private boolean isMath(String qName)
+    {
+        return prefixes.containsKey(qName);
+    }
+
+    public void startPrefixMapping (String prefix, String uri)
+            throws SAXException
+  {
+      if (uri.compareToIgnoreCase(MATH_ML_NAMESPACE) == 0)
+      {
+          prefix = prefix + ":math";
+          Integer count = prefixes.get(prefix);
+          if (count == null)
+          {
+              count = 0;
+          }
+          prefixes.put(prefix, ++count);
+      }
+  }
+
+
+  public void endPrefixMapping (String prefix)
+            throws SAXException
+  {
+      prefix = prefix + ":math";
+      Integer count = prefixes.get(prefix);
+      if (count != null)
+      {
+          prefixes.put(prefix, --count);
+      }
+  }
+
+  public void characters(char ch[], int start, int length) throws SAXException
+  {
+    if (scriptReading)
+    {
+      currentScriptTag.value = new String(ch, start, length);
+      tagsContent.add(currentScriptTag);
+      scriptReading = false;
+    }
+  }
+
+  public class DocTagContent
+  {
+    String type;
+    int line;
+    int column;
+    String context = "";
+    String value = "";
+
+    public int getLine()
+    {
+      return line;
+    }
+
+    public void setLine(int line)
+    {
+      this.line = line;
+    }
+
+    public int getColumn()
+    {
+      return column;
+    }
+
+    public void setColumn(int column)
+    {
+      this.column = column;
+    }
+
+    public String getType()
+    {
+      return type;
+    }
+
+    public void setType(String type)
+    {
+      this.type = type;
+    }
+
+    public void setContext(String context)
+    {
+      this.context = context;
+    }
+
+    public String getContext()
+    {
+      return context;
+    }
+
+    public String getValue()
+    {
+      return value;
+    }
+
+    public void setValue(String value)
+    {
+      this.value = value;
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/xml/CSSStyleAttributeHandler.java b/src/main/java/com/adobe/epubcheck/ctc/xml/CSSStyleAttributeHandler.java
new file mode 100644
index 0000000..6a8f4e1
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/xml/CSSStyleAttributeHandler.java
@@ -0,0 +1,315 @@
+package com.adobe.epubcheck.ctc.xml;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ctc.css.EpubCSSCheckCSSHandler;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.util.LocationImpl;
+import org.idpf.epubcheck.util.css.CssParser;
+import org.idpf.epubcheck.util.css.CssSource;
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Stack;
+import java.util.Vector;
+
+public class CSSStyleAttributeHandler extends DefaultHandler
+{
+  String fileName;
+  Stack<String> tagStack = new Stack<String>();
+  private Locator locator;
+  private boolean inStyleTag = false;
+  private boolean isGlobalFixedFormat = false;
+  private boolean documentIsFixedFormat = false;
+  private CSSStyleAttributeHandler.StyleAttribute currentStyleTag = null;
+  private final HashMap<String, StyleAttribute> styleAttributesValues = new HashMap<String, StyleAttribute>();
+  private final Stack<HashMap<String, EpubCSSCheckCSSHandler.ClassUsage>> localStyles = new Stack<HashMap<String, EpubCSSCheckCSSHandler.ClassUsage>>();
+  private final Stack<Integer> styleLevels = new Stack<Integer>();
+  private EpubCSSCheckCSSHandler cssHandler;
+  private Report report;
+
+  public CSSStyleAttributeHandler(boolean isGlobalFixedFormat, boolean  documentIsFixedFormat)
+  {
+    this.isGlobalFixedFormat = isGlobalFixedFormat;
+    this.documentIsFixedFormat = documentIsFixedFormat;
+  }
+  public Report getReport()
+  {
+    return report;
+  }
+
+  public void setReport(Report report)
+  {
+    this.report = report;
+  }
+
+  public EpubCSSCheckCSSHandler getCssHandler()
+  {
+    return cssHandler;
+  }
+
+  public void setCssHandler(EpubCSSCheckCSSHandler value)
+  {
+    cssHandler = value;
+  }
+
+  public String getFileName()
+  {
+    return fileName;
+  }
+
+  public void setFileName(String fileName)
+  {
+    this.fileName = fileName;
+  }
+
+  public Collection<CSSStyleAttributeHandler.StyleAttribute> getStyleAttributesValues()
+  {
+    return styleAttributesValues.values();
+  }
+
+  private final Vector<CSSStyleAttributeHandler.StyleAttribute> styleTagValues = new Vector<CSSStyleAttributeHandler.StyleAttribute>();
+
+  public Vector<CSSStyleAttributeHandler.StyleAttribute> getStyleTagValues()
+  {
+    return styleTagValues;
+  }
+
+  public void setDocumentLocator(Locator locator)
+  {
+    this.locator = locator;
+  }
+
+  public void startDocument()
+  {
+    localStyles.clear();
+    styleLevels.clear();
+  }
+
+  public void endDocument()
+  {
+    while (!localStyles.isEmpty())
+    {
+      HashMap<String, EpubCSSCheckCSSHandler.ClassUsage> localStyleMap = localStyles.pop();
+      for (String key : localStyleMap.keySet())
+      {
+        EpubCSSCheckCSSHandler.ClassUsage cu = localStyleMap.get(key);
+        if (cu.Count == 0)
+        {
+
+          assert (cu.Name != null && !cu.Name.isEmpty());
+          report.message(MessageId.CSS_024, new MessageLocation(getFileName(), cu.Location.getLineNumber(), cu.Location.getColumnNumber(), key));
+        }
+      }
+    }
+  }
+
+  public void startElement(String uri, String localName, String qName, Attributes attributes)
+      throws
+      SAXException
+  {
+    tagStack.push(qName.toLowerCase());
+    if (qName.compareToIgnoreCase("style") == 0)
+    {
+      HashMap<String, EpubCSSCheckCSSHandler.ClassUsage> localStyleMap = new HashMap<String, EpubCSSCheckCSSHandler.ClassUsage>();
+      localStyles.push(localStyleMap);
+      this.styleLevels.push(tagStack.size() - 1); // we are pushing the depth of the style's PARENT node here, not the depth of the STYLE node
+
+      inStyleTag = true;
+      currentStyleTag = new CSSStyleAttributeHandler.StyleAttribute();
+      currentStyleTag.setLine(locator.getLineNumber());
+      currentStyleTag.setColumn(locator.getColumnNumber());
+      currentStyleTag.setValue("");
+
+    }
+    else
+    {
+      for (int i = 0; i < attributes.getLength(); i++)
+      {
+        String attrName = attributes.getQName(i);
+        if (attrName.compareToIgnoreCase("style") == 0)
+        {
+          String attrValue = attributes.getValue(i);
+          StyleAttribute sa = new StyleAttribute();
+          sa.setValue(attrValue);
+          sa.setLine(locator.getLineNumber());
+          sa.setColumn(locator.getColumnNumber());
+          styleAttributesValues.put(attrValue, sa);
+        }
+        else if (attrName.compareToIgnoreCase("class") == 0)
+        {
+          String attrValue = attributes.getValue(i);
+          if (attrValue != null && attrValue.length() > 0)
+          {
+            String[] attrValues = attrValue.split("\\s+");
+            for (String value : attrValues)
+            {
+              if (value.length() > 0)
+              {
+                String styleName = "." + value;
+                if (!IncrementLocalCssClassCount(styleName) && !IncrementGlobalCssClassCount(styleName))
+                {
+                  report.message(MessageId.CSS_025, new MessageLocation(getFileName(), locator.getLineNumber(), locator.getColumnNumber(), styleName));
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+  private boolean IncrementGlobalCssClassCount(String attrValue)
+  {
+    EpubCSSCheckCSSHandler handler = getCssHandler();
+    return handler != null && handler.IncrementGlobalCssClassCount(attrValue);
+  }
+
+  private boolean IncrementLocalCssClassCount(String className)
+  {
+    for (int i = localStyles.size() - 1; i >= 0; --i)
+    {
+      HashMap<String, EpubCSSCheckCSSHandler.ClassUsage> h = localStyles.get(i);
+      if (h != null)
+      {
+        EpubCSSCheckCSSHandler.ClassUsage cu = h.get(className);
+        if (cu != null)
+        {
+          ++cu.Count;
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+
+  public void endElement(String uri, String localName,
+      String qName) throws
+      SAXException
+  {
+    tagStack.pop();
+    if (inStyleTag && "style".compareToIgnoreCase(qName) == 0)
+    {
+      parseCurrentStyleTag(currentStyleTag);
+      styleTagValues.add(currentStyleTag);
+      inStyleTag = false;
+    }
+
+    if (styleLevels.size() > 0 && tagStack.size() < styleLevels.peek())
+    {
+      HashMap<String, EpubCSSCheckCSSHandler.ClassUsage> localStyleMap;
+      if (!tagStack.empty() && "head".compareToIgnoreCase(qName) != 0)
+      {
+        styleLevels.pop();
+        localStyleMap = localStyles.pop();
+      }
+      else
+      {
+        localStyleMap = localStyles.peek();
+      }
+
+      // don't look for unused ones when we are only closing the head tag, because they are "in scope" for the whole doc
+      if ("head".compareToIgnoreCase(qName) != 0)
+      {
+        for (String key : localStyleMap.keySet())
+        {
+          EpubCSSCheckCSSHandler.ClassUsage cu = localStyleMap.get(key);
+          if (cu != null && cu.Count == 0)
+          {
+            MessageLocation messageLocation = new MessageLocation(cu.FileName, cu.Location.getLineNumber(), cu.Location.getColumnNumber(), key);
+            if (cu != null)
+            {
+              assert (cu.Name != null && !cu.Name.isEmpty());
+            }
+            assert (key != null && !key.isEmpty());
+            report.message(MessageId.CSS_024, messageLocation);
+          }
+        }
+      }
+    }
+  }
+
+  private void parseCurrentStyleTag(StyleAttribute currentStyleTag)
+  {
+    EpubCSSCheckCSSHandler handler = new EpubCSSCheckCSSHandler(report, currentStyleTag.getLine(), currentStyleTag.getColumn(), isGlobalFixedFormat, documentIsFixedFormat);
+    try
+    {
+      String s = currentStyleTag.getValue();
+      InputStream inputStream = new ByteArrayInputStream(s.getBytes("UTF-8"));
+      CssSource source = new CssSource(this.getFileName(), inputStream);
+      CssParser parser = new CssParser();
+      handler.setPath(this.getFileName());
+
+      HashMap<String, EpubCSSCheckCSSHandler.ClassUsage> localStyleMap = localStyles.peek();
+      parser.parse(source, handler, handler);
+      HashMap<String, EpubCSSCheckCSSHandler.ClassUsage> map = handler.getClassMap();
+      for (String key : map.keySet())
+      {
+        EpubCSSCheckCSSHandler.ClassUsage cu = map.get(key);
+        int line = cu.Location.getLineNumber();
+        int column = cu.Location.getColumnNumber();
+        cu.Location = new LocationImpl(line, column, cu.Location.getCharacterOffset(), cu.FileName, cu.FileName);
+        cu.Count = 0;
+        cu.Name = key;
+        localStyleMap.put(cu.Name, cu);
+      }
+    }
+    catch (Exception e)
+    {
+      e.printStackTrace();
+    }
+
+  }
+
+  public void characters(char ch[], int start, int length) throws
+      SAXException
+  {
+    if (inStyleTag)
+    {
+      currentStyleTag.setValue(currentStyleTag.getValue() + new String(ch, start, length));
+    }
+  }
+
+  public class StyleAttribute
+  {
+    int line;
+    int column;
+    String value = "";
+
+    public int getLine()
+    {
+      return line;
+    }
+
+    public void setLine(int line)
+    {
+      this.line = line;
+    }
+
+    public int getColumn()
+    {
+      return column;
+    }
+
+    public void setColumn(int column)
+    {
+      this.column = column;
+    }
+
+    public String getValue()
+    {
+      return value;
+    }
+
+    public void setValue(String value)
+    {
+      this.value = value;
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/xml/Epub3StructureHandler.java b/src/main/java/com/adobe/epubcheck/ctc/xml/Epub3StructureHandler.java
new file mode 100644
index 0000000..dceef01
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/xml/Epub3StructureHandler.java
@@ -0,0 +1,68 @@
+package com.adobe.epubcheck.ctc.xml;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.util.NamespaceHelper;
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+public class Epub3StructureHandler extends DefaultHandler
+{
+  Locator locator;
+  String fileName;
+  Report report;
+  NamespaceHelper namespaceHelper = new NamespaceHelper();
+  final String[] HTMLEpub3SpecTags = new String[]{"audio", "nav", "video"};
+  int specificTagsCount = 0;
+
+  public int getSpecificTagsCount()
+  {
+    return specificTagsCount;
+  }
+
+  @Override
+  public void startPrefixMapping (String prefix, String uri) throws SAXException
+  {
+    namespaceHelper.declareNamespace(prefix, uri, new MessageLocation(fileName, locator.getLineNumber(), locator.getColumnNumber(), prefix), report);
+  }
+
+
+  @Override
+  public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException
+  {
+    namespaceHelper.onStartElement(fileName, locator, uri, qName, attributes, report);
+
+    //outWriter.println("Start Tag -->:<" +qName+">");
+    for (String HTMLEpub3SpecTag : HTMLEpub3SpecTags)
+    {
+      if (qName.compareToIgnoreCase(HTMLEpub3SpecTag) == 0)
+      {
+        specificTagsCount++;
+      }
+    }
+  }
+
+  @Override
+  public void setDocumentLocator(Locator locator)
+  {
+    this.locator = locator;
+  }
+
+  @Override
+  public void endElement (String uri, String localName, String qName)
+  {
+    namespaceHelper.onEndElement(report);
+  }
+
+  public void setFileName(String fileName)
+  {
+    this.fileName = fileName;
+  }
+
+  public void setReport(Report report)
+  {
+    this.report = report;
+  }
+}
\ No newline at end of file
diff --git a/src/main/java/com/adobe/epubcheck/ctc/xml/HTMLTagsAnalyseHandler.java b/src/main/java/com/adobe/epubcheck/ctc/xml/HTMLTagsAnalyseHandler.java
new file mode 100644
index 0000000..cfd412a
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/xml/HTMLTagsAnalyseHandler.java
@@ -0,0 +1,456 @@
+package com.adobe.epubcheck.ctc.xml;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.EpubConstants;
+import com.adobe.epubcheck.util.NamespaceHelper;
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Stack;
+
+import static com.adobe.epubcheck.opf.OPFChecker30.isBlessedAudioType;
+import static com.adobe.epubcheck.opf.OPFChecker30.isBlessedVideoType;
+
+public class HTMLTagsAnalyseHandler extends DefaultHandler
+{
+  private String fileName;
+  private Report report;
+  private final HashSet<String> html5SpecTags;
+  private final HashSet<String> html4SpecTags;
+  private final HashSet<String> nonTextTagsAlt;
+  private final HashSet<String> nonTextTagsTitle;
+  private final HashSet<String> headerTags;
+
+  private final Stack<String> tagStack;
+  private int html4SpecTagsCounter = 0;
+  private int html5SpecTagsCounter = 0;
+  private final ArrayList<Integer> listItemCounters;
+  private HashMap<String, ControlMark> formInputMarks;
+  private Locator locator;
+  private boolean hasTitle;
+  private boolean inTitle;
+  private boolean inFigure;
+  private boolean inBlockQuote;
+  private NamespaceHelper namespaceHelper = new NamespaceHelper();
+
+  private final int HAS_INPUT = 1;
+  private final int HAS_LABEL = 2;
+  private boolean hasViewport = false;
+  private boolean isFixed = false;
+  private int landmarkNavCount = 0;
+  private EPUBVersion version;
+
+  public int getLandmarkNavCount()
+  {
+    return landmarkNavCount;
+  }
+
+  public int getHtml5SpecTagsCounter()
+  {
+    return html5SpecTagsCounter;
+  }
+
+  public HTMLTagsAnalyseHandler()
+  {
+    String[] HTML5SpecTags =
+        {
+            "article", "aside", "audio", "bdi", "canvas", "command", "datalist", "details", "dialog", "embed", "figcaption",
+            "figure", "footer", "header", "hgroup", "keygen", "mark", "meter", "nav", "output", "progress", "rp", "rt", "ruby",
+            "section", "source", "summary", "time", "track", "wbr", "video"
+        };
+    String[] HTML4SpecTags =
+        {
+            "acronym", "applet", "basefont", "big", "center", "dir", "font", "frame", "frameset", "noframes", "strike"
+        };
+
+    String[] NonTextTagsAlt =
+        {
+            "img", "area", // images
+        };
+
+    String[] NonTextTagsTitle =
+        {
+            "map", "figure",   // images
+            "audio",                          // audio
+            "video",                          // video
+        };
+
+    String[] HeaderTags =
+        {
+            "h1", "h2", "h3", "h4", "h5", "h6", // headers
+        };
+
+    this.html4SpecTags = new HashSet<String>();
+    Collections.addAll(html4SpecTags, HTML4SpecTags);
+
+    this.html5SpecTags = new HashSet<String>();
+    Collections.addAll(html5SpecTags, HTML5SpecTags);
+
+    this.nonTextTagsAlt = new HashSet<String>();
+    Collections.addAll(nonTextTagsAlt, NonTextTagsAlt);
+
+    this.nonTextTagsTitle = new HashSet<String>();
+    Collections.addAll(nonTextTagsTitle, NonTextTagsTitle);
+
+    this.headerTags = new HashSet<String>();
+    Collections.addAll(headerTags, HeaderTags);
+
+    tagStack = new Stack<String>();
+    listItemCounters = new ArrayList<Integer>();
+    formInputMarks = new HashMap<String, ControlMark>();
+  }
+
+  String getFileName()
+  {
+    return fileName;
+  }
+
+  public void setFileName(String fileName)
+  {
+    this.fileName = fileName;
+  }
+
+  public void setVersion(EPUBVersion version)
+  {
+    this.version = version;
+  }
+  public EPUBVersion getVersion()
+  {
+    return version;
+  }
+
+  private class ControlMark
+  {
+    public String controlId;
+    public int mark;
+    public MessageLocation location;
+  }
+
+  public void setDocumentLocator(Locator locator)
+  {
+    this.locator = locator;
+  }
+
+  public void setReport(Report report)
+  {
+    this.report = report;
+  }
+
+  public boolean isFixed()
+  {
+    return isFixed;
+  }
+
+  public void setIsFixed(boolean isFixed)
+  {
+    this.isFixed = isFixed;
+  }
+
+  @Override
+  public void notationDecl (String name, String publicId, String systemId)
+      throws SAXException
+  {
+    System.out.printf("%1$s : %2$s : %3$s ", name, publicId, systemId);
+  }
+
+  @Override
+  public void unparsedEntityDecl (String name, String publicId, String systemId, String notationName)
+      throws SAXException
+  {
+    System.out.printf("%1$s : %2$s : %3$s : %4$s", name, publicId, systemId, notationName);
+  }
+
+  @Override
+  public void startPrefixMapping (String prefix, String uri) throws SAXException
+  {
+    namespaceHelper.declareNamespace(prefix, uri, new MessageLocation(fileName, locator.getLineNumber(), locator.getColumnNumber(), prefix), report);
+  }
+
+  public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException
+  {
+    namespaceHelper.onStartElement(fileName, locator, uri, qName, attributes, report);
+
+    //outWriter.println("Start Tag -->:<" +qName+">");
+    String tagName = qName.toLowerCase();
+    if (html5SpecTags.contains(tagName))
+    {
+      html5SpecTagsCounter++;
+    }
+    if (html4SpecTags.contains(tagName))
+    {
+      html4SpecTagsCounter++;
+    }
+
+    if (("source".compareTo(tagName) == 0) && ("video".compareTo(tagStack.peek()) == 0))
+    {
+      String mimeType = attributes.getValue("type");
+
+      if (mimeType == null || !isBlessedVideoType(mimeType))
+      {
+        if (mimeType == null)
+        {
+          mimeType = "null";
+        }
+        report.message(MessageId.OPF_036, new MessageLocation(this.getFileName(),
+            locator.getLineNumber(),
+            locator.getColumnNumber()), mimeType);
+      }
+    }
+    else if (("source".compareTo(tagName) == 0) && ("audio".compareTo(tagStack.peek()) == 0))
+    {
+      String mimeType = attributes.getValue("type");
+
+      if (mimeType == null || !isBlessedAudioType(mimeType))
+      {
+        if (mimeType == null)
+        {
+          mimeType = "null";
+        }
+        report.message(MessageId.OPF_056, new MessageLocation(this.getFileName(),
+            locator.getLineNumber(),
+            locator.getColumnNumber()), mimeType);
+      }
+    }
+    else if (("ul".compareTo(tagName) == 0) || ("ol".compareTo(tagName) == 0) || ("Dl".compareTo(tagName) == 0))
+    {
+      listItemCounters.add(0);
+    }
+    else if (("li".compareTo(tagName) == 0) &&
+        (("ul".compareTo(tagStack.peek()) == 0) ||
+            ("ol".compareTo(tagStack.peek()) == 0)))
+    {
+      listItemCounters.set(listItemCounters.size() - 1, 1 + listItemCounters.get(listItemCounters.size() - 1));
+    }
+    else if (("dh".compareTo(tagName) == 0) && ("dl".compareTo(tagStack.peek()) == 0))
+    {
+      listItemCounters.set(listItemCounters.size() - 1, 1 + listItemCounters.get(listItemCounters.size() - 1));
+    }
+    else if ("input".compareTo(tagName) == 0)
+    {
+      String id = attributes.getValue("id");
+      String type = attributes.getValue("type");
+      if (id != null)
+      {
+        ControlMark mark = formInputMarks.get(id);
+        if (mark == null)
+        {
+          mark = new ControlMark();
+          mark.controlId = id;
+        }
+        mark.location = new MessageLocation(this.getFileName(), locator.getLineNumber(), locator.getColumnNumber(), id);
+        mark.mark |= HAS_INPUT;
+        formInputMarks.put(id, mark);
+      }
+      else if (type == null || "submit".compareToIgnoreCase(type) != 0)  // submit buttons don't need a label
+      {
+        report.message(MessageId.HTM_028, new MessageLocation(this.fileName,
+            locator.getLineNumber(),
+            locator.getColumnNumber()), tagName);
+      }
+    }
+    else if ("label".compareTo(tagName) == 0)
+    {
+      String id = attributes.getValue("for");
+      if (id != null)
+      {
+        ControlMark mark = formInputMarks.get(id);
+        if (mark == null)
+        {
+          mark = new ControlMark();
+          mark.controlId = id;
+
+          // only set the location if we are creating the entry here.  This location will be overwritten
+          // by the input control location, but if there is no input that overrides it, the label location will
+          // be the one reported.
+          mark.location = new MessageLocation(this.getFileName(), locator.getLineNumber(), locator.getColumnNumber(), id);
+        }
+        mark.mark |= HAS_LABEL;
+        formInputMarks.put(id, mark);
+      }
+      else
+      {
+        report.message(MessageId.HTM_029, new MessageLocation(this.getFileName(),
+            locator.getLineNumber(),
+            locator.getColumnNumber(), tagName));
+      }
+    }
+    else if ("form".compareTo(tagName) == 0)
+    {
+      this.formInputMarks = new HashMap<String, ControlMark>();
+    }
+    else if ("html".compareTo(tagName) == 0)
+    {
+      String ns = attributes.getValue("xmlns");
+      if (ns == null || EpubConstants.HtmlNamespaceUri.compareTo(ns) != 0)
+      {
+        report.message(MessageId.HTM_049, new MessageLocation(this.getFileName(),
+            locator.getLineNumber(),
+            locator.getColumnNumber(), tagName));
+      }
+    }
+    else if ("body".compareTo(tagName) == 0)
+    {
+      String title = attributes.getValue("title");
+      if (title != null && title.length() > 0)
+      {
+        hasTitle = true;
+      }
+    }
+    else if (("title".compareTo(tagName) == 0) && ("head".compareTo(tagStack.peek()) == 0))
+    {
+      inTitle = true;
+    }
+    else if ("nav".compareTo(tagName) == 0)
+    {
+      String type = attributes.getValue(EpubConstants.EpubTypeNamespaceUri, "type");
+      if (type != null && "landmark".compareToIgnoreCase(type) == 0)
+      {
+        ++landmarkNavCount;
+      }
+    }
+    else if ("blockquote".compareTo(tagName) == 0)
+    {
+      inBlockQuote = true;
+    }
+    else if ("figure".compareTo(tagName) == 0)
+    {
+      inFigure = true;
+    }
+    else if ("meta".compareTo(tagName) == 0)
+    {
+      String nameAttribute = attributes.getValue("name");
+      if (nameAttribute != null && "viewport".compareTo(nameAttribute) == 0)
+      {
+        hasViewport = true;
+        String contentAttribute = attributes.getValue("content");
+        if (contentAttribute == null || !(contentAttribute.contains("width") && contentAttribute.contains("height")))
+        {
+          report.message(MessageId.HTM_047, new MessageLocation(this.getFileName(),
+              locator.getLineNumber(),
+              locator.getColumnNumber(), tagName));
+        }
+      }
+    }
+    if (headerTags.contains(tagName))
+    {
+      if (inBlockQuote || inFigure)
+      {
+        report.message(MessageId.ACC_010, new MessageLocation(getFileName(), locator.getLineNumber(), locator.getColumnNumber(), tagName));
+      }
+    }
+
+    if (nonTextTagsAlt.contains(tagName))
+    {
+      if (null != this.getFileName() && null == attributes.getValue("alt"))
+      {
+        report.message(MessageId.ACC_001, new MessageLocation(this.getFileName(),
+            locator.getLineNumber(),
+            locator.getColumnNumber(), tagName));
+      }
+    }
+    if (nonTextTagsTitle.contains(tagName))
+    {
+      if (null != this.getFileName() && null == attributes.getValue("title"))
+      {
+        report.message(MessageId.ACC_003, new MessageLocation(this.getFileName(),
+            locator.getLineNumber(),
+            locator.getColumnNumber(), tagName));
+      }
+    }
+    String epubPrefix = namespaceHelper.findPrefixForUri(EpubConstants.EpubTypeNamespaceUri);
+    if (epubPrefix != null)
+    {
+      String typeAttr = attributes.getValue(epubPrefix+":type");
+      if (typeAttr != null)
+      {
+        if (typeAttr.contains("pagebreak"))
+        {
+          report.message(MessageId.HTM_050, new MessageLocation(this.getFileName(),
+              locator.getLineNumber(),
+              locator.getColumnNumber(), "pagebreak"));
+        }
+      }
+    }
+    tagStack.push(tagName);
+  }
+
+  public void endElement(String uri, String localName, String qName) throws SAXException
+  {
+    namespaceHelper.onEndElement(report);
+
+    String tagName = qName.toLowerCase();
+    String top = tagStack.pop();
+
+    if (top.compareTo(tagName) == 0)
+    {
+      if (("ul".compareTo(tagName) == 0) || ("ol".compareTo(tagName) == 0) || ("Dl".compareTo(tagName) == 0))
+      {
+        Integer count = listItemCounters.remove(listItemCounters.size() - 1);
+        if (count < 1)
+        {
+          report.message(MessageId.HTM_027,
+              new MessageLocation(this.getFileName(),
+                  locator.getLineNumber(),
+                  locator.getColumnNumber(),
+                  qName)
+          );
+        }
+      }
+      if ("body".compareTo(tagName) == 0)
+      {
+        for (String id : formInputMarks.keySet())
+        {
+          ControlMark mark = formInputMarks.get(id);
+          if (((mark.mark & HAS_LABEL) != HAS_LABEL) && (mark.mark & HAS_INPUT) == HAS_INPUT)
+          {
+            report.message(MessageId.ACC_002, mark.location, id);
+          }
+        }
+      }
+      if (inTitle && "title".compareTo(tagName) == 0)
+      {
+        inTitle = false;
+      }
+      else if ("head".compareTo(tagName) == 0)
+      {
+        if (!hasTitle)
+        {
+          report.message(MessageId.HTM_033, new MessageLocation(this.getFileName(),
+              locator.getLineNumber(),
+              locator.getColumnNumber()));
+        }
+        if (isFixed() && !hasViewport)
+        {
+          report.message(MessageId.HTM_046, new MessageLocation(this.getFileName(),
+              locator.getLineNumber(),
+              locator.getColumnNumber()));
+        }
+      }
+      else if ("blockquote".compareTo(tagName) == 0)
+      {
+        inBlockQuote = false;
+      }
+      else if ("figure".compareTo(tagName) == 0)
+      {
+        inFigure = false;
+      }
+    }
+  }
+
+  public void characters(char ch[], int start, int length) throws SAXException
+  {
+    if (inTitle && (length > 0))
+    {
+      hasTitle = true;
+    }
+  }
+}
\ No newline at end of file
diff --git a/src/main/java/com/adobe/epubcheck/ctc/xml/LangAttributeHandler.java b/src/main/java/com/adobe/epubcheck/ctc/xml/LangAttributeHandler.java
new file mode 100644
index 0000000..5850073
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/xml/LangAttributeHandler.java
@@ -0,0 +1,63 @@
+package com.adobe.epubcheck.ctc.xml;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+public class LangAttributeHandler extends DefaultHandler
+{
+
+  private String xmlLangAttr = null;
+  private String langAttr = null;
+
+  public String getXmlLangAttr()
+  {
+    return xmlLangAttr;
+  }
+
+  public String getLangAttr()
+  {
+    return langAttr;
+  }
+
+  public void startElement(String uri, String localName, String qName,
+      Attributes attributes) throws
+      SAXException
+  {
+
+    //outWriter.println("Start Tag -->:<" +qName+">");
+    if (qName.compareToIgnoreCase("HTML") == 0)
+    {
+      for (int i = 0; i < attributes.getLength(); i++)
+      {
+        String attrName = attributes.getQName(i);
+        String attrValue = attributes.getValue(i);
+        if (attrName.compareToIgnoreCase("xml:lang") == 0)
+        {
+          xmlLangAttr = attrValue;
+        }
+        if (attrName.compareToIgnoreCase("lang") == 0)
+        {
+          langAttr = attrValue;
+        }
+      }
+    }
+  }
+
+  public void endElement(String uri, String localName,
+      String qName) throws
+      SAXException
+  {
+
+    //outWriter.println("End Tag   -->:</" + qName+">");
+
+  }
+
+  public void characters(char ch[], int start, int length) throws
+      SAXException
+  {
+
+    //outWriter.println("-----Tag value----------->"+new String(ch, start, length));
+
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ctc/xml/LinkTagHandler.java b/src/main/java/com/adobe/epubcheck/ctc/xml/LinkTagHandler.java
new file mode 100644
index 0000000..4abacd4
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/xml/LinkTagHandler.java
@@ -0,0 +1,172 @@
+package com.adobe.epubcheck.ctc.xml;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.util.LocationImpl;
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import javax.xml.stream.Location;
+import java.util.Vector;
+
+public class LinkTagHandler extends DefaultHandler
+{
+  private final Report report;
+  private Vector<LinkMarkup> linkTags = new Vector<LinkMarkup>();
+
+  public LinkTagHandler(Report report)
+  {
+    this.report = report;
+  }
+
+  private Locator locator;
+
+
+  public void setDocumentLocator(Locator locator)
+  {
+    this.locator = locator;
+  }
+
+  private int styleSheetsCount = 0;
+
+
+  public int getStyleSheetsCount()
+  {
+    return styleSheetsCount;
+  }
+
+  public void checkForMultipleStyleSheets(String fileName)
+  {
+    LinkMarkup firstOne = null;
+    for (LinkMarkup linkTag : linkTags)
+    {
+      if (linkTag.relAttribute.compareToIgnoreCase("stylesheet") == 0)
+      {
+        if (++styleSheetsCount == 1)
+        {
+          firstOne = linkTag;
+        }
+        else if (styleSheetsCount > 1)
+        {
+          if (firstOne != null)
+          {
+            report.message(MessageId.CSS_012, new MessageLocation(fileName, firstOne.getLocation().getLineNumber(), firstOne.getLocation().getColumnNumber(), firstOne.getHrefAttribute()));
+            firstOne = null;
+          }
+          report.message(MessageId.CSS_012, new MessageLocation(fileName, linkTag.getLocation().getLineNumber(), linkTag.getLocation().getColumnNumber(), linkTag.getHrefAttribute()));
+        }
+      }
+
+      if (linkTag.relAttribute.compareToIgnoreCase("alternate stylesheet") == 0)
+      {
+        String title = linkTag.getTitleAttribute();
+        if (title == null || title.trim().equals(""))
+        {
+          report.message(MessageId.CSS_015, new MessageLocation(fileName, linkTag.getLocation().getLineNumber(), linkTag.getLocation().getColumnNumber(), linkTag.getHrefAttribute()));
+        }
+        if (styleSheetsCount == 0)
+        {
+          report.message(MessageId.CSS_016, new MessageLocation(fileName, linkTag.getLocation().getLineNumber(), linkTag.getLocation().getColumnNumber(), linkTag.getHrefAttribute()));
+        }
+      }
+    }
+  }
+
+  public void startElement(String uri, String localName, String qName,
+      Attributes attributes) throws
+      SAXException
+  {
+    if (qName.compareToIgnoreCase("link") == 0)
+    {
+      LinkMarkup la = new LinkMarkup();
+      for (int i = 0; i < attributes.getLength(); i++)
+      {
+        String attrName = attributes.getQName(i);
+        String attrValue = attributes.getValue(i);
+        if (attrName.compareToIgnoreCase("rel") == 0)
+        {
+          la.setRelAttribute(attrValue);
+        }
+        else if (attrName.compareToIgnoreCase("type") == 0)
+        {
+          la.setTypeAttribute(attrValue);
+        }
+        else if (attrName.compareToIgnoreCase("href") == 0)
+        {
+          la.setHrefAttribute(attrValue);
+        }
+        else if (attrName.compareToIgnoreCase("class") == 0)
+        {
+          la.setClassAttribute(attrValue);
+        }
+        else if (attrName.compareToIgnoreCase("title") == 0)
+        {
+          la.setTitleAttribute(attrValue);
+        }
+
+        la.setLocation(new LocationImpl(locator.getLineNumber(), locator.getColumnNumber(), -1, locator.getPublicId(), locator.getSystemId()));
+      }
+      linkTags.add(la);
+    }
+  }
+
+
+  class LinkMarkup
+  {
+    String relAttribute = "";
+    String typeAttribute = "";
+    String hrefAttribute = "";
+    String classAttribute = "";
+    String titleAttribute = "";
+    Location location;
+
+    public void setRelAttribute(String relAttribute)
+    {
+      this.relAttribute = relAttribute;
+    }
+
+    public void setTypeAttribute(String typeAttribute)
+    {
+      this.typeAttribute = typeAttribute;
+    }
+
+    public String getHrefAttribute()
+    {
+      return hrefAttribute;
+    }
+
+    public void setHrefAttribute(String hrefAttribute)
+    {
+      this.hrefAttribute = hrefAttribute;
+    }
+
+    public void setClassAttribute(String classAttribute)
+    {
+      this.classAttribute = classAttribute;
+    }
+
+    public String getTitleAttribute()
+    {
+      return titleAttribute;
+    }
+
+    public void setTitleAttribute(String value)
+    {
+      titleAttribute = value;
+    }
+
+    public Location getLocation()
+    {
+      return location;
+    }
+
+    public void setLocation(Location location)
+    {
+      this.location = location;
+    }
+  }
+}
+
diff --git a/src/main/java/com/adobe/epubcheck/ctc/xml/ScriptElement.java b/src/main/java/com/adobe/epubcheck/ctc/xml/ScriptElement.java
new file mode 100644
index 0000000..d5f46bc
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/xml/ScriptElement.java
@@ -0,0 +1,19 @@
+package com.adobe.epubcheck.ctc.xml;
+
+import java.util.HashMap;
+
+public class ScriptElement
+{
+  private final HashMap<String, String> attrs = new HashMap<String, String>();
+  private boolean isExternal = false;
+
+  public void addAttribute(String name, String value)
+  {
+    attrs.put(name, value);
+  }
+
+  public String getAttribute(String name)
+  {
+    return attrs.get(name);
+  }
+}
\ No newline at end of file
diff --git a/src/main/java/com/adobe/epubcheck/ctc/xml/ScriptTagHandler.java b/src/main/java/com/adobe/epubcheck/ctc/xml/ScriptTagHandler.java
new file mode 100644
index 0000000..4708ef1
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/xml/ScriptTagHandler.java
@@ -0,0 +1,225 @@
+package com.adobe.epubcheck.ctc.xml;
+
+import java.util.HashSet;
+import java.util.Vector;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.ops.OPSHandler30;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.FeatureEnum;
+
+public class ScriptTagHandler extends DefaultHandler
+{
+  private Locator locator;
+  private String fileName;
+  private int inlineScriptCount = 0;
+  private boolean inScript = false;
+  private EPUBVersion version = EPUBVersion.Unknown;
+  private final Report report;
+
+  public static final Pattern xmlHttpRequestPattern = Pattern.compile("new[\\s]*XMLHttpRequest[\\s]*\\(");
+  public static final Pattern microsoftXmlHttpRequestPattern = Pattern.compile("Microsoft.XMLHTTP");
+  public static final Pattern evalPattern = Pattern.compile("((^eval[\\s]*\\()|([^a-zA-Z0-9]eval[\\s]*\\()|([\\s]+eval[\\s]*\\())");
+  public static final Pattern localStoragePattern = Pattern.compile("localStorage\\.");
+  public static final Pattern sessionStoragePattern = Pattern.compile("sessionStorage\\.");
+
+
+  public void setFileName(String fileName)
+  {
+    this.fileName = fileName;
+  }
+
+  public ScriptTagHandler(Report report)
+  {
+    this.report = report;
+  }
+
+  public void setDocumentLocator(Locator locator)
+  {
+    this.locator = locator;
+  }
+
+  public void setVersion(EPUBVersion version)
+  {
+    this.version = version;
+  }
+
+  private final Vector<ScriptElement> scriptElements = new Vector<ScriptElement>();
+
+  public int getScriptElementCount()
+  {
+    return scriptElements.size();
+  }
+
+  public Vector<ScriptElement>  getScriptElements()
+  {
+    return scriptElements;
+  }
+
+  public int getInlineScriptCount()
+  {
+    return inlineScriptCount;
+  }
+
+  public void startElement(String uri, String localName, String qName,
+      Attributes attributes) throws
+      SAXException
+  {
+    if (qName.compareToIgnoreCase("SCRIPT") == 0)
+    {
+      inScript = true;
+      if (this.version == EPUBVersion.VERSION_2)
+      {
+        report.message(MessageId.SCP_004, new MessageLocation(fileName, locator.getLineNumber(), locator.getColumnNumber(), qName));
+      }
+      ScriptElement scriptElement = new ScriptElement();
+      boolean isExternal = false;
+      for (int i = 0; i < attributes.getLength(); i++)
+      {
+        String attrName = attributes.getQName(i);
+        String attrValue = attributes.getValue(i);
+        if (attrName.equalsIgnoreCase("src"))
+        {
+          isExternal = true;
+        }
+        scriptElement.addAttribute(attrName, attrValue);
+      }
+      if (isExternal)
+      {
+        report.info(this.fileName, FeatureEnum.SCRIPT, "external");
+      }
+      else
+      {
+        report.info(this.fileName, FeatureEnum.SCRIPT, "tag");
+      }
+      scriptElements.add(scriptElement);
+    }
+    else
+    {
+      HashSet<String> scriptEvents = OPSHandler30.getScriptEvents();
+      HashSet<String> mouseEvents = OPSHandler30.getMouseEvents();
+
+      for (int i = 0; i < attributes.getLength(); i++)
+      {
+        String attrName = attributes.getLocalName(i).toLowerCase();
+        if (scriptEvents.contains(attrName))
+        {
+          this.inlineScriptCount++;
+          if (this.version == EPUBVersion.VERSION_2)
+          {
+            report.message(MessageId.SCP_004, new MessageLocation(fileName, locator.getLineNumber(), locator.getColumnNumber(), attrName));
+          }
+          report.message(MessageId.SCP_006,
+              new MessageLocation(this.fileName, locator.getLineNumber(), locator.getColumnNumber(), attrName));
+          String attrValue = attributes.getValue(i);
+
+          CheckForInner(attrValue);
+        }
+        if (mouseEvents.contains(attrName))
+        {
+          if (this.version == EPUBVersion.VERSION_2)
+          {
+            report.message(MessageId.SCP_004, new MessageLocation(fileName, locator.getLineNumber(), locator.getColumnNumber(), attrName));
+          }
+          report.message(MessageId.SCP_009,
+              new MessageLocation(this.fileName, locator.getLineNumber(), locator.getColumnNumber(), attrName));
+        }
+      }
+    }
+  }
+
+  public void endElement(String uri, String localName, String qName) throws
+      SAXException
+  {
+    //outWriter.println("End Tag   -->:</" + qName+">");
+    if (qName.compareToIgnoreCase("SCRIPT") == 0)
+    {
+      inScript = false;
+    }
+  }
+
+  public void characters(char ch[], int start, int length) throws
+      SAXException
+  {
+    //outWriter.println("-----Tag value----------->"+new String(ch, start, length));
+    if (inScript)
+    {
+      String script = new String(ch, start, length);
+      CheckForInner(script);
+    }
+  }
+
+  public void CheckForInner(String script)
+  {
+    String lower = script.toLowerCase();
+    int column = lower.indexOf("innerhtml");
+    if (column >= 0)
+    {
+      report.message(MessageId.SCP_007, new MessageLocation(fileName, locator.getLineNumber(), locator.getColumnNumber(), trimContext(script, column)));
+    }
+    column = lower.indexOf("innertext");
+    if (column >= 0)
+    {
+      report.message(MessageId.SCP_008, new MessageLocation(fileName, locator.getLineNumber(), locator.getColumnNumber(), trimContext(script, column)));
+    }
+
+
+    // the exact pattern is very complex and it slows down all script checking.
+    //  what we can do here is use a blunt check (for the word "eval").  if it is not found, keep moving.
+    //  If it is found, look closely using the exact pattern to see if the line truly matches the exact eval() function and report that.
+    Matcher m = null;
+    if (script.contains("eval"))
+    {
+      m = evalPattern.matcher(script);
+      if (m.find())
+      {
+        report.message(MessageId.SCP_001, new MessageLocation(fileName, locator.getLineNumber(), locator.getColumnNumber(), trimContext(script, m.start())));
+      }
+    }
+    m = localStoragePattern.matcher(script);
+    if (m.find())
+    {
+      report.message(MessageId.SCP_003, new MessageLocation(fileName, locator.getLineNumber(), locator.getColumnNumber(), trimContext(script, m.start())));
+    }
+    m = sessionStoragePattern.matcher(script);
+    if (m.find())
+    {
+      report.message(MessageId.SCP_003, new MessageLocation(fileName, locator.getLineNumber(), locator.getColumnNumber(), trimContext(script, m.start())));
+    }
+    m = xmlHttpRequestPattern.matcher(script);
+    if (m.find())
+    {
+      report.message(MessageId.SCP_002, new MessageLocation(fileName, locator.getLineNumber(), locator.getColumnNumber(), trimContext(script, m.start())));
+    }
+    m = microsoftXmlHttpRequestPattern.matcher(script);
+    if (m.find())
+    {
+      report.message(MessageId.SCP_002, new MessageLocation(fileName, locator.getLineNumber(), locator.getColumnNumber(), trimContext(script, m.start())));
+    }
+  }
+
+  static public String trimContext(String context, int start)
+  {
+    String trimmed = context.substring(start).trim();
+    int end = trimmed.indexOf("\n");
+    if (end < 0 && trimmed.length() < 60)
+    {
+      return trimmed;
+    }
+    else
+    {
+      int newEnd = Math.min(60, (end > 0 ? end : trimmed.length()));
+      return  trimmed.substring(0, newEnd);
+    }
+  }
+}
+
diff --git a/src/main/java/com/adobe/epubcheck/ctc/xml/SpanTagHandler.java b/src/main/java/com/adobe/epubcheck/ctc/xml/SpanTagHandler.java
new file mode 100644
index 0000000..dcb40bd
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/xml/SpanTagHandler.java
@@ -0,0 +1,129 @@
+package com.adobe.epubcheck.ctc.xml;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import java.util.LinkedList;
+import java.util.Queue;
+import java.util.Vector;
+
+public class SpanTagHandler extends DefaultHandler
+{
+
+
+  private Element currentElement = null;
+  private Element topElement = null;
+  private int generateMessage = 0;
+  private long characterCount = 0;
+
+  public Element getTopElement()
+  {
+    return topElement;
+  }
+
+  public int getGenerateMessage()
+  {
+    return generateMessage;
+  }
+
+  public void countNestedElements(Element e)
+  {
+    Queue<Element> elementQueue = new LinkedList<Element>();
+    int divElementsCounter = 0;
+    int spanElementsCounter = 0;
+    elementQueue.add(e);
+
+    while (!elementQueue.isEmpty())
+    {
+      e = elementQueue.remove();
+      if (e != null && e.elementName != null)
+      {
+        if (e.elementName.compareToIgnoreCase("DIV") == 0)
+        {
+          divElementsCounter++;
+        }
+        else if (e.elementName.compareToIgnoreCase("SPAN") == 0)
+        {
+          spanElementsCounter++;
+        }
+        for (int i = 0; i < e.nestedElements.size(); i++)
+        {
+          Element childElement = e.nestedElements.get(i);
+          elementQueue.add(childElement);
+        }
+      }
+    }
+
+    long numWords = 1 + (characterCount / 6);
+    if (numWords > 50)
+    {
+      if (((double) divElementsCounter / numWords > .10) || ((double) spanElementsCounter / numWords > .1))
+      {
+        generateMessage++;
+      }
+    }
+  }
+
+  public void startElement(String uri, String localName, String qName,
+      Attributes attributes) throws
+      SAXException
+  {
+
+    Element newElement = new Element(qName);
+    newElement.setParentElement(currentElement);
+    if (currentElement != null)
+    {
+      currentElement.addNestedElement(newElement);
+      currentElement = newElement;
+    }
+    else
+    {
+      currentElement = newElement;
+      topElement = currentElement;
+    }
+
+  }
+
+  public void endElement(String uri, String localName,
+      String qName) throws
+      SAXException
+  {
+    currentElement = currentElement.getParentElement();
+  }
+
+  public void characters(char ch[], int start, int length) throws
+      SAXException
+  {
+    characterCount += (long) length;
+    //outWriter.println("-----Tag value----------->" + new String(ch, start, length));
+  }
+
+
+  class Element
+  {
+    Element parentElement;
+    final Vector<Element> nestedElements = new Vector<Element>();
+    final String elementName;
+
+    public Element(String name)
+    {
+      elementName = name;
+    }
+
+    public void setParentElement(Element e)
+    {
+      parentElement = e;
+    }
+
+    public Element getParentElement()
+    {
+      return parentElement;
+    }
+
+    public void addNestedElement(Element e)
+    {
+      nestedElements.add(e);
+    }
+  }
+}
\ No newline at end of file
diff --git a/src/main/java/com/adobe/epubcheck/ctc/xml/XMLContentDocParser.java b/src/main/java/com/adobe/epubcheck/ctc/xml/XMLContentDocParser.java
new file mode 100644
index 0000000..9fec118
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ctc/xml/XMLContentDocParser.java
@@ -0,0 +1,119 @@
+package com.adobe.epubcheck.ctc.xml;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.ocf.EncryptionFilter;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.DefaultHandler;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Hashtable;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+public class XMLContentDocParser
+{
+
+  private final ZipFile zip;
+  private final Hashtable<String, EncryptionFilter> enc;
+  private final Report report;
+
+  public XMLContentDocParser(ZipFile zip, Report report)
+  {
+    this.zip = zip;
+    this.enc = new Hashtable<String, EncryptionFilter>();
+    this.report = report;
+  }
+
+  public void parseDoc(String fileEntry, DefaultHandler handler)
+  {
+    InputStream is = null;
+    try
+    {
+      is = getInputStream(fileEntry);
+
+      SAXParserFactory factory = SAXParserFactory.newInstance();
+      //factory.setValidating(false);
+      //factory.setFeature("resolve-dtd-uris", false);
+
+
+      SAXParser saxParser = factory.newSAXParser();
+      final XMLReader parser = saxParser.getXMLReader();
+      parser.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
+      parser.setFeature("http://xml.org/sax/features/validation", false);
+      parser.setDTDHandler(handler);
+
+      saxParser.parse(is, handler);
+
+    }
+    catch (FileNotFoundException e)
+    {
+      String message = e.getMessage();
+      message = new File(message).getName();
+      int p = message.indexOf("(");
+      if (p > 0)
+      {
+        message = message.substring(0, message.indexOf("("));
+      }
+      message = message.trim();
+      report.message(MessageId.RSC_001, new MessageLocation(fileEntry, -1, -1), message);
+    }
+    catch (IOException e)
+    {
+      report.message(MessageId.PKG_008, new MessageLocation(fileEntry, -1, -1), fileEntry);
+    }
+    catch (SAXException e)
+    {
+      report.message(MessageId.RSC_005, new MessageLocation(fileEntry, -1, -1), e.getMessage());
+    }
+    catch (ParserConfigurationException e)
+    {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    }
+    finally
+    {
+      if (is != null)
+      {
+        try
+        {
+          is.close();
+        }
+        catch (Exception ignore)
+        {
+        }
+      }
+    }
+
+  }
+
+  InputStream getInputStream(String name) throws
+      IOException
+  {
+    ZipEntry entry = zip.getEntry(name);
+
+    if (entry == null)
+    {
+      return null;
+    }
+    InputStream in = zip.getInputStream(entry);
+    EncryptionFilter filter = enc.get(name);
+    if (filter == null)
+    {
+      return in;
+    }
+    if (filter.canDecrypt())
+    {
+      return filter.decrypt(in);
+    }
+    return null;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/dtbook/DTBookChecker.java b/src/main/java/com/adobe/epubcheck/dtbook/DTBookChecker.java
new file mode 100755
index 0000000..cc7686a
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/dtbook/DTBookChecker.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.dtbook;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.ocf.OCFPackage;
+import com.adobe.epubcheck.opf.ContentChecker;
+import com.adobe.epubcheck.opf.XRefChecker;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.xml.XMLParser;
+import com.adobe.epubcheck.xml.XMLValidators;
+
+public class DTBookChecker implements ContentChecker
+{
+
+  private final OCFPackage ocf;
+
+  private final Report report;
+
+  private final String path;
+
+  private final XRefChecker xrefChecker;
+
+  private final EPUBVersion version;
+
+  public DTBookChecker(OCFPackage ocf, Report report, String path,
+      XRefChecker xrefChecker, EPUBVersion version)
+  {
+    this.ocf = ocf;
+    this.report = report;
+    this.path = path;
+    this.xrefChecker = xrefChecker;
+    this.version = version;
+  }
+
+  public void runChecks()
+  {
+    if (!ocf.hasEntry(path))
+    {
+      report.message(MessageId.RSC_001, new MessageLocation(this.ocf.getName(), -1, -1), path);
+    }
+    else if (!ocf.canDecrypt(path))
+    {
+      report.message(MessageId.RSC_004, new MessageLocation(this.ocf.getName(), 0, 0), path);
+    }
+    else
+    {
+      XMLParser dtbookParser;
+      InputStream in = null;
+      try
+      {
+        in = ocf.getInputStream(path);
+        dtbookParser = new XMLParser(ocf, in, path,
+            "application/x-dtbook+xml", report, version);
+        dtbookParser.addValidator(XMLValidators.DTBOOK_RNG.get());
+        DTBookHandler dtbookHandler = new DTBookHandler(dtbookParser, path,
+            xrefChecker);
+        dtbookParser.addXMLHandler(dtbookHandler);
+        dtbookParser.process();
+      }
+      catch (IOException e)
+      {
+        throw new RuntimeException(e);
+      }
+      finally
+      {
+        try
+        {
+          if (in != null)
+          {
+            in.close();
+          }
+        }
+        catch (IOException ignored)
+        {
+          // eat it
+        }
+      }
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/dtbook/DTBookCheckerFactory.java b/src/main/java/com/adobe/epubcheck/dtbook/DTBookCheckerFactory.java
new file mode 100755
index 0000000..23ecdce
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/dtbook/DTBookCheckerFactory.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.dtbook;
+
+import java.util.Set;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ocf.OCFPackage;
+import com.adobe.epubcheck.opf.ContentChecker;
+import com.adobe.epubcheck.opf.ContentCheckerFactory;
+import com.adobe.epubcheck.opf.XRefChecker;
+import com.adobe.epubcheck.util.EPUBVersion;
+
+public class DTBookCheckerFactory implements ContentCheckerFactory
+{
+  public ContentChecker newInstance(OCFPackage ocf, Report report,
+      String path, String mimeType, String properties,
+      XRefChecker xrefChecker, EPUBVersion version, Set<String> types)
+  {
+    return new DTBookChecker(ocf, report, path, xrefChecker, version);
+  }
+
+  static private final DTBookCheckerFactory instance = new DTBookCheckerFactory();
+
+  static public DTBookCheckerFactory getInstance()
+  {
+    return instance;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/dtbook/DTBookHandler.java b/src/main/java/com/adobe/epubcheck/dtbook/DTBookHandler.java
new file mode 100755
index 0000000..52215d9
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/dtbook/DTBookHandler.java
@@ -0,0 +1,140 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.dtbook;
+
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.opf.XRefChecker;
+import com.adobe.epubcheck.ops.OPSHandler;
+import com.adobe.epubcheck.util.FeatureEnum;
+import com.adobe.epubcheck.util.HandlerUtil;
+import com.adobe.epubcheck.util.PathUtil;
+import com.adobe.epubcheck.xml.XMLElement;
+import com.adobe.epubcheck.xml.XMLHandler;
+import com.adobe.epubcheck.xml.XMLParser;
+
+public class DTBookHandler implements XMLHandler
+{
+  private final XMLParser parser;
+  private final String path;
+  private final XRefChecker xrefChecker;
+  private boolean checkedUnsupportedXmlVersion = false;
+
+  DTBookHandler(XMLParser parser, String path, XRefChecker xrefChecker)
+  {
+    this.parser = parser;
+    this.path = path;
+    this.xrefChecker = xrefChecker;
+  }
+
+  public void characters(char[] chars, int arg1, int arg2)
+  {
+    // do nothing
+  }
+
+  public void ignorableWhitespace(char[] chars, int arg1, int arg2)
+  {
+    // do nothing
+  }
+
+  public void startElement()
+  {
+    if (!checkedUnsupportedXmlVersion)
+    {
+      HandlerUtil.checkXMLVersion(parser);
+      checkedUnsupportedXmlVersion = true;
+    }
+
+    XMLElement e = parser.getCurrentElement();
+    String ns = e.getNamespace();
+    String name = e.getName();
+    String id = e.getAttribute("id");
+    if (ns.equals("http://www.daisy.org/z3986/2005/dtbook/"))
+    {
+      // link at href, a at href, img at src
+      String uri = null;
+      /*
+          * This section checks to see if the references used are registered
+          * schema-types and whether they point to external resources. The
+          * resources are only allowed to be external if the attribute
+          * "external" is set to true.
+          */
+      if (name.equals("a"))
+      {
+        uri = e.getAttribute("href");
+        String external = e.getAttribute("external");
+        if (uri != null && external.equals("true"))
+        {
+          if (OPSHandler.isRegisteredSchemeType(uri))
+          {
+            uri = null;
+          }
+          else if (uri.indexOf(':') > 0)
+          {
+            parser.getReport().message(MessageId.OPF_021,
+                new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()),
+                uri);
+            uri = null;
+          }
+        }
+      }
+      else if (name.equals("link"))
+      {
+        uri = e.getAttribute("href");
+      }
+      else if (name.equals("img"))
+      {
+        uri = e.getAttribute("src");
+      }
+      if (uri != null)
+      {
+        //TODO check if dtbook uses xml:base of so set third param
+        uri = PathUtil.resolveRelativeReference(path, uri, null);
+        xrefChecker.registerReference(path, parser.getLineNumber(),
+            parser.getColumnNumber(), uri,
+            name.equals("img") ? XRefChecker.RT_IMAGE
+                : XRefChecker.RT_HYPERLINK);
+        if (uri.startsWith("http"))
+        {
+          parser.getReport().info(path, FeatureEnum.REFERENCE, uri);
+        }
+      }
+      if (id != null)
+      {
+        xrefChecker.registerAnchor(path, parser.getLineNumber(),
+            parser.getColumnNumber(), id, XRefChecker.RT_HYPERLINK);
+      }
+
+    }
+  }
+
+  public void endElement()
+  {
+    // do nothing
+  }
+
+  public void processingInstruction(String arg0, String arg1)
+  {
+    // do nothing
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/messages/Message.java b/src/main/java/com/adobe/epubcheck/messages/Message.java
new file mode 100644
index 0000000..71751bd
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/messages/Message.java
@@ -0,0 +1,71 @@
+package com.adobe.epubcheck.messages;
+
+import java.util.IllegalFormatException;
+
+/**
+ * This is information associated with a check message.
+ */
+public class Message
+{
+  private final MessageId ID;
+  private final Severity severity;
+  private final Severity originalSeverity;
+  private final String message;
+  private final String suggestion;
+
+  public Message(MessageId messageId, Severity severity, String message, String suggestion)
+  {
+    this.ID = messageId;
+    this.originalSeverity = this.severity = severity;
+    this.message = message;
+    this.suggestion = suggestion;
+  }
+
+  public Message(MessageId messageId, Severity severity, Severity originalSeverity, String message, String suggestion)
+  {
+    this.ID = messageId;
+    this.severity = severity;
+    this.originalSeverity = originalSeverity;
+    this.message = message;
+    this.suggestion = suggestion;
+  }
+
+  public MessageId getID()
+  {
+    return this.ID;
+  }
+
+  public Severity getSeverity()
+  {
+    return this.severity;
+  }
+
+  public Severity getOriginalSeverity()
+  {
+    return this.originalSeverity;
+  }
+
+  public String getSuggestion()
+  {
+    return this.suggestion;
+  }
+
+  public String getMessage(Object... args)
+  {
+    String result = this.getMessage();
+    try
+    {
+      result = String.format(result, args);
+    }
+    catch (IllegalFormatException e)
+    {
+      result = this.getMessage() + " :" + e.getMessage();
+    }
+    return result;
+  }
+
+  public String getMessage()
+  {
+    return this.message;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/messages/MessageDictionary.java b/src/main/java/com/adobe/epubcheck/messages/MessageDictionary.java
new file mode 100644
index 0000000..b4fe16e
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/messages/MessageDictionary.java
@@ -0,0 +1,601 @@
+package com.adobe.epubcheck.messages;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.charset.Charset;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.PropertyResourceBundle;
+import java.util.ResourceBundle;
+import java.util.ResourceBundle.Control;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.util.PathUtil;
+import com.adobe.epubcheck.util.outWriter;
+import com.google.common.base.Charsets;
+
+/**
+ * This is a dictionary that maps the text of a message to a severity.
+ */
+public class MessageDictionary
+{
+  File overrideFile;
+  Report report;
+  static Map<MessageId, Severity> defaultSeverityMap = null;
+  static Pattern parameterPattern = Pattern.compile("%(\\d+)\\$s");
+
+  public void setOverrideFile(File value)
+  {
+    overrideFile = value;
+    initMessageMap();
+  }
+
+  public MessageDictionary(File overrideFile, Report report)
+  {
+    this.report = report;
+    this.overrideFile = overrideFile;
+    initMessageMap();
+  }
+
+  Map<MessageId, Message> messages = new HashMap<MessageId, Message>();
+  static final ResourceBundle labels = ResourceBundle.getBundle("com.adobe.epubcheck.messages.MessageBundle",
+                                                                Locale.getDefault(), new UTF8Control());
+
+  public Message getMessage(MessageId id)
+  {
+    return this.messages.get(id);
+  }
+
+  static Map<MessageId, Severity> getDefaultSeverities()
+  {
+    if (defaultSeverityMap == null)
+    {
+      Map<MessageId, Severity> map = new HashMap<MessageId, Severity>(MessageId.values().length);
+
+      //Accessibility
+      map.put(MessageId.ACC_001, Severity.USAGE);
+      map.put(MessageId.ACC_002, Severity.USAGE);
+      map.put(MessageId.ACC_003, Severity.SUPPRESSED);
+      map.put(MessageId.ACC_004, Severity.SUPPRESSED);
+      map.put(MessageId.ACC_005, Severity.SUPPRESSED);
+      map.put(MessageId.ACC_006, Severity.SUPPRESSED);
+      map.put(MessageId.ACC_007, Severity.USAGE);
+      map.put(MessageId.ACC_008, Severity.USAGE);
+      map.put(MessageId.ACC_009, Severity.WARNING);
+      map.put(MessageId.ACC_010, Severity.SUPPRESSED);
+      map.put(MessageId.ACC_011, Severity.WARNING);
+      map.put(MessageId.ACC_012, Severity.SUPPRESSED);
+      map.put(MessageId.ACC_013, Severity.USAGE);
+      map.put(MessageId.ACC_014, Severity.USAGE);
+      map.put(MessageId.ACC_015, Severity.USAGE);
+      map.put(MessageId.ACC_016, Severity.USAGE);
+      map.put(MessageId.ACC_017, Severity.USAGE);
+
+      // CHK
+      map.put(MessageId.CHK_001, Severity.ERROR);
+      map.put(MessageId.CHK_002, Severity.ERROR);
+      map.put(MessageId.CHK_003, Severity.ERROR);
+      map.put(MessageId.CHK_004, Severity.ERROR);
+      map.put(MessageId.CHK_005, Severity.ERROR);
+      map.put(MessageId.CHK_006, Severity.ERROR);
+      map.put(MessageId.CHK_007, Severity.ERROR);
+
+      //CSS
+      map.put(MessageId.CSS_001, Severity.ERROR);
+      map.put(MessageId.CSS_002, Severity.ERROR);
+      map.put(MessageId.CSS_003, Severity.ERROR);
+      map.put(MessageId.CSS_004, Severity.ERROR);
+      map.put(MessageId.CSS_005, Severity.ERROR);
+      map.put(MessageId.CSS_006, Severity.WARNING);
+      map.put(MessageId.CSS_007, Severity.WARNING);
+      map.put(MessageId.CSS_008, Severity.ERROR);
+      map.put(MessageId.CSS_009, Severity.USAGE);
+      map.put(MessageId.CSS_010, Severity.WARNING);
+      map.put(MessageId.CSS_011, Severity.SUPPRESSED);
+      map.put(MessageId.CSS_012, Severity.USAGE);
+      map.put(MessageId.CSS_013, Severity.USAGE);
+      map.put(MessageId.CSS_015, Severity.ERROR);
+      map.put(MessageId.CSS_016, Severity.SUPPRESSED);
+      map.put(MessageId.CSS_017, Severity.WARNING);
+      map.put(MessageId.CSS_019, Severity.WARNING);
+      map.put(MessageId.CSS_020, Severity.USAGE);
+      map.put(MessageId.CSS_021, Severity.USAGE);
+      map.put(MessageId.CSS_022, Severity.USAGE);
+      map.put(MessageId.CSS_023, Severity.USAGE);
+      map.put(MessageId.CSS_024, Severity.USAGE);
+      map.put(MessageId.CSS_025, Severity.USAGE);
+      map.put(MessageId.CSS_027, Severity.USAGE);
+      map.put(MessageId.CSS_028, Severity.USAGE);
+
+      //HTML
+      map.put(MessageId.HTM_001, Severity.ERROR);
+      map.put(MessageId.HTM_002, Severity.WARNING);
+      map.put(MessageId.HTM_003, Severity.ERROR);
+      map.put(MessageId.HTM_004, Severity.ERROR);
+      map.put(MessageId.HTM_005, Severity.USAGE);
+      map.put(MessageId.HTM_006, Severity.USAGE);
+      map.put(MessageId.HTM_007, Severity.WARNING);
+      map.put(MessageId.HTM_008, Severity.ERROR);
+      map.put(MessageId.HTM_009, Severity.ERROR);
+      map.put(MessageId.HTM_010, Severity.USAGE);
+      map.put(MessageId.HTM_011, Severity.ERROR);
+      map.put(MessageId.HTM_012, Severity.USAGE);
+      map.put(MessageId.HTM_013, Severity.USAGE);
+      map.put(MessageId.HTM_014, Severity.WARNING);
+      map.put(MessageId.HTM_014a, Severity.WARNING);
+      map.put(MessageId.HTM_015, Severity.WARNING);
+      map.put(MessageId.HTM_016, Severity.WARNING);
+      map.put(MessageId.HTM_017, Severity.ERROR);
+      map.put(MessageId.HTM_018, Severity.ERROR);
+      map.put(MessageId.HTM_019, Severity.ERROR);
+      map.put(MessageId.HTM_020, Severity.USAGE);
+      map.put(MessageId.HTM_021, Severity.USAGE);
+      map.put(MessageId.HTM_022, Severity.USAGE);
+      map.put(MessageId.HTM_023, Severity.WARNING);
+      map.put(MessageId.HTM_024, Severity.USAGE);
+      map.put(MessageId.HTM_025, Severity.WARNING);
+      map.put(MessageId.HTM_027, Severity.USAGE);
+      map.put(MessageId.HTM_028, Severity.USAGE);
+      map.put(MessageId.HTM_029, Severity.USAGE);
+      map.put(MessageId.HTM_033, Severity.USAGE);
+      map.put(MessageId.HTM_036, Severity.SUPPRESSED);
+      map.put(MessageId.HTM_038, Severity.USAGE);
+      map.put(MessageId.HTM_043, Severity.USAGE);
+      map.put(MessageId.HTM_044, Severity.USAGE);
+      map.put(MessageId.HTM_045, Severity.USAGE);
+      map.put(MessageId.HTM_046, Severity.ERROR);
+      map.put(MessageId.HTM_047, Severity.ERROR);
+      map.put(MessageId.HTM_048, Severity.ERROR);
+      map.put(MessageId.HTM_049, Severity.ERROR);
+      map.put(MessageId.HTM_050, Severity.USAGE);
+
+      //Media
+      map.put(MessageId.MED_001, Severity.ERROR);
+      map.put(MessageId.MED_002, Severity.ERROR);
+      map.put(MessageId.MED_003, Severity.ERROR);
+      map.put(MessageId.MED_004, Severity.ERROR);
+      map.put(MessageId.MED_005, Severity.ERROR);
+      map.put(MessageId.MED_006, Severity.USAGE);
+
+      //NAV
+      map.put(MessageId.NAV_001, Severity.ERROR);
+      map.put(MessageId.NAV_002, Severity.USAGE);
+      map.put(MessageId.NAV_003, Severity.SUPPRESSED);
+
+      //NCX
+      map.put(MessageId.NCX_002, Severity.ERROR);
+      map.put(MessageId.NCX_003, Severity.USAGE);
+      map.put(MessageId.NCX_005, Severity.USAGE);
+      map.put(MessageId.NCX_006, Severity.USAGE);
+
+      //OPF
+      map.put(MessageId.OPF_001, Severity.ERROR);
+      map.put(MessageId.OPF_002, Severity.FATAL);
+      map.put(MessageId.OPF_003, Severity.WARNING);
+      map.put(MessageId.OPF_004, Severity.WARNING);
+      map.put(MessageId.OPF_004a, Severity.ERROR);
+      map.put(MessageId.OPF_004b, Severity.ERROR);
+      map.put(MessageId.OPF_004c, Severity.ERROR);
+      map.put(MessageId.OPF_004d, Severity.ERROR);
+      map.put(MessageId.OPF_004e, Severity.WARNING);
+      map.put(MessageId.OPF_004f, Severity.WARNING);
+      map.put(MessageId.OPF_005, Severity.ERROR);
+      map.put(MessageId.OPF_006, Severity.ERROR);
+      map.put(MessageId.OPF_007, Severity.WARNING);
+      map.put(MessageId.OPF_007a, Severity.ERROR);
+      map.put(MessageId.OPF_007b, Severity.ERROR);
+      map.put(MessageId.OPF_008, Severity.ERROR);
+      map.put(MessageId.OPF_009, Severity.ERROR);
+      map.put(MessageId.OPF_010, Severity.ERROR);
+      map.put(MessageId.OPF_011, Severity.ERROR);
+      map.put(MessageId.OPF_012, Severity.ERROR);
+      map.put(MessageId.OPF_013, Severity.ERROR);
+      map.put(MessageId.OPF_014, Severity.ERROR);
+      map.put(MessageId.OPF_015, Severity.ERROR);
+      map.put(MessageId.OPF_016, Severity.ERROR);
+      map.put(MessageId.OPF_017, Severity.ERROR);
+      map.put(MessageId.OPF_018, Severity.WARNING);
+      map.put(MessageId.OPF_019, Severity.FATAL);
+      map.put(MessageId.OPF_020, Severity.SUPPRESSED);
+      map.put(MessageId.OPF_021, Severity.WARNING);
+      map.put(MessageId.OPF_022, Severity.ERROR);
+      map.put(MessageId.OPF_024, Severity.ERROR);
+      map.put(MessageId.OPF_025, Severity.ERROR);
+      map.put(MessageId.OPF_026, Severity.ERROR);
+      map.put(MessageId.OPF_027, Severity.ERROR);
+      map.put(MessageId.OPF_028, Severity.ERROR);
+      map.put(MessageId.OPF_029, Severity.ERROR);
+      map.put(MessageId.OPF_030, Severity.ERROR);
+      map.put(MessageId.OPF_031, Severity.ERROR);
+      map.put(MessageId.OPF_032, Severity.ERROR);
+      map.put(MessageId.OPF_033, Severity.ERROR);
+      map.put(MessageId.OPF_034, Severity.ERROR);
+      map.put(MessageId.OPF_035, Severity.WARNING);
+      map.put(MessageId.OPF_036, Severity.USAGE);
+      map.put(MessageId.OPF_037, Severity.WARNING);
+      map.put(MessageId.OPF_038, Severity.WARNING);
+      map.put(MessageId.OPF_039, Severity.WARNING);
+      map.put(MessageId.OPF_040, Severity.ERROR);
+      map.put(MessageId.OPF_041, Severity.ERROR);
+      map.put(MessageId.OPF_042, Severity.ERROR);
+      map.put(MessageId.OPF_043, Severity.ERROR);
+      map.put(MessageId.OPF_044, Severity.ERROR);
+      map.put(MessageId.OPF_045, Severity.ERROR);
+      map.put(MessageId.OPF_046, Severity.ERROR);
+      map.put(MessageId.OPF_047, Severity.USAGE);
+      map.put(MessageId.OPF_048, Severity.ERROR);
+      map.put(MessageId.OPF_049, Severity.ERROR);
+      map.put(MessageId.OPF_050, Severity.ERROR);
+      map.put(MessageId.OPF_051, Severity.SUPPRESSED);
+      map.put(MessageId.OPF_052, Severity.ERROR);
+      map.put(MessageId.OPF_053, Severity.WARNING);
+      map.put(MessageId.OPF_054, Severity.ERROR);
+      map.put(MessageId.OPF_055, Severity.WARNING);
+      map.put(MessageId.OPF_056, Severity.WARNING);
+      map.put(MessageId.OPF_057, Severity.SUPPRESSED);
+      map.put(MessageId.OPF_058, Severity.USAGE);
+      map.put(MessageId.OPF_059, Severity.USAGE);
+      map.put(MessageId.OPF_060, Severity.ERROR);
+      map.put(MessageId.OPF_061, Severity.WARNING);
+      map.put(MessageId.OPF_062, Severity.USAGE);
+      map.put(MessageId.OPF_063, Severity.WARNING);
+
+      //PKG
+      map.put(MessageId.PKG_001, Severity.WARNING);
+      map.put(MessageId.PKG_003, Severity.ERROR);
+      map.put(MessageId.PKG_004, Severity.FATAL);
+      map.put(MessageId.PKG_005, Severity.ERROR);
+      map.put(MessageId.PKG_006, Severity.ERROR);
+      map.put(MessageId.PKG_007, Severity.ERROR);
+      map.put(MessageId.PKG_008, Severity.FATAL);
+      map.put(MessageId.PKG_009, Severity.ERROR);
+      map.put(MessageId.PKG_010, Severity.WARNING);
+      map.put(MessageId.PKG_011, Severity.ERROR);
+      map.put(MessageId.PKG_012, Severity.WARNING);
+      map.put(MessageId.PKG_013, Severity.ERROR);
+      map.put(MessageId.PKG_014, Severity.WARNING);
+      map.put(MessageId.PKG_015, Severity.FATAL);
+      map.put(MessageId.PKG_016, Severity.WARNING);
+      map.put(MessageId.PKG_017, Severity.WARNING);
+      map.put(MessageId.PKG_018, Severity.FATAL);
+      map.put(MessageId.PKG_020, Severity.ERROR);
+      map.put(MessageId.PKG_021, Severity.ERROR);
+      map.put(MessageId.PKG_022, Severity.WARNING);
+
+      //Resources
+      map.put(MessageId.RSC_001, Severity.ERROR);
+      map.put(MessageId.RSC_002, Severity.FATAL);
+      map.put(MessageId.RSC_003, Severity.ERROR);
+      map.put(MessageId.RSC_004, Severity.ERROR);
+      map.put(MessageId.RSC_005, Severity.ERROR);
+      map.put(MessageId.RSC_006, Severity.ERROR);
+      map.put(MessageId.RSC_007, Severity.ERROR);
+      map.put(MessageId.RSC_008, Severity.ERROR);
+      map.put(MessageId.RSC_009, Severity.ERROR);
+      map.put(MessageId.RSC_010, Severity.ERROR);
+      map.put(MessageId.RSC_011, Severity.WARNING);
+      map.put(MessageId.RSC_012, Severity.ERROR);
+      map.put(MessageId.RSC_013, Severity.ERROR);
+      map.put(MessageId.RSC_014, Severity.ERROR);
+      map.put(MessageId.RSC_015, Severity.ERROR);
+      map.put(MessageId.RSC_016, Severity.FATAL);
+      map.put(MessageId.RSC_017, Severity.WARNING);
+      map.put(MessageId.RSC_018, Severity.WARNING);
+
+      //Scripting
+      map.put(MessageId.SCP_001, Severity.USAGE);
+      map.put(MessageId.SCP_002, Severity.USAGE);
+      map.put(MessageId.SCP_003, Severity.USAGE);
+      map.put(MessageId.SCP_004, Severity.ERROR);
+      map.put(MessageId.SCP_005, Severity.ERROR);
+      map.put(MessageId.SCP_006, Severity.USAGE);
+      map.put(MessageId.SCP_007, Severity.USAGE);
+      map.put(MessageId.SCP_008, Severity.USAGE);
+      map.put(MessageId.SCP_009, Severity.USAGE);
+      map.put(MessageId.SCP_010, Severity.USAGE);
+
+      defaultSeverityMap = map;
+    }
+    return defaultSeverityMap;
+  }
+
+  void initDefaultMessageMap()
+  {
+    messages.clear();
+    for (Map.Entry<MessageId, Severity> entry : getDefaultSeverities().entrySet())
+    {
+      this.addMessage(entry.getKey(), entry.getValue());
+    }
+  }
+
+  void initMessageMap()
+  {
+    initDefaultMessageMap();
+    loadOverriddenMessageSeverities();
+  }
+
+  void loadOverriddenMessageSeverities()
+  {
+    if (overrideFile != null)
+    {
+      int lineNumber = -1;
+      int columnNumber = -1;
+      String line;
+
+      FileInputStream fis = null;
+      BufferedReader br = null;
+      try
+      {
+        fis = new FileInputStream(overrideFile);
+        br = new BufferedReader(new InputStreamReader(fis, Charset.forName("UTF-8")));
+
+        lineNumber = 1;
+
+        while (null != (line = br.readLine()))
+        {
+          if (1 == lineNumber)
+          {
+            if (line.toLowerCase().startsWith("id"))
+            {
+              // optionally eat the first line
+              continue;
+            }
+          }
+          columnNumber = 0;
+          String[] fields = line.split("\t");
+          if (fields.length >= 2)
+          {
+            MessageId id;
+            try
+            {
+              id = MessageId.fromString(fields[0]);
+            }
+            catch (NoSuchElementException unused)
+            {
+              report.message(MessageId.CHK_002, new MessageLocation("", lineNumber, 0), fields[0], PathUtil.removeWorkingDirectory(overrideFile.getAbsolutePath()));
+              continue;
+            }
+
+            Severity newSeverity;
+
+            try
+            {
+              columnNumber += 1 + fields[0].length();
+              newSeverity = Severity.fromString(fields[1]);
+            }
+            catch (NoSuchElementException ignored)
+            {
+              report.message(MessageId.CHK_003, new MessageLocation("", lineNumber, columnNumber), fields[1], PathUtil.removeWorkingDirectory(overrideFile.getAbsolutePath()));
+              continue;
+            }
+
+            Message message = messages.get(id);
+            String messageText = message.getMessage();
+            if (fields.length >= 3 && fields[2] != null && fields[2].length() > 0)
+            {
+              columnNumber += 1 + fields[1].length();
+              messageText = checkMessageForParameterCount(lineNumber, columnNumber, message.getMessage(), fields[2]);
+              if (messageText == null)
+              {
+                report.message(MessageId.CHK_004, new MessageLocation("", lineNumber, 0, fields[2]), PathUtil.removeWorkingDirectory(overrideFile.getAbsolutePath()));
+                continue;
+              }
+            }
+            if (messageText != null)
+            {
+              Severity oldSeverity = getDefaultSeverities().get(message.getID());
+              if (newSeverity != oldSeverity)
+              {
+                messageText = String.format(" (severity overridden from %1$s) %2$s", oldSeverity, messageText);
+              }
+            }
+
+            String suggestionText = message.getSuggestion();
+            if (fields.length >= 4 && fields[3] != null && fields[3].length() > 0)
+            {
+              columnNumber += 1 + fields[1].length();
+              suggestionText = checkMessageForParameterCount(lineNumber, columnNumber, message.getSuggestion(), fields[3]);
+              if (suggestionText == null)
+              {
+                report.message(MessageId.CHK_005, new MessageLocation("", lineNumber, 0, fields[3]), PathUtil.removeWorkingDirectory(overrideFile.getAbsolutePath()));
+                continue;
+              }
+            }
+
+            if (message != null &&
+                ((newSeverity != message.getSeverity()) ||
+                    (messageText.compareTo(message.getMessage()) != 0) ||
+                    (suggestionText.compareTo(message.getSuggestion()) != 0)))
+            {
+              messages.put(id, new Message(message.getID(), newSeverity, message.getSeverity(), messageText, suggestionText));
+            }
+          }
+          ++lineNumber;
+        }
+      }
+      catch (FileNotFoundException fnf)
+      {
+        report.message(MessageId.CHK_001, new MessageLocation(overrideFile.getAbsolutePath(), -1, -1));
+      }
+      catch (IOException ex)
+      {
+        report.message(MessageId.CHK_007, new MessageLocation("", lineNumber, columnNumber), PathUtil.removeWorkingDirectory(overrideFile.getAbsolutePath()), ex.getMessage());
+      }
+      finally
+      {
+        try
+        {
+          if (br != null)
+          {
+            br.close();
+          }
+          if (fis != null)
+          {
+            fis.close();
+          }
+        }
+        catch (IOException ignored)
+        {
+        }
+      }
+    }
+  }
+
+  String checkMessageForParameterCount(int lineNumber, int columnNumber, String originalText, String newText)
+  {
+    if (newText != null)
+    {
+      int maxOriginal = getParameterCount(lineNumber, columnNumber, originalText);
+      int maxNew = getParameterCount(lineNumber, columnNumber, newText);
+
+      if (maxNew <= maxOriginal)
+      {
+        return newText;
+      }
+      return null;
+    }
+    return originalText;
+  }
+
+  int getParameterCount(int lineNumber, int columnNumber, String text)
+  {
+    int max = 0;
+    {
+      Matcher m = parameterPattern.matcher(text);
+      while (m.find())
+      {
+        int absoluteColumnNumber = columnNumber + m.start();
+        String s = m.group(1);
+        try
+        {
+          Integer number = Integer.parseInt(s);
+          if (number > max)
+          {
+            max = number;
+          }
+        }
+        catch (NumberFormatException ex)
+        {
+          String pathAdjustedFileName = PathUtil.removeWorkingDirectory(overrideFile.getAbsolutePath());
+          report.message(MessageId.CHK_006, new MessageLocation("", lineNumber, absoluteColumnNumber, text), pathAdjustedFileName);
+        }
+      }
+    }
+    return max;
+  }
+
+  void addMessage(MessageId messageId, Severity severity)
+  {
+    try
+    {
+      messages.put(messageId, new Message(messageId, severity, labels.getString(messageId.name()), getSuggestion(messageId)));
+    }
+    catch (Exception e)
+    {
+      outWriter.println("Couldn't locate message " + messageId.name());
+    }
+  }
+
+  String getSuggestion(MessageId messageId)
+  {
+    String result;
+    try
+    {
+      result = labels.getString(messageId.name() + "_SUG");
+    }
+    catch (Exception ignore)
+    {
+      result = "";
+    }
+    return result;
+  }
+
+  public void dumpMessages(OutputStreamWriter outputStream) throws
+      IOException
+  {
+    // Output the messages in a tab separated format
+    outputStream.write("ID\tSeverity\tMessage\tSuggestion\n");
+    for (MessageId id : MessageId.values())
+    {
+      StringBuilder sb = new StringBuilder();
+      sb.append(id.toString());
+      sb.append("\t");
+      Message message = this.getMessage(id);
+      if (message != null)
+      {
+        sb.append(message.getSeverity());
+        sb.append("\t");
+        sb.append(message.getMessage());
+        sb.append("\t");
+        sb.append(message.getSuggestion());
+      }
+      else
+      {
+        sb.append("null\tnull\tnull\tnull");
+      }
+      sb.append("\n");
+      outputStream.write(sb.toString());
+    }
+  }
+
+  private static class UTF8Control extends Control
+  {
+    public ResourceBundle newBundle
+        (String baseName, Locale locale, String format, ClassLoader loader, boolean reload)
+        throws
+        IllegalAccessException,
+        InstantiationException,
+        IOException
+    {
+      // The below is a copy of the default implementation.
+      String bundleName = toBundleName(baseName, locale);
+      String resourceName = toResourceName(bundleName, "properties"); //$NON-NLS-1$
+      ResourceBundle bundle = null;
+      InputStream stream = null;
+      if (reload)
+      {
+        URL url = loader.getResource(resourceName);
+        if (url != null)
+        {
+          URLConnection connection = url.openConnection();
+          if (connection != null)
+          {
+            connection.setUseCaches(false);
+            stream = connection.getInputStream();
+          }
+        }
+      }
+      else
+      {
+        stream = loader.getResourceAsStream(resourceName);
+      }
+      if (stream != null)
+      {
+        try
+        {
+          // Only this line is changed to make it to read properties files as UTF-8.
+          bundle = new PropertyResourceBundle(
+              new BufferedReader(
+                  new InputStreamReader(stream, Charsets.UTF_8)));
+        }
+        finally
+        {
+          stream.close();
+        }
+      }
+      return bundle;
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/messages/MessageId.java b/src/main/java/com/adobe/epubcheck/messages/MessageId.java
new file mode 100644
index 0000000..e111a65
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/messages/MessageId.java
@@ -0,0 +1,305 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.messages;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.NoSuchElementException;
+
+public enum MessageId implements Comparable<MessageId>
+{
+  // Messages relating to accessibility
+  ACC_001("ACC-001"),
+  ACC_002("ACC-002"),
+  ACC_003("ACC-003"),
+  ACC_004("ACC-004"),
+  ACC_005("ACC-005"),
+  ACC_006("ACC-006"),
+  ACC_007("ACC-007"),
+  ACC_008("ACC-008"),
+  ACC_009("ACC-009"),
+  ACC_010("ACC-010"),
+  ACC_011("ACC-011"),
+  ACC_012("ACC-012"),
+  ACC_013("ACC-013"),
+  ACC_014("ACC-014"),
+  ACC_015("ACC-015"),
+  ACC_016("ACC-016"),
+  ACC_017("ACC-017"),
+
+  // Messages relating to the checker configuration
+  CHK_001("CHK-001"),
+  CHK_002("CHK-002"),
+  CHK_003("CHK-003"),
+  CHK_004("CHK-004"),
+  CHK_005("CHK-005"),
+  CHK_006("CHK-006"),
+  CHK_007("CHK-007"),
+
+  // Messages associated with styles
+  CSS_001("CSS-001"),
+  CSS_002("CSS-002"),
+  CSS_003("CSS-003"),
+  CSS_004("CSS-004"),
+  CSS_005("CSS-005"),
+  CSS_006("CSS-006"),
+  CSS_007("CSS-007"),
+  CSS_008("CSS-008"),
+  CSS_009("CSS-009"),
+  CSS_010("CSS-010"),
+  CSS_011("CSS-011"),
+  CSS_012("CSS-012"),
+  CSS_013("CSS-013"),
+  CSS_015("CSS-015"),
+  CSS_016("CSS-016"),
+  CSS_017("CSS-017"),
+  CSS_019("CSS-019"),
+  CSS_020("CSS-020"),
+  CSS_021("CSS-021"),
+  CSS_022("CSS-022"),
+  CSS_023("CSS-023"),
+  CSS_024("CSS-024"),
+  CSS_025("CSS-025"),
+  CSS_027("CSS-027"),
+  CSS_028("CSS-028"),
+
+  // Messages relating to xhtml markup
+  HTM_001("HTM-001"),
+  HTM_002("HTM-002"),
+  HTM_003("HTM-003"),
+  HTM_004("HTM-004"),
+  HTM_005("HTM-005"),
+  HTM_006("HTM-006"),
+  HTM_007("HTM-007"),
+  HTM_008("HTM-008"),
+  HTM_009("HTM-009"),
+  HTM_010("HTM-010"),
+  HTM_011("HTM-011"),
+  HTM_012("HTM-012"),
+  HTM_013("HTM-013"),
+  HTM_014("HTM-014"),
+  HTM_014a("HTM-014a"),
+  HTM_015("HTM-015"),
+  HTM_016("HTM-016"),
+  HTM_017("HTM-017"),
+  HTM_018("HTM-018"),
+  HTM_019("HTM-019"),
+  HTM_020("HTM-020"),
+  HTM_021("HTM-021"),
+  HTM_022("HTM-022"),
+  HTM_023("HTM-023"),
+  HTM_024("HTM-024"),
+  HTM_025("HTM-025"),
+  HTM_027("HTM-027"),
+  HTM_028("HTM-028"),
+  HTM_029("HTM-029"),
+  HTM_033("HTM-033"),
+  HTM_036("HTM-036"),
+  HTM_038("HTM-038"),
+  HTM_043("HTM-043"),
+  HTM_044("HTM-044"),
+  HTM_045("HTM-045"),
+  HTM_046("HTM-046"),
+  HTM_047("HTM-047"),
+  HTM_048("HTM-048"),
+  HTM_049("HTM-049"),
+  HTM_050("HTM-050"),
+
+  // Messages associated with media (images, audio and video)
+  MED_001("MED-001"),
+  MED_002("MED-002"),
+  MED_003("MED-003"),
+  MED_004("MED-004"),
+  MED_005("MED-005"),
+  MED_006("MED_006"),
+
+  // Epub3 based table of content errors
+  NAV_001("NAV-001"),
+  NAV_002("NAV-002"),
+  NAV_003("NAV-003"),
+
+  // Epub2 based table of content messages
+  NCX_002("NCX-002"),
+  NCX_003("NCX-003"),
+  NCX_005("NCX-005"),
+  NCX_006("NCX-006"),
+
+  // Messages related to the markup in the OPF file
+  OPF_001("OPF-001"),
+  OPF_002("OPF-002"),
+  OPF_003("OPF-003"),
+  OPF_004("OPF-004"),
+  OPF_004a("OPF-004a"),
+  OPF_004b("OPF-004b"),
+  OPF_004c("OPF-004c"),
+  OPF_004d("OPF-004d"),
+  OPF_004e("OPF-004e"),
+  OPF_004f("OPF-004f"),
+  OPF_005("OPF-005"),
+  OPF_006("OPF-006"),
+  OPF_007("OPF-007"),
+  OPF_007a("OPF-007a"),
+  OPF_007b("OPF-007b"),
+  OPF_008("OPF-008"),
+  OPF_009("OPF-009"),
+  OPF_010("OPF-010"),
+  OPF_011("OPF-011"),
+  OPF_012("OPF-012"),
+  OPF_013("OPF-013"),
+  OPF_014("OPF-014"),
+  OPF_015("OPF-015"),
+  OPF_016("OPF-016"),
+  OPF_017("OPF-017"),
+  OPF_018("OPF-018"),
+  OPF_019("OPF-019"),
+  OPF_020("OPF-020"),
+  OPF_021("OPF-021"),
+  OPF_022("OPF-022"),
+  OPF_024("OPF-024"),
+  OPF_025("OPF-025"),
+  OPF_026("OPF-026"),
+  OPF_027("OPF-027"),
+  OPF_028("OPF-028"),
+  OPF_029("OPF-029"),
+  OPF_030("OPF-030"),
+  OPF_031("OPF-031"),
+  OPF_032("OPF-032"),
+  OPF_033("OPF-033"),
+  OPF_034("OPF-034"),
+  OPF_035("OPF-035"),
+  OPF_036("OPF-036"),
+  OPF_037("OPF-037"),
+  OPF_038("OPF-038"),
+  OPF_039("OPF-039"),
+  OPF_040("OPF-040"),
+  OPF_041("OPF-041"),
+  OPF_042("OPF-042"),
+  OPF_043("OPF-043"),
+  OPF_044("OPF-044"),
+  OPF_045("OPF-045"),
+  OPF_046("OPF-046"),
+  OPF_047("OPF-047"),
+  OPF_048("OPF-048"),
+  OPF_049("OPF-049"),
+  OPF_050("OPF-050"),
+  OPF_051("OPF-051"),
+  OPF_052("OPF-052"),
+  OPF_053("OPF-053"),
+  OPF_054("OPF-054"),
+  OPF_055("OPF-055"),
+  OPF_056("OPF-056"),
+  OPF_057("OPF-057"),
+  OPF_058("OPF-058"),
+  OPF_059("OPF-059"),
+  OPF_060("OPF-060"),
+  OPF_061("OPF-061"),
+  OPF_062("OPF-062"),
+  OPF_063("OPF-063"),
+
+  // Messages relating to the entire package
+  PKG_001("PKG-001"),
+  PKG_003("PKG-003"),
+  PKG_004("PKG-004"),
+  PKG_005("PKG-005"),
+  PKG_006("PKG-006"),
+  PKG_007("PKG-007"),
+  PKG_008("PKG-008"),
+  PKG_009("PKG-009"),
+  PKG_010("PKG-010"),
+  PKG_011("PKG-011"),
+  PKG_012("PKG-012"),
+  PKG_013("PKG-013"),
+  PKG_014("PKG-014"),
+  PKG_015("PKG-015"),
+  PKG_016("PKG-016"),
+  PKG_017("PKG-017"),
+  PKG_018("PKG-018"),
+  PKG_020("PKG-020"),
+  PKG_021("PKG-021"),
+  PKG_022("PKG-022"),
+
+  // Messages relating to resources
+  RSC_001("RSC-001"),
+  RSC_002("RSC-002"),
+  RSC_003("RSC-003"),
+  RSC_004("RSC-004"),
+  RSC_005("RSC-005"),
+  RSC_006("RSC-006"),
+  RSC_007("RSC-007"),
+  RSC_008("RSC-008"),
+  RSC_009("RSC-009"),
+  RSC_010("RSC-010"),
+  RSC_011("RSC-011"),
+  RSC_012("RSC-012"),
+  RSC_013("RSC-013"),
+  RSC_014("RSC-014"),
+  RSC_015("RSC-015"),
+  RSC_016("RSC-016"),
+  RSC_017("RSC-017"),
+  RSC_018("RSC-018"),
+
+  // Messages relating to scripting
+  SCP_001("SCP-001"),
+  SCP_002("SCP-002"),
+  SCP_003("SCP-003"),
+  SCP_004("SCP-004"),
+  SCP_005("SCP-005"),
+  SCP_006("SCP-006"),
+  SCP_007("SCP-007"),
+  SCP_008("SCP-008"),
+  SCP_009("SCP-009"),
+  SCP_010("SCP-010");
+
+
+  private final String messageId;
+
+  MessageId(String feature)
+  {
+    this.messageId = feature;
+  }
+
+  public String toString()
+  {
+    return messageId;
+  }
+
+  private static final Map<String, MessageId> map = new HashMap<String, MessageId>();
+
+  static
+  {
+    for (MessageId type : MessageId.values())
+    {
+      map.put(type.messageId, type);
+    }
+  }
+
+  public static MessageId fromString(String messageId)
+  {
+    if (map.containsKey(messageId))
+    {
+      return map.get(messageId);
+    }
+    throw new NoSuchElementException("MessageId." + messageId + " not found");
+  }
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/messages/MessageLocation.java b/src/main/java/com/adobe/epubcheck/messages/MessageLocation.java
new file mode 100644
index 0000000..cef6892
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/messages/MessageLocation.java
@@ -0,0 +1,107 @@
+package com.adobe.epubcheck.messages;
+
+import org.codehaus.jackson.annotate.JsonProperty;
+
+public class MessageLocation implements Comparable<MessageLocation>
+{
+  @JsonProperty
+  private String fileName;
+  @JsonProperty
+  private final int line;
+  @JsonProperty
+  private final int column;
+  @JsonProperty
+  private final String context;
+
+  public MessageLocation(String fileName, int lineNumber, int column)
+  {
+    this(fileName, lineNumber, column, null);
+  }
+
+  public MessageLocation(String fileName, int lineNumber, int column, String context)
+  {
+    this.fileName = fileName;
+    this.line = lineNumber;
+    this.column = column;
+    this.context = context;
+  }
+
+  public String getFileName()
+  {
+    return this.fileName == null ? "" : this.fileName;
+  }
+
+  public void setFileName(String value)
+  {
+    this.fileName = value;
+  }
+
+  public int getLine()
+  {
+    return this.line;
+  }
+
+  public int getColumn()
+  {
+    return this.column;
+  }
+
+  public String getContext()
+  {
+    return this.context;
+  }
+
+  @Override
+  public boolean equals(Object obj)
+  {
+    if (obj == this)
+    {
+      return true;
+    }
+    if (obj == null || obj.getClass() != this.getClass())
+    {
+      return false;
+    }
+
+    MessageLocation other = (MessageLocation) obj;
+    return !(this.getContext() == null && other.getContext() != null) && this.getFileName().equals(other.getFileName()) && this.getLine() == other.getLine() && this.getColumn() == other.getColumn() && (this.getContext() == null || this.getContext().equals(other.getContext()));
+  }
+
+  int safeCompare(String a, String b)
+  {
+    if (a == null && b != null) return -1;
+    if (a != null && b == null) return 1;
+    if (a == null /* && b == null */) return 0;
+    return a.compareTo(b);
+  }
+
+
+  @Override
+  public int compareTo(MessageLocation o)
+  {
+    int comp = safeCompare(this.fileName, o.fileName);
+    if (comp != 0)
+    {
+      return comp;
+    }
+
+    comp = line - o.line;
+    if (comp != 0)
+    {
+      return comp < 0 ? -1 : 1;
+    }
+
+    comp = column - o.column;
+    if (comp != 0)
+    {
+      return comp < 0 ? -1 : 1;
+    }
+    comp = safeCompare(context, o.context);
+    if (comp != 0)
+    {
+      return comp;
+    }
+
+    return 0;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/messages/Severity.java b/src/main/java/com/adobe/epubcheck/messages/Severity.java
new file mode 100644
index 0000000..39ffd54
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/messages/Severity.java
@@ -0,0 +1,58 @@
+package com.adobe.epubcheck.messages;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.NoSuchElementException;
+
+public enum Severity
+{
+  SUPPRESSED("SUPPRESSED"),
+  USAGE("USAGE"),
+  INFO("INFO"),
+  WARNING("WARNING"),
+  ERROR("ERROR"),
+  FATAL("FATAL");
+
+  private final String name;
+
+  Severity(String feature)
+  {
+    this.name = feature;
+  }
+
+  public String toString()
+  {
+    return name;
+  }
+
+  private static final Map<String, Severity> map = new HashMap<String, Severity>();
+
+  static
+  {
+    for (Severity type : Severity.values())
+    {
+      map.put(type.name, type);
+    }
+  }
+
+  public static Severity fromString(String name)
+  {
+    if (map.containsKey(name))
+    {
+      return map.get(name);
+    }
+    throw new NoSuchElementException(name + " not found");
+  }
+
+  public int toInt()
+  {
+    if (this.equals(SUPPRESSED)) return 0;
+    if (this.equals(USAGE)) return 1;
+    if (this.equals(INFO)) return 2;
+    if (this.equals(WARNING)) return 3;
+    if (this.equals(ERROR)) return 4;
+    if (this.equals(FATAL)) return 5;
+    return -1;
+  }
+}
+
diff --git a/src/main/java/com/adobe/epubcheck/nav/NavChecker.java b/src/main/java/com/adobe/epubcheck/nav/NavChecker.java
new file mode 100644
index 0000000..e074dee
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/nav/NavChecker.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.nav;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Set;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.ocf.OCFPackage;
+import com.adobe.epubcheck.opf.ContentChecker;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.opf.XRefChecker;
+import com.adobe.epubcheck.ops.OPSHandler30;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.GenericResourceProvider;
+import com.adobe.epubcheck.xml.XMLHandler;
+import com.adobe.epubcheck.xml.XMLParser;
+import com.adobe.epubcheck.xml.XMLValidators;
+import com.google.common.collect.ImmutableSet;
+
+public class NavChecker implements ContentChecker, DocumentValidator
+{
+  private OCFPackage ocf;
+  private final Report report;
+  private final String path;
+  private XRefChecker xrefChecker;
+  private final String properties;
+  private final String mimeType;
+  private final EPUBVersion version;
+  private final GenericResourceProvider resourceProvider;
+  private final Set<String> pubTypes;
+
+  public NavChecker(GenericResourceProvider resourceProvider, Report report,
+      String path, String mimeType, EPUBVersion version)
+  {
+    if (version == EPUBVersion.VERSION_2)
+    {
+      report.message(MessageId.NAV_001, new MessageLocation(path, 0, 0));
+    }
+    this.report = report;
+    this.path = path;
+    this.resourceProvider = resourceProvider;
+    this.properties = "singleFileValidation";
+    this.mimeType = mimeType;
+    this.version = version;
+    this.pubTypes = ImmutableSet.of();
+  }
+
+  public NavChecker(OCFPackage ocf, Report report, String path,
+      String mimeType, String properties, XRefChecker xrefChecker, EPUBVersion version, Set<String> pubTypes)
+  {
+    if (version == EPUBVersion.VERSION_2)
+    {
+      report.message(MessageId.NAV_001, new MessageLocation(path, 0, 0));
+    }
+    this.ocf = ocf;
+    this.report = report;
+    this.path = path;
+    this.xrefChecker = xrefChecker;
+    this.resourceProvider = ocf;
+    this.properties = properties;
+    this.mimeType = mimeType;
+    this.version = version;
+    this.pubTypes = pubTypes;
+  }
+
+  public void runChecks()
+  {
+    if (!ocf.hasEntry(path))
+    {
+      report.message(MessageId.RSC_001, new MessageLocation(this.ocf.getName(), -1, -1), path);
+    }
+    else if (!ocf.canDecrypt(path))
+    {
+      report.message(MessageId.RSC_004, new MessageLocation(this.ocf.getName(), 0, 0), path);
+    }
+    else
+    {
+      validate();
+    }
+  }
+
+  public boolean validate()
+  {
+    int fatalErrors = report.getFatalErrorCount();
+    int errors = report.getErrorCount();
+    int warnings = report.getWarningCount();
+    InputStream in = null;
+    try
+    {
+      in = resourceProvider.getInputStream(path);
+      XMLParser navParser = new XMLParser(ocf, in, path,
+          "application/xhtml+xml", report, version);
+
+      XMLHandler navHandler = new OPSHandler30(ocf, path, mimeType,
+          properties, xrefChecker, navParser, report, version, pubTypes);
+      navParser.addXMLHandler(navHandler);
+      navParser.addValidator(XMLValidators.NAV_30_RNC.get());
+      navParser.addValidator(XMLValidators.XHTML_30_SCH.get());
+      navParser.addValidator(XMLValidators.NAV_30_SCH.get());
+      navParser.process();
+    }
+    catch (IOException e)
+    {
+      report.message(MessageId.PKG_008, new MessageLocation(path, -1, -1), path);
+    }
+    finally
+    {
+      try
+      {
+        if (in != null)
+        {
+          in.close();
+        }
+      }
+      catch (IOException ignored)
+      {
+        // eat it
+      }
+    }
+
+    return ((fatalErrors == report.getFatalErrorCount()) && (errors == report.getErrorCount()) && (warnings == report.getWarningCount()));
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/nav/NavCheckerFactory.java b/src/main/java/com/adobe/epubcheck/nav/NavCheckerFactory.java
new file mode 100644
index 0000000..c27e278
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/nav/NavCheckerFactory.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.nav;
+
+import java.util.Set;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ocf.OCFPackage;
+import com.adobe.epubcheck.opf.ContentChecker;
+import com.adobe.epubcheck.opf.ContentCheckerFactory;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.opf.DocumentValidatorFactory;
+import com.adobe.epubcheck.opf.XRefChecker;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.GenericResourceProvider;
+
+public class NavCheckerFactory implements ContentCheckerFactory, DocumentValidatorFactory
+{
+  static private final NavCheckerFactory instance = new NavCheckerFactory();
+
+  public ContentChecker newInstance(OCFPackage ocf, Report report,
+      String path, String mimeType, String properties,
+      XRefChecker xrefChecker, EPUBVersion version, Set<String> types)
+  {
+    return new NavChecker(ocf, report, path, mimeType, properties, xrefChecker, version, types);
+  }
+
+  static public NavCheckerFactory getInstance()
+  {
+    return instance;
+  }
+
+  public DocumentValidator newInstance(Report report, String path,
+      GenericResourceProvider resourceProvider, String mimeType,
+      EPUBVersion version)
+  {
+    return new NavChecker(resourceProvider, report, path, mimeType, version);
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ncx/NCXChecker.java b/src/main/java/com/adobe/epubcheck/ncx/NCXChecker.java
new file mode 100755
index 0000000..4d1389a
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ncx/NCXChecker.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.ncx;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.ocf.OCFPackage;
+import com.adobe.epubcheck.opf.ContentChecker;
+import com.adobe.epubcheck.opf.XRefChecker;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.xml.XMLParser;
+import com.adobe.epubcheck.xml.XMLValidators;
+
+public class NCXChecker implements ContentChecker
+{
+  private final OCFPackage ocf;
+  private final Report report;
+  private final String path;
+  private final XRefChecker xrefChecker;
+  private final EPUBVersion version;
+
+  public NCXChecker(OCFPackage ocf, Report report, String path,
+      XRefChecker xrefChecker, EPUBVersion version)
+  {
+    this.ocf = ocf;
+    this.report = report;
+    this.path = path;
+    this.xrefChecker = xrefChecker;
+    this.version = version;
+  }
+
+  public void runChecks()
+  {
+    if (!ocf.hasEntry(path))
+    {
+      report.message(MessageId.RSC_001, new MessageLocation(this.ocf.getName(), -1, -1), path);
+    }
+    else if (!ocf.canDecrypt(path))
+    {
+      report.message(MessageId.RSC_004, new MessageLocation(this.ocf.getName(), 0, 0), path);
+    }
+    else
+    {
+      // relaxng
+      XMLParser ncxParser;
+      NCXHandler ncxHandler;
+      InputStream in;
+      try
+      {
+        in = ocf.getInputStream(path);
+      }
+      catch (IOException e)
+      {
+        in = null;
+      }
+      if (in == null)
+      {
+        return;
+      }
+
+      ncxParser = new XMLParser(ocf, in, path, "application/x-dtbncx+xml", report, version);
+      ncxParser.addValidator(XMLValidators.NCX_RNG.get());
+      ncxHandler = new NCXHandler(ncxParser, path, xrefChecker);
+      ncxParser.addXMLHandler(ncxHandler);
+      ncxParser.process();
+				
+				if (ocf.getUniqueIdentifier() != null && !ocf.getUniqueIdentifier().equals(ncxHandler.getUid()))
+        {
+          report.message(MessageId.NCX_003,
+              new MessageLocation(path, ncxParser.getLineNumber(), ncxParser.getColumnNumber(), String.format("%1$s: %2$s", ncxHandler.getUid(), ocf.getUniqueIdentifier())));
+				}
+
+
+      try
+      {
+        in = ocf.getInputStream(path);
+      }
+      catch (IOException e)
+      {
+        in = null;
+      }
+
+      if (in != null)
+      {
+        ncxParser = new XMLParser(ocf, in, path, "application/x-dtbncx+xml", report, version);
+        ncxParser.addValidator(XMLValidators.NCX_SCH.get());
+        ncxParser.process();
+        try
+        {
+          in.close();
+        }
+        catch (IOException ignored)
+        {
+          // eat it
+        }
+      }
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ncx/NCXCheckerFactory.java b/src/main/java/com/adobe/epubcheck/ncx/NCXCheckerFactory.java
new file mode 100755
index 0000000..c1ab665
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ncx/NCXCheckerFactory.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.ncx;
+
+import java.util.Set;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ocf.OCFPackage;
+import com.adobe.epubcheck.opf.ContentChecker;
+import com.adobe.epubcheck.opf.ContentCheckerFactory;
+import com.adobe.epubcheck.opf.XRefChecker;
+import com.adobe.epubcheck.util.EPUBVersion;
+
+public class NCXCheckerFactory implements ContentCheckerFactory
+{
+  static private final NCXCheckerFactory instance = new NCXCheckerFactory();
+
+  public ContentChecker newInstance(OCFPackage ocf, Report report,
+      String path, String mimeType, String properties,
+      XRefChecker xrefChecker, EPUBVersion version, Set<String> types)
+  {
+    return new NCXChecker(ocf, report, path, xrefChecker, version);
+  }
+
+  static public NCXCheckerFactory getInstance()
+  {
+    return instance;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ncx/NCXHandler.java b/src/main/java/com/adobe/epubcheck/ncx/NCXHandler.java
new file mode 100755
index 0000000..14cf1c0
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ncx/NCXHandler.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.ncx;
+
+import com.adobe.epubcheck.opf.XRefChecker;
+import com.adobe.epubcheck.util.FeatureEnum;
+import com.adobe.epubcheck.util.HandlerUtil;
+import com.adobe.epubcheck.util.PathUtil;
+import com.adobe.epubcheck.xml.XMLElement;
+import com.adobe.epubcheck.xml.XMLHandler;
+import com.adobe.epubcheck.xml.XMLParser;
+
+public class NCXHandler implements XMLHandler
+{
+  private final XMLParser parser;
+  private final String path;
+  private final XRefChecker xrefChecker;
+  String uid;
+  boolean checkedUnsupportedXmlVersion = false;
+
+  NCXHandler(XMLParser parser, String path, XRefChecker xrefChecker)
+  {
+
+    this.parser = parser;
+    this.path = path;
+    this.xrefChecker = xrefChecker;
+  }
+
+  public void characters(char[] chars, int arg1, int arg2)
+  {
+  }
+
+  public void ignorableWhitespace(char[] chars, int arg1, int arg2)
+  {
+  }
+
+  public void startElement()
+  {
+    if (!checkedUnsupportedXmlVersion)
+    {
+      HandlerUtil.checkXMLVersion(parser);
+      checkedUnsupportedXmlVersion = true;
+    }
+
+    XMLElement e = parser.getCurrentElement();
+    String ns = e.getNamespace();
+    String name = e.getName();
+    if (ns.equals("http://www.daisy.org/z3986/2005/ncx/") && name.equals("content"))
+    {
+      String href = e.getAttribute("src");
+      if (href != null)
+      {
+        href = PathUtil.resolveRelativeReference(path, href, null);
+        if (href.startsWith("http"))
+        {
+          parser.getReport().info(path, FeatureEnum.REFERENCE, href);
+        }
+        xrefChecker.registerReference(path, parser.getLineNumber(),
+            parser.getColumnNumber(), href,
+            XRefChecker.RT_HYPERLINK);
+      }
+      else if ("meta".equals(name))
+      {
+				String metaName = e.getAttribute("name");
+				if ("dtb:uid".equals(metaName))
+        {
+					String metaContent = e.getAttribute("content");
+					if (metaContent != null)
+          {
+						uid = metaContent;
+					}
+				}
+      }
+    }
+  }
+
+  public void endElement()
+  {
+  }
+
+  public void processingInstruction(String arg0, String arg1){}
+
+	/**
+	 * @return the uid
+	 */
+	public String getUid()
+  {
+		return uid;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ocf/AdobeFontManglingFilter.java b/src/main/java/com/adobe/epubcheck/ocf/AdobeFontManglingFilter.java
new file mode 100644
index 0000000..773007d
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ocf/AdobeFontManglingFilter.java
@@ -0,0 +1,28 @@
+package com.adobe.epubcheck.ocf;
+
+import java.io.InputStream;
+
+public class AdobeFontManglingFilter  implements EncryptionFilter
+{
+  private final String uniqueIdentifier;
+
+  public AdobeFontManglingFilter(String Uid)
+  {
+    uniqueIdentifier = Uid;
+  }
+
+  public boolean canDecrypt()
+  {
+    //FIXME we force return true to not issue a false-positive warning (see Issue 220)
+    // ultimately, we need to pass the concatenated publication IDs (encryption key)
+    // and implement de-obfuscation.
+    return true;
+//		return uniqueIdentifier != null;
+  }
+
+  public InputStream decrypt(InputStream in)
+  {
+    // TODO implement this once we start to validate fonts
+    return null;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ocf/EncryptionFilter.java b/src/main/java/com/adobe/epubcheck/ocf/EncryptionFilter.java
new file mode 100644
index 0000000..3100997
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ocf/EncryptionFilter.java
@@ -0,0 +1,10 @@
+package com.adobe.epubcheck.ocf;
+
+import java.io.InputStream;
+
+public interface EncryptionFilter
+{
+  public boolean canDecrypt();
+
+  public InputStream decrypt(InputStream in);
+}
diff --git a/src/main/java/com/adobe/epubcheck/ocf/EncryptionHandler.java b/src/main/java/com/adobe/epubcheck/ocf/EncryptionHandler.java
new file mode 100644
index 0000000..a92caad
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ocf/EncryptionHandler.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.ocf;
+
+import com.adobe.epubcheck.util.HandlerUtil;
+import com.adobe.epubcheck.xml.XMLElement;
+import com.adobe.epubcheck.xml.XMLHandler;
+import com.adobe.epubcheck.xml.XMLParser;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+
+public class EncryptionHandler implements XMLHandler
+{
+  private final OCFPackage ocf;
+  private final XMLParser parser;
+  private boolean checkedUnsupportedXmlVersion = false;
+
+  EncryptionHandler(OCFPackage ocf, XMLParser parser)
+  {
+    this.ocf = ocf;
+    this.parser = parser;
+  }
+
+  public void startElement()
+  {
+    if (!checkedUnsupportedXmlVersion)
+    {
+      HandlerUtil.checkXMLVersion(parser);
+      checkedUnsupportedXmlVersion = true;
+    }
+
+    // if the element is <CipherReference>, then the element name
+    // is stripped of rootBase, and URLDecoded, and finally put into
+    // encryptedItemsSet.
+    XMLElement e = parser.getCurrentElement();
+    if (e.getName().equals("CipherReference"))
+    {
+      String algorithm = null;
+      XMLElement parent = e.getParent();
+      if (parent != null)
+      {
+        parent = parent.getParent();
+        if (parent != null && parent.getName().equals("EncryptedData"))
+        {
+          algorithm = (String) parent.getPrivateData();
+        }
+      }
+      String entryName = e.getAttribute("URI");
+      try
+      {
+        entryName = URLDecoder.decode(entryName, "UTF-8");
+      }
+      catch (UnsupportedEncodingException er)
+      {
+        // UTF-8 is guaranteed to be supported
+        throw new InternalError(e.toString());
+      }
+      if (algorithm == null)
+      {
+        algorithm = "unknown";
+      }
+      if (algorithm.equals("http://www.idpf.org/2008/embedding"))
+      {
+        ocf.setEncryption(entryName, new IDPFFontManglingFilter(null));
+      }
+      else if (algorithm.equals("http://ns.adobe.com/pdf/enc#RC"))
+      {
+        ocf.setEncryption(entryName, new AdobeFontManglingFilter(null));
+      }
+      else
+      {
+        ocf.setEncryption(entryName, new UnsupportedEncryptionFilter());
+      }
+    }
+    else if (e.getName().equals("EncryptionMethod"))
+    {
+      String algorithm = e.getAttribute("Algorithm");
+      if (algorithm != null)
+      {
+        XMLElement parent = e.getParent();
+        if (parent != null)
+        {
+          String comp = parent.getAttributeNS(
+              "http://ns.adobe.com/digitaleditions/enc",
+              "compression");
+          if (comp == null)
+          {
+            parent.setPrivateData(algorithm);
+          }
+        }
+      }
+    }
+  }
+
+  public void endElement()
+  {
+  }
+
+  public void ignorableWhitespace(char[] chars, int arg1, int arg2)
+  {
+  }
+
+  public void characters(char[] chars, int arg1, int arg2)
+  {
+  }
+
+  public void processingInstruction(String arg0, String arg1)
+  {
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ocf/IDPFFontManglingFilter.java b/src/main/java/com/adobe/epubcheck/ocf/IDPFFontManglingFilter.java
new file mode 100644
index 0000000..db39bbc
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ocf/IDPFFontManglingFilter.java
@@ -0,0 +1,28 @@
+package com.adobe.epubcheck.ocf;
+
+import java.io.InputStream;
+
+public class IDPFFontManglingFilter implements EncryptionFilter
+{
+  private final String uniqueIdentifier;
+
+  public IDPFFontManglingFilter(String Uid)
+  {
+    uniqueIdentifier = Uid;
+  }
+
+  public boolean canDecrypt()
+  {
+    //FIXME we force return true to not issue a false-positive warning (see Issue 220)
+    // ultimately, we need to pass the concatenated publication IDs (encryption key)
+    // and implement de-obfuscation.
+    return true;
+//		return uniqueIdentifier != null;
+  }
+
+  public InputStream decrypt(InputStream in)
+  {
+    // TODO implement this once we start to validate fonts
+    return null;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ocf/OCFChecker.java b/src/main/java/com/adobe/epubcheck/ocf/OCFChecker.java
new file mode 100755
index 0000000..ed781a7
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ocf/OCFChecker.java
@@ -0,0 +1,400 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.ocf;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.Normalizer;
+import java.text.Normalizer.Form;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.opf.OPFChecker;
+import com.adobe.epubcheck.opf.OPFChecker30;
+import com.adobe.epubcheck.opf.OPFData;
+import com.adobe.epubcheck.opf.OPFHandler;
+import com.adobe.epubcheck.util.CheckUtil;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.FeatureEnum;
+import com.adobe.epubcheck.util.OPSType;
+import com.adobe.epubcheck.xml.XMLHandler;
+import com.adobe.epubcheck.xml.XMLParser;
+import com.adobe.epubcheck.xml.XMLValidator;
+import com.adobe.epubcheck.xml.XMLValidators;
+
+public class OCFChecker
+{
+  private final OCFPackage ocf;
+  private Report report;
+  private final EPUBVersion version;
+  // Hashtable encryptedItems;
+  // private EPUBVersion version = EPUBVersion.VERSION_3;
+
+  private static final HashMap<OPSType, XMLValidator> xmlValidatorMap;
+
+  static
+  {
+    HashMap<OPSType, XMLValidator> map = new HashMap<OPSType, XMLValidator>();
+    map.put(new OPSType(OCFData.containerEntry, EPUBVersion.VERSION_2), XMLValidators.CONTAINER_20_RNG.get());
+    map.put(new OPSType(OCFData.containerEntry, EPUBVersion.VERSION_3), XMLValidators.CONTAINER_30_RNC.get());
+
+    map.put(new OPSType(OCFData.encryptionEntry, EPUBVersion.VERSION_2), XMLValidators.ENC_20_RNG.get());
+    map.put(new OPSType(OCFData.encryptionEntry, EPUBVersion.VERSION_3), XMLValidators.ENC_30_RNC.get());
+
+    map.put(new OPSType(OCFData.signatureEntry, EPUBVersion.VERSION_2), XMLValidators.SIG_20_RNG.get());
+    map.put(new OPSType(OCFData.signatureEntry, EPUBVersion.VERSION_3), XMLValidators.SIG_30_RNC.get());
+
+    xmlValidatorMap = map;
+  }
+
+  public OCFChecker(OCFPackage ocf, Report report, EPUBVersion version)
+  {
+    this.ocf = ocf;
+    this.setReport(report);
+    this.version = version;
+  }
+
+  public void runChecks()
+  {
+    ocf.setReport(getReport());
+    if (!ocf.hasEntry(OCFData.containerEntry))
+    {
+      getReport().message(MessageId.RSC_002, new MessageLocation(ocf.getName(), 0, 0));
+      return;
+    }
+    long l = ocf.getTimeEntry(OCFData.containerEntry);
+    if (l > 0)
+    {
+      Date d = new Date(l);
+      String formattedDate = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(d);
+      getReport().info(OCFData.containerEntry, FeatureEnum.CREATION_DATE, formattedDate);
+    }
+    OCFData containerHandler = ocf.getOcfData();
+
+    // retrieve the paths of root files
+    List<String> opfPaths = containerHandler.getEntries(OPFData.OPF_MIME_TYPE);
+    if (opfPaths == null || opfPaths.isEmpty())
+    {
+      getReport().message(MessageId.RSC_003, new MessageLocation(OCFData.containerEntry, -1, -1));
+      return;
+    }
+    else if (opfPaths.size() > 0)
+    {
+      if(opfPaths.size() > 1)
+      {
+        getReport().info(null, FeatureEnum.EPUB_RENDITIONS_COUNT, Integer.toString(opfPaths.size()));
+      }
+
+      // test every element for empty or missing @full-path attribute
+      // bugfix for issue 236 / issue 95
+      int rootfileErrorCounter = 0;
+      for (String opfPath : opfPaths)
+      {
+        if (opfPath == null)
+        {
+          ++rootfileErrorCounter;
+          getReport().message(MessageId.OPF_016, new MessageLocation(OCFData.containerEntry, -1, -1));
+        }
+        else if (opfPath.isEmpty())
+        {
+          ++rootfileErrorCounter;
+          getReport().message(MessageId.OPF_017, new MessageLocation(OCFData.containerEntry, -1, -1));
+         }
+        else if (!ocf.hasEntry(opfPath))
+        {
+          getReport().message(MessageId.OPF_002, new MessageLocation(OCFData.containerEntry, -1, -1), opfPath);
+          return;
+        }
+      }
+      if(rootfileErrorCounter == opfPaths.size())
+      {
+        // end validation at this point when @full-path attribute is missing in container.xml
+        // otherwise, tons of errors would be thrown ("XYZ exists in the zip file, but is not declared in the OPF file")
+        return;
+      }
+    }
+
+
+    // Detect the version of the first root file
+    // and compare with the asked version (if set)
+    EPUBVersion detectedVersion = null;
+    EPUBVersion validationVersion;
+    OPFData opfData = ocf.getOpfData().get(opfPaths.get(0));
+    if (opfData == null)
+        return;// The error must have been reported during parsing
+    detectedVersion = opfData.getVersion();
+    report.info(null, FeatureEnum.FORMAT_VERSION, detectedVersion.toString());
+    assert (detectedVersion != null);
+
+    if (version != null && version != detectedVersion)
+    {
+      getReport().message(MessageId.PKG_001, new MessageLocation(opfPaths.get(0), -1, -1), version, detectedVersion);
+
+      validationVersion = version;
+    }
+    else
+    {
+      validationVersion = detectedVersion;
+    }
+
+    // EPUB 2.0 says there SHOULD be only one OPS rendition
+    if (validationVersion == EPUBVersion.VERSION_2 && opfPaths.size() > 1)
+    {
+      getReport().message(MessageId.PKG_013, new MessageLocation(OCFData.containerEntry, -1, -1));
+    }
+
+    // Check the mimetype file
+    InputStream mimetype = null;
+    try
+    {
+      mimetype = ocf.getInputStream("mimetype");
+      StringBuilder sb = new StringBuilder(2048);
+      if (ocf.hasEntry("mimetype")
+          && !CheckUtil.checkTrailingSpaces(mimetype,
+          validationVersion, sb))
+      {
+        getReport().message(MessageId.PKG_007, new MessageLocation("mimetype", 0, 0));
+      }
+      if (sb.length() != 0)
+      {
+        getReport().info(null, FeatureEnum.FORMAT_NAME, sb.toString().trim());
+      }
+    }
+    catch (IOException ignored)
+    {
+      // missing file will be reported later
+    }
+    finally
+    {
+      try
+      {
+        if (mimetype != null)
+        {
+          mimetype.close();
+        }
+      }
+      catch (IOException ignored)
+      {
+        // eat it
+      }
+    }
+
+    // Validate the OCF files against the schema definitions
+    validate(validationVersion);
+
+    // Validate each OPF and keep a reference of the OPFHandler
+    List<OPFHandler> opfHandlers = new LinkedList<OPFHandler>();
+    for (String opfPath : opfPaths)
+    {
+      OPFChecker opfChecker;
+
+      if (validationVersion == EPUBVersion.VERSION_2)
+      {
+        opfChecker = new OPFChecker(ocf, getReport(), opfPath, validationVersion);
+      }
+      else
+      {
+        opfChecker = new OPFChecker30(ocf, getReport(), opfPath, validationVersion);
+      }
+      opfChecker.runChecks();
+      opfHandlers.add(opfChecker.getOPFHandler());
+    }
+
+		
+		
+    // Check all file and directory entries in the container
+    try
+    {
+			Set<String> entriesSet = new HashSet<String>();
+			Set<String> normalizedEntriesSet = new HashSet<String>();
+			for (String entry : ocf.getFileEntries())
+      {
+				if (!entriesSet.add(entry.toLowerCase(Locale.ENGLISH)))
+        {
+          getReport().message(MessageId.OPF_060, new MessageLocation(ocf.getPackagePath(), 0, 0), entry);
+        }
+        else if (!normalizedEntriesSet.add(Normalizer.normalize(entry, Form.NFC)))
+        {
+          getReport().message(MessageId.OPF_061, new MessageLocation(ocf.getPackagePath(), 0, 0), entry);
+        }
+
+        ocf.reportMetadata(entry, report);
+
+        if (!entry.startsWith("META-INF/")
+            && !entry.startsWith("META-INF\\")
+            && !entry.equals("mimetype")
+            && !containerHandler.getEntries().contains(entry))
+        {
+          boolean isDeclared = false;
+          for (OPFHandler opfHandler : opfHandlers)
+          {
+            if (opfHandler.getItemByPath(entry) != null)
+            {
+              isDeclared = true;
+              break;
+            }
+          }
+          if (!isDeclared)
+          {
+            report.message(MessageId.OPF_003, new MessageLocation(ocf.getName(), -1, -1), entry);
+          }
+        }
+        OCFFilenameChecker.checkCompatiblyEscaped(entry, getReport(), validationVersion);
+      }
+
+      for (String directory : ocf.getDirectoryEntries())
+      {
+        boolean hasContents = false;
+        for (String file : ocf.getFileEntries())
+        {
+          if (file.startsWith(directory))
+          {
+            hasContents = true;
+            break;
+          }
+        }
+        if (!hasContents)
+        {
+          getReport().message(MessageId.PKG_014, new MessageLocation(ocf.getName(), -1, -1), directory);
+        }
+      }
+    }
+    catch (IOException e)
+    {
+      getReport().message(MessageId.PKG_015, new MessageLocation(ocf.getName(), -1, -1), e.getMessage());
+    }
+
+    Report r = getReport();
+
+  }
+
+  boolean validate(EPUBVersion version)
+  {
+    XMLParser parser;
+    InputStream in = null;
+    try
+    {
+      // validate container
+      in = ocf.getInputStream(OCFData.containerEntry);
+      parser = new XMLParser(ocf, in, OCFData.containerEntry, "xml", getReport(), version);
+      XMLHandler handler = new OCFHandler(parser);
+      parser.addXMLHandler(handler);
+      parser.addValidator(xmlValidatorMap.get(new OPSType(OCFData.containerEntry, version)));
+      parser.process();
+      try
+      {
+        if (in != null)
+        {
+          in.close();
+          in = null;
+        }
+      }
+      catch (IOException ignored)
+      {
+        // eat it
+      }
+
+      // Validate encryption.xml
+      if (ocf.hasEntry(OCFData.encryptionEntry))
+      {
+        in = ocf.getInputStream(OCFData.encryptionEntry);
+        parser = new XMLParser(ocf, in, OCFData.encryptionEntry, "xml", getReport(), version);
+        handler = new EncryptionHandler(ocf, parser);
+        parser.addXMLHandler(handler);
+        parser.addValidator(xmlValidatorMap.get(new OPSType(OCFData.encryptionEntry, version)));
+        parser.process();
+        try
+        {
+          if (in != null)
+          {
+            in.close();
+            in = null;
+          }
+        }
+        catch (IOException ignored)
+        {
+          // eat it
+        }
+        getReport().info(null, FeatureEnum.HAS_ENCRYPTION, OCFData.encryptionEntry);
+      }
+
+      // validate signatures.xml
+      if (ocf.hasEntry(OCFData.signatureEntry))
+      {
+        in = ocf.getInputStream(OCFData.signatureEntry);
+        parser = new XMLParser(ocf, in, OCFData.signatureEntry, "xml", getReport(), version);
+        handler = new OCFHandler(parser);
+        parser.addXMLHandler(handler);
+        parser.addValidator(xmlValidatorMap.get(new OPSType(OCFData.signatureEntry, version)));
+        parser.process();
+        try
+        {
+          in.close();
+        }
+        catch (Exception ignored)
+        {
+        }
+        getReport().info(null, FeatureEnum.HAS_SIGNATURES, OCFData.signatureEntry);
+      }
+
+    }
+    catch (Exception ignored)
+    {
+    }
+    finally
+    {
+      try
+      {
+        if (in != null)
+        {
+          in.close();
+        }
+      }
+      catch (IOException ignored)
+      {
+        // eat it
+      }
+    }
+
+    return false;
+  }
+
+  private Report getReport()
+  {
+    return report;
+  }
+
+  private void setReport(Report report)
+  {
+    this.report = report;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ocf/OCFData.java b/src/main/java/com/adobe/epubcheck/ocf/OCFData.java
new file mode 100644
index 0000000..1b23e12
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ocf/OCFData.java
@@ -0,0 +1,21 @@
+package com.adobe.epubcheck.ocf;
+
+import java.util.List;
+
+public interface OCFData
+{
+  static final String containerEntry = "META-INF/container.xml";
+  static final String encryptionEntry = "META-INF/encryption.xml";
+  static final String signatureEntry = "META-INF/signatures.xml";
+
+  /**
+   * @return the full paths of the root files of the container for the given
+   *         media type.
+   */
+  public List<String> getEntries(String type);
+
+  /**
+   * @return the full paths of all the root files of the container
+   */
+  public List<String> getEntries();
+}
diff --git a/src/main/java/com/adobe/epubcheck/ocf/OCFFilenameChecker.java b/src/main/java/com/adobe/epubcheck/ocf/OCFFilenameChecker.java
new file mode 100644
index 0000000..d8337da
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ocf/OCFFilenameChecker.java
@@ -0,0 +1,132 @@
+package com.adobe.epubcheck.ocf;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.util.EPUBVersion;
+
+import java.util.HashSet;
+
+public final class OCFFilenameChecker
+{
+  private static final HashSet<String> restricted30CharacterSet;
+
+  static
+  {
+    HashSet<String> set = new HashSet<String>();
+    set.add("PRIVATE_USE_AREA");
+    set.add("ARABIC_PRESENTATION_FORMS_A");
+    set.add("SPECIALS");
+    set.add("SUPPLEMENTARY_PRIVATE_USE_AREA_A");
+    set.add("SUPPLEMENTARY_PRIVATE_USE_AREA_B");
+    set.add("VARIATION_SELECTORS_SUPPLEMENT");
+    set.add("TAGS");
+    restricted30CharacterSet = set;
+  }
+
+  private OCFFilenameChecker()
+  {
+    // static util
+  }
+
+
+  public static String checkCompatiblyEscaped(final String str, Report report, EPUBVersion version)
+  {
+		// don't check remote resources
+		if (str.matches("^[^:/?#]+://.*"))
+    {
+      return "";
+    }
+
+    // the test string will be used to compare test result
+    String test = checkNonAsciiFilename(str, report);
+
+    if (str.endsWith("."))
+    {
+      report.message(MessageId.PKG_011, new MessageLocation(str, 0, 0));
+      test += ".";
+    }
+
+    boolean spaces = false;
+    final char[] ascciGraphic = new char[]{'<', '>', '"', '{', '}', '|',
+        '^', '`', '*', '?' /* , ':','/', '\\' */};
+    String result = "";
+    char[] chars = str.toCharArray();
+    for (char c : chars)
+    {
+      for (char a : ascciGraphic)
+      {
+        if (c == a)
+        {
+          result += "\"" + Character.toString(c) + "\",";
+          test += Character.toString(c);
+        }
+      }
+      if (Character.isSpaceChar(c))
+      {
+        spaces = true;
+        test += Character.toString(c);
+      }
+    }
+    if (result.length() > 1)
+    {
+      result = result.substring(0, result.length() - 1);
+      report.message(MessageId.PKG_009, new MessageLocation(str, 0, 0), result);
+    }
+    if (spaces)
+    {
+      report.message(MessageId.PKG_010, new MessageLocation(str, 0, 0));
+    }
+
+    if (version == EPUBVersion.VERSION_3)
+    {
+      checkCompatiblyEscaped30(str, test, report);
+    }
+    return test;
+  }
+
+  private static String checkNonAsciiFilename(final String str, Report report)
+  {
+    // TODO change this from warning to a compatibility hint message level
+
+    String nonAscii = str.replaceAll("[\\p{ASCII}]", "");
+    if (nonAscii.length() > 0)
+    {
+      report.message(MessageId.PKG_012, new MessageLocation(str, 0, 0), nonAscii);
+    }
+    return nonAscii;
+  }
+
+  private static String checkCompatiblyEscaped30(String str, String test, Report report)
+  {
+    String result = "";
+
+    char[] chars = str.toCharArray();
+    for (char c : chars)
+    {
+      if (Character.isISOControl(c))
+      {
+        result += "\"" + Character.toString(c) + "\",";
+        test += Character.toString(c);
+      }
+
+      // DEL (U+007F)
+      if (c == '\u007F')
+      {
+        result += "\"" + Character.toString(c) + "\",";
+        test += Character.toString(c);
+      }
+      String unicodeType = Character.UnicodeBlock.of(c).toString();
+      if (restricted30CharacterSet.contains(unicodeType))
+      {
+        result += "\"" + Character.toString(c) + "\",";
+      }
+    }
+    if (result.length() > 1)
+    {
+      result = result.substring(0, result.length() - 1);
+      report.message(MessageId.PKG_009, new MessageLocation(str, 0, 0), result);
+    }
+    return test;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ocf/OCFHandler.java b/src/main/java/com/adobe/epubcheck/ocf/OCFHandler.java
new file mode 100755
index 0000000..7a93218
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ocf/OCFHandler.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.ocf;
+
+import com.adobe.epubcheck.util.HandlerUtil;
+import com.adobe.epubcheck.xml.XMLElement;
+import com.adobe.epubcheck.xml.XMLHandler;
+import com.adobe.epubcheck.xml.XMLParser;
+
+import java.util.*;
+
+public class OCFHandler implements OCFData, XMLHandler
+{
+  private final Map<String, List<String>> entries = new HashMap<String, List<String>>();
+  private final XMLParser parser;
+  private boolean checkedUnsupportedXmlVersion = false;
+  OCFHandler(XMLParser parser)
+  {
+    this.parser = parser;
+  }
+
+  @Override
+  public List<String> getEntries(String mediatype)
+  {
+    if (entries.containsKey(mediatype))
+    {
+      return Collections.unmodifiableList(entries.get(mediatype));
+    }
+    else
+    {
+      return Collections.emptyList();
+    }
+  }
+
+  @Override
+  public List<String> getEntries()
+  {
+    LinkedList<String> result = new LinkedList<String>();
+    for (List<String> paths : entries.values())
+    {
+      result.addAll(paths);
+    }
+    return Collections.unmodifiableList(result);
+  }
+
+  public void startElement()
+  {
+    if (!checkedUnsupportedXmlVersion)
+    {
+      HandlerUtil.checkXMLVersion(parser);
+      checkedUnsupportedXmlVersion = true;
+    }
+
+    XMLElement e = parser.getCurrentElement();
+    String ns = e.getNamespace();
+    if (e.getName().equals("rootfile") && ns != null
+        && ns.equals("urn:oasis:names:tc:opendocument:xmlns:container"))
+    {
+      String mediaType = (e.getAttribute("media-type") != null) ? e.getAttribute("media-type").trim() : "unknown";
+      String fullPath = e.getAttribute("full-path");
+      if (!entries.containsKey(mediaType))
+      {
+        entries.put(mediaType, new LinkedList<String>());
+      }
+      entries.get(mediaType).add(fullPath);
+    }
+  }
+
+  public void endElement()
+  {
+  }
+
+  public void ignorableWhitespace(char[] chars, int arg1, int arg2)
+  {
+  }
+
+  public void characters(char[] chars, int arg1, int arg2)
+  {
+  }
+
+  public void processingInstruction(String arg0, String arg1)
+  {
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ocf/OCFPackage.java b/src/main/java/com/adobe/epubcheck/ocf/OCFPackage.java
new file mode 100644
index 0000000..339037c
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ocf/OCFPackage.java
@@ -0,0 +1,191 @@
+package com.adobe.epubcheck.ocf;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.opf.OPFData;
+import com.adobe.epubcheck.opf.OPFPeeker;
+import com.adobe.epubcheck.util.GenericResourceProvider;
+import com.adobe.epubcheck.util.InvalidVersionException;
+import com.adobe.epubcheck.xml.XMLParser;
+import com.google.common.base.Supplier;
+import com.google.common.base.Suppliers;
+import com.google.common.io.Closer;
+
+public abstract class OCFPackage implements GenericResourceProvider
+{
+  final Hashtable<String, EncryptionFilter> enc;
+  String uniqueIdentifier;
+  private Report reporter;
+  private final Supplier<OCFData> ocfData = Suppliers.memoize(new Supplier<OCFData>()
+  {
+    @Override
+    public OCFData get()
+    {
+      if (OCFPackage.this.reporter == null) {
+        throw new IllegalStateException("Reporter has not been set");
+      }
+      try
+      {
+        XMLParser containerParser;
+        Closer closer = Closer.create();
+        try {
+          InputStream in = closer.register(getInputStream(OCFData.containerEntry));
+          containerParser = new XMLParser(OCFPackage.this, in,
+              OCFData.containerEntry, "xml", reporter, null);
+          OCFHandler containerHandler = new OCFHandler(containerParser);
+          containerParser.addXMLHandler(containerHandler);
+          containerParser.process();
+          return containerHandler;
+        } catch (Throwable e) {
+          // ensure that any checked exception types other than IOException that could be thrown are
+          // provided here, e.g. throw closer.rethrow(e, CheckedException.class);
+          throw closer.rethrow(e);
+        } finally {
+          closer.close();
+        }
+      } catch (IOException e)
+      {
+        throw new RuntimeException(e);
+      }
+    }
+  });
+  
+  private final Supplier<Map<String, OPFData>> opfData = Suppliers.memoize(new Supplier<Map<String, OPFData>>(){
+    @Override
+    public Map<String, OPFData> get()
+    {
+      if (OCFPackage.this.reporter == null) {
+        throw new IllegalStateException("Reporter has not been set");
+      }
+      Map<String, OPFData> result = new HashMap<String, OPFData>();
+      for (String opfPath : ocfData.get().getEntries(OPFData.OPF_MIME_TYPE))
+      {
+        OPFPeeker peeker = new OPFPeeker(opfPath, reporter, OCFPackage.this);
+        try
+        {
+          result.put(opfPath, peeker.peek());
+        } catch (InvalidVersionException e)
+        {
+          reporter.message(MessageId.OPF_001, new MessageLocation(opfPath, -1, -1), e.getMessage());
+        }
+        catch (IOException ignored)
+        {
+          // missing file will be reported later
+        }
+      }
+      return Collections.unmodifiableMap(result);
+    }
+  });
+
+  public OCFPackage()
+  {
+    this.enc = new Hashtable<String, EncryptionFilter>();
+  }
+
+  public void setEncryption(String name, EncryptionFilter encryptionFilter)
+  {
+    enc.put(name, encryptionFilter);
+  }
+
+	public void setUniqueIdentifier(String idval) {
+		uniqueIdentifier = idval;
+	}
+	public String getUniqueIdentifier() {
+		return uniqueIdentifier;
+	}
+	
+  /**
+   * @param name the name of a relative file that is possibly in the container
+   * @return true if the file is in the container, false otherwise
+   */
+  public abstract boolean hasEntry(String name);
+
+  public abstract long getTimeEntry(String name);
+
+  /**
+   * @param name the name of a relative file to fetch from the container.
+   * @return an InputStream representing the data from the named file, possibly
+   *         decrypted if an appropriate encryption filter has been set
+   */
+  public abstract InputStream getInputStream(String name) throws
+      IOException;
+
+  /**
+     * @return a list of all the entries in this container. May contain duplicate entries (which is invalid in EPUB).
+     * @throws IOException
+     */
+    public abstract List<String> getEntries() throws IOException;
+    
+    /**
+   * @return a set of relative file names of files in this container
+   * @throws IOException
+   */
+  public abstract Set<String> getFileEntries() throws
+      IOException;
+
+  /**
+   * @return a set of relative directory entries in this container
+   * @throws IOException
+   */
+  public abstract Set<String> getDirectoryEntries() throws
+      IOException;
+
+
+  /**
+   * @param fileName name of the file to test
+   * @return true if I have an Encryption filter for this particular file.
+   */
+  public boolean canDecrypt(String fileName)
+  {
+    EncryptionFilter filter = enc.get(fileName);
+    return filter == null || filter.canDecrypt();
+  }
+
+  /**
+   * This method parses the container entry and stores important data, but does /not/
+   * validate the container against a schema definition.
+   * <p>The parsed OCFData objects are memoized.</p>
+   * <p>This OCFPackage's reporter is used to report any error that may occur the first time the 
+   * OCFData is parsed.</p>
+   *
+   */
+  public OCFData getOcfData()
+  {
+    return ocfData.get();
+  }
+
+
+  /**
+   * This method parses the OPF root files contained in an OCFContainer and stores important data,
+   * but does /not/ validate the OPF file against a schema definition.
+   * <p>The parsed OPFData objects are memoized.</p>
+   * <p>This OCFPackage's reporter is used to report any error that may occur the first time the 
+   * OPFData is parsed.</p>
+   *
+   * @return an map with the OPF root files as keys and the OPFData as values.
+   */
+  public Map<String, OPFData> getOpfData()
+  {
+    return opfData.get();
+  }
+
+  public abstract void reportMetadata(String fileName, Report report);
+
+  public abstract String getName();
+
+  public abstract String getPackagePath();
+  
+  public void setReport(Report reporter) {
+    this.reporter = reporter;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ocf/OCFZipPackage.java b/src/main/java/com/adobe/epubcheck/ocf/OCFZipPackage.java
new file mode 100644
index 0000000..cd8198d
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ocf/OCFZipPackage.java
@@ -0,0 +1,288 @@
+package com.adobe.epubcheck.ocf;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.util.FeatureEnum;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.MessageDigest;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+public class OCFZipPackage extends OCFPackage
+{
+
+  private final ZipFile zip;
+  private List<String> allEntries = null;
+  private Set<String> fileEntries;
+  private Set<String> dirEntries;
+
+  public OCFZipPackage(ZipFile zip)
+  {
+    super();
+    this.zip = zip;
+  }
+
+  private void listEntries() throws
+      IOException
+  {
+    synchronized (zip)
+    {
+      allEntries = new LinkedList<String>();
+      fileEntries = new HashSet<String>();
+      dirEntries = new HashSet<String>();
+
+      try
+      {
+        for (Enumeration<? extends ZipEntry> entries = zip.entries(); entries.hasMoreElements(); )
+        {
+          ZipEntry entry = entries.nextElement();
+          allEntries.add(entry.getName());
+          if (entry.isDirectory())
+          {
+            dirEntries.add(entry.getName());
+          }
+          else
+          {
+            fileEntries.add(entry.getName());
+          }
+        }
+      }
+      catch (IllegalArgumentException ex)
+      {
+        throw new IOException(ex.getMessage());
+      }
+    }
+  }
+
+  /* (non-Javadoc)
+  * @see com.adobe.epubcheck.ocf.OCFPackage#hasEntry(java.lang.String)
+  */
+  public boolean hasEntry(String name)
+  {
+    return zip.getEntry(name) != null;
+  }
+
+  /* (non-Javadoc)
+    * @see com.adobe.epubcheck.ocf.OCFPackage#getTimeEntry(java.lang.String)
+    */
+  public long getTimeEntry(String name)
+  {
+    ZipEntry entry = zip.getEntry(name);
+    if (entry == null)
+    {
+      return 0L;
+    }
+    return entry.getTime();
+  }
+
+  /*
+    * (non-Javadoc)
+    * @see com.adobe.epubcheck.ocf.OCFPackage#getInputStream(java.lang.String)
+    */
+  @Override
+  public InputStream getInputStream(String name) throws
+      IOException
+  {
+    ZipEntry entry = zip.getEntry(name);
+    if (entry == null)
+    {
+      return null;
+    }
+    InputStream in = zip.getInputStream(entry);
+    EncryptionFilter filter = enc.get(name);
+    if (filter == null)
+    {
+      return in;
+    }
+    if (filter.canDecrypt())
+    {
+      return filter.decrypt(in);
+    }
+    return null;
+  }
+
+  @Override
+  public List<String> getEntries() throws
+      IOException
+  {
+    synchronized (zip)
+    {
+      if (allEntries == null)
+      {
+        listEntries();
+      }
+    }
+    return Collections.unmodifiableList(allEntries);
+  }
+
+  /* (non-Javadoc)
+  * @see com.adobe.epubcheck.ocf.OCFPackage#getFileEntries()
+  */
+  @Override
+  public Set<String> getFileEntries() throws
+      IOException
+  {
+    synchronized (zip)
+    {
+      if (allEntries == null)
+      {
+        listEntries();
+      }
+      HashSet<String> entryNames = new HashSet<String>();
+      for (Enumeration<? extends ZipEntry> entries = zip.entries(); entries.hasMoreElements(); )
+      {
+        ZipEntry entry = entries.nextElement();
+        if (!entry.isDirectory())
+        {
+          entryNames.add(entry.getName());
+        }
+      }
+      return Collections.unmodifiableSet(fileEntries);
+    }
+  }
+
+  /* (non-Javadoc)
+  * @see com.adobe.epubcheck.ocf.OCFPackage#getDirectoryEntries()
+  */
+  @Override
+  public Set<String> getDirectoryEntries() throws
+      IOException
+  {
+    HashSet<String> entryNames = new HashSet<String>();
+    for (Enumeration<? extends ZipEntry> entries = zip.entries(); entries.hasMoreElements(); )
+    {
+      ZipEntry entry = entries.nextElement();
+      if (entry.isDirectory())
+      {
+        entryNames.add(entry.getName());
+      }
+    }
+    return entryNames;
+  }
+
+  public void reportMetadata(String fileName, Report report)
+  {
+    ZipEntry entry = zip.getEntry(fileName);
+    if (entry != null)
+    {
+      report.info(fileName, FeatureEnum.SIZE, String.valueOf(entry.getSize()));
+      report.info(fileName, FeatureEnum.COMPRESSED_SIZE, String.valueOf(entry.getCompressedSize()));
+      report.info(fileName, FeatureEnum.COMPRESSION_METHOD, this.getCompressionMethod(entry));
+      InputStream inputStream = null;
+      try
+      {
+        inputStream = zip.getInputStream(entry);
+        if (inputStream != null)
+        {
+          report.info(fileName, FeatureEnum.SHA_256, getSHAHash(inputStream));
+        }
+      }
+      catch (IOException e)
+      {
+        report.message(MessageId.PKG_008, new MessageLocation(fileName, -1, -1), fileName);
+      }
+      finally
+      {
+        if (inputStream != null)
+        {
+          try
+          {
+            inputStream.close();
+          }
+          catch (Exception ignore)
+          {
+          }
+        }
+      }
+    }
+  }
+
+  private String getCompressionMethod(ZipEntry entry)
+  {
+    if (entry == null)
+    {
+      return "";
+    }
+    int method = entry.getMethod();
+    if (method == ZipEntry.DEFLATED)
+    {
+      return "Deflated";
+    }
+    if (method == ZipEntry.STORED)
+    {
+      return "Stored";
+    }
+    return "Unsupported";
+  }
+
+  private static String getSHAHash(InputStream fis)
+  {
+    try
+    {
+
+      MessageDigest md = MessageDigest.getInstance("SHA-256");
+      byte[] dataBytes = new byte[1024];
+
+      int nread;
+      while ((nread = fis.read(dataBytes)) != -1)
+      {
+        md.update(dataBytes, 0, nread);
+      }
+      byte[] bytes = md.digest();
+
+      //convert the byte to hex format method 1
+      //StringBuilder sb = new StringBuilder();
+      //for (int i = 0; i < bytes.length; i++)
+      //{
+      //  sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));
+      //}
+
+      //convert the byte to hex format method 2
+      StringBuilder hexString = new StringBuilder();
+      for (byte aByte : bytes)
+      {
+        hexString.append(Integer.toHexString(0xFF & aByte));
+      }
+
+      return hexString.toString();
+    }
+    catch (Exception e)
+    {
+      return "error!";
+    }
+    finally
+    {
+      if (fis != null)
+      {
+        try
+        {
+          fis.close();
+        }
+        catch (IOException ignored)
+        {
+        }
+      }
+    }
+  }
+
+  public String getName()
+  {
+    return new File(this.zip.getName()).getName();
+  }
+
+  @Override
+  public String getPackagePath()
+  {
+    return zip.getName();
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ocf/UnsupportedEncryptionFilter.java b/src/main/java/com/adobe/epubcheck/ocf/UnsupportedEncryptionFilter.java
new file mode 100644
index 0000000..8143cb1
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ocf/UnsupportedEncryptionFilter.java
@@ -0,0 +1,16 @@
+package com.adobe.epubcheck.ocf;
+
+import java.io.InputStream;
+
+public class UnsupportedEncryptionFilter implements EncryptionFilter
+{
+  public boolean canDecrypt()
+  {
+    return false;
+  }
+
+  public InputStream decrypt(InputStream in)
+  {
+    return null;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/opf/ContentChecker.java b/src/main/java/com/adobe/epubcheck/opf/ContentChecker.java
new file mode 100755
index 0000000..3e5b84f
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/opf/ContentChecker.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.opf;
+
+public interface ContentChecker
+{
+  public void runChecks();
+}
diff --git a/src/main/java/com/adobe/epubcheck/opf/ContentCheckerFactory.java b/src/main/java/com/adobe/epubcheck/opf/ContentCheckerFactory.java
new file mode 100755
index 0000000..387f118
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/opf/ContentCheckerFactory.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.opf;
+
+import java.util.Set;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ocf.OCFPackage;
+import com.adobe.epubcheck.util.EPUBVersion;
+
+public interface ContentCheckerFactory
+{
+  public ContentChecker newInstance(OCFPackage ocf, Report report,
+      String path, String mimeType, String properties,
+      XRefChecker xrefChecker, EPUBVersion version, Set<String> pubTypes);
+}
diff --git a/src/main/java/com/adobe/epubcheck/opf/DocumentValidator.java b/src/main/java/com/adobe/epubcheck/opf/DocumentValidator.java
new file mode 100644
index 0000000..38dad71
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/opf/DocumentValidator.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.opf;
+
+public interface DocumentValidator
+{
+  public boolean validate();
+}
diff --git a/src/main/java/com/adobe/epubcheck/opf/DocumentValidatorFactory.java b/src/main/java/com/adobe/epubcheck/opf/DocumentValidatorFactory.java
new file mode 100644
index 0000000..2195466
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/opf/DocumentValidatorFactory.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.opf;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.GenericResourceProvider;
+
+public interface DocumentValidatorFactory
+{
+  public DocumentValidator newInstance(Report report, String path,
+      GenericResourceProvider resourceProvider, String mimeType,
+      EPUBVersion version);
+}
diff --git a/src/main/java/com/adobe/epubcheck/opf/GenericContentChecker.java b/src/main/java/com/adobe/epubcheck/opf/GenericContentChecker.java
new file mode 100755
index 0000000..270d104
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/opf/GenericContentChecker.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.opf;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.ocf.OCFPackage;
+
+public class GenericContentChecker implements ContentChecker
+{
+  private final OCFPackage ocf;
+  private final Report report;
+  private final String path;
+
+  GenericContentChecker(OCFPackage ocf, Report report, String path)
+  {
+    this.ocf = ocf;
+    this.report = report;
+    this.path = path;
+  }
+
+  public void runChecks()
+  {
+    if (!ocf.hasEntry(path))
+    {
+      report.message(MessageId.RSC_001, new MessageLocation(this.ocf.getName(), -1, -1), path);
+    }
+    else if (!ocf.canDecrypt(path))
+    {
+      report.message(MessageId.RSC_004, new MessageLocation(this.ocf.getName(), 0, 0), path);
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/opf/GenericContentCheckerFactory.java b/src/main/java/com/adobe/epubcheck/opf/GenericContentCheckerFactory.java
new file mode 100755
index 0000000..2428640
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/opf/GenericContentCheckerFactory.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.opf;
+
+import java.util.Set;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ocf.OCFPackage;
+import com.adobe.epubcheck.util.EPUBVersion;
+
+public class GenericContentCheckerFactory implements ContentCheckerFactory
+{
+  static private final GenericContentCheckerFactory instance = new GenericContentCheckerFactory();
+
+  public ContentChecker newInstance(OCFPackage ocf, Report report,
+      String path, String mimeType, String properties,
+      XRefChecker xrefChecker, EPUBVersion version, Set<String> types)
+  {
+    return new GenericContentChecker(ocf, report, path);
+  }
+
+  static public GenericContentCheckerFactory getInstance()
+  {
+    return instance;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/opf/OPFChecker.java b/src/main/java/com/adobe/epubcheck/opf/OPFChecker.java
new file mode 100755
index 0000000..790f19a
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/opf/OPFChecker.java
@@ -0,0 +1,614 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.opf;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.bitmap.BitmapCheckerFactory;
+import com.adobe.epubcheck.css.CSSCheckerFactory;
+import com.adobe.epubcheck.dtbook.DTBookCheckerFactory;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.nav.NavCheckerFactory;
+import com.adobe.epubcheck.ncx.NCXCheckerFactory;
+import com.adobe.epubcheck.ocf.OCFFilenameChecker;
+import com.adobe.epubcheck.ocf.OCFPackage;
+import com.adobe.epubcheck.ops.OPSCheckerFactory;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.FeatureEnum;
+import com.adobe.epubcheck.util.GenericResourceProvider;
+import com.adobe.epubcheck.util.PathUtil;
+import com.adobe.epubcheck.xml.XMLParser;
+import com.adobe.epubcheck.xml.XMLValidator;
+import com.adobe.epubcheck.xml.XMLValidators;
+
+public class OPFChecker implements DocumentValidator
+{
+  final OCFPackage ocf;
+  final OPFData opfData;
+  final Report report;
+  final String path;
+  final XRefChecker xrefChecker;
+  OPFHandler opfHandler = null;
+  XMLParser opfParser = null;
+  final List<XMLValidator> opfValidators = new LinkedList<XMLValidator>();
+  
+  final Hashtable<String, ContentCheckerFactory> contentCheckerFactoryMap = new Hashtable<String, ContentCheckerFactory>();
+  final EPUBVersion version;
+  final GenericResourceProvider resourceProvider;
+
+  protected void initContentCheckerFactoryMap()
+  {
+    Hashtable<String, ContentCheckerFactory> map = new Hashtable<String, ContentCheckerFactory>();
+    map.put("application/xhtml+xml", OPSCheckerFactory.getInstance());
+    map.put("text/html", OPSCheckerFactory.getInstance());
+    map.put("text/x-oeb1-document", OPSCheckerFactory.getInstance());
+    map.put("image/jpeg", BitmapCheckerFactory.getInstance());
+    map.put("image/gif", BitmapCheckerFactory.getInstance());
+    map.put("image/png", BitmapCheckerFactory.getInstance());
+    map.put("image/svg+xml", OPSCheckerFactory.getInstance());
+    map.put("application/x-dtbook+xml", DTBookCheckerFactory.getInstance());
+    map.put("text/css", CSSCheckerFactory.getInstance());
+
+    contentCheckerFactoryMap.putAll(map);
+  }
+  
+  protected void initValidators()
+  {
+    opfValidators.add(XMLValidators.OPF_20_RNG.get());
+    opfValidators.add(XMLValidators.OPF_20_SCH.get());
+  }
+
+  public OPFChecker(OCFPackage ocf, Report report, String path, EPUBVersion version)
+  {
+    this.ocf = ocf;
+    this.resourceProvider = ocf;
+    this.report = report;
+    this.path = path;
+    this.xrefChecker = new XRefChecker(ocf, report, version);
+    this.version = version;
+    this.opfData = ocf.getOpfData().get(path);
+    initValidators();
+    initContentCheckerFactoryMap();
+  }
+
+  public OPFChecker(String path, GenericResourceProvider resourceProvider, Report report)
+  {
+    this(path, resourceProvider, report, EPUBVersion.VERSION_2);
+  }
+  
+  protected OPFChecker(String path, GenericResourceProvider resourceProvider, Report report, EPUBVersion version)
+  {
+
+    this.ocf = null; //unused in this mode
+    this.xrefChecker = null; //unused in this mode
+    this.opfData = null; //unused in this mode
+    this.resourceProvider = resourceProvider;
+    this.report = report;
+    this.path = path;
+    this.version = version;
+    initValidators();
+    initContentCheckerFactoryMap();
+  }
+
+  public void runChecks()
+  {
+    if (!ocf.hasEntry(path))
+    {
+      report.message(MessageId.PKG_020, new MessageLocation(this.ocf.getName(), 0, 0), path);
+      return;
+    }
+    validate();
+
+    if (!opfHandler.checkUniqueIdentExists())
+    {
+      report.message(MessageId.OPF_030, new MessageLocation(path, -1, -1), opfHandler.getIdentId());
+		} else {
+			ocf.setUniqueIdentifier(opfHandler.getUid());
+    }
+
+    int itemCount = opfHandler.getItemCount();
+    report.info(null, FeatureEnum.ITEMS_COUNT, Integer.toString(itemCount));
+    for (int i = 0; i < itemCount; i++)
+    {
+      OPFItem item = opfHandler.getItem(i);
+      try
+      {
+        xrefChecker.registerResource(item.getPath(),
+            item.getMimeType(), item.isInSpine(),
+            new FallbackChecker().checkItemFallbacks(item, opfHandler, true),
+            new FallbackChecker().checkImageFallbacks(item, opfHandler));
+      }
+      catch (IllegalArgumentException e)
+      {
+        report.message(MessageId.RSC_005,
+            new MessageLocation(path, item.getLineNumber(), item.getColumnNumber()),
+            e.getMessage());
+      }
+
+      report.info(item.getPath(), FeatureEnum.DECLARED_MIMETYPE, item.getMimeType());
+    }
+
+    checkGuide();
+    checkBindings();
+
+    for (int i = 0; i < itemCount; i++)
+    {
+      OPFItem item = opfHandler.getItem(i);
+
+			if (!item.path.matches("^[^:/?#]+://.*"))
+      {
+        checkItemContent(item);
+      }
+    }
+
+    xrefChecker.checkReferences();
+  }
+
+  void checkBindings()
+  {
+
+  }
+
+  void checkGuide()
+  {
+    int refCount = opfHandler.getReferenceCount();
+    for (int i = 0; i < refCount; i++)
+    {
+      OPFReference ref = opfHandler.getReference(i);
+      String itemPath = PathUtil.removeAnchor(ref.getHref());
+      OPFItem item = opfHandler.getItemByPath(itemPath);
+      if (item == null)
+      {
+        report.message(MessageId.OPF_031,
+            new MessageLocation(path, ref.getLineNumber(), ref.getColumnNumber()),
+            ref.getHref());
+      }
+      else
+      {
+        if (!isBlessedItemType(item.mimeType, version) &&
+            !isDeprecatedBlessedItemType(item.mimeType))
+        {
+          report.message(MessageId.OPF_032,
+              new MessageLocation(path, ref.getLineNumber(), ref.getColumnNumber()),
+              ref.getHref());
+        }
+      }
+    }
+  }
+
+  void initHandler()
+  {
+  		opfHandler = new OPFHandler(path, report, xrefChecker, opfParser, version);
+  }
+
+  public OPFHandler getOPFHandler()
+  {
+    return opfHandler;
+  }
+
+  @Override
+  public boolean validate()
+  {
+    int fatalErrorsSoFar = report.getFatalErrorCount();
+    int errorsSoFar = report.getErrorCount();
+    int warningsSoFar = report.getWarningCount();
+
+    InputStream in = null;
+    try
+    {
+      in = resourceProvider.getInputStream(path);
+      opfParser = new XMLParser(ocf, new BufferedInputStream(
+          in), path, "opf",
+          report, version);
+      initHandler();
+      opfParser.addXMLHandler(opfHandler);
+      for (XMLValidator validator : opfValidators)
+      {
+        opfParser.addValidator(validator);
+      }
+      opfParser.process();
+    }
+    catch (IOException e)
+    {
+      report.message(MessageId.PKG_008, new MessageLocation(path, 0, 0), path);
+    }
+    finally
+    {
+      try
+      {
+        if (in != null)
+        {
+          in.close();
+        }
+      }
+      catch (Exception ignored)
+      {
+        // eat the error
+      }
+    }
+
+
+    int itemCount = opfHandler.getItemCount();
+    for (int i = 0; i < itemCount; i++)
+    {
+      OPFItem item = opfHandler.getItem(i);
+			
+			// only check Filename CompatiblyEscaped when in "-mode opf"
+			// this is when 'xrefChecker' Object is null which is an indicator for single file validation
+			// (Had no better possibility in mind since "mode" isn't available in OPFChecker.java)
+			//
+			// bugfix for issue 239
+			if(xrefChecker == null) {
+      OCFFilenameChecker.checkCompatiblyEscaped(item.getPath(), report, version);
+			}
+      checkItem(item, opfHandler);
+    }
+
+    int spineItemCount = opfHandler.getSpineItemCount();
+    int nonLinearCount = 0;
+    for (int i = 0; i < spineItemCount; i++)
+    {
+      OPFItem item = opfHandler.getSpineItem(i);
+      checkSpineItem(item, opfHandler);
+      if (!item.getSpineLinear())
+      {
+        nonLinearCount++;
+      }
+      report.info(item.getPath(), FeatureEnum.SPINE_INDEX, Integer.toString(i));
+    }
+    if (nonLinearCount == spineItemCount && spineItemCount > 0)
+    {
+      //test > 0 to not trigger this when opf is malformed etc
+      report.message(MessageId.OPF_033, new MessageLocation(path, -1, -1));
+    }
+
+    if (version == EPUBVersion.VERSION_2)
+    {
+      // check for >1 itemrefs to any given spine item
+      // http://code.google.com/p/epubcheck/issues/detail?id=182
+      List<OPFItem> seen = new ArrayList<OPFItem>();
+      for (int i = 0; i < opfHandler.getSpineItemCount(); i++)
+      {
+        OPFItem item = opfHandler.getSpineItem(i);
+        if (seen.contains(item))
+        {
+          report.message(MessageId.OPF_034,
+              new MessageLocation(path, item.getLineNumber(), item.getLineNumber()),
+              item.getId());
+        }
+        else
+        {
+          seen.add(item);
+        }
+      }
+    }
+
+    return fatalErrorsSoFar == report.getFatalErrorCount()
+        && errorsSoFar == report.getErrorCount()
+        && warningsSoFar == report.getWarningCount();
+  }
+
+  public static boolean isBlessedItemType(String type, EPUBVersion version)
+  {
+    if (version == EPUBVersion.VERSION_2)
+    {
+      return type.equals("application/xhtml+xml")
+          || type.equals("application/x-dtbook+xml");
+    }
+    else
+    {
+      return type.equals("application/xhtml+xml")
+          || type.equals("image/svg+xml");
+    }
+  }
+
+  public static boolean isDeprecatedBlessedItemType(String type)
+  {
+    return type.equals("text/x-oeb1-document") || type.equals("text/html");
+  }
+
+  protected static boolean isBlessedStyleType(String type)
+  {
+    return type.equals("text/css");
+  }
+
+  protected static boolean isDeprecatedBlessedStyleType(String type)
+  {
+    return type.equals("text/x-oeb1-css");
+  }
+
+  public static boolean isBlessedImageType(String type)
+  {
+    return type.equals("image/gif") || type.equals("image/png")
+        || type.equals("image/jpeg") || type.equals("image/svg+xml");
+  }
+
+  public static boolean isBlessedFontMimetype20(String mime)
+  {
+    return mime != null && (mime.startsWith("font/") || mime.startsWith("application/font") || mime.startsWith("application/x-font") || "application/vnd.ms-opentype".equals(mime));
+  }
+
+  void checkItem(OPFItem item, OPFHandler opfHandler)
+  {
+    String mimeType = item.getMimeType();
+    String fallback = item.getFallback();
+    if (mimeType == null || mimeType.equals(""))
+    {
+      // Ensures that media-type attribute is not empty
+      // report.error(path, item.getLineNumber(), item.getColumnNumber(),
+      // "empty media-type attribute");
+    }
+    else if (!mimeType.matches("[a-zA-Z0-9!#$&+-^_]+/[a-zA-Z0-9!#$&+-^_]+"))
+    {
+      /*
+          * Ensures that media-type attribute has correct content. The
+          * media-type must have a type and a sub-type divided by '/' The
+          * allowable content for the media-type attribute is defined in
+          * RFC4288 section 4.2
+          */
+      // report.error(path, item.getLineNumber(), item.getColumnNumber(),
+      // "invalid content for media-type attribute");
+    }
+    else if (isDeprecatedBlessedItemType(mimeType)
+        || isDeprecatedBlessedStyleType(mimeType))
+    {
+      if (opfHandler.getOpf20PackageFile()
+          && mimeType.equals("text/html"))
+      {
+        report.message(MessageId.OPF_035, new MessageLocation(path, item.getLineNumber(), item.getColumnNumber(), item.getId()));
+      }
+      else if (opfHandler.getOpf12PackageFile()
+          && mimeType.equals("text/html"))
+      {
+        report.message(MessageId.OPF_038, new MessageLocation(path, item.getLineNumber(), item.getColumnNumber(), item.getId()), mimeType);
+      }
+      else if (opfHandler.getOpf20PackageFile())
+      {
+        report.message(MessageId.OPF_037,
+            new MessageLocation(path, item.getLineNumber(), item.getColumnNumber(), item.getId()),
+            mimeType);
+      }
+    }
+    if (opfHandler.getOpf12PackageFile() && fallback == null)
+    {
+      if (isBlessedItemType(mimeType, version))
+      {
+        report.message(MessageId.OPF_038,
+            new MessageLocation(path, item.getLineNumber(), item.getColumnNumber(), item.getId()),
+            mimeType);
+      }
+      else if (isBlessedStyleType(mimeType))
+      {
+        report.message(MessageId.OPF_039,
+            new MessageLocation(path, item.getLineNumber(), item.getColumnNumber(), item.getId()),
+            mimeType);
+      }
+    }
+    if (fallback != null)
+    {
+      OPFItem fallbackItem = opfHandler.getItemById(fallback);
+      if (fallbackItem == null)
+      {
+        report.message(MessageId.OPF_040,
+            new MessageLocation(path, item.getLineNumber(), item.getColumnNumber(), item.getId()));
+      }
+    }
+		
+    String fallbackStyle = item.getFallbackStyle();
+    if (fallbackStyle != null)
+    {
+      OPFItem fallbackStyleItem = opfHandler.getItemById(fallbackStyle);
+      if (fallbackStyleItem == null)
+      {
+        report.message(MessageId.OPF_041,
+            new MessageLocation(path, item.getLineNumber(), item.getColumnNumber(), item.getId()));
+      }
+    }
+  }
+
+  void checkItemContent(OPFItem item)
+  {
+    String mimeType = item.getMimeType();
+    String path = item.getPath();
+    String properties = item.getProperties();
+
+    if (mimeType != null)
+    {
+      ContentCheckerFactory checkerFactory;
+      if (item.isNcx())
+      {
+        checkerFactory = NCXCheckerFactory.getInstance();
+      }
+      else if (item.isNav())
+      {
+        checkerFactory = NavCheckerFactory.getInstance();
+      }
+      else
+      {
+        checkerFactory = contentCheckerFactoryMap.get(mimeType);
+      }
+
+      if (checkerFactory == null)
+      {
+        checkerFactory = GenericContentCheckerFactory.getInstance();
+      }
+      if (checkerFactory != null)
+      {
+        ContentChecker checker = checkerFactory.newInstance(ocf,
+            report, path, mimeType, properties, xrefChecker,
+            version, opfData.getTypes());
+        checker.runChecks();
+      }
+    }
+  }
+
+  void checkSpineItem(OPFItem item, OPFHandler opfHandler)
+  {
+    // These checks are okay to be done on <spine> items, but they really
+    // should be done on all
+    // <manifest> items instead. I am avoiding making this change now
+    // pending a few issue
+    // resolutions in the EPUB Maint Working Group (e.g. embedded fonts not
+    // needing fallbacks).
+    // [GC 11/15/09]
+    String mimeType = item.getMimeType();
+    if (mimeType != null)
+    {
+      if (isBlessedStyleType(mimeType)
+          || isDeprecatedBlessedStyleType(mimeType)
+          || isBlessedImageType(mimeType))
+      {
+        report.message(MessageId.OPF_042,
+            new MessageLocation(path, item.getLineNumber(), item.getColumnNumber()),
+            mimeType);
+      }
+      else if (!isBlessedItemType(mimeType, version)
+          && !isDeprecatedBlessedItemType(mimeType)
+          && item.getFallback() == null)
+      {
+        report.message(MessageId.OPF_043,
+            new MessageLocation(path, item.getLineNumber(), item.getColumnNumber()),
+            mimeType);
+      }
+      else if (!isBlessedItemType(mimeType, version)
+          && !isDeprecatedBlessedItemType(mimeType)
+          && !new FallbackChecker().checkItemFallbacks(item, opfHandler, true))
+      {
+        report.message(MessageId.OPF_044,
+            new MessageLocation(path, item.getLineNumber(), item.getColumnNumber()),
+            mimeType);
+      }
+    }
+  }
+
+  class FallbackChecker
+  {
+    private final Set<String> checked;
+
+    public FallbackChecker()
+    {
+      checked = new HashSet<String>();
+    }
+
+    boolean checkItemFallbacks(OPFItem item, OPFHandler opfHandler, boolean checkFallbackStyle)
+    {
+      String fallback = item.getFallback();
+      if (fallback != null)
+      {
+        fallback = fallback.trim();
+        if (checked.contains(fallback))
+        {
+          report.message(MessageId.OPF_045,
+              new MessageLocation(path, item.getLineNumber(), item.getColumnNumber()));
+          return false;
+        }
+        else
+        {
+          checked.add(fallback);
+        }
+
+        OPFItem fallbackItem = opfHandler.getItemById(fallback);
+        if (fallbackItem != null)
+        {
+          String mimeType = fallbackItem.getMimeType();
+          if (mimeType != null)
+          {
+            if (isBlessedItemType(mimeType, version)
+                || isDeprecatedBlessedItemType(mimeType))
+            {
+              return true;
+            }
+            if (checkItemFallbacks(fallbackItem, opfHandler, checkFallbackStyle))
+            {
+              return true;
+            }
+
+          }
+        }
+      }
+      if (!checkFallbackStyle)
+      {
+        return false;
+      }
+
+      String fallbackStyle = item.getFallbackStyle();
+      if (fallbackStyle != null)
+      {
+        OPFItem fallbackStyleItem = opfHandler.getItemById(fallbackStyle);
+        if (fallbackStyleItem != null)
+        {
+          String mimeType = fallbackStyleItem.getMimeType();
+          return mimeType != null && (isBlessedStyleType(mimeType)
+              || isDeprecatedBlessedStyleType(mimeType));
+        }
+      }
+      return false;
+    }
+
+    boolean checkImageFallbacks(OPFItem item, OPFHandler opfHandler)
+    {
+      String fallback = item.getFallback();
+      if (fallback != null)
+      {
+        fallback = fallback.trim();
+        if (checked.contains(fallback))
+        {
+          report.message(MessageId.OPF_045,
+              new MessageLocation(path, item.getLineNumber(), item.getColumnNumber()));
+          return false;
+        }
+        else
+        {
+          checked.add(fallback);
+        }
+        OPFItem fallbackItem = opfHandler.getItemById(fallback);
+        if (fallbackItem != null)
+        {
+          String mimeType = fallbackItem.getMimeType();
+          if (mimeType != null)
+          {
+            if (isBlessedImageType(mimeType))
+            {
+              return true;
+            }
+            if (checkImageFallbacks(fallbackItem, opfHandler))
+            {
+              return true;
+            }
+          }
+        }
+      }
+      return false;
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/opf/OPFChecker30.java b/src/main/java/com/adobe/epubcheck/opf/OPFChecker30.java
new file mode 100644
index 0000000..f33dca9
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/opf/OPFChecker30.java
@@ -0,0 +1,227 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.opf;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Set;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.bitmap.BitmapCheckerFactory;
+import com.adobe.epubcheck.css.CSSCheckerFactory;
+import com.adobe.epubcheck.dtbook.DTBookCheckerFactory;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.ocf.OCFPackage;
+import com.adobe.epubcheck.ops.OPSCheckerFactory;
+import com.adobe.epubcheck.overlay.OverlayCheckerFactory;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.GenericResourceProvider;
+import com.adobe.epubcheck.xml.XMLValidator;
+import com.google.common.io.Files;
+
+public class OPFChecker30 extends OPFChecker implements DocumentValidator
+{
+
+  public OPFChecker30(OCFPackage ocf, Report report, String path,
+      EPUBVersion version)
+  {
+    super(ocf, report, path, version);
+  }
+
+  public OPFChecker30(String path, GenericResourceProvider resourceProvider,
+      Report report)
+  {
+    super(path, resourceProvider, report, EPUBVersion.VERSION_3);
+  }
+
+
+  @Override
+  protected void initContentCheckerFactoryMap()
+  {
+    HashMap<String, ContentCheckerFactory> map = new HashMap<String, ContentCheckerFactory>();
+    map.put("application/xhtml+xml", OPSCheckerFactory.getInstance());
+    map.put("application/x-dtbook+xml", DTBookCheckerFactory.getInstance());
+    map.put("image/jpeg", BitmapCheckerFactory.getInstance());
+    map.put("image/gif", BitmapCheckerFactory.getInstance());
+    map.put("image/png", BitmapCheckerFactory.getInstance());
+    map.put("image/svg+xml", OPSCheckerFactory.getInstance());
+    map.put("text/css", CSSCheckerFactory.getInstance());
+    map.put("application/smil+xml", OverlayCheckerFactory.getInstance());
+    contentCheckerFactoryMap.clear();
+    contentCheckerFactoryMap.putAll(map);
+  }
+  
+  @Override
+  protected void initValidators()
+  {
+    opfValidators.clear();
+    opfValidators.add(new XMLValidator("schema/30/package-30.rnc"));
+    opfValidators.add(new XMLValidator("schema/30/package-30.sch"));
+    opfValidators.add(new XMLValidator("schema/30/collection-do-30.sch"));
+    opfValidators.add(new XMLValidator("schema/30/collection-manifest-30.sch"));
+    if (opfData != null && opfData.getTypes().contains(OPFData.DC_TYPE_EDUPUB))
+    {
+      opfValidators.add(new XMLValidator("schema/30/edupub/edu-opf.sch"));
+    }
+  }
+
+  @Override
+  public void initHandler()
+  {
+    opfHandler = new OPFHandler30(path, report, xrefChecker, opfParser, version);
+  }
+
+  @Override
+  protected void checkItem(OPFItem item, OPFHandler opfHandler)
+  {
+    String mimeType = item.getMimeType();
+    String fallback = item.getFallback();
+    if (mimeType == null || mimeType.equals(""))
+    {
+      // report.error(path, item.getLineNumber(), item.getColumnNumber(),
+      // "empty media-type attribute");
+      return;
+    }
+
+    if (!mimeType.matches("[a-zA-Z0-9!#$&+-^_]+/[a-zA-Z0-9!#$&+-^_]+"))
+    {
+      // report.error(path, item.getLineNumber(), item.getColumnNumber(),
+      // "invalid content for media-type attribute");
+      return;
+    }
+    
+    if ("application/xhtml+xml".equals(mimeType) && !"xhtml".equals(Files.getFileExtension(item.getPath())))
+    {
+      report.message(MessageId.HTM_014a,
+          new MessageLocation(path, item.getLineNumber(), item.getColumnNumber()), item.getPath());
+    }
+    
+    if (fallback != null)
+    {
+      OPFItem fallbackItem = opfHandler.getItemById(fallback);
+      if (fallbackItem == null)
+      {
+        report.message(MessageId.OPF_040,
+            new MessageLocation(path, item.getLineNumber(), item.getColumnNumber()));
+      }
+    }
+  }
+
+  @Override
+  protected void checkSpineItem(OPFItem item, OPFHandler opfHandler)
+  {
+
+    String mimeType = item.getMimeType();
+    if (mimeType == null)
+    {
+      return;
+    }
+
+    if (isBlessedItemType(mimeType, version))
+    {
+      return;
+    }
+
+    if (item.getFallback() == null)
+    {
+      report.message(MessageId.OPF_043,
+          new MessageLocation(path, item.getLineNumber(), item.getColumnNumber()),
+          mimeType);
+    }
+
+    else if (!new FallbackChecker().checkItemFallbacks(item, opfHandler, false))
+    {
+      report.message(MessageId.OPF_044,
+          new MessageLocation(path, item.getLineNumber(), item.getColumnNumber()),
+          mimeType);
+    }
+  }
+
+  @Override
+  protected void checkBindings()
+  {
+    Set<String> mimeTypes = xrefChecker.getBindingsMimeTypes();
+    Iterator<String> it = mimeTypes.iterator();
+    String mimeType;
+    while (it.hasNext())
+    {
+      mimeType = it.next();
+      String handlerSrc = xrefChecker.getBindingHandlerSrc(mimeType);
+      OPFItem handler = opfHandler.getItemByPath(handlerSrc);
+      if (!handler.isScripted())
+      {
+        report.message(MessageId.OPF_046,
+            new MessageLocation(handlerSrc, handler.lineNumber, handler.columnNumber));
+      }
+    }
+  }
+
+
+//	protected boolean checkItemFallbacks(OPFItem item, OPFHandler opfHandler) {
+//		String fallback = item.getFallback();
+//		if (fallback != null) {
+//			OPFItem fallbackItem = opfHandler.getItemById(fallback);
+//			if (fallbackItem != null) {
+//				String mimeType = fallbackItem.getMimeType();
+//				if (mimeType != null) {
+//					if (OPFChecker.isBlessedItemType(mimeType, version))
+//						return true;
+//					if (checkItemFallbacks(fallbackItem, opfHandler))
+//						return true;
+//				}
+//			}
+//		}
+//		return false;
+//	}
+
+  public static boolean isBlessedAudioType(String type)
+  {
+    return type.equals("audio/mpeg") || type.equals("audio/mp4") || type.equals("audio/ogg");
+  }
+
+  public static boolean isBlessedVideoType(String type)
+  {
+    return type.startsWith("video/h264") || type.startsWith("video/webm") || type.startsWith("video/mp4");
+  }
+
+  public static boolean isBlessedFontType(String type)
+  {
+    return type.equals("application/vnd.ms-opentype")
+        || type.equals("application/font-woff")
+        || type.equals("image/svg+xml");
+  }
+
+  public static boolean isCoreMediaType(String type)
+  {
+    return isBlessedAudioType(type)
+        || isBlessedVideoType(type)
+        || isBlessedFontType(type)
+        || isBlessedItemType(type, EPUBVersion.VERSION_3)
+        || isBlessedImageType(type)
+        || type.equals("text/javascript")
+        || type.equals("application/pls+xml")
+        || type.equals("application/smil+xml")
+        || type.equals("image/svg+xml");
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/opf/OPFCheckerFactory.java b/src/main/java/com/adobe/epubcheck/opf/OPFCheckerFactory.java
new file mode 100644
index 0000000..e79691a
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/opf/OPFCheckerFactory.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.opf;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.GenericResourceProvider;
+
+public class OPFCheckerFactory implements DocumentValidatorFactory
+{
+  static private final OPFCheckerFactory instance = new OPFCheckerFactory();
+
+  static public OPFCheckerFactory getInstance()
+  {
+    return instance;
+  }
+
+  public DocumentValidator newInstance(Report report, String path,
+      GenericResourceProvider resourceProvider, String mimeType,
+      EPUBVersion version)
+  {
+    if (version == EPUBVersion.VERSION_2)
+    {
+      return new OPFChecker(path, resourceProvider, report);
+    }
+    else
+    {
+      return new OPFChecker30(path, resourceProvider, report);
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/opf/OPFData.java b/src/main/java/com/adobe/epubcheck/opf/OPFData.java
new file mode 100644
index 0000000..7e3a994
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/opf/OPFData.java
@@ -0,0 +1,72 @@
+package com.adobe.epubcheck.opf;
+
+import java.util.Set;
+
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
+
+public final class OPFData
+{
+  public static final String OPF_MIME_TYPE = "application/oebps-package+xml";
+  public static final String DC_TYPE_EDUPUB = "edupub";
+
+  public static class OPFDataBuilder
+  {
+
+    private EPUBVersion version;
+    private Set<String> types = Sets.newHashSet();
+    private String uniqueId;
+
+    public OPFData build()
+    {
+      return new OPFData(version, uniqueId, types);
+    }
+
+    public OPFDataBuilder withUniqueId(String uniqueId)
+    {
+      this.uniqueId = uniqueId;
+      return this;
+    }
+
+    public OPFDataBuilder withVersion(EPUBVersion version)
+    {
+      this.version = version;
+      return this;
+    }
+
+    public OPFDataBuilder withType(String type)
+    {
+      this.types.add(type);
+      return this;
+    }
+
+  }
+
+  private final EPUBVersion version;
+  private final Set<String> types;
+  private final String uniqueId;
+
+  private OPFData(EPUBVersion version, String uniqueId, Set<String> types)
+  {
+    this.version = version;
+    this.uniqueId = uniqueId;
+    this.types = ImmutableSet.copyOf(types);
+  }
+
+  public EPUBVersion getVersion()
+  {
+    return version;
+  }
+
+  public Set<String> getTypes()
+  {
+    return types;
+  }
+
+  public String getUniqueIdentifier()
+  {
+    // Note: can be null, correctness is checked in OPFHandler 
+    return uniqueId;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/opf/OPFHandler.java b/src/main/java/com/adobe/epubcheck/opf/OPFHandler.java
new file mode 100755
index 0000000..732eb8a
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/opf/OPFHandler.java
@@ -0,0 +1,738 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.opf;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.util.*;
+import com.adobe.epubcheck.xml.XMLElement;
+import com.adobe.epubcheck.xml.XMLHandler;
+import com.adobe.epubcheck.xml.XMLParser;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+public class OPFHandler implements XMLHandler
+{
+  final Hashtable<String, OPFItem> itemMapById = new Hashtable<String, OPFItem>();
+  final Hashtable<String, OPFItem> itemMapByPath = new Hashtable<String, OPFItem>();
+  String pageMapId = null;
+  MessageLocation pageMapReferenceLocation = null;
+
+  // Hashtable encryptedItems;
+
+  final XMLParser parser;
+
+  private final Vector<OPFItem> spine = new Vector<OPFItem>();
+  final Vector<OPFItem> items = new Vector<OPFItem>();
+  private final Vector<OPFReference> refs = new Vector<OPFReference>();
+
+  final Report report;
+
+  private static final HashSet<String> validRoles = new HashSet<String>();
+
+  final String path;
+
+  final XRefChecker xrefChecker;
+
+  // This string holds the value of the <package> element's unique-identifier
+  // attribute
+  // that will be used to make sure that the unique-identifier references an
+  // existing
+  // <dc:identifier> id attribute
+  private String uniqueIdent;
+
+  // This boolean specifies whether or not there has been a <dc:identifier>
+  // element
+  // parsed that has an id attribute that corresponds with the
+  // unique-identifier attribute
+  // from the packaging element. The default value is false.
+  private boolean uniqueIdentExists = false;
+	// This string holds the value of the <dc:identifier> element detected
+	String uid;
+	
+  private boolean opf12PackageFile = false;
+
+  private final EPUBVersion version;
+
+  private boolean globalPrePaginated = false;
+  private boolean checkedUnsupportedXmlVersion = false;
+
+  static
+  {
+    String[] list = {"acp", "act", "adp", "aft", "anl", "anm", "ann",
+        "ant", "app", "aqt", "arc", "ard", "arr", "art", "asg", "asn",
+        "att", "auc", "aud", "aui", "aus", "aut", "bdd", "bjd", "bkd",
+        "bkp", "bnd", "bpd", "bsl", "ccp", "chr", "clb", "cli", "cll",
+        "clr", "clt", "cmm", "cmp", "cmt", "cng", "cnd", "cns", "coe",
+        "col", "com", "cos", "cot", "cov", "cpc", "cpe", "cph", "cpl",
+        "cpt", "cre", "crp", "crr", "csl", "csp", "cst", "ctb", "cte",
+        "ctg", "ctr", "cts", "ctt", "cur", "cwt", "dfd", "dfe", "dft",
+        "dgg", "dis", "dln", "dnc", "dnr", "dpc", "dpt", "drm", "drt",
+        "dsr", "dst", "dtc", "dte", "dtm", "dto", "dub", "edt", "egr",
+        "elg", "elt", "eng", "etr", "exp", "fac", "fld", "flm", "fmo",
+        "fpy", "fnd", "frg", "gis", "grt", "hnr", "hst", "ill", "ilu",
+        "ins", "inv", "itr", "ive", "ivr", "lbr", "lbt", "ldr", "led",
+        "lee", "lel", "len", "let", "lgd", "lie", "lil", "lit", "lsa",
+        "lse", "lso", "ltg", "lyr", "mcp", "mfr", "mdc", "mod", "mon",
+        "mrk", "msd", "mte", "mus", "nrt", "opn", "org", "orm", "oth",
+        "own", "pat", "pbd", "pbl", "pdr", "pfr", "pht", "plt", "pma",
+        "pmn", "pop", "ppm", "ppt", "prc", "prd", "prf", "prg", "prm",
+        "pro", "prt", "pta", "pte", "ptf", "pth", "ptt", "rbr", "rce",
+        "rcp", "red", "ren", "res", "rev", "rps", "rpt", "rpy", "rse",
+        "rsg", "rsp", "rst", "rth", "rtm", "sad", "sce", "scl", "scr",
+        "sds", "sec", "sgn", "sht", "sng", "spk", "spn", "spy", "srv",
+        "std", "stl", "stm", "stn", "str", "tcd", "tch", "ths", "trc",
+        "trl", "tyd", "tyg", "vdg", "voc", "wam", "wdc", "wde", "wit"};
+    Collections.addAll(validRoles, list);
+  }
+
+  public OPFHandler(String path, Report report,
+      XRefChecker xrefChecker, XMLParser parser, EPUBVersion version)
+  {
+    this.path = path;
+    this.report = report;
+    this.xrefChecker = xrefChecker;
+    this.parser = parser;
+    this.version = version;
+  }
+
+  public boolean getOpf12PackageFile()
+  {
+    return (opf12PackageFile);
+  }
+
+  public boolean getOpf20PackageFile()
+  {
+    return (!opf12PackageFile);
+  }
+
+  public OPFItem getItemById(String id)
+  {
+    return itemMapById.get(id);
+  }
+
+  public OPFItem getItemByPath(String path)
+  {
+    return itemMapByPath.get(path);
+  }
+
+  public int getSpineItemCount()
+  {
+    return spine.size();
+  }
+
+  public OPFItem getSpineItem(int index)
+  {
+    return spine.elementAt(index);
+  }
+
+  public int getItemCount()
+  {
+    return items.size();
+  }
+
+  public OPFItem getItem(int index)
+  {
+    return items.elementAt(index);
+  }
+
+  public int getReferenceCount()
+  {
+    return refs.size();
+  }
+
+  public OPFReference getReference(int index)
+  {
+    return refs.elementAt(index);
+  }
+
+  /**
+   * Checks to see if the unique-identifier attribute of the package element
+   * references an existing DC metadata identifier element's id attribute
+   *
+   * @return true if there is an identifier with an id attribute that matches
+   *         the value of the unique-identifier attribute of the package
+   *         element. False otherwise.
+   */
+  public boolean checkUniqueIdentExists()
+  {
+    return uniqueIdentExists;
+  }
+	
+	public String getUid() {
+		return uid;
+	}
+  // public void setEncryptedItems(Hashtable encryptedItems) {
+  // this.encryptedItems = encryptedItems;
+  // }
+
+  private static boolean isValidRole(String role)
+  {
+    return validRoles.contains(role) || role.startsWith("oth.");
+  }
+
+  public void startElement()
+  {
+    if (!checkedUnsupportedXmlVersion)
+    {
+      HandlerUtil.checkXMLVersion(parser);
+      checkedUnsupportedXmlVersion = true;
+    }
+    boolean registerEntry = true;
+    XMLElement e = parser.getCurrentElement();
+    String ns = e.getNamespace();
+		
+    if (ns == null
+        || ns.equals("")
+        || ns.equals("http://openebook.org/namespaces/oeb-package/1.0/")
+        || ns.equals("http://www.idpf.org/2007/opf"))
+    {
+      String name = e.getName();
+      if (name.equals("package"))
+      {
+        if (!ns.equals("http://www.idpf.org/2007/opf"))
+        {
+          report.message(MessageId.OPF_047, new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()));
+          opf12PackageFile = true;
+        }
+        /*
+             * This section checks to see the value of the unique-identifier
+             * attribute and stores it in the String uniqueIdent or reports
+             * an error if the unique-identifier attribute is missing or
+             * does not have a value
+             */
+        String uniqueIdentAttr = e.getAttribute("unique-identifier");
+        if (uniqueIdentAttr != null && !uniqueIdentAttr.equals(""))
+        {
+          uniqueIdent = uniqueIdentAttr;
+        }
+        else
+        {
+          report.message(MessageId.OPF_048, new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()));
+        }
+      }
+      else if (name.equals("item"))
+      {
+        String id = e.getAttribute("id");
+        String href = e.getAttribute("href");
+        if (href != null
+            && !(version == EPUBVersion.VERSION_3 && href
+								.matches("^[^:/?#]+://.*"))) {
+          try
+          {
+            href = PathUtil.resolveRelativeReference(path, href,
+                null);
+          }
+          catch (IllegalArgumentException ex)
+          {
+            report.message(MessageId.OPF_010,
+                new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber(), href),
+                ex.getMessage());
+            href = null;
+          }
+        }
+				if (href != null && href.matches("^[^:/?#]+://.*")) {
+        
+          report.info(path, FeatureEnum.REFERENCE, href);
+        }
+        String mimeType = e.getAttribute("media-type");
+        String fallback = e.getAttribute("fallback");
+				
+        // dirty fix for issue 271: treat @fallback attribute in EPUB3 like fallback-style in EPUB2
+        // then all the epubcheck mechanisms on checking stylesheet fallbacks will work as in EPUB 2
+        String fallbackStyle = (version == EPUBVersion.VERSION_3) ? e.getAttribute("fallback") : e.getAttribute("fallback-style");
+				
+        String namespace = e.getAttribute("island-type");
+        String properties = e.getAttribute("properties");
+        if (properties != null)
+        {
+          properties = properties.replaceAll("[\\s]+", " ");
+        }
+
+        if (version == EPUBVersion.VERSION_3
+						&& href.matches("^[^:/?#]+://.*")
+            && !OPFChecker30.isBlessedAudioType(mimeType)
+            && !OPFChecker30.isBlessedVideoType(mimeType))
+        {
+          if (OPFChecker30.isCoreMediaType(mimeType))
+          {
+            report.message(MessageId.OPF_010,
+                new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()), href);
+          }
+          else
+          {
+            // mgy 20120414: this shouldn't even be a warning
+            // report.warning(
+            // path,
+            // parser.getLineNumber(),
+            // parser.getColumnNumber(),
+            // "Remote resource not validated");
+          }
+        }
+
+        OPFItem item = new OPFItem(id, href, mimeType, fallback,
+            fallbackStyle, namespace, properties,
+            parser.getLineNumber(), parser.getColumnNumber());
+
+        if (id != null)
+        {
+          itemMapById.put(id, item);
+          report.info(href, FeatureEnum.UNIQUE_IDENT, id);
+        }
+        else
+        {
+          System.err.printf("Item is missing id : %s\n", href);
+        }
+        if (properties != null)
+        {
+          String propertyArray[] = properties.split(" ");
+          for (String aPropertyArray : propertyArray)
+          {
+            if (aPropertyArray.equals("nav"))
+            {
+              item.setNav(true);
+            }
+            if (aPropertyArray.equals("scripted"))
+            {
+              item.setScripted(true);
+            }
+          }
+
+        }
+        if (href != null && registerEntry)
+        {
+          itemMapByPath.put(href, item);
+          items.add(item);
+        }
+      }
+      else if (name.equals("reference"))
+      {
+        String type = e.getAttribute("type");
+        String title = e.getAttribute("title");
+        String href = e.getAttribute("href");
+        if (href != null && xrefChecker != null)
+        {
+          try
+          {
+            href = PathUtil.resolveRelativeReference(path, href,
+                null);
+            xrefChecker.registerReference(path,
+                parser.getLineNumber(),
+                parser.getColumnNumber(), href,
+                XRefChecker.RT_GENERIC);
+          }
+          catch (IllegalArgumentException ex)
+          {
+            report.message(MessageId.OPF_010,
+                new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber(), href), ex.getMessage());
+            href = null;
+          }
+        }
+        if (href != null && href.startsWith("http"))
+        {
+          report.info(path, FeatureEnum.REFERENCE, href);
+        }
+				
+        OPFReference ref = new OPFReference(type, title, href,
+            parser.getLineNumber(), parser.getColumnNumber());
+        refs.add(ref);
+      }
+      else if (name.equals("spine"))
+      {
+        String pageMap = e.getAttribute("page-map");
+        if (pageMap != null)
+        {
+          pageMapId = pageMap;
+          pageMapReferenceLocation = new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber(), String.format("page-map=\"%1$s\"", pageMapId));
+          report.message(MessageId.OPF_062, pageMapReferenceLocation);
+        }
+
+        String idref = e.getAttribute("toc");
+        if (idref != null)
+        {
+          OPFItem toc = itemMapById.get(idref);
+          if (toc == null)
+          {
+            report.message(MessageId.OPF_049,
+                new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()),
+                idref);
+            report.info(null, FeatureEnum.HAS_NCX, "false");
+          }
+          else
+          {
+            toc.setNcx(true);
+            report.info(toc.getPath(), FeatureEnum.HAS_NCX, "true");
+            if (toc.getMimeType() != null
+                && !toc.getMimeType().equals(
+                "application/x-dtbncx+xml"))
+            {
+              report.message(MessageId.OPF_050,
+                  new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()));
+            }
+          }
+        }
+        else
+        {
+          report.info(null, FeatureEnum.HAS_NCX, "false");
+        }
+      }
+      else if (name.equals("itemref"))
+      {
+        String idref = e.getAttribute("idref");
+        if (idref != null)
+        {
+          OPFItem item = getItemById(idref);
+          if (item != null)
+          {
+            spine.add(item);
+            item.setInSpine(true);
+            report.info(item.getPath(), FeatureEnum.IS_SPINEITEM, "true");
+            String linear = e.getAttribute("linear");
+            if (linear != null && "no".equals(linear.trim()))
+            {
+              item.setSpineLinear(false);
+            }
+            else
+            {
+              item.setSpineLinear(true);
+            }
+            report.info(item.getPath(), FeatureEnum.IS_LINEAR, String.valueOf(item.getSpineLinear()));
+
+            boolean isFixed = globalPrePaginated;
+            String properties = e.getAttribute("properties");
+            if (properties != null && !properties.equals(""))
+            {
+              properties = properties.replaceAll("[\\s]+", " ");
+              String propertyArray[] = properties.split(" ");
+              for (String prop : propertyArray)
+              {
+                if (prop.equals("rendition:layout-pre-paginated"))
+                {
+                  isFixed = true;
+                }
+                else if (prop.equals("rendition:layout-reflowable"))
+                {
+                  isFixed = false;
+                }
+              }
+            }
+            if (isFixed)
+            {
+              report.info(item.getPath(), FeatureEnum.HAS_FIXED_LAYOUT, String.valueOf(true));
+            }
+          }
+          else
+          {
+            report.message(MessageId.OPF_049,
+                new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()),
+                idref);
+          }
+        }
+      }
+      else if (name.equals("dc-metadata") || name.equals("x-metadata"))
+      {
+        if (!opf12PackageFile)
+        {
+          report.message(MessageId.OPF_049,
+              new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()),
+              name);
+        }
+      }
+    }
+    else if (ns.equals("http://purl.org/dc/elements/1.1/"))
+    {
+      // in the DC metadata, when the <identifier> element is parsed, if
+      // it has a non-null and non-empty id attribute value that is the
+      // same as the value of the unique-identifier attribute of the
+      // package element, set uniqueIdentExists = true (to make sure that
+      // the unique-identifier attribute references an existing
+      // <identifier> id attribute
+      String name = e.getName();
+      if (name.equals("identifier"))
+      {
+        String idAttr = e.getAttribute("id");
+        if (idAttr != null && !idAttr.equals("")
+            && idAttr.equals(uniqueIdent))
+        {
+          uniqueIdentExists = true;
+        }
+      }
+      else if (name.equals("creator"))
+      {
+        String role = e.getAttributeNS("http://www.idpf.org/2007/opf", "role");
+        if (role != null && !role.equals("") && !isValidRole(role))
+        {
+          report.message(MessageId.OPF_052,
+              new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()), role);
+        }
+      }
+    }
+  }
+
+  public String getIdentId()
+  {
+    return uniqueIdent;
+  }
+
+  public void endElement()
+  {
+
+    XMLElement e = parser.getCurrentElement();
+    if ("http://www.idpf.org/2007/opf".equals(e.getNamespace()))
+    {
+      String name = e.getName();
+      // <meta property="dcterms:modified">2012-02-27T16:38:35Z</meta>
+      // <meta property="rendition:layout">pre-paginated</meta>
+      if ("meta".equals(name))
+      {
+        String attr = e.getAttribute("property");
+        if ("dcterms:modified".equals(attr))
+        {
+          String val = (String) e.getPrivateData();
+                    report.info(null, FeatureEnum.MODIFIED_DATE, val);
+        }
+        else if ("rendition:layout".equals(attr))
+        {
+          String val = (String) e.getPrivateData();
+          if ("pre-paginated".equals(val))
+          {
+            report.info(null, FeatureEnum.HAS_FIXED_LAYOUT,
+                "pre-paginated");
+            globalPrePaginated = true;
+          }
+        }
+        else
+        {
+          String attr1 = e.getAttribute("name");
+          if ("fixed-layout".equals(attr1)
+              && "true".equals(e.getAttribute("content")))
+          {
+            report.info(null, FeatureEnum.HAS_FIXED_LAYOUT,
+                "fixed-layout");
+          }
+        }
+      }
+      else if ("package".equals(name))
+      {
+        if(pageMapId != null)
+        {
+          if (null == itemMapById.get(pageMapId))
+          {
+            report.message(MessageId.OPF_063, pageMapReferenceLocation, pageMapId);
+          }
+        }
+      }
+    }
+    else if (e.getNamespace().equals("http://purl.org/dc/elements/1.1/"))
+    {
+      String name = e.getName();
+      if (name.equals("identifier"))
+      {
+        String idAttr = e.getAttribute("id");
+        if (idAttr != null && !idAttr.equals("")
+            && idAttr.equals(uniqueIdent))
+        {
+          String idval = (String) e.getPrivateData();
+          // if (idval != null && ocf != null)
+          // ocf.setUniqueIdentifier(idval);
+          if (idval != null)
+          {
+            report.info(null, FeatureEnum.UNIQUE_IDENT,
+                idval.trim());
+          }
+        }
+      }
+      else if (name.equals("date"))
+      {
+        String dateval = (String) e.getPrivateData();
+        boolean valid = true;
+        String detail = null;
+
+        if (dateval == null || "".equals(dateval))
+        {
+          valid = false;
+          detail = "zero-length string";
+        }
+        else
+        {
+          DateParser dateParser = new DateParser();
+          try
+          {
+            Date date = dateParser.parse(dateval.trim());
+            /*
+                   * mg: DateParser does not enforce four-digit years,
+                   * which http://www.w3.org/TR/NOTE-datetime seems to
+                   * want
+                   */
+            String year = new SimpleDateFormat("yyyy").format(date);
+            if (year.length() > 4)
+            {
+              throw new InvalidDateException(year);
+            }
+            report.info(null, FeatureEnum.DC_DATE, dateval);
+          }
+          catch (InvalidDateException d)
+          {
+            valid = false;
+            detail = d.getMessage();
+          }
+        }
+
+        if (!valid)
+        {
+          if (this.version == EPUBVersion.VERSION_3)
+          {
+            report.message(MessageId.OPF_053,
+                new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()),
+                (dateval == null ? "" : dateval),
+                detail);
+          }
+          else
+          {
+            report.message(MessageId.OPF_054,
+                new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()),
+                (dateval == null ? "" : dateval),
+                detail);
+          }
+        }
+      }
+      else if (name.equals("title") || name.equals("language"))
+      {
+        // issue 138: issue a warning if dc:title and dc:language is
+        // empty for 2.0 and 2.0.1
+        // note that an empty dc:identifier is checked in opf20.rng and
+        // will
+        // therefore be reported as an error, that may or may not be a
+        // good idea.
+        if ("language".equals(name))
+        {
+          String value = (String) e.getPrivateData();
+          if (value != null)
+          {
+            report.info(null, FeatureEnum.DC_LANGUAGE, value.trim());
+          }
+        }
+        else if ("title".equals(name))
+        {
+          String value = (String) e.getPrivateData();
+          if (value != null)
+          {
+            report.info(null, FeatureEnum.DC_TITLE, value.trim());
+          }
+        }
+        if (version == EPUBVersion.VERSION_2)
+        {
+          String value = (String) e.getPrivateData();
+          if (value == null || value.trim().length() < 1)
+          {
+            report.message(MessageId.OPF_055,
+                new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()),
+                name);
+          }
+        }
+      }
+      else if (name.equals("creator"))
+      {
+        String value = (String) e.getPrivateData();
+        if (value != null)
+        {
+          report.info(null, FeatureEnum.DC_CREATOR, value.trim());
+        }
+      }
+      else if (name.equals("contributor"))
+      {
+        String value = (String) e.getPrivateData();
+        if (value != null)
+        {
+          report.info(null, FeatureEnum.DC_CONTRIBUTOR, value.trim());
+        }
+      }
+      else if (name.equals("publisher"))
+      {
+        String value = (String) e.getPrivateData();
+        if (value != null)
+        {
+          report.info(null, FeatureEnum.DC_PUBLISHER, value.trim());
+        }
+      }
+      else if (name.equals("rights"))
+      {
+        String value = (String) e.getPrivateData();
+        if (value != null)
+        {
+          report.info(null, FeatureEnum.DC_RIGHTS, value.trim());
+        }
+      }
+      else if (name.equals("subject"))
+      {
+        String value = (String) e.getPrivateData();
+        if (value != null)
+        {
+          report.info(null, FeatureEnum.DC_SUBJECT, value.trim());
+        }
+      }
+      else if (name.equals("description"))
+      {
+        String value = (String) e.getPrivateData();
+        if (value != null)
+        {
+          report.info(null, FeatureEnum.DC_DESCRIPTION, value.trim());
+        }
+      }
+    }
+  }
+
+  public void ignorableWhitespace(char[] chars, int arg1, int arg2)
+  {
+  }
+
+  public void characters(char[] chars, int start, int len)
+  {
+
+    XMLElement e = parser.getCurrentElement();
+    String name = e.getName();
+    String ns = e.getNamespace();
+    boolean keepValue = ("http://www.idpf.org/2007/opf".equals(ns) && "meta".equals(name))
+        || "http://purl.org/dc/elements/1.1/".equals(ns);
+    if (keepValue)
+    {
+      String val = (String) e.getPrivateData();
+      String text = new String(chars, start, len);
+      if (val == null)
+      {
+        val = text;
+      }
+      else
+      {
+        val = val + text;
+      }
+      e.setPrivateData(val);
+    }
+  }
+
+  public void processingInstruction(String arg0, String arg1)
+  {
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/opf/OPFHandler30.java b/src/main/java/com/adobe/epubcheck/opf/OPFHandler30.java
new file mode 100644
index 0000000..2c27ff4
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/opf/OPFHandler30.java
@@ -0,0 +1,296 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.opf;
+
+import static com.adobe.epubcheck.vocab.ForeignVocabs.*;
+import static com.adobe.epubcheck.vocab.PackageVocabs.*;
+
+import java.util.Map;
+import java.util.Set;
+
+import com.adobe.epubcheck.api.QuietReport;
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.FeatureEnum;
+import com.adobe.epubcheck.util.PathUtil;
+import com.adobe.epubcheck.vocab.EnumVocab;
+import com.adobe.epubcheck.vocab.MediaOverlaysVocab;
+import com.adobe.epubcheck.vocab.PackageVocabs.ITEM_PROPERTIES;
+import com.adobe.epubcheck.vocab.Property;
+import com.adobe.epubcheck.vocab.RenditionVocabs;
+import com.adobe.epubcheck.vocab.Vocab;
+import com.adobe.epubcheck.vocab.VocabUtil;
+import com.adobe.epubcheck.xml.XMLElement;
+import com.adobe.epubcheck.xml.XMLParser;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+
+public class OPFHandler30 extends OPFHandler
+{
+
+  private static final Map<String, Vocab> RESERVED_VOCABS = new ImmutableMap.Builder<String, Vocab>()
+      .put(DCTERMS_PREFIX, DCTERMS_VOCAB).put(MARC_PREFIX, MARC_VOCAB).put(ONIX_PREFIX, ONIX_VOCAB)
+      .put(SCHEMA_PREFIX, SCHEMA_VOCAB).put(XSD_PREFIX, XSD_VOCAB).build();
+  private static final Map<String, Vocab> RESERVED_META_VOCABS = new ImmutableMap.Builder<String, Vocab>()
+      .put("", META_VOCAB).put(MediaOverlaysVocab.PREFIX, MediaOverlaysVocab.VOCAB)
+      .put(RenditionVocabs.PREFIX, RenditionVocabs.META_VOCAB).putAll(RESERVED_VOCABS).build();
+  private static final Map<String, Vocab> RESERVED_ITEM_VOCABS = new ImmutableMap.Builder<String, Vocab>()
+      .put("", ITEM_VOCAB).put(MediaOverlaysVocab.PREFIX, VocabUtil.EMPTY_VOCAB)
+      .put(RenditionVocabs.PREFIX, VocabUtil.EMPTY_VOCAB).putAll(RESERVED_VOCABS).build();
+  private static final Map<String, Vocab> RESERVED_ITEMREF_VOCABS = new ImmutableMap.Builder<String, Vocab>()
+      .put("", ITEMREF_VOCAB).put(MediaOverlaysVocab.PREFIX, VocabUtil.EMPTY_VOCAB)
+      .put(RenditionVocabs.PREFIX, RenditionVocabs.ITEMREF_VOCAB).putAll(RESERVED_VOCABS).build();
+  private static final Map<String, Vocab> RESERVED_LINKREL_VOCABS = new ImmutableMap.Builder<String, Vocab>()
+      .put("", LINKREL_VOCAB).put(MediaOverlaysVocab.PREFIX, VocabUtil.EMPTY_VOCAB)
+      .put(RenditionVocabs.PREFIX, VocabUtil.EMPTY_VOCAB).putAll(RESERVED_VOCABS).build();
+
+  private static final Map<String, Vocab> KNOWN_VOCAB_URIS = new ImmutableMap.Builder<String, Vocab>()
+      .put(DCTERMS_URI, DCTERMS_VOCAB).put(MARC_URI, MARC_VOCAB).put(ONIX_URI, ONIX_VOCAB)
+      .put(SCHEMA_URI, SCHEMA_VOCAB).put(XSD_URI, XSD_VOCAB).build();
+  private static final Map<String, Vocab> KNOWN_META_VOCAB_URIS = new ImmutableMap.Builder<String, Vocab>()
+      .putAll(KNOWN_VOCAB_URIS).put(MediaOverlaysVocab.URI, MediaOverlaysVocab.VOCAB)
+      .put(RenditionVocabs.URI, RenditionVocabs.META_VOCAB).build();
+  private static final Map<String, Vocab> KNOWN_ITEM_VOCAB_URIS = new ImmutableMap.Builder<String, Vocab>()
+      .putAll(KNOWN_VOCAB_URIS).put(MediaOverlaysVocab.URI, VocabUtil.EMPTY_VOCAB)
+      .put(RenditionVocabs.URI, VocabUtil.EMPTY_VOCAB).build();
+  private static final Map<String, Vocab> KNOWN_ITEMREF_VOCAB_URIS = new ImmutableMap.Builder<String, Vocab>()
+      .putAll(KNOWN_VOCAB_URIS).put(MediaOverlaysVocab.URI, VocabUtil.EMPTY_VOCAB)
+      .put(RenditionVocabs.URI, RenditionVocabs.ITEMREF_VOCAB).build();
+  private static final Map<String, Vocab> KNOWN_LINKREL_VOCAB_URIS = new ImmutableMap.Builder<String, Vocab>()
+      .putAll(KNOWN_VOCAB_URIS).put(MediaOverlaysVocab.URI, VocabUtil.EMPTY_VOCAB)
+      .put(RenditionVocabs.URI, VocabUtil.EMPTY_VOCAB).build();
+
+  private static final Set<String> DEFAULT_VOCAB_URIS = ImmutableSet.of(PACKAGE_VOCAB_URI,
+      LINKREL_VOCAB_URI);
+
+  private Map<String, Vocab> itemrefVocabs;
+  private Map<String, Vocab> itemVocabs;
+  private Map<String, Vocab> metaVocabs;
+  private Map<String, Vocab> linkrelVocabs;
+
+  OPFHandler30(String path, Report report, XRefChecker xrefChecker, XMLParser parser,
+      EPUBVersion version)
+  {
+    super(path, report, xrefChecker, parser, version);
+  }
+
+  public void startElement()
+  {
+    super.startElement();
+
+    XMLElement e = parser.getCurrentElement();
+    String name = e.getName();
+
+    if (name.equals("package"))
+    {
+      // Note: the #parsePrefixDeclaration is called once for each "class" of
+      // properties (meta+scheme, itemref, item, and link) so that default and
+      // reserved vocabs can be set appropriately (e.g. the default vocab or
+      // rendition vocab for 'meta' properties is not the same as for the 'item'
+      // properties)
+      // Messages are reported only on the first invocation; a quiet reporter is
+      // used for subsequent invocations.
+      String prefixDecl = e.getAttribute("prefix");
+      MessageLocation loc = new MessageLocation(path, parser.getLineNumber(),
+          parser.getColumnNumber());
+      metaVocabs = VocabUtil.parsePrefixDeclaration(prefixDecl, RESERVED_META_VOCABS,
+          KNOWN_META_VOCAB_URIS, DEFAULT_VOCAB_URIS, report, loc);
+      itemVocabs = VocabUtil.parsePrefixDeclaration(prefixDecl, RESERVED_ITEM_VOCABS,
+          KNOWN_ITEM_VOCAB_URIS, DEFAULT_VOCAB_URIS, QuietReport.INSTANCE, loc);
+      itemrefVocabs = VocabUtil.parsePrefixDeclaration(prefixDecl, RESERVED_ITEMREF_VOCABS,
+          KNOWN_ITEMREF_VOCAB_URIS, DEFAULT_VOCAB_URIS, QuietReport.INSTANCE, loc);
+      linkrelVocabs = VocabUtil.parsePrefixDeclaration(prefixDecl, RESERVED_LINKREL_VOCABS,
+          KNOWN_LINKREL_VOCAB_URIS, DEFAULT_VOCAB_URIS, QuietReport.INSTANCE, loc);
+    }
+    else if (name.equals("meta"))
+    {
+      processMeta(e);
+    }
+    else if (name.equals("link"))
+    {
+      processLink(e);
+    }
+    else if (name.equals("item"))
+    {
+      processItemProperties(e.getAttribute("properties"), e.getAttribute("media-type"));
+    }
+    else if (name.equals("itemref"))
+    {
+      processItemrefProperties(e.getAttribute("properties"));
+    }
+    else if (name.equals("mediaType"))
+    {
+      processBinding(e);
+    }
+  }
+
+  private void processBinding(XMLElement e)
+  {
+    String mimeType = e.getAttribute("media-type");
+    String handlerId = e.getAttribute("handler");
+
+    if ((mimeType != null) && (handlerId != null))
+    {
+      if (OPFChecker30.isCoreMediaType(mimeType))
+      {
+        report.message(MessageId.OPF_008,
+            new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()), mimeType);
+        return;
+      }
+
+      if (xrefChecker != null && xrefChecker.getBindingHandlerSrc(mimeType) != null)
+      {
+        report.message(MessageId.OPF_009,
+            new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()), mimeType,
+            xrefChecker.getBindingHandlerSrc(mimeType));
+        return;
+      }
+
+      OPFItem handler = itemMapById.get(handlerId);
+      if (handler != null && xrefChecker != null)
+      {
+        xrefChecker.registerBinding(mimeType, handler.path);
+      }
+    }
+  }
+
+  private void processLink(XMLElement e)
+  {
+    processLinkRel(e.getAttribute("rel"));
+    // needs refactor: its problematic to register
+    // link resources as items
+    String id = e.getAttribute("id");
+    String href = e.getAttribute("href");
+    if (href != null && !href.matches("^[^:/?#]+://.*"))
+    {
+      try
+      {
+        href = PathUtil.resolveRelativeReference(path, href, null);
+      } catch (IllegalArgumentException ex)
+      {
+        report.message(MessageId.OPF_010,
+            new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber(), href),
+            ex.getMessage());
+        href = null;
+      }
+    }
+    if (href != null && href.matches("^[^:/?#]+://.*"))
+    {
+      report.info(path, FeatureEnum.REFERENCE, href);
+    }
+
+    String mimeType = e.getAttribute("media-type");
+    if ("metadata".equals(e.getParent().getName()))
+    {
+      OPFItem item = new OPFItem(id, href, mimeType, null, null, "", null, parser.getLineNumber(),
+          parser.getColumnNumber());
+      if (id != null)
+      {
+        itemMapById.put(id, item);
+      }
+      
+      // if (href != null) {
+      // mgy: awaiting proper refactor, only add these if local
+      if (href != null && !href.matches("^[^:/?#]+://.*"))
+      {
+        itemMapByPath.put(href, item);
+        items.add(item);
+      }
+    }
+
+  }
+
+  private void processItemrefProperties(String property)
+  {
+    if (property == null)
+    {
+      return;
+    }
+
+    /* Set<Property> properties = */VocabUtil.parsePropertyList(property, itemrefVocabs, report,
+        new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()));
+
+    // NOTE:
+    // Checked with Schematron, although the code below is more prefix-safe
+
+    // Set<ITEMREF_PROPERTIES> propSet = Property.filter(properties,
+    // ITEMREF_PROPERTIES.class);
+    // if (propSet.contains(ITEMREF_PROPERTIES.PAGE_SPREAD_LEFT)
+    // && propSet.contains(ITEMREF_PROPERTIES.PAGE_SPREAD_RIGHT))
+    // {
+    // report.message(MessageId.OPF_011,
+    // new MessageLocation(path, parser.getLineNumber(),
+    // parser.getColumnNumber()));
+    // }
+  }
+
+  private void processItemProperties(String property, String mimeType)
+  {
+    if (property == null)
+    {
+      return;
+    }
+
+    Set<Property> properties = VocabUtil.parsePropertyList(property, itemVocabs, report,
+        new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()));
+    Set<ITEM_PROPERTIES> itemProps = Property.filter(properties, ITEM_PROPERTIES.class);
+
+    mimeType = mimeType.trim();
+    for (ITEM_PROPERTIES itemProp : itemProps)
+    {
+      if (!itemProp.allowedOnTypes().contains(mimeType))
+      {
+        report.message(MessageId.OPF_012,
+            new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()),
+            EnumVocab.ENUM_TO_NAME.apply(itemProp), mimeType);
+      }
+    }
+  }
+
+  private void processLinkRel(String rel)
+  {
+    VocabUtil.parsePropertyList(rel, linkrelVocabs, report,
+        new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()));
+  }
+
+  private void processMeta(XMLElement e)
+  {
+    processMetaProperty(e.getAttribute("property"));
+    processMetaScheme(e.getAttribute("scheme"));
+  }
+
+  private void processMetaScheme(String scheme)
+  {
+
+    VocabUtil.parseProperty(scheme, metaVocabs, report,
+        new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()));
+  }
+
+  private void processMetaProperty(String property)
+  {
+    VocabUtil.parseProperty(property, metaVocabs, report,
+        new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()));
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/opf/OPFItem.java b/src/main/java/com/adobe/epubcheck/opf/OPFItem.java
new file mode 100755
index 0000000..8e2a8b8
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/opf/OPFItem.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.opf;
+
+public class OPFItem
+{
+  private final String id;
+  final String path;
+  final String mimeType;
+  private final String fallback;
+  private final String fallbackStyle;
+  private final String namespace;
+  final int lineNumber;
+  final int columnNumber;
+  private boolean ncx;
+  private boolean inSpine;
+  private boolean nav;
+  private boolean scripted;
+  private final String properties;
+  private boolean linear = true;
+
+  OPFItem(String id, String path, String mimeType, String fallback,
+      String fallbackStyle, String namespace, String properties,
+      int lineNumber, int columnNumber)
+  {
+    this.fallback = fallback;
+    this.fallbackStyle = fallbackStyle;
+    this.id = id;
+    this.lineNumber = lineNumber;
+    this.columnNumber = columnNumber;
+    this.mimeType = mimeType;
+    this.namespace = namespace;
+    this.path = path;
+    this.properties = properties;
+  }
+
+  public String getFallback()
+  {
+    return fallback;
+  }
+
+  public String getFallbackStyle()
+  {
+    return fallbackStyle;
+  }
+
+  public String getId()
+  {
+    return id;
+  }
+
+  public String getMimeType()
+  {
+    return mimeType;
+  }
+
+  public String getPath()
+  {
+    return path;
+  }
+
+  public String getProperties()
+  {
+    return properties;
+  }
+
+  public String getNamespace()
+  {
+    return namespace;
+  }
+
+  public int getLineNumber()
+  {
+    return lineNumber;
+  }
+
+  public int getColumnNumber()
+  {
+    return columnNumber;
+  }
+
+  public boolean isNcx()
+  {
+    return ncx;
+  }
+
+  public void setNcx(boolean ncx)
+  {
+    this.ncx = ncx;
+  }
+
+  public boolean isScripted()
+  {
+    return scripted;
+  }
+
+  public void setScripted(boolean scripted)
+  {
+    this.scripted = scripted;
+  }
+
+  public boolean isNav()
+  {
+    return nav;
+  }
+
+  public void setNav(boolean nav)
+  {
+    this.nav = nav;
+  }
+
+  public boolean isInSpine()
+  {
+    return inSpine;
+  }
+
+  public void setInSpine(boolean inSpine)
+  {
+    this.inSpine = inSpine;
+  }
+
+  /**
+   * Reflects the value of spine/itemref/@linear. Only applies to manifest items
+   * that appear in the spine.
+   */
+  public void setSpineLinear(boolean linear)
+  {
+    this.linear = linear;
+  }
+
+  /**
+   * Reflects the value of spine/itemref/@linear. Only applies to manifest items
+   * that appear in the spine.
+   */
+  public boolean getSpineLinear()
+  {
+    if (!inSpine)
+    {
+      throw new IllegalStateException("linear");
+    }
+    return linear;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/opf/OPFPeeker.java b/src/main/java/com/adobe/epubcheck/opf/OPFPeeker.java
new file mode 100644
index 0000000..5dcf723
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/opf/OPFPeeker.java
@@ -0,0 +1,242 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.opf;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringReader;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.opf.OPFData.OPFDataBuilder;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.EpubConstants;
+import com.adobe.epubcheck.util.GenericResourceProvider;
+import com.adobe.epubcheck.util.InvalidVersionException;
+import com.google.common.io.Closer;
+
+public final class OPFPeeker
+{
+  private final static String FINISHED_PARSING = "FINISHED_PARSING";
+
+  private final Report report;
+  private final String path;
+  private final GenericResourceProvider resourceProvider;
+
+  public OPFPeeker(String path, Report report,
+      GenericResourceProvider resourceProvider)
+  {
+    this.path = path;
+    this.report = report;
+    this.resourceProvider = resourceProvider;
+  }
+
+  public OPFData peek()
+    throws InvalidVersionException,
+    IOException
+  {
+    Closer closer = Closer.create();
+    try
+    {
+      InputStream in = resourceProvider.getInputStream(path);
+      if (in == null)
+        throw new IOException("Couldn't find resource " + path);
+      in = closer.register(resourceProvider.getInputStream(path));
+      return peek(in);
+    } catch (Throwable e)
+    {
+      throw closer.rethrow(e, InvalidVersionException.class);
+    } finally
+    {
+      closer.close();
+    }
+  }
+
+  private OPFData peek(InputStream inputStream)
+    throws InvalidVersionException
+  {
+    OPFDataBuilder builder = new OPFDataBuilder();
+    SAXParserFactory factory = SAXParserFactory.newInstance();
+    factory.setNamespaceAware(true);
+    factory.setValidating(false);
+    try
+    {
+      factory.setFeature("http://xml.org/sax/features/validation", false);
+    } catch (Exception ignored)
+    {
+    }
+
+    SAXParser parser;
+    try
+    {
+      ParserHandler handler = new ParserHandler(builder);
+      parser = factory.newSAXParser();
+      parser.getXMLReader().setEntityResolver(handler);
+      parser.getXMLReader().setErrorHandler(handler);
+      parser.getXMLReader().setContentHandler(handler);
+      parser.getXMLReader().parse(new InputSource(inputStream));
+    } catch (ParserConfigurationException e)
+    {
+      report.message(MessageId.RSC_005, new MessageLocation(path, -1, -1),
+          e.getMessage());
+    } catch (InvalidVersionException e)
+    {
+      throw e;
+    } catch (SAXException e)
+    {
+      if (FINISHED_PARSING.equals(e.getMessage()))
+      {
+        OPFData data = builder.build();
+        return data;
+      } else
+      {
+        report.message(MessageId.RSC_005, new MessageLocation(path, -1, -1),
+            e.getMessage());
+      }
+    } catch (IOException e)
+    {
+      report
+          .message(MessageId.PKG_008, new MessageLocation(path, -1, -1), path);
+    }
+    throw new InvalidVersionException(InvalidVersionException.VERSION_NOT_FOUND);
+  }
+
+  private static class ParserHandler extends DefaultHandler
+  {
+
+    private static final String VERSION_3 = "3.0";
+    private static final String VERSION_2 = "2.0";
+
+    private final OPFDataBuilder builder;
+    private boolean isPackageRoot = false;
+    private String currentText = null;
+    private String uniqueId = null;
+    private boolean isUniqueId = false;
+
+    public ParserHandler(OPFDataBuilder builder)
+    {
+      this.builder = builder;
+    }
+    
+    @Override
+    public InputSource resolveEntity(String publicId, String systemId)
+      throws IOException,
+      SAXException
+    {
+      return new InputSource(new StringReader(""));
+    }
+
+    @Override
+    public void startElement(String uri, String localName, String qName,
+        Attributes attributes)
+      throws SAXException
+    {
+      if ("package".equals(localName))
+      {
+        processPackage(attributes);
+        isPackageRoot = true;
+      } else if (!isPackageRoot)
+      {
+        throw new InvalidVersionException(
+            InvalidVersionException.PACKAGE_ELEMENT_NOT_FOUND);
+      } else if ("type".equals(localName) && EpubConstants.DCElements.equals(uri))
+      {
+        currentText = "";
+      } else if ("identifier".equals(localName) && EpubConstants.DCElements.equals(uri)) {
+        String id  = attributes.getValue("id");
+        isUniqueId = id!=null && id.trim().equals(uniqueId); 
+        if (isUniqueId) {
+          currentText = "";
+        }
+      }
+    }
+
+    @Override
+    public void characters(char[] ch, int start, int length)
+      throws SAXException
+    {
+      if (currentText != null)
+      {
+        currentText += String.valueOf(ch, start, length);
+      }
+    }
+
+    @Override
+    public void endElement(String uri, String localName, String qName)
+      throws SAXException
+    {
+      if ("metadata".equals(localName) || "package".equals(localName))
+      {
+        throw new SAXException(OPFPeeker.FINISHED_PARSING);
+      } else if ("type".equals(localName) && EpubConstants.DCElements.equals(uri))
+      {
+        currentText = currentText.trim();
+        if (currentText.length() > 0)
+          builder.withType(currentText);
+        currentText = null;
+      } else if (isUniqueId && "identifier".equals(localName) && EpubConstants.DCElements.equals(uri))
+      {
+        currentText = currentText.trim();
+        if (currentText.length() > 0)
+          builder.withUniqueId(currentText);
+        isUniqueId = false;
+        currentText = null;
+      }
+    }
+
+    private void processPackage(Attributes attributes)
+      throws SAXException
+    {
+      String version = attributes.getValue("version");
+      if (version == null)
+      {
+        throw new InvalidVersionException(
+            InvalidVersionException.VERSION_ATTRIBUTE_NOT_FOUND);
+      } else if (VERSION_3.equals(version))
+      {
+        builder.withVersion(EPUBVersion.VERSION_3);
+      } else if (VERSION_2.equals(version))
+      {
+        builder.withVersion(EPUBVersion.VERSION_2);
+      } else
+      {
+        throw new InvalidVersionException(
+            InvalidVersionException.UNSUPPORTED_VERSION);
+      }
+      String uniqueId = attributes.getValue("unique-identifier");
+      if (uniqueId != null)
+        this.uniqueId  = uniqueId;
+    }
+  }
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/opf/OPFReference.java b/src/main/java/com/adobe/epubcheck/opf/OPFReference.java
new file mode 100644
index 0000000..5e9f4f0
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/opf/OPFReference.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.opf;
+
+public class OPFReference
+{
+  private final String type;
+  private final String title;
+  private final String href;
+  private final int lineNumber;
+  private final int columnNumber;
+
+  OPFReference(String type, String title, String href, int lineNumber, int columnNumber)
+  {
+    this.type = type;
+    this.title = title;
+    this.href = href;
+    this.lineNumber = lineNumber;
+    this.columnNumber = columnNumber;
+  }
+
+  public String getType()
+  {
+    return type;
+  }
+
+  public String getTitle()
+  {
+    return title;
+  }
+
+  public String getHref()
+  {
+    return href;
+  }
+
+  public int getLineNumber()
+  {
+    return lineNumber;
+  }
+
+  public int getColumnNumber()
+  {
+    return columnNumber;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/opf/VersionRetriever.java b/src/main/java/com/adobe/epubcheck/opf/VersionRetriever.java
new file mode 100644
index 0000000..7744cc5
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/opf/VersionRetriever.java
@@ -0,0 +1,182 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.opf;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.FeatureEnum;
+import com.adobe.epubcheck.util.InvalidVersionException;
+import org.xml.sax.*;
+import org.xml.sax.helpers.DefaultHandler;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringReader;
+
+public class VersionRetriever implements EntityResolver, ErrorHandler
+{
+  private static final String VERSION_3 = "3.0";
+  private static final String VERSION_2 = "2.0";
+  private final Report report;
+  private final String path;
+
+  public VersionRetriever(String path, Report report)
+  {
+    this.path = path;
+    this.report = report;
+  }
+
+  public EPUBVersion retrieveOpfVersion(InputStream inputStream)
+      throws
+      InvalidVersionException
+  {
+    SAXParserFactory factory = SAXParserFactory.newInstance();
+    factory.setNamespaceAware(true);
+    factory.setValidating(false);
+    try
+    {
+      factory.setFeature("http://xml.org/sax/features/validation", false);
+    }
+    catch (Exception ignored)
+    {
+    }
+
+    SAXParser parser;
+    try
+    {
+      parser = factory.newSAXParser();
+      parser.getXMLReader().setEntityResolver(this);
+      parser.getXMLReader().setErrorHandler(this);
+      parser.getXMLReader().setContentHandler(new OPFhandler());
+      parser.getXMLReader().parse(new InputSource(inputStream));
+    }
+    catch (ParserConfigurationException e)
+    {
+      report.message(MessageId.RSC_005, new MessageLocation(path, -1, -1), e.getMessage());
+    }
+    catch (SAXException e)
+    {
+      if (VERSION_3.equals(e.getMessage()))
+      {
+        report.info(null, FeatureEnum.FORMAT_VERSION, EPUBVersion.VERSION_3.toString());
+        return EPUBVersion.VERSION_3;
+      }
+      else if (VERSION_2.equals(e.getMessage()))
+      {
+        report.info(null, FeatureEnum.FORMAT_VERSION, EPUBVersion.VERSION_2.toString());
+        return EPUBVersion.VERSION_2;
+      }
+      else if (InvalidVersionException.UNSUPPORTED_VERSION.equals(e.getMessage()))
+      {
+        throw new InvalidVersionException(InvalidVersionException.UNSUPPORTED_VERSION);
+      }
+      else if (InvalidVersionException.VERSION_ATTRIBUTE_NOT_FOUND.equals(e.getMessage()))
+      {
+        throw new InvalidVersionException(InvalidVersionException.VERSION_ATTRIBUTE_NOT_FOUND);
+      }
+      else if (InvalidVersionException.PACKAGE_ELEMENT_NOT_FOUND.equals(e.getMessage()))
+      {
+        throw new InvalidVersionException(InvalidVersionException.PACKAGE_ELEMENT_NOT_FOUND);
+      }
+      else
+      {
+        report.message(MessageId.RSC_005, new MessageLocation(path, -1, -1), e.getMessage());
+      }
+    }
+    catch (IOException e)
+    {
+      report.message(MessageId.PKG_008, new MessageLocation(path, -1, -1), path);
+    }
+    throw new InvalidVersionException(InvalidVersionException.VERSION_NOT_FOUND);
+  }
+
+  @Override
+  public InputSource resolveEntity(String arg0, String arg1) throws
+      SAXException,
+      IOException
+  {
+    return new InputSource(new StringReader(""));
+  }
+
+  @Override
+  public void error(SAXParseException arg0) throws
+      SAXException
+  {
+  }
+
+  @Override
+  public void fatalError(SAXParseException arg0) throws
+      SAXException
+  {
+  }
+
+  @Override
+  public void warning(SAXParseException arg0) throws
+      SAXException
+  {
+  }
+
+  private class OPFhandler extends DefaultHandler
+  {
+    @Override
+    public void startElement(String uri, String localName, String qName, Attributes attributes)
+        throws
+        SAXException
+    {
+      if ("package".equals(localName))
+      {
+        processPackage(attributes);
+      }
+      else
+      {
+        throw new SAXException(
+            InvalidVersionException.PACKAGE_ELEMENT_NOT_FOUND);
+      }
+    }
+
+    private void processPackage(Attributes attributes) throws
+        SAXException
+    {
+      String version = attributes.getValue("version");
+      if (version == null)
+      {
+        throw new SAXException(
+            InvalidVersionException.VERSION_ATTRIBUTE_NOT_FOUND);
+      }
+      else if (VERSION_3.equals(version))
+      {
+        throw new SAXException(VERSION_3);
+      }
+      else if (VERSION_2.equals(version))
+      {
+        throw new SAXException(VERSION_2);
+      }
+      throw new SAXException(InvalidVersionException.UNSUPPORTED_VERSION);
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/opf/XRefChecker.java b/src/main/java/com/adobe/epubcheck/opf/XRefChecker.java
new file mode 100755
index 0000000..e3bac68
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/opf/XRefChecker.java
@@ -0,0 +1,413 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.opf;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.ocf.OCFPackage;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.FeatureEnum;
+
+import java.util.*;
+
+public class XRefChecker
+{
+
+  public static final int RT_GENERIC = 0;
+
+  public static final int RT_HYPERLINK = 1;
+
+  public static final int RT_IMAGE = 2;
+
+  public static final int RT_OBJECT = 3;
+
+  public static final int RT_STYLESHEET = 4;
+
+  public static final int RT_AUDIO = 5;
+
+  public static final int RT_VIDEO = 6;
+
+  public static final int RT_SVG_PAINT = 0x10;
+
+  public static final int RT_SVG_CLIP_PATH = 0x11;
+
+  public static final int RT_SVG_SYMBOL = 0x12;
+
+  private class Reference
+  {
+    final String resource;
+
+    final int lineNumber;
+
+    final int columnNumber;
+
+    final String refResource;
+
+    final String fragment;
+
+    final int type;
+
+    public Reference(String srcResource, int srcLineNumber,
+        int srcColumnNumber, String refResource, String fragment,
+        int type)
+    {
+      this.fragment = fragment;
+      this.lineNumber = srcLineNumber;
+      this.columnNumber = srcColumnNumber;
+      this.refResource = refResource;
+      this.resource = srcResource;
+      this.type = type;
+    }
+
+  }
+
+  private class Anchor
+  {
+
+    final String id;
+
+    final int lineNumber;
+
+    final int columnNumber;
+
+    final int type;
+
+    public Anchor(String id, int lineNumber, int columnNumber, int type)
+    {
+      this.id = id;
+      this.lineNumber = lineNumber;
+      this.columnNumber = columnNumber;
+      this.type = type;
+    }
+
+  }
+
+  private class Resource
+  {
+
+    final String resource;
+
+    final String mimeType;
+
+    final Hashtable<String, Anchor> anchors;
+
+    final boolean inSpine;
+
+    final boolean hasValidItemFallback;
+
+    final boolean hasValidImageFallback;
+
+    Resource(String resource, String type, boolean inSpine,
+        boolean hasValidItemFallback, boolean hasValidImageFallback)
+    {
+      this.mimeType = type;
+      this.resource = resource;
+      this.inSpine = inSpine;
+      this.hasValidItemFallback = hasValidItemFallback;
+      this.hasValidImageFallback = hasValidImageFallback;
+      this.anchors = new Hashtable<String, Anchor>();
+    }
+  }
+
+  private final Hashtable<String, Resource> resources = new Hashtable<String, Resource>();
+
+  private final HashSet<String> undeclared = new HashSet<String>();
+
+  private final Vector<Reference> references = new Vector<Reference>();
+
+  private final Hashtable<String, String> bindings = new Hashtable<String, String>();
+
+  private final Report report;
+
+  private final OCFPackage ocf;
+
+  private final EPUBVersion version;
+
+  public XRefChecker(OCFPackage ocf, Report report, EPUBVersion version)
+  {
+    this.ocf = ocf;
+    this.report = report;
+    this.version = version;
+
+  }
+
+  public String getMimeType(String path)
+  {
+    return resources.get(path) != null ? resources.get(path).mimeType
+        : null;
+  }
+
+  public Set<String> getBindingsMimeTypes()
+  {
+    return bindings.keySet();
+  }
+
+  public String getBindingHandlerSrc(String mimeType)
+  {
+    return bindings.get(mimeType);
+  }
+
+  public void registerBinding(String mimeType, String handlerSrc)
+  {
+    bindings.put(mimeType, handlerSrc);
+  }
+
+  public void registerResource(String resource, String mimeType,
+      boolean inSpine, boolean hasValidItemFallback,
+      boolean hasValidImageFallback)
+  {
+    if (resources.get(resource) != null)
+    {
+      throw new IllegalArgumentException("duplicate resource: "
+          + resource);
+    }
+    resources.put(resource, new Resource(resource, mimeType, inSpine,
+        hasValidItemFallback, hasValidImageFallback));
+  }
+
+  public void registerAnchor(String resource, int lineNumber,
+      int columnNumber, String id, int type)
+  {
+    Resource res = resources.get(resource);
+    if (res == null)
+    {
+      throw new IllegalArgumentException("unregistered resource: "
+          + resource);
+    }
+    if (res.anchors.get(id) != null)
+    {
+      throw new IllegalArgumentException("duplicate id: " + id);
+    }
+    res.anchors.put(id, new Anchor(id, lineNumber, columnNumber, type));
+  }
+
+  void registerReference(String srcResource, int srcLineNumber,
+      int srcColumnNumber, String refResource, String refFragment,
+      int type)
+  {
+    if (refResource.startsWith("data:"))
+    {
+      return;
+    }
+    report.info(srcResource, FeatureEnum.RESOURCE, refResource);
+    references.add(new Reference(srcResource, srcLineNumber,
+        srcColumnNumber, refResource, refFragment, type));
+  }
+
+  public void registerReference(String srcResource, int srcLineNumber,
+      int srcColumnNumber, String ref, int type)
+  {
+    if (ref.startsWith("data:"))
+    {
+      return;
+    }
+		// see http://code.google.com/p/epubcheck/issues/detail?id=190
+		// see http://code.google.com/p/epubcheck/issues/detail?id=261
+    int query = ref.indexOf('?');
+		if (query >= 0 && !ref.matches("^[^:/?#]+://.*")) {
+      ref = ref.substring(0, query).trim();
+    }
+
+    int hash = ref.indexOf("#");
+    String refResource;
+    String refFragment;
+    if (hash >= 0)
+    {
+      refResource = ref.substring(0, hash);
+      refFragment = ref.substring(hash + 1);
+    }
+    else
+    {
+      refResource = ref;
+      refFragment = null;
+    }
+
+    registerReference(srcResource, srcLineNumber, srcColumnNumber,
+        refResource, refFragment, type);
+  }
+
+  public void checkReferences()
+  {
+    Enumeration<Reference> refs = references.elements();
+    while (refs.hasMoreElements())
+    {
+      Reference ref = refs.nextElement();
+      checkReference(ref);
+    }
+
+  }
+
+  private void checkReference(Reference ref)
+  {
+    Resource res = resources.get(ref.refResource);
+    if (res == null)
+	  {
+      if(ref.refResource.matches("^[^:/?#]+://.*")
+          && !(version == EPUBVersion.VERSION_3 && (ref.type == RT_AUDIO || ref.type == RT_VIDEO)))
+      {
+        report.message(MessageId.RSC_006,
+            new MessageLocation(ref.resource, ref.lineNumber, ref.columnNumber, ref.refResource));
+      }
+      else if (!ocf.hasEntry(ref.refResource) && !ref.refResource.matches("^[^:/?#]+://.*"))
+      {
+        report.message(MessageId.RSC_007,
+            new MessageLocation(ref.resource, ref.lineNumber, ref.columnNumber, ref.refResource));
+
+      }
+      else if (!undeclared.contains(ref.refResource))
+      {
+        undeclared.add(ref.refResource);
+        report.message(MessageId.RSC_008,
+            new MessageLocation(ref.resource, ref.lineNumber, ref.columnNumber, ref.refResource));
+      }
+      return;
+    }
+
+    if (ref.fragment == null)
+    {
+      switch (ref.type)
+      {
+        case RT_SVG_PAINT:
+        case RT_SVG_CLIP_PATH:
+        case RT_SVG_SYMBOL:
+          report.message(MessageId.RSC_015,
+              new MessageLocation(ref.resource, ref.lineNumber, ref.columnNumber, ref.refResource));
+          break;
+        case RT_HYPERLINK:
+          // if mimeType is null, we should have reported an error already
+          if (res.mimeType != null
+              && !OPFChecker.isBlessedItemType(res.mimeType, version)
+              && !OPFChecker
+              .isDeprecatedBlessedItemType(res.mimeType)
+              && !res.hasValidItemFallback)
+          {
+            report.message(MessageId.RSC_010,
+                new MessageLocation(ref.resource, ref.lineNumber, ref.columnNumber, ref.refResource));
+          }
+          if (/* !res.mimeType.equals("font/opentype") && */!res.inSpine)
+          {
+            report.message(MessageId.RSC_011,
+                new MessageLocation(ref.resource, ref.lineNumber, ref.columnNumber, ref.refResource));
+          }
+          break;
+        case RT_IMAGE:
+          // if mimeType is null, we should have reported an error already
+          if (res.mimeType != null
+              && !OPFChecker.isBlessedImageType(res.mimeType)
+              && !res.hasValidImageFallback)
+          {
+            report.message(MessageId.MED_003,
+                new MessageLocation(ref.resource, ref.lineNumber, ref.columnNumber),
+                res.mimeType);
+          }
+          break;
+        case RT_STYLESHEET:
+          // if mimeType is null, we should have reported an error already
+
+          // Implementations are allowed to process any stylesheet
+				// language they desire; so this is an
+				// error only if no fallback is available.
+				// See also:
+				// https://code.google.com/p/epubcheck/issues/detail?id=244
+
+				if (res.mimeType != null
+						&& !OPFChecker.isBlessedStyleType(res.mimeType)
+						&& !OPFChecker
+								.isDeprecatedBlessedStyleType(res.mimeType)
+						&& !res.hasValidItemFallback)
+        {
+          report.message(MessageId.CSS_010,
+              new MessageLocation(ref.resource, ref.lineNumber, ref.columnNumber),
+              res.mimeType);
+        }
+          break;
+      }
+    }
+    else
+    { //if (ref.fragment == null) {
+      if (ref.fragment.startsWith("epubcfi("))
+      {
+        //Issue 150
+        return;
+      }
+
+      switch (ref.type)
+      {
+        case RT_HYPERLINK:
+          // if mimeType is null, we should have reported an error already
+          if (res.mimeType != null
+              && !OPFChecker.isBlessedItemType(res.mimeType, version)
+              && !OPFChecker
+              .isDeprecatedBlessedItemType(res.mimeType)
+              && !res.hasValidItemFallback)
+          {
+            report.message(MessageId.RSC_010,
+                new MessageLocation(ref.resource, ref.lineNumber, ref.columnNumber, ref.refResource + "#" + ref.fragment));
+          }
+          if (!res.inSpine)
+          {
+            report.message(MessageId.RSC_011,
+                new MessageLocation(ref.resource, ref.lineNumber, ref.columnNumber, ref.refResource + "#" + ref.fragment));
+          }
+          break;
+        case RT_IMAGE:
+          report.message(MessageId.RSC_009,
+              new MessageLocation(ref.resource, ref.lineNumber, ref.columnNumber, ref.refResource + "#" + ref.fragment));
+          break;
+        case RT_STYLESHEET:
+          report.message(MessageId.RSC_013,
+              new MessageLocation(ref.resource, ref.lineNumber, ref.columnNumber, ref.refResource + "#" + ref.fragment));
+          break;
+      }
+      Anchor anchor = res.anchors.get(ref.fragment);
+      if (anchor == null)
+      {
+        report.message(MessageId.RSC_012,
+            new MessageLocation(ref.resource, ref.lineNumber, ref.columnNumber, ref.refResource + "#" + ref.fragment));
+      }
+      else
+      {
+        switch (ref.type)
+        {
+          case RT_SVG_PAINT:
+          case RT_SVG_CLIP_PATH:
+            if (anchor.type != ref.type)
+            {
+              report.message(MessageId.RSC_014,
+                  new MessageLocation(ref.resource, ref.lineNumber, ref.columnNumber, ref.refResource + "#" + ref.fragment));
+            }
+            break;
+          case RT_SVG_SYMBOL:
+          case RT_HYPERLINK:
+            if (anchor.type != ref.type && anchor.type != RT_GENERIC)
+            {
+              report.message(MessageId.RSC_014,
+                  new MessageLocation(ref.resource, ref.lineNumber, ref.columnNumber, ref.refResource + "#" + ref.fragment));
+            }
+            break;
+        }
+      }
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ops/OPSChecker.java b/src/main/java/com/adobe/epubcheck/ops/OPSChecker.java
new file mode 100755
index 0000000..8dec4ce
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ops/OPSChecker.java
@@ -0,0 +1,206 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.ops;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.ocf.OCFPackage;
+import com.adobe.epubcheck.opf.ContentChecker;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.opf.OPFData;
+import com.adobe.epubcheck.opf.XRefChecker;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.GenericResourceProvider;
+import com.adobe.epubcheck.util.OPSType;
+import com.adobe.epubcheck.xml.XMLParser;
+import com.adobe.epubcheck.xml.XMLValidator;
+import com.adobe.epubcheck.xml.XMLValidators;
+import com.google.common.collect.ImmutableListMultimap;
+import com.google.common.collect.ListMultimap;
+
+public class OPSChecker implements ContentChecker, DocumentValidator
+{
+
+  private OCFPackage ocf;
+
+  private final Report report;
+
+  private final String path;
+
+  private final String mimeType;
+
+  private XRefChecker xrefChecker;
+
+  private final EPUBVersion version;
+
+  private final GenericResourceProvider resourceProvider;
+
+  private final String properties;
+  
+  private final Set<String> pubTypes;
+  
+  private static final OPSType XHTML_20 = new OPSType("application/xhtml+xml", EPUBVersion.VERSION_2);
+  private static final OPSType XHTML_30 = new OPSType("application/xhtml+xml", EPUBVersion.VERSION_3);
+  private static final OPSType SVG_20 = new OPSType("image/svg+xml", EPUBVersion.VERSION_2);
+  private static final OPSType SVG_30 = new OPSType("image/svg+xml", EPUBVersion.VERSION_3);
+
+
+  private ListMultimap<OPSType, XMLValidator> validatorMap;
+
+  private void initEpubValidatorMap()
+  {
+    ImmutableListMultimap.Builder<OPSType, XMLValidator> builder = ImmutableListMultimap.builder();
+    builder.putAll(XHTML_20, XMLValidators.XHTML_20_NVDL.get(), XMLValidators.IDUNIQUE_20_SCH.get())
+        .putAll(XHTML_30, XMLValidators.XHTML_30_RNC.get(), XMLValidators.XHTML_30_SCH.get())
+        .putAll(SVG_20, XMLValidators.SVG_20_RNG.get(), XMLValidators.IDUNIQUE_20_SCH.get())
+        .putAll(SVG_30, XMLValidators.SVG_30_RNC.get(), XMLValidators.SVG_30_SCH.get());
+    if (pubTypes.contains(OPFData.DC_TYPE_EDUPUB))
+    {
+      builder.put(XHTML_30, XMLValidators.XHTML_EDUPUB_HEADINGS_SCH.get());
+      builder.put(XHTML_30, XMLValidators.XHTML_EDUPUB_SEMANTICS_SCH.get());
+    }
+    validatorMap = builder.build();
+  }
+
+  public OPSChecker(OCFPackage ocf, Report report, String path,
+      String mimeType, String properties, XRefChecker xrefChecker,
+      EPUBVersion version, Set<String> pubTypes)
+  {
+    this.ocf = ocf;
+    this.resourceProvider = ocf;
+    this.report = report;
+    this.path = path;
+    this.xrefChecker = xrefChecker;
+    this.mimeType = mimeType;
+    this.version = version;
+    this.properties = properties;
+    this.pubTypes = pubTypes;
+    initEpubValidatorMap();
+  }
+
+  public OPSChecker(String path, String mimeType,
+      GenericResourceProvider resourceProvider, Report report,
+      EPUBVersion version)
+  {
+    this.resourceProvider = resourceProvider;
+    this.mimeType = mimeType;
+    this.report = report;
+    this.path = path;
+    this.version = version;
+    this.properties = "singleFileValidation";
+    this.pubTypes = Collections.emptySet();
+    initEpubValidatorMap();
+  }
+
+  public void runChecks()
+  {
+    if (!ocf.hasEntry(path))
+    {
+      report.message(MessageId.RSC_001, new MessageLocation(this.ocf.getName(), -1, -1), path);
+    }
+    else if (!ocf.canDecrypt(path))
+    {
+      report.message(MessageId.RSC_004, new MessageLocation(this.ocf.getName(), 0, 0), path);
+    }
+    else
+    {
+      validate();
+    }
+  }
+
+  public boolean validate()
+  {
+    int fatalErrorsSoFar = report.getFatalErrorCount();
+    int errorsSoFar = report.getErrorCount();
+    int warningsSoFar = report.getWarningCount();
+    OPSType type = new OPSType(mimeType, version);
+    List<XMLValidator> validators = validatorMap
+        .get(type);
+    try
+    {
+      validate(validators);
+    }
+    catch (IOException e)
+    {
+      report.message(MessageId.PKG_008, new MessageLocation(path, 0, 0), path);
+    }
+    return fatalErrorsSoFar == report.getFatalErrorCount()
+        && errorsSoFar == report.getErrorCount()
+        && warningsSoFar == report.getWarningCount();
+  }
+
+  void validate(List<XMLValidator> validators) throws
+      IOException
+  {
+    InputStream in = null;
+    OPSHandler opsHandler;
+    try
+    {
+      in = resourceProvider.getInputStream(path);
+      XMLParser opsParser = new XMLParser( ocf,
+          in, path, mimeType, report,
+          version);
+
+      if (version == EPUBVersion.VERSION_2)
+      {
+        opsHandler = new OPSHandler(ocf, path, xrefChecker, opsParser, report, version);
+      }
+      else
+      {
+        opsHandler = new OPSHandler30(ocf, path, mimeType, properties,
+            xrefChecker, opsParser, report, version, pubTypes);
+      }
+
+      opsParser.addXMLHandler(opsHandler);
+      
+      for (XMLValidator validator : validators)
+      {
+        opsParser.addValidator(validator);
+      }
+
+      opsParser.process();
+    }
+    finally
+    {
+      try
+      {
+        if (in != null)
+        {
+          in.close();
+        }
+      }
+      catch (Exception ignored)
+      {
+
+      }
+    }
+
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ops/OPSCheckerFactory.java b/src/main/java/com/adobe/epubcheck/ops/OPSCheckerFactory.java
new file mode 100755
index 0000000..0656e0d
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ops/OPSCheckerFactory.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.ops;
+
+import java.util.Set;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ocf.OCFPackage;
+import com.adobe.epubcheck.opf.ContentChecker;
+import com.adobe.epubcheck.opf.ContentCheckerFactory;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.opf.DocumentValidatorFactory;
+import com.adobe.epubcheck.opf.XRefChecker;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.GenericResourceProvider;
+
+public class OPSCheckerFactory implements ContentCheckerFactory,
+    DocumentValidatorFactory
+{
+
+  public ContentChecker newInstance(OCFPackage ocf, Report report,
+      String path, String mimeType, String properties,
+      XRefChecker xrefChecker, EPUBVersion version, Set<String> pubTypes)
+  {
+    return new OPSChecker(ocf, report, path, mimeType, properties,
+        xrefChecker, version, pubTypes);
+  }
+
+  static private final OPSCheckerFactory instance = new OPSCheckerFactory();
+
+  static public OPSCheckerFactory getInstance()
+  {
+    return instance;
+  }
+
+  public DocumentValidator newInstance(Report report, String path,
+      GenericResourceProvider resourceProvider, String mimeType,
+      EPUBVersion version)
+  {
+
+    return new OPSChecker(path, mimeType, resourceProvider, report, version);
+  }
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/ops/OPSHandler.java b/src/main/java/com/adobe/epubcheck/ops/OPSHandler.java
new file mode 100755
index 0000000..0516bd4
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ops/OPSHandler.java
@@ -0,0 +1,522 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.ops;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.css.CSSCheckerFactory;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.ocf.OCFPackage;
+import com.adobe.epubcheck.opf.XRefChecker;
+import com.adobe.epubcheck.util.*;
+import com.adobe.epubcheck.xml.XMLElement;
+import com.adobe.epubcheck.xml.XMLHandler;
+import com.adobe.epubcheck.xml.XMLParser;
+
+import javax.xml.XMLConstants;
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.HashSet;
+import java.util.Stack;
+
+public class OPSHandler implements XMLHandler
+{
+
+  class ElementLocation
+  {
+    int lineNumber;
+    int columnNumber;
+
+    public ElementLocation(int line, int column)
+    {
+      this.lineNumber = line;
+      this.columnNumber = column;
+    }
+
+    int getLineNumber()
+    {
+      return lineNumber;
+    }
+
+    int getColumnNumber()
+    {
+      return columnNumber;
+    }
+ }
+
+  final String path;
+
+  /**
+   * null unless head/base or xml:base is given
+   */
+  String base;
+
+  final XRefChecker xrefChecker;
+
+  static final HashSet<String> regURISchemes = fillRegURISchemes();
+
+  final XMLParser parser;
+  final OCFPackage ocf;
+  final Report report;
+  final EPUBVersion version;
+
+  long openElements;
+  long charsCount;
+  int tableDepth = 0;
+  boolean hasTh = false;
+  boolean hasThead = false;
+  boolean hasCaption = false;
+  boolean epubTypeInUse = false;
+  boolean checkedUnsupportedXMLVersion = false;
+  StringBuilder textNode;
+  Stack<ElementLocation> elementLocationStack = new Stack<ElementLocation>();
+
+  public OPSHandler(OCFPackage ocf, String path, XRefChecker xrefChecker, XMLParser parser,
+      Report report, EPUBVersion version)
+  {
+    this.ocf = ocf;
+    this.path = path;
+    this.xrefChecker = xrefChecker;
+    this.report = report;
+    this.parser = parser;
+    this.version = version;
+  }
+
+  void checkPaint(XMLElement e, String attr)
+  {
+    String paint = e.getAttribute(attr);
+    if (xrefChecker != null && paint != null && paint.startsWith("url(")
+        && paint.endsWith(")"))
+    {
+      String href = paint.substring(4, paint.length() - 1);
+      href = PathUtil.resolveRelativeReference(path, href, base);
+      xrefChecker.registerReference(path, parser.getLineNumber(),
+          parser.getColumnNumber(), href, XRefChecker.RT_SVG_PAINT);
+    }
+  }
+
+  void checkImage(XMLElement e, String attrNS, String attr)
+  {
+    String href = e.getAttributeNS(attrNS, attr);
+    if (xrefChecker != null && href != null)
+    {
+      href = PathUtil.resolveRelativeReference(path, href, base);
+      xrefChecker.registerReference(path, parser.getLineNumber(),
+          parser.getColumnNumber(), href, XRefChecker.RT_IMAGE);
+    }
+  }
+
+  void checkObject(XMLElement e, String attrNS, String attr)
+  {
+    String href = e.getAttributeNS(attrNS, attr);
+    if (xrefChecker != null && href != null)
+    {
+      href = PathUtil.resolveRelativeReference(path, href, base);
+      xrefChecker.registerReference(path, parser.getLineNumber(),
+          parser.getColumnNumber(), href, XRefChecker.RT_OBJECT);
+    }
+  }
+
+  void checkLink(XMLElement e, String attrNS, String attr)
+  {
+    String href = e.getAttributeNS(attrNS, attr);
+    String rel = e.getAttributeNS(attrNS, "rel");
+    if (xrefChecker != null && href != null && rel != null && rel.contains("stylesheet")
+				&& rel.toLowerCase().indexOf("stylesheet") >= 0)
+    {
+      href = PathUtil.resolveRelativeReference(path, href, base);
+      xrefChecker.registerReference(path, parser.getLineNumber(),
+          parser.getColumnNumber(), href, XRefChecker.RT_STYLESHEET);
+    }
+  }
+
+  void checkSymbol(XMLElement e, String attrNS, String attr)
+  {
+    String href = e.getAttributeNS(attrNS, attr);
+    if (xrefChecker != null && href != null)
+    {
+      href = PathUtil.resolveRelativeReference(path, href, base);
+      xrefChecker.registerReference(path, parser.getLineNumber(),
+          parser.getColumnNumber(), href, XRefChecker.RT_SVG_SYMBOL);
+    }
+  }
+
+  void checkHRef(XMLElement e, String attrNS, String attr)
+  {
+    String href = e.getAttributeNS(attrNS, attr);
+    //outWriter.println("HREF: '" + href +"'");
+    if (href == null)
+    {
+      return;
+    }
+
+    if (href.contains("#epubcfi"))
+    {
+      return; //temp until cfi implemented
+    }
+
+    href = href.trim();
+
+    if (href.length() < 1)
+    {
+			//if href="" then selfreference which is valid, 
+			//but as per issue 225, issue a hint
+      report.message(MessageId.HTM_045,
+          new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber(), href));
+      return;
+    }
+
+    if (".".equals(href))
+    {
+      //selfreference, no need to check
+    }
+
+
+    if (href.startsWith("http"))
+    {
+      report.info(path, FeatureEnum.REFERENCE, href);
+    }
+
+    /*
+       * mgy 20120417 adding check for base to initial if clause as part
+       * of solution to issue 155
+       */
+    if (isRegisteredSchemeType(href) || (null != base && isRegisteredSchemeType(base)))
+    {
+      return;
+    }
+
+    // This if statement is needed to make sure XML Fragment identifiers
+    // are not reported as non-registered URI scheme types
+    else if (href.indexOf(':') > 0)
+    {
+      report.message(MessageId.HTM_025,
+          new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber(), href));
+      return;
+    }
+
+    try
+    {
+      href = PathUtil.resolveRelativeReference(path, href, base);
+    }
+    catch (IllegalArgumentException err)
+    {
+      report.message(MessageId.OPF_010,
+          new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber(), href),
+          err.getMessage());
+      return;
+    }
+    if (xrefChecker != null)
+    {
+      xrefChecker.registerReference(path, parser.getLineNumber(),
+          parser.getColumnNumber(), href,
+          XRefChecker.RT_HYPERLINK);
+    }
+  }
+
+  public static boolean isRegisteredSchemeType(String href)
+  {
+    int colonIndex = href.indexOf(':');
+    return colonIndex >= 0
+        && (regURISchemes.contains(href.substring(0, colonIndex + 1)) || href.length() > colonIndex + 2
+        && href.substring(colonIndex + 1, colonIndex + 3).equals("//")
+        && regURISchemes.contains(href.substring(0, colonIndex + 3)));
+  }
+
+  public void startElement()
+  {
+    openElements++;
+    XMLElement e = parser.getCurrentElement();
+    ElementLocation currentLocation = new ElementLocation(parser.getLineNumber(), parser.getColumnNumber());
+    elementLocationStack.push(currentLocation);
+
+    if (!checkedUnsupportedXMLVersion)
+    {
+      HandlerUtil.checkXMLVersion(parser);
+      checkedUnsupportedXMLVersion = true;
+    }
+
+    String id = e.getAttribute("id");
+
+    String baseTest = e.getAttributeNS(XMLConstants.XML_NS_URI, "base");
+    if (baseTest != null)
+    {
+      base = baseTest;
+    }
+
+    if (!epubTypeInUse)
+    {
+      String eNS = e.getAttributeNS(EpubConstants.EpubTypeNamespaceUri, "type");
+      if (eNS != null)
+      {
+        epubTypeInUse = true;
+      }
+    }
+
+    String ns = e.getNamespace();
+    String name = e.getName().toLowerCase();
+    int resourceType = XRefChecker.RT_GENERIC;
+    if (ns != null)
+    {
+      if (ns.equals("http://www.w3.org/2000/svg"))
+      {
+        if (name.equals("lineargradient")
+            || name.equals("radialgradient")
+            || name.equals("pattern"))
+        {
+          resourceType = XRefChecker.RT_SVG_PAINT;
+        }
+        else if (name.equals("clippath"))
+        {
+          resourceType = XRefChecker.RT_SVG_CLIP_PATH;
+        }
+        else if (name.equals("symbol"))
+        {
+          resourceType = XRefChecker.RT_SVG_SYMBOL;
+        }
+        else if (name.equals("a"))
+        {
+          checkHRef(e, "http://www.w3.org/1999/xlink", "href");
+        }
+        else if (name.equals("use"))
+        {
+          checkSymbol(e, "http://www.w3.org/1999/xlink", "href");
+        }
+        else if (name.equals("image"))
+        {
+          checkImage(e, "http://www.w3.org/1999/xlink", "href");
+        }
+        checkPaint(e, "fill");
+        checkPaint(e, "stroke");
+      }
+      else if (ns.equals(EpubConstants.HtmlNamespaceUri))
+      {
+        if (name.equals("a"))
+        {
+          checkHRef(e, null, "href");
+        }
+        else if (name.equals("img"))
+        {
+          checkImage(e, null, "src");
+        }
+        else if (name.equals("object"))
+        {
+          checkObject(e, null, "data");
+        }
+        else if (name.equals("link"))
+        {
+          checkLink(e, null, "href");
+        }
+        else if (name.equals("base"))
+        {
+          base = e.getAttribute("href");
+        }
+        else if (name.equals("style"))
+        {
+          textNode = new StringBuilder();
+        }
+        else if (name.equals("iframe"))
+        {
+          checkIFrame(e);
+        }
+        else if (name.equals("table"))
+        {
+          ++tableDepth;
+        }
+        else if (name.equals("th") && tableDepth > 0)
+        {
+          hasTh = true;
+        }
+        else if (name.equals("thead") && tableDepth > 0)
+        {
+          hasThead = true;
+        }
+        else if (name.equals("caption") && tableDepth > 0)
+        {
+          hasCaption = true;
+        }
+        else if (name.equals("i") || name.equals("b") || name.equals("em") || name.equals("strong"))
+        {
+          checkBoldItalics(e);
+        }
+
+        resourceType = XRefChecker.RT_HYPERLINK;
+
+        String style = e.getAttribute("style");
+        if (style != null && style.length() > 0)
+        {
+          CSSCheckerFactory.getInstance().newInstance(
+              ocf, report, style, true, path,
+              currentLocation.getLineNumber(),
+              currentLocation.getColumnNumber(), xrefChecker, version).runChecks();
+        }
+      }
+    }
+    if (xrefChecker != null && id != null)
+    {
+      xrefChecker.registerAnchor(path, currentLocation.getLineNumber(),
+          currentLocation.getColumnNumber(), id, resourceType);
+    }
+  }
+
+  void checkBoldItalics(XMLElement e)
+  {
+    report.message(MessageId.HTM_038, new MessageLocation(path, parser.getLineNumber(),
+        parser.getColumnNumber(), e.getName()));
+  }
+
+  void checkIFrame(XMLElement e)
+  {
+    report.message(MessageId.HTM_036, new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber(), e.getName()));
+  }
+
+  public void endElement()
+  {
+    openElements--;
+    XMLElement e = parser.getCurrentElement();
+    String ns = e.getNamespace();
+    String name = e.getName();
+
+    if (openElements == 0)
+    {
+      report.info(path, FeatureEnum.CHARS_COUNT, Long.toString(charsCount));
+      if (!epubTypeInUse)
+      {
+        if (version == EPUBVersion.VERSION_3)
+        {
+          report.message(MessageId.ACC_007, new MessageLocation(path, -1, -1));
+        }
+      }
+      else
+      {
+        epubTypeInUse = false;
+      }
+    }
+
+    ElementLocation currentLocation = elementLocationStack.pop();
+
+    boolean inXhtml = EpubConstants.HtmlNamespaceUri.equals(ns);
+
+    if (inXhtml && "script".equals(name))
+    {
+      String attr = e.getAttribute("type");
+      report.info(path, FeatureEnum.HAS_SCRIPTS, (attr == null) ? "" : attr);
+    }
+
+    if (inXhtml && "style".equals(name))
+    {
+      String style = textNode.toString();
+      if (style.length() > 0)
+      {
+        CSSCheckerFactory.getInstance().newInstance(
+            ocf, report, style, false, path,
+            currentLocation.getLineNumber(),
+            currentLocation.getColumnNumber(), xrefChecker, version).runChecks();
+      }
+      textNode = null;
+    }
+
+    if (inXhtml && ("table".equals(name)))
+    {
+      if (tableDepth > 0)
+      {
+        --tableDepth;
+        MessageLocation location = new MessageLocation(path, currentLocation.getLineNumber(), currentLocation.getColumnNumber(), "table");
+
+        checkDependentCondition(MessageId.ACC_005, tableDepth == 0, hasTh, location);
+        checkDependentCondition(MessageId.ACC_006, tableDepth == 0, hasThead, location);
+        checkDependentCondition(MessageId.ACC_012, tableDepth == 0, hasCaption, location);
+
+        hasTh = hasThead = hasCaption = false;
+      }
+    }
+  }
+
+  // Report the message id when primary condition1 is true but dependent condition2 is false.
+  void checkDependentCondition(MessageId id, boolean condition1, boolean condition2, MessageLocation location)
+  {
+    if (condition1 && !condition2)
+    {
+      report.message(id, location);
+    }
+  }
+
+  public void ignorableWhitespace(char[] chars, int arg1, int arg2)
+  {
+  }
+
+  public void characters(char[] chars, int start, int length)
+  {
+    charsCount += length;
+    if (textNode != null)
+    {
+      textNode.append(chars, start, length);
+    }
+  }
+
+  public void processingInstruction(String arg0, String arg1)
+  {
+  }
+
+  static HashSet<String> fillRegURISchemes()
+  {
+    InputStream schemaStream = null;
+    BufferedReader schemaReader = null;
+    try
+    {
+      HashSet<String> set = new HashSet<String>();
+      schemaStream = OPSHandler.class.getResourceAsStream("registeredSchemas.txt");
+      schemaReader = new BufferedReader(new InputStreamReader(schemaStream));
+      String schema = schemaReader.readLine();
+      while (schema != null)
+      {
+        set.add(schema);
+        schema = schemaReader.readLine();
+      }
+      return set;
+    }
+    catch (Exception e)
+    {
+      e.printStackTrace();
+    }
+    finally
+    {
+      try
+      {
+        if (schemaReader != null)
+        {
+          schemaReader.close();
+        }
+        if (schemaStream != null)
+        {
+          schemaStream.close();
+        }
+      }
+      catch (Exception ignored)
+      {
+      }
+    }
+    return null;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/ops/OPSHandler30.java b/src/main/java/com/adobe/epubcheck/ops/OPSHandler30.java
new file mode 100644
index 0000000..4164766
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/ops/OPSHandler30.java
@@ -0,0 +1,621 @@
+package com.adobe.epubcheck.ops;
+
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import com.adobe.epubcheck.api.QuietReport;
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.ocf.OCFPackage;
+import com.adobe.epubcheck.opf.OPFChecker;
+import com.adobe.epubcheck.opf.OPFChecker30;
+import com.adobe.epubcheck.opf.OPFData;
+import com.adobe.epubcheck.opf.XRefChecker;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.EpubConstants;
+import com.adobe.epubcheck.util.PathUtil;
+import com.adobe.epubcheck.vocab.AggregateVocab;
+import com.adobe.epubcheck.vocab.AltStylesheetVocab;
+import com.adobe.epubcheck.vocab.EnumVocab;
+import com.adobe.epubcheck.vocab.PackageVocabs;
+import com.adobe.epubcheck.vocab.PackageVocabs.ITEM_PROPERTIES;
+import com.adobe.epubcheck.vocab.Property;
+import com.adobe.epubcheck.vocab.StagingEdupubVocab;
+import com.adobe.epubcheck.vocab.StructureVocab;
+import com.adobe.epubcheck.vocab.Vocab;
+import com.adobe.epubcheck.vocab.VocabUtil;
+import com.adobe.epubcheck.xml.XMLAttribute;
+import com.adobe.epubcheck.xml.XMLElement;
+import com.adobe.epubcheck.xml.XMLParser;
+import com.google.common.base.Joiner;
+import com.google.common.base.Strings;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
+
+public class OPSHandler30 extends OPSHandler
+{
+
+  private static Map<String, Vocab> ITEM_VOCABS = ImmutableMap.of("", PackageVocabs.ITEM_VOCAB);
+  private static Map<String, Vocab> RESERVED_VOCABS = ImmutableMap.of("", StructureVocab.VOCAB);
+  private static Map<String, Vocab> RESERVED_EDUPUB_VOCABS = ImmutableMap.of("",
+      AggregateVocab.of(StructureVocab.VOCAB, StagingEdupubVocab.VOCAB));
+  private static Map<String, Vocab> ALTCSS_VOCABS = ImmutableMap.of("", AltStylesheetVocab.VOCAB);
+  private static Map<String, Vocab> KNOWN_VOCAB_URIS = ImmutableMap.of();
+  private static Set<String> DEFAULT_VOCAB_URIS = ImmutableSet.of(StructureVocab.URI);
+
+  String properties;
+
+  private Map<String, Vocab> vocabs = RESERVED_VOCABS;
+
+  final Set<ITEM_PROPERTIES> propertiesSet = EnumSet.noneOf(ITEM_PROPERTIES.class);
+
+  final String mimeType;
+
+  boolean video = false;
+
+  boolean audio = false;
+
+  boolean hasValidFallback = false;
+
+  int imbricatedObjects = 0;
+  int imbricatedCanvases = 0;
+
+  boolean anchorNeedsText = false;
+  boolean inMathML = false;
+  boolean inSvg = false;
+  boolean hasAltorAnnotation = false;
+  private final Set<String> pubTypes;
+
+  static final String[] scriptEventsStrings = { "onafterprint", "onbeforeprint", "onbeforeunload",
+      "onerror", "onhaschange", "onload", "onmessage", "onoffline", "onpagehide", "onpageshow",
+      "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload",
+
+      "onblur", "onchange", "oncontextmenu", "onfocus", "onformchange", "onforminput", "oninput",
+      "oninvalid", "onreset", "onselect", "onsubmit",
+
+      "onkeydown", "onkeypress", "onkeyup",
+
+      "onabort", "oncanplay", "oncanplaythrough", "ondurationchange", "onemptied", "onended",
+      "onerror", "onloadeddata", "onloadedmetadata", "onloadstart", "onpause", "onplay",
+      "onplaying", "onprogress", "onratechange", "onreadystatechange", "onseeked", "onseeking",
+      "onstalled", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting" };
+
+  static HashSet<String> scriptEvents;
+
+  public static HashSet<String> getScriptEvents()
+  {
+    if (scriptEvents == null)
+    {
+      scriptEvents = new HashSet<String>();
+      Collections.addAll(scriptEvents, scriptEventsStrings);
+      Collections.addAll(scriptEvents, mouseEventsStrings);
+    }
+    return scriptEvents;
+  }
+
+  static final String[] mouseEventsStrings = { "onclick", "ondblclick", "ondrag", "ondragend",
+      "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "onmousedown",
+      "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", "onscroll" };
+  static HashSet<String> mouseEvents;
+
+  public static HashSet<String> getMouseEvents()
+  {
+    if (mouseEvents == null)
+    {
+      mouseEvents = new HashSet<String>();
+      Collections.addAll(mouseEvents, mouseEventsStrings);
+    }
+    return mouseEvents;
+  }
+
+  public OPSHandler30(OCFPackage ocf, String path, String mimeType, String properties,
+      XRefChecker xrefChecker, XMLParser parser, Report report, EPUBVersion version,
+      Set<String> pubTypes)
+  {
+    super(ocf, path, xrefChecker, parser, report, version);
+    this.mimeType = mimeType;
+    this.properties = properties;
+    checkedUnsupportedXMLVersion = false;
+    this.pubTypes = pubTypes;
+  }
+
+  void checkType(String type)
+  {
+    if (type == null)
+    {
+      return;
+    }
+
+    VocabUtil.parsePropertyList(type, vocabs, report,
+        new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()));
+
+  }
+
+  void checkSSMLPh(String ph)
+  {
+    // issue 139; enhancement is to add real syntax check for IPA and x-SAMPA
+    if (ph == null)
+    {
+      return;
+    }
+    if (ph.trim().length() < 1)
+    {
+      report.message(MessageId.HTM_007,
+          new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()));
+    }
+  }
+
+  @Override
+  public void characters(char[] chars, int arg1, int arg2)
+  {
+    super.characters(chars, arg1, arg2);
+    String str = new String(chars, arg1, arg2);
+    str = str.trim();
+    if (!str.equals("") && (audio || video || imbricatedObjects > 0 || imbricatedCanvases > 0))
+    {
+      hasValidFallback = true;
+    }
+    if (anchorNeedsText)
+    {
+      anchorNeedsText = false;
+    }
+  }
+
+  public void startElement()
+  {
+    super.startElement();
+
+    XMLElement e = parser.getCurrentElement();
+    String name = e.getName();
+
+    if (name.equals("html"))
+    {
+      Map<String, Vocab> reserved = (this.pubTypes.contains(OPFData.DC_TYPE_EDUPUB)) ? RESERVED_EDUPUB_VOCABS
+          : RESERVED_VOCABS;
+      vocabs = VocabUtil.parsePrefixDeclaration(
+          e.getAttributeNS(EpubConstants.EpubTypeNamespaceUri, "prefix"), reserved,
+          KNOWN_VOCAB_URIS, DEFAULT_VOCAB_URIS, report,
+          new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()));
+    }
+    else if (name.equals("link"))
+    {
+      processLink(e);
+    }
+    else if (name.equals("object"))
+    {
+      processObject(e);
+    }
+    else if (name.equals("math"))
+    {
+      propertiesSet.add(ITEM_PROPERTIES.MATHML);
+      inMathML = true;
+      hasAltorAnnotation = (null != e.getAttribute("alttext"));
+    }
+    else if (!mimeType.equals("image/svg+xml") && name.equals("svg"))
+    {
+      propertiesSet.add(ITEM_PROPERTIES.SVG);
+      processStartSvg(e);
+    }
+    else if (name.equals("script"))
+    {
+      propertiesSet.add(ITEM_PROPERTIES.SCRIPTED);
+    }
+    else if (!mimeType.equals("image/svg+xml") && name.equals("switch"))
+    {
+      propertiesSet.add(ITEM_PROPERTIES.SWITCH);
+    }
+    else if (name.equals("audio"))
+    {
+      processAudio();
+    }
+    else if (name.equals("video"))
+    {
+      processVideo(e);
+    }
+    else if (name.equals("canvas"))
+    {
+      processCanvas();
+    }
+    else if (name.equals("img"))
+    {
+      processImg();
+    }
+    else if (name.equals("a"))
+    {
+      anchorNeedsText = true;
+      processAnchor(e);
+    }
+    else if (name.equals("annotation-xml"))
+    {
+      hasAltorAnnotation = true;
+    }
+
+    processInlineScripts(e);
+
+    processSrc(("source".equals(name)) ? e.getParent().getName() : name, e.getAttribute("src"));
+
+    checkType(e.getAttributeNS(EpubConstants.EpubTypeNamespaceUri, "type"));
+
+    checkSSMLPh(e.getAttributeNS("http://www.w3.org/2001/10/synthesis", "ph"));
+  }
+
+  void processInlineScripts(com.adobe.epubcheck.xml.XMLElement e)
+  {
+    HashSet<String> scriptEvents = getScriptEvents();
+    HashSet<String> mouseEvents = getMouseEvents();
+
+    for (int i = 0; i < e.getAttributeCount(); ++i)
+    {
+      XMLAttribute attr = e.getAttribute(i);
+      String name = attr.getName().toLowerCase();
+      if (scriptEvents.contains(name) || mouseEvents.contains(name))
+      {
+        propertiesSet.add(ITEM_PROPERTIES.SCRIPTED);
+        return;
+      }
+    }
+  }
+
+  void processLink(XMLElement e)
+  {
+
+    String classAttribute = e.getAttribute("class");
+    if (classAttribute == null)
+    {
+      return;
+    }
+
+    Set<Property> properties = VocabUtil.parsePropertyList(classAttribute, ALTCSS_VOCABS, report,
+        new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()));
+    Set<AltStylesheetVocab.PROPERTIES> altClasses = Property.filter(properties,
+        AltStylesheetVocab.PROPERTIES.class);
+
+    if (properties.size() == 1)
+    {
+      return;
+    }
+
+    boolean vertical = altClasses.contains(AltStylesheetVocab.PROPERTIES.VERTICAL);
+    boolean horizontal = altClasses.contains(AltStylesheetVocab.PROPERTIES.HORIZONTAL);
+    boolean day = altClasses.contains(AltStylesheetVocab.PROPERTIES.DAY);
+    boolean night = altClasses.contains(AltStylesheetVocab.PROPERTIES.NIGHT);
+
+    if (vertical && horizontal || day && night)
+    {
+      report.message(MessageId.CSS_005,
+          new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()),
+          classAttribute);
+    }
+  }
+
+  void processAnchor(XMLElement e)
+  {
+    if (e.getAttribute("href") == null)
+    {
+      anchorNeedsText = false;
+    }
+    if (inSvg)
+    {
+      String titleAttribute = e.getAttributeNS(EpubConstants.XLinkNamespaceUri, "title");
+      if (titleAttribute == null)
+      {
+        report
+            .message(
+                MessageId.ACC_011,
+                new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber(), e
+                    .getName()));
+      }
+    }
+  }
+
+  void processImg()
+  {
+    if ((audio || video || imbricatedObjects > 0 || imbricatedCanvases > 0))
+    {
+      hasValidFallback = true;
+    }
+  }
+
+  void processCanvas()
+  {
+    imbricatedCanvases++;
+  }
+
+  void processAudio()
+  {
+    audio = true;
+  }
+
+  void processVideo(XMLElement e)
+  {
+    video = true;
+
+    String posterSrc = e.getAttribute("poster");
+
+    String posterMimeType = null;
+    if (xrefChecker != null && posterSrc != null)
+    {
+      posterMimeType = xrefChecker.getMimeType(PathUtil.resolveRelativeReference(path, posterSrc,
+          base));
+    }
+
+    if (posterMimeType != null && !OPFChecker.isBlessedImageType(posterMimeType))
+    {
+      report.message(MessageId.MED_001,
+          new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()));
+    }
+
+    if (posterSrc != null)
+    {
+      hasValidFallback = true;
+      processSrc(e.getName(), posterSrc);
+    }
+
+  }
+
+  void processSrc(String name, String src)
+  {
+
+    if (src != null)
+    {
+      src = src.trim();
+      if (src.equals(""))
+      {
+        report.message(MessageId.HTM_008,
+            new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber(), name));
+      }
+    }
+
+    if (src == null || xrefChecker == null)
+    {
+      return;
+    }
+
+    if (src.matches("^[^:/?#]+://.*"))
+    {
+      propertiesSet.add(ITEM_PROPERTIES.REMOTE_RESOURCES);
+    }
+    else
+    {
+      src = PathUtil.resolveRelativeReference(path, src, base);
+    }
+
+    int refType;
+    if ("audio".equals(name))
+    {
+      refType = XRefChecker.RT_AUDIO;
+    }
+    else if ("video".equals(name))
+    {
+      refType = XRefChecker.RT_VIDEO;
+    }
+    else
+    {
+      refType = XRefChecker.RT_GENERIC;
+    }
+    xrefChecker.registerReference(path, parser.getLineNumber(), parser.getColumnNumber(), src,
+        refType);
+
+    String srcMimeType = xrefChecker.getMimeType(src);
+
+    if (srcMimeType == null)
+    {
+      return;
+    }
+
+    if (!mimeType.equals("image/svg+xml") && srcMimeType.equals("image/svg+xml"))
+    {
+      propertiesSet.add(ITEM_PROPERTIES.SVG);
+    }
+
+    if ((audio || video || imbricatedObjects > 0 || imbricatedCanvases > 0)
+        && OPFChecker30.isCoreMediaType(srcMimeType) && !name.equals("track"))
+    {
+      hasValidFallback = true;
+    }
+
+  }
+
+  void processObject(XMLElement e)
+  {
+    imbricatedObjects++;
+
+    String type = e.getAttribute("type");
+    String data = e.getAttribute("data");
+
+    if (data != null)
+    {
+      processSrc(e.getName(), data);
+      data = PathUtil.resolveRelativeReference(path, data, base);
+    }
+
+    if (type != null && data != null && xrefChecker != null
+        && !type.equals(xrefChecker.getMimeType(data)))
+    {
+      String context = "<object";
+      for (int i = 0; i < e.getAttributeCount(); i++)
+      {
+        XMLAttribute attribute = e.getAttribute(i);
+        context += " " + attribute.getName() + "=\"" + attribute.getValue() + "\"";
+      }
+      context += ">";
+      report.message(MessageId.OPF_013,
+          new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber(), context),
+          type, xrefChecker.getMimeType(data));
+    }
+
+    if (type != null)
+    {
+      if (!mimeType.equals("image/svg+xml") && type.equals("image/svg+xml"))
+      {
+        propertiesSet.add(ITEM_PROPERTIES.SVG);
+      }
+
+      if (OPFChecker30.isCoreMediaType(type))
+      {
+        hasValidFallback = true;
+      }
+    }
+
+    if (hasValidFallback)
+    {
+      return;
+    }
+    // check bindings
+    if (xrefChecker != null && type != null && xrefChecker.getBindingHandlerSrc(type) != null)
+    {
+      hasValidFallback = true;
+    }
+  }
+
+  void processStartSvg(XMLElement e)
+  {
+    inSvg = true;
+    boolean foundXmlLang = false;
+    boolean foundLang = false;
+    for (int i = 0; i < e.getAttributeCount() && !foundLang && !foundXmlLang; ++i)
+    {
+      XMLAttribute a = e.getAttribute(i);
+      if ("lang".compareTo(a.getName()) == 0)
+      {
+        foundXmlLang = foundXmlLang
+            | (EpubConstants.XmlNamespaceUri.compareTo(a.getNamespace()) == 0);
+        foundLang = (EpubConstants.HtmlNamespaceUri.compareTo(a.getNamespace()) == 0);
+      }
+    }
+    if (!foundLang || !foundXmlLang)
+    {
+      report.message(MessageId.HTM_043,
+          new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber(), e.getName()));
+    }
+  }
+
+  @Override
+  public void endElement()
+  {
+    super.endElement();
+    XMLElement e = parser.getCurrentElement();
+    String name = e.getName();
+    if (openElements == 0 && (name.equals("html") || name.equals("svg")))
+    {
+      checkProperties();
+    }
+    else if (name.equals("object"))
+    {
+      imbricatedObjects--;
+      if (imbricatedObjects == 0 && imbricatedCanvases == 0)
+      {
+        checkFallback("Object");
+      }
+    }
+    else if (name.equals("canvas"))
+    {
+      imbricatedCanvases--;
+      if (imbricatedObjects == 0 && imbricatedCanvases == 0)
+      {
+        checkFallback("Canvas");
+      }
+    }
+    else if (name.equals("video"))
+    {
+      if (imbricatedObjects == 0 && imbricatedCanvases == 0)
+      {
+        checkFallback("Video");
+      }
+      video = false;
+    }
+    else if (name.equals("audio"))
+    {
+      if (imbricatedObjects == 0 && imbricatedCanvases == 0)
+      {
+        checkFallback("Audio");
+      }
+      audio = false;
+    }
+    else if (name.equals("a"))
+    {
+      if (anchorNeedsText)
+      {
+        report.message(MessageId.ACC_004,
+            new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber(), "a"));
+        anchorNeedsText = false;
+      }
+    }
+    else if (name.equals("math"))
+    {
+      inMathML = false;
+      if (!hasAltorAnnotation)
+      {
+        report.message(MessageId.ACC_009,
+            new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber(), "math"));
+      }
+    }
+  }
+
+  /*
+   * Checks fallbacks for video, audio and object elements
+   */
+  void checkFallback(String elementType)
+  {
+    if (hasValidFallback)
+    {
+      hasValidFallback = false;
+    }
+    else
+    {
+      report.message(MessageId.MED_002,
+          new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()), elementType);
+    }
+  }
+
+  void checkProperties()
+  {
+    properties = Strings.nullToEmpty(properties);
+
+    if (ImmutableSet.copyOf(properties.split("\\s+")).contains("singleFileValidation"))
+    {
+      return;
+    }
+    // TODO shouldn't have to reparse the properties here.
+    // this.properties should be a Set<Property>
+    Set<ITEM_PROPERTIES> itemProps = Sets.newEnumSet(Property.filter(VocabUtil.parsePropertyList(
+        properties, ITEM_VOCABS, QuietReport.INSTANCE,
+        new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber())),
+        ITEM_PROPERTIES.class), ITEM_PROPERTIES.class);
+
+    itemProps.remove(ITEM_PROPERTIES.NAV);
+    itemProps.remove(ITEM_PROPERTIES.COVER_IMAGE);
+
+    for (ITEM_PROPERTIES propSet : propertiesSet)
+    {
+      if (itemProps.contains(propSet))
+      {
+        itemProps.remove(propSet);
+      }
+      else
+      {
+        report.message(MessageId.OPF_014, new MessageLocation(path, 0, 0),
+            EnumVocab.ENUM_TO_NAME.apply(propSet));
+      }
+    }
+
+    if (itemProps.contains(ITEM_PROPERTIES.REMOTE_RESOURCES))
+    {
+      itemProps.remove(ITEM_PROPERTIES.REMOTE_RESOURCES);
+      report.message(MessageId.OPF_018,
+          new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()));
+    }
+
+    if (!itemProps.isEmpty())
+    {
+      report.message(MessageId.OPF_015, new MessageLocation(path, 0, 0),
+          Joiner.on(", ").join(Collections2.transform(itemProps, EnumVocab.ENUM_TO_NAME)));
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/overlay/OverlayChecker.java b/src/main/java/com/adobe/epubcheck/overlay/OverlayChecker.java
new file mode 100644
index 0000000..44fc0be
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/overlay/OverlayChecker.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.overlay;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.ocf.OCFPackage;
+import com.adobe.epubcheck.opf.ContentChecker;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.opf.XRefChecker;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.GenericResourceProvider;
+import com.adobe.epubcheck.xml.XMLParser;
+import com.adobe.epubcheck.xml.XMLValidators;
+
+public class OverlayChecker implements ContentChecker, DocumentValidator
+{
+
+  private OCFPackage ocf;
+
+  private final Report report;
+
+  private final String path;
+
+  private XRefChecker xrefChecker = null;
+
+  private final GenericResourceProvider resourceProvider;
+
+
+  private EPUBVersion version;
+
+  public OverlayChecker(OCFPackage ocf, Report report, String path,
+      XRefChecker xrefChecker, EPUBVersion version)
+  {
+    this.ocf = ocf;
+    this.resourceProvider = ocf;
+    this.report = report;
+    this.path = path;
+    this.xrefChecker = xrefChecker;
+    this.version = version;
+  }
+
+  public OverlayChecker(String path,
+      GenericResourceProvider resourceProvider, Report report)
+  {
+    this.resourceProvider = resourceProvider;
+    this.report = report;
+    this.path = path;
+  }
+
+  public void runChecks()
+  {
+    if (!ocf.hasEntry(path))
+    {
+      report.message(MessageId.RSC_001, new MessageLocation(this.ocf.getName(), -1, -1), path);
+    }
+    else if (!ocf.canDecrypt(path))
+    {
+      report.message(MessageId.RSC_004, new MessageLocation(this.ocf.getName(), 0, 0), path);
+    }
+    else
+    {
+      validate();
+    }
+  }
+
+  public boolean validate()
+  {
+    int fatalErrorsSoFar = report.getFatalErrorCount();
+    int errorsSoFar = report.getErrorCount();
+    int warningsSoFar = report.getWarningCount();
+    InputStream in = null;
+    OverlayHandler overlayHandler;
+    try
+    {
+      in = resourceProvider.getInputStream(path);
+      XMLParser overlayParser = new XMLParser( ocf,
+          in, path,
+          "application/smil+xml", report, version);
+      overlayHandler = new OverlayHandler(path, xrefChecker,
+          overlayParser, report);
+      overlayParser.addValidator(XMLValidators.MO_30_RNC.get());
+      overlayParser.addValidator(XMLValidators.MO_30_SCH.get());
+      overlayParser.addXMLHandler(overlayHandler);
+      overlayParser.process();
+    }
+    catch (IOException e)
+    {
+      report.message(MessageId.RSC_001, new MessageLocation(this.ocf.getName(), -1, -1), path);
+    }
+    finally
+    {
+      try
+      {
+        if (in != null)
+        {
+          in.close();
+        }
+      }
+      catch (Exception ignored)
+      {
+      }
+    }
+
+    return fatalErrorsSoFar == report.getFatalErrorCount()
+        && errorsSoFar == report.getErrorCount()
+        && warningsSoFar == report.getWarningCount();
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/overlay/OverlayCheckerFactory.java b/src/main/java/com/adobe/epubcheck/overlay/OverlayCheckerFactory.java
new file mode 100644
index 0000000..cb6683c
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/overlay/OverlayCheckerFactory.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.overlay;
+
+import java.util.Set;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.ocf.OCFPackage;
+import com.adobe.epubcheck.opf.ContentChecker;
+import com.adobe.epubcheck.opf.ContentCheckerFactory;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.opf.DocumentValidatorFactory;
+import com.adobe.epubcheck.opf.XRefChecker;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.GenericResourceProvider;
+
+public class OverlayCheckerFactory implements ContentCheckerFactory,
+    DocumentValidatorFactory
+{
+
+  public ContentChecker newInstance(OCFPackage ocf, Report report,
+      String path, String mimeType, String properties,
+      XRefChecker xrefChecker, EPUBVersion version, Set<String> types)
+  {
+    return new OverlayChecker(ocf, report, path, xrefChecker, version);
+  }
+
+  static private final OverlayCheckerFactory instance = new OverlayCheckerFactory();
+
+  static public OverlayCheckerFactory getInstance()
+  {
+    return instance;
+  }
+
+  public DocumentValidator newInstance(Report report, String path,
+      GenericResourceProvider resourceProvider, String mimeType,
+      EPUBVersion version)
+  {
+
+    return new OverlayChecker(path, resourceProvider, report);
+  }
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/overlay/OverlayHandler.java b/src/main/java/com/adobe/epubcheck/overlay/OverlayHandler.java
new file mode 100644
index 0000000..3727cd1
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/overlay/OverlayHandler.java
@@ -0,0 +1,134 @@
+package com.adobe.epubcheck.overlay;
+
+import java.util.Map;
+import java.util.Set;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.opf.OPFChecker30;
+import com.adobe.epubcheck.opf.XRefChecker;
+import com.adobe.epubcheck.util.EpubConstants;
+import com.adobe.epubcheck.util.HandlerUtil;
+import com.adobe.epubcheck.util.PathUtil;
+import com.adobe.epubcheck.vocab.StructureVocab;
+import com.adobe.epubcheck.vocab.Vocab;
+import com.adobe.epubcheck.vocab.VocabUtil;
+import com.adobe.epubcheck.xml.XMLElement;
+import com.adobe.epubcheck.xml.XMLHandler;
+import com.adobe.epubcheck.xml.XMLParser;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+
+public class OverlayHandler implements XMLHandler
+{
+
+  private static Map<String, Vocab> RESERVED_VOCABS = ImmutableMap.of("", StructureVocab.VOCAB);
+  private static Map<String, Vocab> KNOWN_VOCAB_URIS = ImmutableMap.of();
+  private static Set<String> DEFAULT_VOCAB_URIS = ImmutableSet.of(StructureVocab.URI);
+
+  private final String path;
+
+  private final XRefChecker xrefChecker;
+
+  private final Report report;
+
+  private final XMLParser parser;
+
+  private boolean checkedUnsupportedXMLVersion;
+  
+  private Map<String,Vocab> vocabs = RESERVED_VOCABS;
+
+  public OverlayHandler(String path, XRefChecker xrefChecker, XMLParser parser, Report report)
+  {
+    this.path = path;
+    this.xrefChecker = xrefChecker;
+    this.report = report;
+    this.parser = parser;
+    checkedUnsupportedXMLVersion = false;
+  }
+
+  public void startElement()
+  {
+    if (!checkedUnsupportedXMLVersion)
+    {
+      HandlerUtil.checkXMLVersion(parser);
+      checkedUnsupportedXMLVersion = true;
+    }
+
+    XMLElement e = parser.getCurrentElement();
+    String name = e.getName();
+
+    if (name.equals("smil"))
+    {
+      vocabs = VocabUtil.parsePrefixDeclaration(e.getAttributeNS(EpubConstants.EpubTypeNamespaceUri, "prefix"), RESERVED_VOCABS,
+          KNOWN_VOCAB_URIS, DEFAULT_VOCAB_URIS, report,
+          new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()));
+    } else if (name.equals("seq"))
+    {
+      processSeq(e);
+    } else if (name.equals("text"))
+    {
+      processSrc(e);
+    } else if (name.equals("audio"))
+    {
+      processRef(e.getAttribute("src"), XRefChecker.RT_AUDIO);
+    } else if (name.equals("body") || name.equals("par"))
+    {
+      checkType(e.getAttributeNS(EpubConstants.EpubTypeNamespaceUri, "type"));
+    }
+  }
+
+  private void checkType(String type)
+  {
+    VocabUtil.parsePropertyList(type, vocabs, report,
+        new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()));
+  }
+
+  private void processSrc(XMLElement e)
+  {
+    processRef(e.getAttribute("src"), XRefChecker.RT_HYPERLINK);
+
+  }
+
+  private void processRef(String ref, int type)
+  {
+    if (ref != null && xrefChecker != null)
+    {
+      ref = PathUtil.resolveRelativeReference(path, ref, null);
+      if (type == XRefChecker.RT_AUDIO)
+      {
+        String mimeType = xrefChecker.getMimeType(ref);
+        if (mimeType != null && !OPFChecker30.isBlessedAudioType(mimeType))
+        {
+          report.message(MessageId.MED_005,
+              new MessageLocation(path, parser.getLineNumber(), parser.getColumnNumber()), ref, mimeType);
+        }
+      }
+      xrefChecker.registerReference(path, parser.getLineNumber(), parser.getColumnNumber(), ref, type);
+    }
+  }
+
+  private void processSeq(XMLElement e)
+  {
+    processRef(e.getAttributeNS(EpubConstants.EpubTypeNamespaceUri, "textref"), XRefChecker.RT_HYPERLINK);
+    checkType(e.getAttributeNS(EpubConstants.EpubTypeNamespaceUri, "type"));
+  }
+
+  public void characters(char[] chars, int arg1, int arg2)
+  {
+  }
+
+  public void endElement()
+  {
+  }
+
+  public void ignorableWhitespace(char[] chars, int arg1, int arg2)
+  {
+  }
+
+  public void processingInstruction(String arg0, String arg1)
+  {
+  }
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/reporting/CheckMessage.java b/src/main/java/com/adobe/epubcheck/reporting/CheckMessage.java
new file mode 100644
index 0000000..77e0354
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/reporting/CheckMessage.java
@@ -0,0 +1,205 @@
+package com.adobe.epubcheck.reporting;
+
+import com.adobe.epubcheck.messages.Message;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.messages.Severity;
+import org.codehaus.jackson.annotate.JsonProperty;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+ at SuppressWarnings("FieldCanBeLocal")
+public class CheckMessage implements Comparable<CheckMessage>
+{
+  private static final int MAX_LOCATIONS = 25;
+  @JsonProperty
+  private final String ID;
+  @JsonProperty
+  private final Severity severity;
+  @JsonProperty
+  private String message;
+  @JsonProperty
+  private int additionalLocations = 0;
+  @JsonProperty
+  private final List<MessageLocation> locations = new ArrayList<MessageLocation>();
+  @JsonProperty
+  private final String suggestion;
+
+  private CheckMessage(Message message, MessageLocation location, Object... args)
+  {
+    this.ID = message.getID().toString();
+    this.message = message.getMessage(args);
+    this.locations.add(location);
+    this.severity = message.getSeverity();
+    this.suggestion = ("".equals(message.getSuggestion())) ? null : message.getSuggestion();
+  }
+
+  public static CheckMessage addCheckMessage(List<CheckMessage> checkMessages, Message message, MessageLocation location, Object... args)
+  {
+    CheckMessage result = findCheckMessage(checkMessages, message.getID().toString(), message.getMessage(args));
+    if (result == null)
+    {
+      result = new CheckMessage(message, location, args);
+      checkMessages.add(result);
+    }
+    else
+    {
+      result.addLocation(location);
+    }
+    return result;
+  }
+
+  void addLocation(MessageLocation location)
+  {
+    if (this.findLocation(location) == null)
+    {
+      if (this.locations.size() == CheckMessage.MAX_LOCATIONS)
+      {
+        ++additionalLocations;
+        this.locations.add(new MessageLocation("There is 1 additional location for this message.", -1, -1));
+      }
+      else if (this.locations.size() < CheckMessage.MAX_LOCATIONS)
+      {
+        this.locations.add(location);
+      }
+      else
+      {
+        ++additionalLocations;
+        MessageLocation infoLocation = this.locations.get(this.locations.size() - 1);
+        infoLocation.setFileName(String.format("There are %1$s additional locations for this message.", additionalLocations));
+      }
+    }
+  }
+
+  private static CheckMessage findCheckMessage(List<CheckMessage> checkMessages, String id, String text)
+  {
+    for (CheckMessage message : checkMessages)
+    {
+      if (message.ID.equals(id))
+      {
+        if (message.message.equals(text))
+        {
+          return message;
+        }
+      }
+    }
+    return null;
+  }
+
+  public Severity getSeverity()
+  {
+    return this.severity;
+  }
+
+  private MessageLocation findLocation(MessageLocation location)
+  {
+    for (MessageLocation l : this.locations)
+    {
+      if (l.equals(location))
+      {
+        return l;
+      }
+    }
+    return null;
+  }
+
+  public String toString()
+  {
+    MessageLocation location = this.locations.get(this.locations.size() - 1);
+    String lineSeparator = System.getProperty("line.separator");
+    String text;
+    text = "ID: " + ID + lineSeparator
+        + "SEVERITY: " + (severity != null ? severity : "-UNDEFINED-")
+        + lineSeparator
+        + lineSeparator
+        + "ERRONEOUS FILE NAME: " + location.getFileName()
+        + lineSeparator;
+    if (location.getLine() > 0
+        && location.getColumn() > 0)
+    {
+      text += "LINE NUMBER: " + location.getLine() + lineSeparator;
+    }
+    text += "COLUMN NUMBER: " + location.getColumn() + lineSeparator;
+    text += "DESCRIPTION (long): " + this.message + lineSeparator;
+    text += "=========================================================================================================================="
+        + lineSeparator;
+
+    return text;
+  }
+
+  int safeCompare(String a, String b)
+  {
+    if (a == null && b != null) return -1;
+    if (a != null && b == null) return 1;
+    if (a == null /* && b == null */) return 0;
+    return a.compareTo(b);
+  }
+
+  @Override
+  public int compareTo(CheckMessage o)
+  {
+    int comp = safeCompare(this.ID, o.ID);
+    if (comp != 0)
+    {
+      return comp;
+    }
+
+    comp = severity.toInt() - o.severity.toInt();
+    if (comp != 0)
+    {
+      return comp < 0 ? -1 : 1;
+    }
+
+    comp = safeCompare(message, o.message);
+    if (comp != 0)
+    {
+      return comp;
+    }
+
+    comp = safeCompare(suggestion, o.suggestion);
+    if (comp != 0)
+    {
+      return comp;
+    }
+
+    comp = additionalLocations - o.additionalLocations;
+    if (comp != 0)
+    {
+      return comp < 0 ? -1 : 1;
+    }
+
+    comp = (locations.size() - o.locations.size());
+    if (comp != 0)
+    {
+      return comp < 0 ? -1 : 1;
+    }
+
+    return 0;
+  }
+
+  public void sortLocations()
+  {
+    Collections.sort(locations);
+  }
+
+public String getID() {
+	return ID;
+}
+
+public String getMessage() {
+	return message;
+}
+
+public int getAdditionalLocations() {
+	return additionalLocations;
+}
+
+public List<MessageLocation> getLocations() {
+	return locations;
+}
+
+public String getSuggestion() {
+	return suggestion;
+}
+}
diff --git a/src/main/java/com/adobe/epubcheck/reporting/CheckerMetadata.java b/src/main/java/com/adobe/epubcheck/reporting/CheckerMetadata.java
new file mode 100644
index 0000000..7cc10e8
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/reporting/CheckerMetadata.java
@@ -0,0 +1,116 @@
+package com.adobe.epubcheck.reporting;
+
+import com.adobe.epubcheck.util.PathUtil;
+import com.adobe.epubcheck.util.outWriter;
+import org.codehaus.jackson.annotate.JsonProperty;
+
+import java.io.File;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * This describes properties about the checker.  It is intended to be serialized into json.
+ */
+ at SuppressWarnings("FieldCanBeLocal")
+class CheckerMetadata
+{
+  @JsonProperty
+  private String path;
+  @JsonProperty
+  private String filename;
+  @JsonProperty
+  private String checkerVersion;
+  @JsonProperty
+  private String checkDate;
+  @JsonProperty
+  private long elapsedTime = -1; // Elapsed Time in Seconds
+  @JsonProperty
+  private int nFatal = 0;
+  @JsonProperty
+  private int nError = 0;
+  @JsonProperty
+  private int nWarning = 0;
+  @JsonProperty
+  private int nUsage = 0;
+
+  private final String workingDirectory  = System.getProperty("user.dir");
+
+  public void setFileInfo(File epubFile)
+  {
+    this.path = PathUtil.removeWorkingDirectory(epubFile.getAbsolutePath());
+    this.filename = epubFile.getName();
+  }
+
+  private Date processStartDateTime;
+  private Date processEndDateTime;
+  private static final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");
+
+  public CheckerMetadata()
+  {
+
+  }
+
+  public void setCheckerVersion(String value)
+  {
+    this.checkerVersion = value;
+    //this.checkerVersion = "${pom.version}";
+  }
+
+  public long getProcessDuration()
+  {
+    if (elapsedTime == -1)
+    {
+      setElapsedTime();
+    }
+
+    return this.elapsedTime;
+  }
+
+  public void setStartDate()
+  {
+    this.processStartDateTime = new Date();
+    this.checkDate = CheckerMetadata.dateFormat.format(this.processStartDateTime);
+  }
+
+  public void setStopDate()
+  {
+    this.processEndDateTime = new Date();
+    this.setElapsedTime();
+  }
+
+  private void setElapsedTime()
+  {
+    this.elapsedTime = this.processEndDateTime.getTime()
+        - this.processStartDateTime.getTime();
+  }
+
+  public void setMessageTypes(List<CheckMessage> messages)
+  {
+    for (CheckMessage message : messages)
+    {
+      if (message.getSeverity() != null)
+      {
+        switch (message.getSeverity())
+        {
+          case FATAL:
+            nFatal++;
+            break;
+          case ERROR:
+            nError++;
+            break;
+          case WARNING:
+            nWarning++;
+            break;
+          case USAGE:
+            nUsage++;
+            break;
+        }
+      }
+      else
+      {
+        outWriter.print("message with no severity");
+      }
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/reporting/CheckingReport.java b/src/main/java/com/adobe/epubcheck/reporting/CheckingReport.java
new file mode 100644
index 0000000..4ad72bb
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/reporting/CheckingReport.java
@@ -0,0 +1,206 @@
+package com.adobe.epubcheck.reporting;
+
+import com.adobe.epubcheck.api.EpubCheck;
+import com.adobe.epubcheck.api.MasterReport;
+import com.adobe.epubcheck.messages.Message;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.util.FeatureEnum;
+import com.adobe.epubcheck.util.JsonWriter;
+import com.adobe.epubcheck.util.PathUtil;
+import com.adobe.epubcheck.util.outWriter;
+import org.codehaus.jackson.annotate.JsonProperty;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.*;
+
+public class CheckingReport extends MasterReport
+{
+  @JsonProperty
+  final CheckerMetadata checker;
+
+  @JsonProperty
+  final PublicationMetadata publication;
+
+  Map<String, ItemMetadata> itemIndex = null;
+
+  @JsonProperty
+  List<ItemMetadata> items = null;
+
+  @JsonProperty
+  final List<CheckMessage> messages = new ArrayList<CheckMessage>();
+
+  final String outputFile;
+
+  public CheckingReport(String epubPath, String outFile)
+  {
+    this.checker = new CheckerMetadata();
+    this.publication = new PublicationMetadata();
+    this.outputFile = outFile;
+    this.setEpubFileName(epubPath);
+  }
+
+  void setParameters()
+  {
+    outWriter.println("Epub Name: " + PathUtil.removeWorkingDirectory(this.getEpubFileName()));
+    this.checker.setCheckerVersion(EpubCheck.version());
+    File f = new File(this.getEpubFileName());
+    this.checker.setFileInfo(f);
+    this.checker.setMessageTypes(this.messages);
+    boolean defaultFixedFormat = this.publication.getRenditionLayout().equals("pre-paginated");
+    for (ItemMetadata item : this.getItems())
+    {
+      String id = item.getId();
+      if (id == null || id.equals(""))
+      {
+        item.setId("ePubCheck.NoManifestRef:" + item.getFileName());
+      }
+
+      if (item.getIsSpineItem())
+      {
+        String layout = item.getRenditionLayout();
+        if (layout == null || layout.equals(""))
+        {
+          item.setRenditionLayout(this.publication.getRenditionLayout());
+        }
+
+        String orientation = item.getRenditionOrientation();
+        if (orientation == null || orientation.equals(""))
+        {
+          item.setRenditionOrientation(this.publication.getRenditionOrientation());
+        }
+
+        String spread = item.getRenditionSpread();
+        if (spread == null || spread.equals(""))
+        {
+          item.setRenditionSpread(this.publication.getRenditionSpread());
+        }
+
+        Boolean isFixed = item.getIsFixedFormat();
+        if (isFixed == null)
+        {
+          item.setIsFixedFormat(defaultFixedFormat);
+        }
+      }
+    }
+  }
+
+  public int generate()
+  {
+    this.setStopDate();
+    this.setParameters();
+    try
+    {
+      this.getJsonReport(this.outputFile);
+    }
+    catch (IOException e)
+    {
+      outWriter.println("Incorrect path to save JsonFile.");
+      return 1;
+    }
+
+    long duration = this.getProcessDuration();
+    outWriter.println("Process duration: " + duration + "ms");
+    return 0;
+  }
+
+  public void initialize()
+  {
+    this.setStartDate();
+  }
+
+  void getJsonReport(String path) throws
+      IOException
+  {
+    sortCollections();
+    FileOutputStream out = null;
+    try
+    {
+      out = new FileOutputStream(path);
+      JsonWriter jw = JsonWriter.createJsonWriter(true);
+      jw.writeJson(this, out);
+    }
+    finally
+    {
+      if (out != null)
+      {
+        out.close();
+      }
+    }
+  }
+
+  void sortCollections()
+  {
+    Collections.sort(getItems());
+    Collections.sort(messages);
+    for (CheckMessage m : messages)
+    {
+      m.sortLocations();
+    }
+
+  }
+  long getProcessDuration()
+  {
+    return this.checker.getProcessDuration();
+  }
+
+  void setStartDate()
+  {
+    this.checker.setStartDate();
+  }
+
+  void setStopDate()
+  {
+    this.checker.setStopDate();
+  }
+
+  @Override
+  public void message(Message message, MessageLocation location, Object... args)
+  {
+    CheckMessage.addCheckMessage(messages, message, location, args);
+  }
+
+  @Override
+  public void info(String resource, FeatureEnum feature, String value)
+  {
+    this.publication.handleInfo(resource, feature, value);
+    if (resource != null && !resource.equals(""))
+    {
+      ItemMetadata item = ItemMetadata.getItemByName(getItemIndex(), resource);
+      item.handleInfo(feature, value);
+    }
+  }
+
+  List<ItemMetadata> getItems()
+  {
+    if (this.items == null)
+    {
+      if (this.itemIndex != null)
+      {
+        this.items = new ArrayList<ItemMetadata>(itemIndex.values());
+      }
+      else
+      {
+        this.items = new ArrayList<ItemMetadata>();
+      }
+    }
+    return items;
+  }
+
+  Map<String, ItemMetadata> getItemIndex()
+  {
+    if (this.itemIndex == null)
+    {
+      this.itemIndex = new HashMap<String, ItemMetadata>();
+      if (this.items != null && this.items.size() > 0)
+      {
+        for (ItemMetadata item : items)
+        {
+          itemIndex.put(item.getFileName(), item);
+        }
+      }
+    }
+    return itemIndex;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/reporting/ItemMetadata.java b/src/main/java/com/adobe/epubcheck/reporting/ItemMetadata.java
new file mode 100644
index 0000000..69620e2
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/reporting/ItemMetadata.java
@@ -0,0 +1,215 @@
+package com.adobe.epubcheck.reporting;
+
+import com.adobe.epubcheck.util.FeatureEnum;
+import org.codehaus.jackson.annotate.JsonProperty;
+
+import java.util.HashSet;
+import java.util.Map;
+
+ at SuppressWarnings("FieldCanBeLocal")
+public class ItemMetadata implements Comparable<ItemMetadata>
+{
+  @JsonProperty
+  private String id = "";
+  @JsonProperty
+  private String fileName;
+  @JsonProperty
+  private String media_type;
+  @JsonProperty
+  private long compressedSize;
+  @JsonProperty
+  private long uncompressedSize;
+  @JsonProperty
+  private String compressionMethod;
+  @JsonProperty
+  private String checkSum;
+  @JsonProperty
+  private boolean isSpineItem;
+  @JsonProperty
+  private Integer spineIndex;
+  @JsonProperty
+  private boolean isLinear;
+  @JsonProperty
+  private Integer navigationOrder = null;
+  @JsonProperty
+  private boolean isHTML5;
+  @JsonProperty
+  private Boolean isFixedFormat = null;
+  @JsonProperty
+  private boolean isScripted;
+  @JsonProperty
+  private boolean scriptSrc;
+  @JsonProperty
+  private boolean scriptTag;
+  @JsonProperty
+  private boolean scriptInline;
+  @JsonProperty
+  private String renditionLayout;
+  @JsonProperty
+  private String renditionOrientation;
+  @JsonProperty
+  private String renditionSpread;
+  @SuppressWarnings("MismatchedQueryAndUpdateOfCollection")
+  @JsonProperty
+  private final HashSet<String> referencedItems = new HashSet<String>();
+
+  public static ItemMetadata getItemByName(Map<String, ItemMetadata> metadata, String fileName)
+  {
+    ItemMetadata result = metadata.get(fileName);
+    if (result == null)
+    {
+      result = new ItemMetadata();
+      result.fileName = fileName;
+      metadata.put(fileName, result);
+    }
+    return result;
+  }
+
+  public String getId()
+  {
+    return this.id;
+  }
+
+  public void setId(String value)
+  {
+    this.id = value;
+  }
+
+  public String getFileName()
+  {
+    return this.fileName;
+  }
+
+  public String getRenditionLayout()
+  {
+    return this.renditionLayout;
+  }
+
+  public void setRenditionLayout(String value)
+  {
+    this.renditionLayout = value;
+  }
+
+  public String getRenditionOrientation()
+  {
+    return this.renditionOrientation;
+  }
+
+  public void setRenditionOrientation(String value)
+  {
+    this.renditionOrientation = value;
+  }
+
+  public String getRenditionSpread()
+  {
+    return this.renditionSpread;
+  }
+
+  public void setRenditionSpread(String value)
+  {
+    this.renditionSpread = value;
+  }
+
+
+  public Boolean getIsFixedFormat()
+  {
+    return this.isFixedFormat;
+  }
+
+  public void setIsFixedFormat(Boolean value)
+  {
+    this.isFixedFormat = value;
+  }
+
+  public boolean getIsSpineItem()
+  {
+    return this.isSpineItem;
+  }
+
+  public void handleInfo(FeatureEnum feature, String value)
+  {
+    switch (feature)
+    {
+      case DECLARED_MIMETYPE:
+        this.media_type = value;
+        break;
+      case HAS_SCRIPTS:
+        this.isScripted = true;
+        break;
+      case HAS_FIXED_LAYOUT:
+        this.isFixedFormat = true;
+        break;
+      case IS_SPINEITEM:
+        this.isSpineItem = true;
+        break;
+      case UNIQUE_IDENT:
+        this.id = value != null ? value : "";
+        break;
+      case IS_LINEAR:
+        this.isLinear = Boolean.parseBoolean(value.trim());
+        break;
+      case RESOURCE:
+        if (!value.equals(this.fileName))
+        {
+          this.referencedItems.add(value);
+        }
+        break;
+      case SIZE:
+        this.uncompressedSize = Long.parseLong(value.trim());
+        break;
+      case COMPRESSED_SIZE:
+        this.compressedSize = Long.parseLong(value.trim());
+        break;
+      case COMPRESSION_METHOD:
+        this.compressionMethod = value;
+        break;
+      case SHA_256:
+        this.checkSum = value;
+        break;
+      case SPINE_INDEX:
+        this.spineIndex = Integer.parseInt(value.trim());
+        break;
+      case HAS_HTML5:
+        this.isHTML5 = true;
+        break;
+      case SCRIPT:
+        if (value.equals("inline"))
+        {
+          this.scriptInline = true;
+        }
+        else if (value.equals("external"))
+        {
+          this.scriptSrc = true;
+        }
+        else if (value.equals("javascript"))
+        {
+          this.scriptSrc = true;
+        }
+        else if (value.equals("tag"))
+        {
+          this.scriptTag = true;
+        }
+        break;
+      case RENDITION_LAYOUT:
+        this.renditionLayout = value;
+        break;
+      case RENDITION_ORIENTATION:
+        this.renditionOrientation = value;
+        break;
+      case RENDITION_SPREAD:
+        this.renditionSpread = value;
+        break;
+      case NAVIGATION_ORDER:
+        this.navigationOrder = Integer.parseInt(value.trim());
+        break;
+      default:
+        //System.err.printf("unhandled info message feature: found '%s' with value '%s'", feature.toString(), value != null ? value : "null");
+        break;
+    }
+  }
+
+  public int compareTo(ItemMetadata item)
+  {
+    return this.id.compareTo(item.id);
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/reporting/PublicationMetadata.java b/src/main/java/com/adobe/epubcheck/reporting/PublicationMetadata.java
new file mode 100644
index 0000000..bfdee62
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/reporting/PublicationMetadata.java
@@ -0,0 +1,197 @@
+package com.adobe.epubcheck.reporting;
+
+import com.adobe.epubcheck.util.FeatureEnum;
+import org.codehaus.jackson.annotate.JsonProperty;
+
+import java.util.ArrayList;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * This is information about the publication in general.  It is intended to be serialized into json.
+ */
+ at SuppressWarnings({"FieldCanBeLocal", "MismatchedQueryAndUpdateOfCollection"})
+class PublicationMetadata
+{
+  @JsonProperty
+  private String publisher;
+  @JsonProperty
+  private String title;
+  @JsonProperty
+  private final List<String> creator = new ArrayList<String>();
+  @JsonProperty
+  private String date;
+  @JsonProperty
+  private final List<String> subject = new ArrayList<String>();
+  @JsonProperty
+  private String description;
+  @JsonProperty
+  private String rights;
+  @JsonProperty
+  private String identifier;
+  @JsonProperty
+  private String language;
+  @JsonProperty
+  private int nSpines;
+  @JsonProperty
+  private long checkSum;
+  @JsonProperty
+  private String renditionLayout = "reflowable";
+  @JsonProperty
+  private String renditionOrientation = "auto";
+  @JsonProperty
+  private String renditionSpread = "auto";
+  @JsonProperty
+  private String ePubVersion;
+  @JsonProperty
+  private boolean isScripted = false;
+  @JsonProperty
+  private boolean hasFixedFormat = false;
+  @JsonProperty
+  private boolean isBackwardCompatible = true;
+  @JsonProperty
+  private boolean hasAudio = false;
+  @JsonProperty
+  private boolean hasVideo = false;
+  @JsonProperty
+  private long charsCount = 0;
+  @JsonProperty
+  private final Set<String> embeddedFonts = new LinkedHashSet<String>();
+  @JsonProperty
+  private final Set<String> refFonts = new LinkedHashSet<String>();
+  @JsonProperty
+  private boolean hasEncryption;
+  @JsonProperty
+  private boolean hasSignatures;
+  @JsonProperty
+  private final Set<String> contributors = new LinkedHashSet<String>();
+
+  public PublicationMetadata()
+  {
+  }
+
+  public String getRenditionLayout()
+  {
+    return this.renditionLayout;
+  }
+
+  public String getRenditionOrientation()
+  {
+    return this.renditionOrientation;
+  }
+
+  public String getRenditionSpread()
+  {
+    return this.renditionSpread;
+  }
+
+  public void handleInfo(String resource, FeatureEnum feature, String value)
+  {
+    switch (feature)
+    {
+      case DC_TITLE:
+        this.title = value;
+        break;
+      case DC_LANGUAGE:
+        this.language = value;
+        break;
+      case DC_PUBLISHER:
+        this.publisher = value;
+        break;
+      case DC_CREATOR:
+        this.creator.add(value);
+        break;
+      case DC_RIGHTS:
+        this.rights = value;
+        break;
+      case DC_SUBJECT:
+        this.subject.add(value);
+        break;
+      case DC_DESCRIPTION:
+        this.description = value;
+        break;
+      case MODIFIED_DATE:
+        this.date = value;
+        break;
+      case UNIQUE_IDENT:
+        if (resource == null)
+        {
+          this.identifier = value;
+        }
+        break;
+      case FORMAT_VERSION:
+        this.ePubVersion = value;
+        break;
+      case HAS_SCRIPTS:
+        this.isScripted = true;
+        this.isBackwardCompatible = false;
+        break;
+      case HAS_FIXED_LAYOUT:
+        this.hasFixedFormat = true;
+        this.isBackwardCompatible = false;
+        break;
+      case HAS_HTML5:
+        if (resource == null)
+        {
+          this.isBackwardCompatible = false;
+        }
+        break;
+      case IS_SPINEITEM:
+        this.nSpines++;
+        break;
+      case HAS_NCX:
+        if (!Boolean.parseBoolean(value))
+        {
+          this.isBackwardCompatible = false;
+        }
+        break;
+      case RENDITION_LAYOUT:
+        if (resource == null)
+        {
+          this.renditionLayout = value;
+        }
+        break;
+      case RENDITION_ORIENTATION:
+        if (resource == null)
+        {
+          this.renditionOrientation = value;
+        }
+        break;
+      case RENDITION_SPREAD:
+        if (resource == null)
+        {
+          this.renditionSpread = value;
+        }
+        break;
+      case CHARS_COUNT:
+        this.charsCount += Long.parseLong(value);
+        break;
+      case DECLARED_MIMETYPE:
+        if (value != null && value.startsWith("audio/"))
+        {
+          this.hasAudio = true;
+        }
+        else if (value != null && value.startsWith("video/"))
+        {
+          this.hasVideo = true;
+        }
+        break;
+      case FONT_EMBEDDED:
+        this.embeddedFonts.add(value);
+        break;
+      case FONT_REFERENCE:
+        this.refFonts.add(value);
+        break;
+      case HAS_SIGNATURES:
+        this.hasSignatures = true;
+        break;
+      case HAS_ENCRYPTION:
+        this.hasEncryption = true;
+        break;
+      case DC_CONTRIBUTOR:
+        this.contributors.add(value);
+        break;
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/tool/Checker.java b/src/main/java/com/adobe/epubcheck/tool/Checker.java
new file mode 100755
index 0000000..45811d4
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/tool/Checker.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ *    <AdobeIP#0000474>
+ */
+
+package com.adobe.epubcheck.tool;
+
+public class Checker
+{
+  public static void main(String[] args)
+  {
+    EpubChecker checker = new EpubChecker();
+    System.exit(checker.run(args));
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/tool/EpubChecker.java b/src/main/java/com/adobe/epubcheck/tool/EpubChecker.java
new file mode 100644
index 0000000..f07180a
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/tool/EpubChecker.java
@@ -0,0 +1,778 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ *    <AdobeIP#0000474>
+ */
+
+package com.adobe.epubcheck.tool;
+
+import com.adobe.epubcheck.api.EpubCheck;
+import com.adobe.epubcheck.api.EpubCheckFactory;
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.nav.NavCheckerFactory;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.opf.DocumentValidatorFactory;
+import com.adobe.epubcheck.opf.OPFCheckerFactory;
+import com.adobe.epubcheck.ops.OPSCheckerFactory;
+import com.adobe.epubcheck.overlay.OverlayCheckerFactory;
+import com.adobe.epubcheck.reporting.CheckingReport;
+import com.adobe.epubcheck.util.*;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.util.HashMap;
+import java.util.Map;
+
+public class EpubChecker
+{
+
+  String path = null;
+  String mode = null;
+  EPUBVersion version = EPUBVersion.VERSION_3;
+  boolean expanded = false;
+  boolean keep = false;
+  boolean jsonOutput = false;
+  boolean xmlOutput = false;
+  boolean xmpOutput = false;
+  File fileOut;
+  File listChecksOut;
+  File customMessageFile;
+  boolean listChecks = false;
+  boolean useCustomMessageFile = false;
+  boolean failOnWarnings = false;
+
+  int reportingLevel = ReportingLevel.Info;
+
+  private static final HashMap<OPSType, String> modeMimeTypeMap;
+
+  static
+  {
+    HashMap<OPSType, String> map = new HashMap<OPSType, String>();
+
+    map.put(new OPSType("xhtml", EPUBVersion.VERSION_2), "application/xhtml+xml");
+    map.put(new OPSType("xhtml", EPUBVersion.VERSION_3), "application/xhtml+xml");
+
+    map.put(new OPSType("svg", EPUBVersion.VERSION_2), "image/svg+xml");
+    map.put(new OPSType("svg", EPUBVersion.VERSION_3), "image/svg+xml");
+
+    map.put(new OPSType("mo", EPUBVersion.VERSION_3), "application/smil+xml");
+    map.put(new OPSType("nav", EPUBVersion.VERSION_3), "nav");
+    modeMimeTypeMap = map;
+  }
+
+  private static final HashMap<OPSType, DocumentValidatorFactory> documentValidatorFactoryMap;
+  private static final String E_PUB_CHECK_CUSTOM_MESSAGE_FILE = "ePubCheckCustomMessageFile";
+
+  static
+  {
+    HashMap<OPSType, DocumentValidatorFactory> map = new HashMap<OPSType, DocumentValidatorFactory>();
+    map.put(new OPSType(null, EPUBVersion.VERSION_2), EpubCheckFactory.getInstance());
+    map.put(new OPSType(null, EPUBVersion.VERSION_3), EpubCheckFactory.getInstance());
+    map.put(new OPSType("opf", EPUBVersion.VERSION_2), OPFCheckerFactory.getInstance());
+    map.put(new OPSType("opf", EPUBVersion.VERSION_3), OPFCheckerFactory.getInstance());
+    map.put(new OPSType("xhtml", EPUBVersion.VERSION_2), OPSCheckerFactory.getInstance());
+    map.put(new OPSType("xhtml", EPUBVersion.VERSION_3), OPSCheckerFactory.getInstance());
+    map.put(new OPSType("svg", EPUBVersion.VERSION_2), OPSCheckerFactory.getInstance());
+    map.put(new OPSType("svg", EPUBVersion.VERSION_3), OPSCheckerFactory.getInstance());
+    map.put(new OPSType("mo", EPUBVersion.VERSION_3), OverlayCheckerFactory.getInstance());
+    map.put(new OPSType("nav", EPUBVersion.VERSION_3), NavCheckerFactory.getInstance());
+
+    documentValidatorFactoryMap = map;
+  }
+
+  int validateFile(String path, EPUBVersion version, Report report)
+  {
+    GenericResourceProvider resourceProvider;
+
+    if (path.startsWith("http://") || path.startsWith("https://"))
+    {
+      resourceProvider = new URLResourceProvider(path);
+    }
+    else
+    {
+      File f = new File(path);
+      if (f.exists())
+      {
+        resourceProvider = new FileResourceProvider(path);
+      }
+      else
+      {
+        System.err.println(String.format(Messages.get("file_not_found"), path));
+        return 1;
+      }
+    }
+
+    OPSType opsType = new OPSType(mode, version);
+
+    DocumentValidatorFactory factory = documentValidatorFactoryMap.get(opsType);
+
+    if (factory == null)
+    {
+      outWriter.println(Messages.get("display_help"));
+      System.err.println(String.format(
+          Messages.get("mode_version_not_supported"), mode, version));
+
+      throw new RuntimeException(String.format(Messages.get("mode_version_not_supported"), mode, version));
+    }
+
+    DocumentValidator check = factory.newInstance(report, path,
+        resourceProvider, modeMimeTypeMap.get(opsType),
+        version);
+    if (check.getClass() == EpubCheck.class)
+    {
+      int validationResult = ((EpubCheck)check).doValidate();
+      if (validationResult == 0)
+      {
+        outWriter.println(Messages.get("no_errors__or_warnings"));
+        return 0;
+      }
+      else if (validationResult == 1)
+      {
+        System.err.println(Messages.get("there_were_warnings"));
+        return failOnWarnings ? 1 : 0;
+      }
+      System.err.println(Messages.get("there_were_errors"));
+      return 1;
+    }
+    else
+    {
+      if (check.validate())
+      {
+        outWriter.println(Messages.get("no_errors__or_warnings"));
+        return 0;
+      }
+      System.err.println(Messages.get("there_were_errors"));
+    }
+    return 1;
+  }
+
+
+  int validateEpubFile(String path, EPUBVersion version, Report report)
+  {
+    GenericResourceProvider resourceProvider;
+
+    if (path.startsWith("http://") || path.startsWith("https://"))
+    {
+      resourceProvider = new URLResourceProvider(path);
+    }
+    else
+    {
+      File f = new File(path);
+      if (f.exists())
+      {
+        resourceProvider = new FileResourceProvider(path);
+      }
+      else
+      {
+        System.err.println(String.format(Messages.get("file_not_found"), path));
+        return 1;
+      }
+    }
+
+    OPSType opsType = new OPSType(mode, version);
+
+    DocumentValidatorFactory factory = documentValidatorFactoryMap.get(opsType);
+
+    if (factory == null)
+    {
+      outWriter.println(Messages.get("display_help"));
+      System.err.println(String.format(
+          Messages.get("mode_version_not_supported"), mode, version));
+
+      throw new RuntimeException(String.format(Messages.get("mode_version_not_supported"), mode, version));
+    }
+
+    DocumentValidator check = factory.newInstance(report, path,
+        resourceProvider, modeMimeTypeMap.get(opsType),
+        version);
+
+    if (check.validate())
+    {
+      outWriter.println(Messages.get("no_errors__or_warnings"));
+      return 0;
+    }
+    System.err.println(Messages.get("there_were_errors"));
+
+    return 1;
+  }
+
+
+  public int run(String[] args)
+  {
+    int returnValue = 1;
+    try
+    {
+      if (processArguments(args))
+      {
+        Report report = createReport();
+        report.initialize();
+        if (listChecks)
+        {
+          dumpMessageDictionary(report);
+          return 0;
+        }
+        if (useCustomMessageFile)
+        {
+          report.setCustomMessageFile(customMessageFile.getAbsolutePath());
+        }
+        returnValue = processFile(report);
+        int returnValue2 = report.generate();
+        if (returnValue == 0)
+        {
+          returnValue = returnValue2;
+        }
+      }
+    }
+    catch (Exception ignored)
+    {
+      returnValue = 1;
+    }
+    finally
+    {
+      outWriter.println(Messages.get("epubcheck_completed"));
+      outWriter.setQuiet(false);
+    }
+    return returnValue;
+  }
+
+  private void dumpMessageDictionary(Report report) throws
+      IOException
+  {
+    OutputStreamWriter fw = null;
+    try
+    {
+      if (listChecksOut != null)
+      {
+        fw = new FileWriter(listChecksOut);
+      }
+      else
+      {
+        fw = new OutputStreamWriter(System.out);
+      }
+      report.getDictionary().dumpMessages(fw);
+    }
+    catch (Exception e)
+    {
+      if (listChecksOut != null)
+      {
+        System.err.println(String.format(Messages.get("error_creating_config_file"), listChecksOut.getAbsoluteFile()));
+      }
+      System.err.println(e.getMessage());
+    }
+    finally
+    {
+      if (fw != null)
+      {
+        try
+        {
+          fw.close();
+        }
+        catch (IOException ignored)
+        {
+        }
+      }
+    }
+  }
+
+  private Report createReport() throws
+      IOException
+  {
+    Report report;
+    if (listChecks)
+    {
+      report = new DefaultReportImpl("none");
+    }
+    else if (jsonOutput)
+    {
+      report = new CheckingReport(path, fileOut.getPath());
+    }
+    else if (xmlOutput)
+    {
+      report = new XmlReportImpl(fileOut, path, EpubCheck.version());
+    }
+    else if (xmpOutput)
+    {
+      report = new XmpReportImpl(fileOut, path, EpubCheck.version());
+    }
+    else
+    {
+      report = new DefaultReportImpl(path);
+    }
+    report.setReportingLevel(this.reportingLevel);
+    if (useCustomMessageFile)
+    {
+      report.setOverrideFile(customMessageFile);
+    }
+
+    return report;
+  }
+
+  public int processEpubFile(String[] args)
+  {
+    int returnValue = 1;
+    try
+    {
+      if (processArguments(args))
+      {
+        Report report = createReport();
+        report.initialize();
+        if (listChecks)
+        {
+          dumpMessageDictionary(report);
+          return 0;
+        }
+        if (useCustomMessageFile)
+        {
+          report.setCustomMessageFile(customMessageFile.getAbsolutePath());
+        }
+        returnValue = processEpubFile(report);
+        int returnValue2 = report.generate();
+        if (returnValue == 0)
+        {
+          returnValue = returnValue2;
+        }
+      }
+    }
+    catch (Exception ignored)
+    {
+      returnValue = 1;
+    }
+    finally
+    {
+      outWriter.println(Messages.get("epubcheck_completed"));
+      outWriter.setQuiet(false);
+    }
+    return returnValue;
+  }
+
+  int processEpubFile(Report report)
+  {
+    report.info(null, FeatureEnum.TOOL_NAME, "epubcheck");
+    report.info(null, FeatureEnum.TOOL_VERSION, EpubCheck.version());
+    report.info(null, FeatureEnum.TOOL_DATE, EpubCheck.buildDate());
+    int result;
+
+    try
+    {
+      if (!expanded)
+      {
+        if (mode != null)
+        {
+          report.info(null, FeatureEnum.EXEC_MODE, String.format(Messages.get("single_file"), mode, version.toString()));
+        }
+        result = validateFile(path, version, report);
+      }
+      else
+      {
+        System.err.println(Messages.get("error_processing_unexpanded_epub"));
+        return 1;
+      }
+
+      return result;
+    }
+    catch (Throwable e)
+    {
+      e.printStackTrace();
+      return 1;
+    }
+    finally
+    {
+      report.close();
+    }
+  }
+
+  private int processFile(Report report)
+  {
+    report.info(null, FeatureEnum.TOOL_NAME, "epubcheck");
+    report.info(null, FeatureEnum.TOOL_VERSION, EpubCheck.version());
+    report.info(null, FeatureEnum.TOOL_DATE, EpubCheck.buildDate());
+    int result = 0;
+
+    try
+    {
+      if (expanded)
+      {
+        Archive epub;
+
+        try
+        {
+          epub = new Archive(path, true);
+        }
+        catch (RuntimeException ex)
+        {
+          System.err.println(Messages.get("there_were_errors"));
+          return 1;
+        }
+
+        epub.createArchive();
+        report.setEpubFileName(epub.getEpubFile().getAbsolutePath());
+        EpubCheck check = new EpubCheck(epub.getEpubFile(), report);
+        int validationResult = check.doValidate();
+        if (validationResult == 0)
+        {
+          outWriter.println(Messages.get("no_errors__or_warnings"));
+          result = 0;
+        }
+        else if (validationResult == 1)
+        {
+          System.err.println(Messages.get("there_were_warnings"));
+          result = failOnWarnings ? 1 : 0;
+        }
+        else if (validationResult >= 2)
+        {
+          System.err.println(Messages.get("there_were_errors"));
+          result = 1;
+        }
+
+        if (keep)
+        {
+          if ((report.getErrorCount() > 0) || (report.getFatalErrorCount() > 0))
+          {
+            //keep if valid or only warnings
+            System.err.println(Messages.get("deleting_archive"));
+            epub.deleteEpubFile();
+          }
+        }
+        else
+        {
+          epub.deleteEpubFile();
+        }
+      }
+      else
+      {
+        if (mode != null)
+        {
+          report.info(null, FeatureEnum.EXEC_MODE, String.format(Messages.get("single_file"), mode, version.toString()));
+        }
+        result = validateFile(path, version, report);
+      }
+
+      return result;
+    }
+    catch (Throwable e)
+    {
+      e.printStackTrace();
+      return 1;
+    }
+    finally
+    {
+      report.close();
+    }
+  }
+
+  /**
+   * This method iterates through all of the arguments passed to main to find
+   * accepted flags and the name of the file to check. This method returns the
+   * last argument that ends with ".epub" (which is assumed to be the file to
+   * check) Here are the currently accepted flags: <br>
+   * <br>
+   * -? or -help = display usage instructions <br>
+   * -v or -version = display tool version number
+   *
+   * @param args String[] containing arguments passed to main
+   * @return the name of the file to check
+   */
+  private boolean processArguments(String[] args)
+  {
+    // Exit if there are no arguments passed to main
+    if (args.length < 1)
+    {
+      System.err.println(Messages.get("argument_needed"));
+      return false;
+    }
+
+    setCustomMessageFileFromEnvironment();
+    for (int i = 0; i < args.length; i++)
+    {
+      if (args[i].equals("--version") || args[i].equals("-version") || args[i].equals("-v"))
+      {
+        if (i + 1 < args.length)
+        {
+          ++i;
+          if (args[i].equals("2.0") || args[i].equals("2"))
+          {
+            version = EPUBVersion.VERSION_2;
+          }
+          else if (args[i].equals("3.0") || args[i].equals("3"))
+          {
+            version = EPUBVersion.VERSION_3;
+          }
+          else
+          {
+            outWriter.println(Messages.get("display_help"));
+            throw new RuntimeException(new InvalidVersionException(
+                InvalidVersionException.UNSUPPORTED_VERSION));
+          }
+        }
+        else
+        {
+          outWriter.println(Messages.get("display_help"));
+          throw new RuntimeException(Messages.get("version_argument_expected"));
+        }
+      }
+      else if (args[i].equals("--mode") || args[i].equals("-mode") || args[i].equals("-m"))
+      {
+        if (i + 1 < args.length)
+        {
+          mode = args[++i];
+          expanded = mode.equals("exp");
+        }
+        else
+        {
+          outWriter.println(Messages.get("display_help"));
+          throw new RuntimeException(Messages.get("mode_argument_expected"));
+        }
+      }
+      else if (args[i].equals("--save") || args[i].equals("-save") || args[i].equals("-s"))
+      {
+        keep = true;
+      }
+      else if (args[i].equals("--out") || args[i].equals("-out") || args[i].equals("-o"))
+      {
+        if ((args.length > (i + 1)) && !(args[i+1].startsWith("-")))
+        {
+          fileOut = new File(args[++i]);
+        }
+        else
+        {
+          File pathFile = new File(path);
+          if (pathFile.isDirectory())
+          {
+            fileOut = new File(pathFile.getAbsoluteFile().getParentFile(), pathFile.getName() + "check.xml");
+          }
+          else
+          {
+            fileOut = new File(path + "check.xml");
+          }
+        }
+        xmlOutput = true;
+      }
+      else if (args[i].equals("--json") || args[i].equals("-json") || args[i].equals("-j"))
+      {
+        if ((args.length > (i + 1)) && !(args[i+1].startsWith("-")))
+        {
+          fileOut = new File(args[++i]);
+        }
+        else
+        {
+          File pathFile = new File(path);
+          if (pathFile.isDirectory())
+          {
+            fileOut = new File(pathFile.getAbsoluteFile().getParentFile(), pathFile.getName() + "check.json");
+          }
+          else
+          {
+            fileOut = new File(path + "check.json");
+          }
+        }
+        jsonOutput = true;
+      }
+      else if (args[i].equals("--xmp") || args[i].equals("-xmp") || args[i].equals("-x"))
+      {
+        if ((args.length > (i + 1)) && !(args[i+1].startsWith("-")))
+        {
+          fileOut = new File(args[++i]);
+        }
+        else
+        {
+          File pathFile = new File(path);
+          if (pathFile.isDirectory())
+          {
+            fileOut = new File(pathFile.getAbsoluteFile().getParentFile(), pathFile.getName() + "check.xmp");
+          }
+          else
+          {
+            fileOut = new File(path + "check.xmp");
+          }
+        }
+        xmpOutput = true;
+      }
+      else if (args[i].equals("--info") || args[i].equals("-i"))
+      {
+        reportingLevel = ReportingLevel.Info;
+      }
+      else if (args[i].equals("--fatal") || args[i].equals("-f"))
+      {
+        reportingLevel = ReportingLevel.Fatal;
+      }
+      else if (args[i].equals("--error") || args[i].equals("-e"))
+      {
+        reportingLevel = ReportingLevel.Error;
+      }
+      else if (args[i].equals("--warn") || args[i].equals("-w"))
+      {
+        reportingLevel = ReportingLevel.Warning;
+      }
+      else if (args[i].equals("--usage") || args[i].equals("-u"))
+      {
+        reportingLevel = ReportingLevel.Usage;
+      }
+      else if (args[i].equals("--quiet") || args[i].equals("-q"))
+      {
+        outWriter.setQuiet(true);
+      }
+      else if (args[i].startsWith("--failonwarnings"))
+      {
+        String fw = args[i].substring("--failonwarnings".length());
+        failOnWarnings = (fw.compareTo("-") != 0);
+      }
+      else if (args[i].equals("--redir") || args[i].equals("-r"))
+      {
+        if (i + 1 < args.length)
+        {
+          fileOut = new File(args[++i]);
+        }
+      }
+      else if (args[i].equals("--customMessages") || args[i].equals("-c"))
+      {
+        if (i + 1 < args.length)
+        {
+          String fileName = args[i+1];
+          if ("none".compareTo(fileName.toLowerCase()) == 0)
+          {
+            customMessageFile = null;
+            useCustomMessageFile = false;
+            ++i;
+          }
+          else if (!fileName.startsWith("-"))
+          {
+            customMessageFile = new File(fileName);
+            useCustomMessageFile = true;
+            ++i;
+          }
+          else
+          {
+            System.err.println(String.format(Messages.get("expected_message_filename"), fileName));
+            displayHelp();
+            return false;
+          }
+        }
+      }
+      else if (args[i].equals("--listChecks") || args[i].equals("-l"))
+      {
+        if (i + 1 < args.length)
+        {
+          if (!args[i+1].startsWith("-"))
+          {
+            listChecksOut = new File(args[++i]);
+          }
+          else
+          {
+            listChecksOut = null;
+          }
+        }
+        listChecks = true;
+      }
+      else if (args[i].equals("--help") || args[i].equals("-help") || args[i].equals("-h") || args[i].equals("-?"))
+      {
+        displayHelp(); // display help message
+      }
+      else
+      {
+        if (path == null)
+        {
+          path = args[i];
+        }
+        else
+        {
+          System.err.println(String.format(Messages.get("unrecognized_argument"),args[i]));
+          displayHelp();
+          return false;
+        }
+      }
+    }
+
+    if ((xmlOutput && xmpOutput) || (xmlOutput && jsonOutput) || (xmpOutput && jsonOutput))
+    {
+      System.err.println(Messages.get("output_type_conflict"));
+      return false;
+    }
+    if (path != null)
+    {
+      StringBuilder sb = new StringBuilder();
+      for (int i = 0; i < path.length(); i++)
+      {
+        if (path.charAt(i) == '\\')
+        {
+          sb.append('/');
+        }
+        else
+        {
+          sb.append(path.charAt(i));
+        }
+      }
+      path = sb.toString();
+    }
+
+    if (path == null)
+    {
+      if (listChecks)
+      {
+        return true;
+      }
+      else
+      {
+        System.err.println(Messages.get("no_file_specified"));
+        return false;
+      }
+    }
+    else if (path.matches(".+\\.[Ee][Pp][Uu][Bb]"))
+    {
+      if (mode != null || version != EPUBVersion.VERSION_3)
+      {
+        System.err.println(Messages.get("mode_version_ignored"));
+        mode = null;
+      }
+    }
+    else if (mode == null)
+    {
+      outWriter.println(Messages.get("mode_required"));
+      return false;
+    }
+
+    return true;
+  }
+
+  private void setCustomMessageFileFromEnvironment()
+  {
+    Map<String, String> env = System.getenv();
+    String customMessageFileName = env.get(E_PUB_CHECK_CUSTOM_MESSAGE_FILE);
+    if (customMessageFileName != null && customMessageFileName.length() > 0)
+    {
+      File f = new File(customMessageFileName);
+      if (f.exists())
+      {
+        customMessageFile = f;
+        useCustomMessageFile = true;
+      }
+    }
+  }
+
+  /**
+   * This method displays a short help message that describes the command-line
+   * usage of this tool
+   */
+  private static void displayHelp()
+  {
+    outWriter.println(String.format(Messages.get("help_text"), EpubCheck.version()));
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/Archive.java b/src/main/java/com/adobe/epubcheck/util/Archive.java
new file mode 100644
index 0000000..83b2512
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/Archive.java
@@ -0,0 +1,312 @@
+package com.adobe.epubcheck.util;
+
+import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
+import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.zip.CRC32;
+import java.util.zip.CheckedInputStream;
+
+public class Archive
+{
+  private ArrayList<String> paths;
+
+  private ArrayList<String> names;
+
+  private final File baseDir;
+
+  private File epubFile;
+
+  private String epubName;
+
+
+  public Archive(String base, boolean save)
+  {
+    boolean deleteOnExit = !save;
+    baseDir = makeCanonical(new File(base));
+
+    if (!baseDir.exists() || !baseDir.isDirectory())
+    {
+      throw new RuntimeException("The path specified for the archive is invalid");
+    }
+    epubName = baseDir.getName() + ".epub";
+		epubFile = new File(baseDir.getParent() + File.separator + epubName);
+    if (deleteOnExit)
+    {
+      epubFile.deleteOnExit();
+    }
+
+    paths = new ArrayList<String>();
+    names = new ArrayList<String>();
+  }
+
+  public Archive(String base)
+  {
+    this(base, false);
+  }
+
+  public String getEpubName()
+  {
+    return epubName;
+  }
+
+  public File getEpubFile()
+  {
+    return epubFile;
+  }
+
+  public void deleteEpubFile()
+  {
+    if (!epubFile.delete())
+    {
+      System.err.println("Unable to delete generated archive.");
+    }
+  }
+
+  public void createArchive()
+  {
+    // using commons compress to allow setting filename encoding pre java7
+    ZipArchiveOutputStream out = null;
+    try
+    {
+      collectFiles(baseDir, "");
+
+      //make mimetype the first entry
+      int mimetype = names.indexOf("mimetype");
+      if (mimetype > -1)
+      {
+        String name = names.remove(mimetype);
+        String path = paths.remove(mimetype);
+        names.add(0, name);
+        paths.add(0, path);
+      }
+      else
+      {
+        System.err.println("No mimetype file found in expanded publication, output archive will be invalid");
+      }
+
+      out = new ZipArchiveOutputStream(epubFile);
+      out.setEncoding("UTF-8");
+
+      for (int i = 0; i < paths.size(); i++)
+      {
+        ZipArchiveEntry entry = new ZipArchiveEntry(new File(paths.get(i)), names.get(i));
+        if (i == 0 && mimetype > -1)
+        {
+          entry.setMethod(ZipArchiveEntry.STORED);
+          entry.setSize(getSize(paths.get(i)));
+          entry.setCrc(getCRC(paths.get(i)));
+        }
+        else
+        {
+          entry.setMethod(ZipArchiveEntry.DEFLATED);
+        }
+        out.putArchiveEntry(entry);
+        FileInputStream in = null;
+        try
+        {
+          in = new FileInputStream(paths.get(i));
+
+          byte[] buf = new byte[1024];
+          int len;
+          while ((len = in.read(buf)) > 0)
+          {
+            out.write(buf, 0, len);
+          }
+          out.closeArchiveEntry();
+        }
+        finally
+        {
+          if (in != null)
+          {
+            in.close();
+          }
+        }
+      }
+    }
+    catch (Exception e)
+    {
+      throw new RuntimeException(e.getMessage());
+    }
+    finally
+    {
+      try
+      {
+        if (out != null)
+        {
+          out.flush();
+          out.finish();
+          out.close();
+        }
+      }
+      catch (IOException ignored)
+      {
+      }
+    }
+  }
+  private File makeCanonical(File f)
+  {
+    if (f == null)
+    {
+      return null;
+    }
+    try
+    {
+      return f.getCanonicalFile();
+    }
+    catch (IOException ignored)
+    {
+      return f.getAbsoluteFile();
+    }
+  }
+
+  private long getSize(String path) throws IOException
+  {
+    FileInputStream in = null;
+    try
+    {
+      in = new FileInputStream(path);
+      byte[] buf = new byte[1024];
+      int len;
+      int size = 0;
+      while ((len = in.read(buf)) > 0)
+      {
+        size += len;
+      }
+      return size;
+    }
+    finally
+    {
+      if (in != null)
+      {
+        in.close();
+      }
+    }
+  }
+
+  private long getCRC(String path) throws IOException
+  {
+    CheckedInputStream cis = null;
+    FileInputStream fis = null;
+    try
+    {
+      fis = new FileInputStream(path);
+      cis = new CheckedInputStream(fis, new CRC32());
+      byte[] buf = new byte[128];
+      while (cis.read(buf) >= 0)
+      {
+      }
+    }
+    finally
+    {
+      if (fis != null)
+      {
+        fis.close();
+      }
+      if (cis != null)
+      {
+        cis.close();
+      }
+    }
+    return cis.getChecksum().getValue();
+  }
+
+//	public void createArchiveOld() {
+//		collectFiles(baseDir, "");
+//		byte[] buf = new byte[1024];
+//		try {
+//
+//			ZipOutputStream out = new ZipOutputStream((new FileOutputStream(
+//					epubName)));
+//
+//			int index = names.indexOf("mimetype");
+//			if (index >= 0) {
+//				FileInputStream in = new FileInputStream(paths.get(index));
+//
+//				ZipEntry entry = new ZipEntry(names.get(index));
+//				entry.setMethod(ZipEntry.STORED);
+//				int len, size = 0;
+//				while ((len = in.read(buf)) > 0)
+//					size += len;
+//
+//				in = new FileInputStream(paths.get(index));
+//
+//				entry.setCompressedSize(size);
+//				entry.setSize(size);
+//
+//				CRC32 crc = new CRC32();
+//				entry.setCrc(crc.getValue());
+//				out.putNextEntry(entry);
+//
+//				while ((len = in.read(buf)) > 0) {
+//					crc.update(buf, 0, len);
+//					out.write(buf, 0, len);
+//				}
+//
+//				entry.setCrc(crc.getValue());
+//
+//				paths.remove(index);
+//				names.remove(index);
+//			}
+//
+//			for (int i = 0; i < paths.size(); i++) {
+//				FileInputStream in = new FileInputStream(paths.get(i));
+//
+//				out.putNextEntry(new ZipEntry(names.get(i)));
+//
+//				int len;
+//				while ((len = in.read(buf)) > 0) {
+//					out.write(buf, 0, len);
+//				}
+//
+//				out.closeEntry();
+//				in.close();
+//			}
+//
+//			out.close();
+//		} catch (IOException e) {
+//		}
+//	}
+
+  private void collectFiles(File dir, String dirName)
+  {
+    if (!dirName.equals("") && !dirName.endsWith("/"))
+    {
+      dirName = dirName + "/";
+    }
+
+    File files[] = dir.listFiles();
+    assert files != null;
+
+	for (int i = 0; i < files.length; i++)
+    {
+	  // issue 256: ignore '.DS_Store', '._DS_Store', 'Thumbs.db' and 'ehthumbs.db' files
+	  if (files[i].isFile() &&
+		 !files[i].getName().equals(".DS_Store") && !files[i].getName().equals("._DS_Store") &&
+		 !files[i].getName().equals("Thumbs.db") && !files[i].getName().equals("ehthumbs.db"))
+	  {
+        names.add(dirName + files[i].getName());
+		paths.add(files[i].getAbsolutePath());
+			
+			// issue 256: ignore .git/ and .svn/ folders
+			
+	   }
+	   else if (files[i].isDirectory() && !files[i].getName().equals(".svn") && !files[i].getName().equals(".git")) 
+	   {
+	      collectFiles(files[i], dirName + files[i].getName() + "/");
+	   }
+   }
+
+ }
+
+  public void listFiles()
+  {
+    for (String name : names)
+    {
+      outWriter.println(name);
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/CheckUtil.java b/src/main/java/com/adobe/epubcheck/util/CheckUtil.java
new file mode 100755
index 0000000..de631fc
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/CheckUtil.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.util;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.security.InvalidParameterException;
+
+public class CheckUtil
+{
+  public static boolean checkString(byte[] arr, int offset, String string)
+  {
+    try
+    {
+      byte[] bytes = string.getBytes("UTF-8");
+      if (bytes.length + offset > arr.length)
+      {
+        return false;
+      }
+      for (int i = 0; i < bytes.length; i++)
+      {
+        if (arr[offset + i] != bytes[i])
+        {
+          return false;
+        }
+      }
+      return true;
+    }
+    catch (UnsupportedEncodingException e)
+    {
+      e.printStackTrace(); // internal problem: UTF-8 not supported??!
+      return false;
+    }
+  }
+
+  /*
+    * MimeType already verified to match application/epub+zip. Depending on
+    * version, verifying trailing spaces.
+    */
+  public static boolean checkTrailingSpaces(InputStream input,
+      EPUBVersion version, StringBuilder sb) throws IOException
+  {
+    ByteArrayOutputStream baos = new ByteArrayOutputStream(2048);
+
+    int c;
+    for (int i = 0; i < 20; i++)
+    {
+      if ((c = input.read()) == -1)
+      {
+        return false;
+      }
+      else
+      {
+        baos.write(c);
+      }
+    }
+
+    int ch = input.read();
+    if (version == EPUBVersion.VERSION_2 && ch != -1)
+    {
+      return false;
+    }
+
+    if (version == EPUBVersion.VERSION_3 && ch != ' ' && ch != -1)
+    {
+      return false;
+    }
+
+    int len;
+    byte[] buf = new byte[1024];
+
+    while ((len = input.read(buf)) > 0)
+    {
+      for (int i = 0; i < len; i++)
+      {
+        if (buf[i] != ' ')
+        {
+          return false;
+        }
+        else
+        {
+          baos.write(buf[i]);
+        }
+      }
+    }
+    sb.append(baos.toString());
+    baos.close();
+
+    return true;
+  }
+
+  public static int readBytes(InputStream in, byte[] b, int off, int len) throws
+      IOException
+  {
+    if (len < 1)
+    {
+      throw new InvalidParameterException(Integer.toString(len));
+    }
+    int total = 0;
+    while (total < len)
+    {
+      int result = in.read(b, off + total, len - total);
+      if (result == -1)
+      {
+        break;
+      }
+      total += result;
+    }
+    return total;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/DateParser.java b/src/main/java/com/adobe/epubcheck/util/DateParser.java
new file mode 100755
index 0000000..c6b81c1
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/DateParser.java
@@ -0,0 +1,330 @@
+package com.adobe.epubcheck.util;
+
+import java.util.*;
+
+/**
+ * Date parser for the ISO 8601 format.
+ *
+ * Initial code taken from the jigsaw project (W3C license [1]) and modified consistently to
+ * apply further checks that were missing, for example the initial code reported 
+ * <code>2011-</code> as valid date. 
+ * See also:
+ * http://www.w3.org/TR/1998/NOTE-datetime-19980827
+ *
+ * @author mircea at oxygenxml.com Initial version and fixes.
+ * @author mihaela at sync.ro Initial version and fixes.
+ *
+ * @author george at oxygenxml.com Additional fixes.
+ */
+
+/**
+ * **** [1] W3C license (jigsaw license) *****
+ * <p/>
+ * Jigsaw Copying Conditions
+ * <p/>
+ * W3C IPR SOFTWARE NOTICE
+ * <p/>
+ * Copyright \u00a9 1995-1998 World Wide Web Consortium, (Massachusetts Institute of
+ * Technology, Institut National de Recherche en Informatique et en
+ * Automatique, Keio University). All Rights Reserved.
+ * http://www.w3.org/Consortium/Legal/
+ * <p/>
+ * This W3C work (including software, documents, or other related items) is
+ * being provided by the copyright holders under the following license. By
+ * obtaining, using and/or copying this work, you (the licensee) agree that you
+ * have read, understood, and will comply with the following terms and
+ * conditions:
+ * <p/>
+ * Permission to use, copy, and modify this software and its documentation,
+ * with or without modification,  for any purpose and without fee or royalty is
+ * hereby granted, provided that you include the following on ALL copies of the
+ * software and documentation or portions thereof, including modifications,
+ * that you make:
+ * <p/>
+ * 1. The full text of this NOTICE in a location viewable to users of the
+ * redistributed or derivative work.
+ * 2. Any pre-existing intellectual property disclaimers, notices, or terms
+ * and conditions. If none exist, a short notice of the following form
+ * (hypertext is preferred, text is permitted) should be used within the
+ * body of any redistributed or derivative code: "Copyright \u00a9 World Wide
+ * Web Consortium, (Massachusetts Institute of Technology, Institut
+ * National de Recherche en Informatique et en Automatique, Keio
+ * University). All Rights Reserved. http://www.w3.org/Consortium/Legal/"
+ * 3. Notice of any changes or modifications to the W3C files, including the
+ * date changes were made. (We recommend you provide URIs to the location
+ * from which the code is derived).
+ * <p/>
+ * In addition, creators of derivitive works must include the full text of this
+ * NOTICE in a location viewable to users of the derivitive work.
+ * <p/>
+ * THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS
+ * MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+ * LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR
+ * PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE
+ * ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
+ * <p/>
+ * COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
+ * CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR
+ * DOCUMENTATION.
+ * <p/>
+ * The name and trademarks of copyright holders may NOT be used in advertising
+ * or publicity pertaining to the software without specific, written prior
+ * permission. Title to copyright in this software and any associated
+ * documentation will at all times remain with copyright holders.
+ * <p/>
+ * ____________________________________
+ * <p/>
+ * This formulation of W3C's notice and license became active on August 14
+ * 1998. See the older formulation for the policy prior to this date. Please
+ * see our Copyright FAQ for common questions about using materials from our
+ * site, including specific terms and conditions for packages like libwww,
+ * Amaya, and Jigsaw. Other questions about this notice can be directed to
+ * site-policy at w3.org .
+ * <p/>
+ * <p/>
+ * <p/>
+ * <p/>
+ * webmaster
+ * (last updated 14-Aug-1998)
+ * **** end W3C license (jigsaw license) *****
+ */
+public class DateParser
+{
+
+  /**
+   * Check if the next token, if exists, has a given value and that the
+   * provided string tokenizer has more tokens after that. It consumes
+   * the token checked against the expected value from the string tokenizer.
+   *
+   * @param st    The StringTokenizer to check.
+   * @param token The value expected for the next token.
+   * @return <code>true</code> if the token matches the value and there are more tokens.
+   *         <code>false</code> if there are no more tokens and we do not have a token to check.
+   * @throws InvalidDateException If the token does not match the value or if there are no
+   *                              more tokens after the token that matches the expected value.
+   */
+  private boolean checkValueAndNext(StringTokenizer st, String token) throws
+      InvalidDateException
+  {
+    if (!st.hasMoreTokens())
+    {
+      return false;
+    }
+    String t = st.nextToken();
+    if (!t.equals(token))
+    {
+      throw new InvalidDateException("Unexpected: " + t);
+    }
+    if (!st.hasMoreTokens())
+    {
+      throw new InvalidDateException("Incomplete date.");
+    }
+    return true;
+  }
+
+  /**
+   * Check if a given date is an iso8601 date.
+   *
+   * @param iso8601Date The date to be checked.
+   * @return <code>true</code> if the date is an iso8601 date.
+   * @throws InvalidDateException
+   */
+  private Calendar getCalendar(String iso8601Date) throws
+      InvalidDateException
+  {
+    // YYYY-MM-DDThh:mm:ss.sTZD
+    StringTokenizer st = new StringTokenizer(iso8601Date, "-T:.+Z", true);
+    if (!st.hasMoreTokens())
+    {
+      throw new InvalidDateException("Empty Date");
+    }
+    Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
+    calendar.clear();
+    try
+    {
+      // Year
+      if (st.hasMoreTokens())
+      {
+        int year = Integer.parseInt(st.nextToken());
+        calendar.set(Calendar.YEAR, year);
+      }
+      else
+      {
+        return calendar;
+      }
+      // Month
+      if (checkValueAndNext(st, "-"))
+      {
+        int month = Integer.parseInt(st.nextToken()) - 1;
+        calendar.set(Calendar.MONTH, month);
+      }
+      else
+      {
+        return calendar;
+      }
+      // Day
+      if (checkValueAndNext(st, "-"))
+      {
+        int day = Integer.parseInt(st.nextToken());
+        calendar.set(Calendar.DAY_OF_MONTH, day);
+      }
+      else
+      {
+        return calendar;
+      }
+      // Hour
+      if (checkValueAndNext(st, "T"))
+      {
+        int hour = Integer.parseInt(st.nextToken());
+        calendar.set(Calendar.HOUR_OF_DAY, hour);
+      }
+      else
+      {
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+        return calendar;
+      }
+      // Minutes
+      if (checkValueAndNext(st, ":"))
+      {
+        int minutes = Integer.parseInt(st.nextToken());
+        calendar.set(Calendar.MINUTE, minutes);
+      }
+      else
+      {
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+        return calendar;
+      }
+      if (!st.hasMoreTokens())
+      {
+        return calendar;
+      }
+      // Not mandatory now
+      // Seconds
+      String tok = st.nextToken();
+      if (tok.equals(":"))
+      { // seconds
+        if (st.hasMoreTokens())
+        {
+          int secondes = Integer.parseInt(st.nextToken());
+          calendar.set(Calendar.SECOND, secondes);
+          if (!st.hasMoreTokens())
+          {
+            return calendar;
+          }
+          // decimal fraction of a second
+          tok = st.nextToken();
+          if (tok.equals("."))
+          {
+            String nt = st.nextToken();
+            while (nt.length() < 3)
+            {
+              nt += "0";
+            }
+            if (nt.length() > 3)
+            {
+              // check the other part from the decimal fraction to be formed only from digits
+              for (int i = 3; i < nt.length(); i++)
+              {
+                if (!Character.isDigit(nt.charAt(i)))
+                {
+                  throw new InvalidDateException("Invalid digit in the decimal fraction of a second: " + nt.charAt(i));
+                }
+              }
+            }
+            nt = nt.substring(0, 3); //Cut trailing chars..
+            int millisec = Integer.parseInt(nt);
+            calendar.set(Calendar.MILLISECOND, millisec);
+            if (!st.hasMoreTokens())
+            {
+              return calendar;
+            }
+            tok = st.nextToken();
+          }
+          else
+          {
+            calendar.set(Calendar.MILLISECOND, 0);
+          }
+        }
+        else
+        {
+          throw new InvalidDateException("No secondes specified");
+        }
+      }
+      else
+      {
+        calendar.set(Calendar.SECOND, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+      }
+      // Time zone
+      if (!tok.equals("Z"))
+      { // UTC
+        if (!(tok.equals("+") || tok.equals("-")))
+        {
+          throw new InvalidDateException("only Z, + or - allowed");
+        }
+        boolean plus = tok.equals("+");
+        if (!st.hasMoreTokens())
+        {
+          throw new InvalidDateException("Missing hour field");
+        }
+        int tzhour = Integer.parseInt(st.nextToken());
+        int tzmin;
+        if (checkValueAndNext(st, ":"))
+        {
+          tzmin = Integer.parseInt(st.nextToken());
+        }
+        else
+        {
+          throw new InvalidDateException("Missing minute field");
+        }
+        if (plus)
+        {
+          calendar.add(Calendar.HOUR, -tzhour);
+          calendar.add(Calendar.MINUTE, -tzmin);
+        }
+        else
+        {
+          calendar.add(Calendar.HOUR, tzhour);
+          calendar.add(Calendar.MINUTE, tzmin);
+        }
+      }
+      else
+      {
+        if (st.hasMoreTokens())
+        {
+          throw new InvalidDateException("Unexpected field at the end of the date field: " + st.nextToken());
+        }
+      }
+    }
+    catch (NumberFormatException ex)
+    {
+      throw new InvalidDateException("[" + ex.getMessage() + "] is not an integer");
+    }
+    return calendar;
+  }
+
+  /**
+   * @param iso8601DateAsString The date parameter as a String.
+   * @return The corresponding Date object representing the result of parsing the date parameter.
+   * @throws InvalidDateException In case of an invalid date.
+   */
+  public Date parse(String iso8601DateAsString) throws
+      InvalidDateException
+  {
+    Calendar calendar = getCalendar(iso8601DateAsString);
+    try
+    {
+      calendar.setLenient(false);
+      return calendar.getTime();
+    }
+    catch (Exception e)
+    {
+      throw new InvalidDateException(iso8601DateAsString + " " + e.getClass().toString() + " " + e.getMessage());
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/DateParserTest.java b/src/main/java/com/adobe/epubcheck/util/DateParserTest.java
new file mode 100755
index 0000000..627d8e7
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/DateParserTest.java
@@ -0,0 +1,134 @@
+package com.adobe.epubcheck.util;
+
+/**
+ * Test for the DateParser class.
+ */
+public class DateParserTest {
+	/**
+	 * Test the ISO8601 date. 
+	 * Date grammar: 
+	 * 	Year: 
+	 * 		YYYY (eg 1997) 
+	 * 	Year and month: 
+	 * 		YYYY-MM (eg 1997-07) 
+	 * 	Complete date: 
+	 * 		YYYY-MM-DD (eg 1997-07-16) 
+	 * 	Complete date plus hours and minutes: 
+	 * 		YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00) 
+	 * 	Complete date plus hours, minutes and seconds:
+	 * 		YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00) 
+	 * 	Complete date plus hours, minutes, seconds and a decimal fraction of a second
+	 * 		YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00) 
+	 * where:
+	 * 
+	 * YYYY = four-digit year 
+	 * MM = two-digit month (01=January, etc.) 
+	 * DD = two-digit day of month (01 through 31) 
+	 * hh = two digits of hour (00 through 23) (am/pm NOT allowed) 
+	 * mm = two digits of minute (00 through 59)
+	 * ss = two digits of second (00 through 59) 
+	 * s = one or more digits representing a decimal fraction of a second 
+	 * TZD = time zone designator (Z or +hh:mm or -hh:mm)
+	 * 
+	 * @throws Exception
+	 */
+	public void testisISO8601Date() throws Exception {
+		DateParser p = new DateParser();
+		p.parse(	"2011"						);
+		p.parse(	"2011-02"					);
+		p.parse(	"2011-02-12"				);
+		p.parse(	"2011-03-01T13"				);
+		p.parse(	"2011-02-01T13:00"			);
+		p.parse(	"2011-02-01T13:00:00"		);
+		p.parse(	"2011-02-01T13:00:00Z"		);
+		p.parse(	"2011-02-01T13:00:00+01:00"	);
+		p.parse(	"2011-02-01T13:00:00-03:00"	);
+
+		try {	
+			p.parse(	""							);
+			throw new Exception("Invalid date passed!");
+		} catch (InvalidDateException e) {}
+		try {	
+			p.parse(	"2011-"						);
+			throw new Exception("Invalid date passed!");
+		} catch (InvalidDateException e) {}
+		try {	
+			p.parse(	"2011-02-"					);
+			throw new Exception("Invalid date passed!");
+		} catch (InvalidDateException e) {}
+		
+		try {	
+			p.parse(	"2011-02-01T"				);
+			throw new Exception("Invalid date passed!");
+		} catch (InvalidDateException e) {}
+		try {	
+			p.parse(	"2011-02-01T13:"			);
+			throw new Exception("Invalid date passed!");
+		} catch (InvalidDateException e) {}
+		try {	
+			p.parse(	"2011-02-01T13:00:"			);
+			throw new Exception("Invalid date passed!");
+		} catch (InvalidDateException e) {}
+		try {	
+			p.parse(	"2011-02-01T13:00:00T"		);
+			throw new Exception("Invalid date passed!");
+		} catch (InvalidDateException e) {}
+		try {	
+			p.parse(	"2011-02-01T13:00:00+01"	);
+			throw new Exception("Invalid date passed!");
+		} catch (InvalidDateException e) {}
+		try {	
+			p.parse(	"2011-02-01T13:00:00+01:"	);
+			throw new Exception("Invalid date passed!");
+		} catch (InvalidDateException e) {}
+		try {	
+			p.parse(	"2011-02-01T13:00:00-03"	);
+			throw new Exception("Invalid date passed!");
+		} catch (InvalidDateException e) {}
+		try {	
+			p.parse(	"2011-02-01T13:00:00-03:"	);
+			throw new Exception("Invalid date passed!");
+		} catch (InvalidDateException e) {}
+		
+		try {	
+			p.parse(	"2011-02-01T13:00:00-03:AA"	);
+			throw new Exception("Invalid date passed!");
+		} catch (InvalidDateException e) {}
+		
+		try {	
+			p.parse(	"20a1"	);
+			throw new Exception("Invalid date passed!");
+		} catch (InvalidDateException e) {}
+		
+		try {	
+			p.parse(	" 2"	);
+			throw new Exception("Invalid date passed!");
+		} catch (InvalidDateException e) {}
+		try {	
+			p.parse(	"2011-02-29"	);
+			throw new Exception("Invalid date passed!");
+		} catch (InvalidDateException e) {}
+		
+		try {	
+			p.parse(	"2011-02-01T13:00:00.123aqb"	);
+			throw new Exception("Invalid date passed!");
+		} catch (InvalidDateException e) {}
+		
+		try {	
+			p.parse(	"1994-11-05T13:15:30Zab"	);
+			throw new Exception("Invalid date passed!");
+		} catch (InvalidDateException e) {}
+		
+		
+	}
+
+	public static void main(String[] args) {
+		try {
+			new DateParserTest().testisISO8601Date();
+			outWriter.println("Passed all tests!");
+		} catch (Exception e) {
+			outWriter.println("Fail:");
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/DefaultReportImpl.java b/src/main/java/com/adobe/epubcheck/util/DefaultReportImpl.java
new file mode 100644
index 0000000..fb2f36e
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/DefaultReportImpl.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+package com.adobe.epubcheck.util;
+
+import com.adobe.epubcheck.api.MasterReport;
+import com.adobe.epubcheck.messages.Message;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.messages.Severity;
+
+public class DefaultReportImpl extends MasterReport
+{
+  static boolean DEBUG = false;
+  boolean quiet;
+  boolean saveQuiet;
+
+  public static String ePubVersion;
+
+  public DefaultReportImpl(String ePubName)
+  {
+    this(ePubName, null, false);
+	}
+
+  public DefaultReportImpl(String ePubName, String info, boolean quiet)
+	{
+		this.quiet = quiet;
+    String adjustedPath = PathUtil.removeWorkingDirectory(ePubName);
+    this.setEpubFileName(adjustedPath);
+		if (info != null)
+    {
+      //warning("", 0, 0, info);
+    }
+  }
+
+  String fixMessage(String message)
+  {
+    if (message == null)
+    {
+      return "";
+    }
+    return message.replaceAll("[\\s]+", " ");
+  }
+  boolean pushQuiet()
+  {
+    saveQuiet = outWriter.isQuiet();
+    outWriter.setQuiet(quiet);
+    return saveQuiet;
+  }
+
+  void popQuiet()
+  {
+    outWriter.setQuiet(saveQuiet);
+  }
+
+  @Override
+  public void message(Message message, MessageLocation location, Object... args)
+  {
+    Severity severity = message.getSeverity();
+    String text = formatMessage(message, location, args);
+    if (severity.equals(Severity.USAGE))
+    {
+      pushQuiet();
+      outWriter.println(text);
+      popQuiet();
+    }
+    else
+    {
+      System.err.println(text);
+    }
+  }
+
+  String formatMessage(Message message, MessageLocation location, Object... args)
+  {
+    String fileName = (location.getFileName() == null ? "" : "/" + location.getFileName());
+    fileName = PathUtil.removeWorkingDirectory(fileName);
+    return String.format("%1$s(%2$s): %3$s%4$s(%5$s,%6$s): %7$s",
+        message.getSeverity(),
+        message.getID(),
+        PathUtil.removeWorkingDirectory(this.getEpubFileName()),
+        fileName,
+        location.getLine(),
+        location.getColumn(),
+        fixMessage(args != null && args.length > 0 ? message.getMessage(args) : message.getMessage()));
+  }
+
+  @Override
+  public void info(String resource, FeatureEnum feature, String value)
+  {
+    if (ReportingLevel.Info >= getReportingLevel())
+    {
+       switch (feature)
+      {
+        case FORMAT_VERSION:
+          if (!quiet)
+          {
+            outWriter.println(String.format(Messages.get("validating_version_message"), value));
+          }
+          break;
+        default:
+          if (DEBUG && !quiet)
+          {
+            if (resource == null)
+            {
+              outWriter.println("INFO: [" + feature + "]=" + value);
+            }
+            else
+            {
+              outWriter.println("INFO: [" + feature + " (" +
+                  resource + ")]=" + value);
+            }
+          }
+          break;
+      }
+    }
+  }
+    
+  public int generate()
+  {
+    return 0;
+  }
+
+  public void initialize()
+  {
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/EPUBVersion.java b/src/main/java/com/adobe/epubcheck/util/EPUBVersion.java
new file mode 100644
index 0000000..b5c6780
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/EPUBVersion.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.util;
+
+public enum EPUBVersion
+{
+  Unknown(0f), VERSION_2(2f), VERSION_3(3f);
+
+  private final Float version;
+
+  EPUBVersion(float version)
+  {
+    this.version = version;
+  }
+
+  public String toString()
+  {
+    return version.toString();
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/EpubConstants.java b/src/main/java/com/adobe/epubcheck/util/EpubConstants.java
new file mode 100644
index 0000000..3ab7c27
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/EpubConstants.java
@@ -0,0 +1,15 @@
+package com.adobe.epubcheck.util;
+public class EpubConstants
+{
+  public static final String EpubTypeNamespaceUri = "http://www.idpf.org/2007/ops";
+  public static final String XmlNamespaceUri = "http://www.w3.org/XML/1998/namespace";
+  public static final String HtmlNamespaceUri = "http://www.w3.org/1999/xhtml";
+  public static final String XLinkNamespaceUri = "http://www.w3.org/1999/xlink";
+  public static final String OpfNamespaceUri = "http://www.idpf.org/2007/opf";
+  public static final String OpenDocumentContainerNamespaceUri ="urn:oasis:names:tc:opendocument:xmlns:container";
+  public static final String DCElements = "http://purl.org/dc/elements/1.1/";
+
+  public static final String ElementLineNumberAttribute = "elementLineNumber";
+  public static final String ElementColumnNumberAttribute = "elementColumnNumber";
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/FeatureEnum.java b/src/main/java/com/adobe/epubcheck/util/FeatureEnum.java
new file mode 100644
index 0000000..f8abf4f
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/FeatureEnum.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.util;
+
+public enum FeatureEnum
+{
+  TOOL_NAME("tool name"),
+  TOOL_VERSION("tool version"),
+  TOOL_DATE("tool date"),
+  EXEC_MODE("execution mode"),
+  FORMAT_NAME("format name"),
+  FORMAT_VERSION("format version"),
+  CREATION_DATE("creation date"),
+  MODIFIED_DATE("modification date"),
+  EPUB_RENDITIONS_COUNT("EPUB renditions count"),
+  CHARS_COUNT("characters count"),
+  PAGES_COUNT("pages count"),
+  SECTIONS_COUNT("sections count"),
+  ITEMS_COUNT("items count"),
+  DECLARED_MIMETYPE("declared mimetype"),
+  FONT_EMBEDDED("font embedded"),
+  FONT_REFERENCE("font reference"),
+  REFERENCE("reference"),
+  DC_LANGUAGE("language"),
+  DC_TITLE("title"),
+  DC_CREATOR("creator"),
+  DC_CONTRIBUTOR("contributor"),
+  DC_PUBLISHER("publisher"),
+  DC_DATE("date"),
+  DC_RIGHTS("rights"),
+  DC_SUBJECT("subject"),
+  DC_DESCRIPTION("description"),
+  UNIQUE_IDENT("unique identifier"),
+  HAS_FIXED_LAYOUT("hasFixedLayout"),
+  HAS_SCRIPTS("hasScripts"),
+  HAS_SIGNATURES("hasSignatures"),
+  HAS_ENCRYPTION("hasEncryption"),
+  IS_SPINEITEM("is spine item"),
+  HAS_NCX("Has ncx file"),
+  IS_LINEAR("linear"),
+  RESOURCE("resource"),
+  SIZE("size"),
+  COMPRESSED_SIZE("compressed size"),
+  COMPRESSION_METHOD("compression method"),
+  HAS_HTML4("html 4"),
+  HAS_HTML5("html 5"),
+  SCRIPT("script"),
+  SHA_256("SHA-256"),
+  RENDITION_LAYOUT("rendition:layout"),
+  RENDITION_ORIENTATION("rendition:orientation"),
+  RENDITION_SPREAD("rendition:spread"),
+  NAVIGATION_ORDER("navigation order"),
+  SPINE_INDEX("spine index");
+
+
+  private final String feature;
+
+  FeatureEnum(String feature)
+  {
+    this.feature = feature;
+  }
+
+  public String toString()
+  {
+    return feature;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/FileResourceProvider.java b/src/main/java/com/adobe/epubcheck/util/FileResourceProvider.java
new file mode 100644
index 0000000..35e2ca1
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/FileResourceProvider.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.util;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+
+public class FileResourceProvider implements GenericResourceProvider
+{
+
+  private final String fileName;
+
+  public FileResourceProvider(String fileName)
+  {
+    this.fileName = fileName;
+    File file = new File(fileName);
+    if (!file.exists())
+    {
+      throw new RuntimeException("File " + fileName + " does not exist");
+    }
+  }
+
+  public InputStream getInputStream(String ignore) throws
+      FileNotFoundException
+  {
+    return new FileInputStream(new File(fileName));
+  }
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/GenericResourceProvider.java b/src/main/java/com/adobe/epubcheck/util/GenericResourceProvider.java
new file mode 100644
index 0000000..61a72ef
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/GenericResourceProvider.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.util;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+public interface GenericResourceProvider
+{
+
+  /*
+    * added parameter to fit with OCFPackage.getInputStream(path)
+    */
+  public InputStream getInputStream(String path) throws
+      IOException;
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/HandlerUtil.java b/src/main/java/com/adobe/epubcheck/util/HandlerUtil.java
new file mode 100644
index 0000000..6bf61c3
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/HandlerUtil.java
@@ -0,0 +1,58 @@
+package com.adobe.epubcheck.util;
+
+import org.w3c.dom.Element;
+
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.xml.XMLParser;
+
+public class HandlerUtil
+{
+
+  public static void checkXMLVersion(XMLParser parser)
+  {
+    String version = parser.getXMLVersion();
+
+    //I don't think it is possible for this to be null.  A null version would cause a SAX parser error.
+    if (version == null)
+    {
+      parser.getReport().message(MessageId.HTM_002, new MessageLocation(parser.getResourceName(),
+          parser.getLineNumber(), parser.getColumnNumber()));
+    }
+    else if (!"1.0".equals(version))
+    {
+      parser.getReport().message(MessageId.HTM_001, new MessageLocation(parser.getResourceName(),
+          parser.getLineNumber(), parser.getColumnNumber()), version);
+    }
+  }
+
+  public static int getElementLineNumber(Element e)
+  {
+    return getElementIntAttribute( e, EpubConstants.ElementLineNumberAttribute);
+  }
+
+  public static int getElementColumnNumber(Element e)
+  {
+    return getElementIntAttribute( e, EpubConstants.ElementColumnNumberAttribute);
+
+  }
+
+  static int getElementIntAttribute(Element e, String whichAttribute)
+  {
+    int val = -1;
+    String number = e.getAttribute(whichAttribute);
+    if (number != null)
+    {
+      try
+      {
+        val = Integer.parseInt(number.trim());
+      }
+      catch (NumberFormatException ex)
+      {
+        val = -1;
+      }
+    }
+    return val;
+  }
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/InvalidDateException.java b/src/main/java/com/adobe/epubcheck/util/InvalidDateException.java
new file mode 100755
index 0000000..32d6b93
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/InvalidDateException.java
@@ -0,0 +1,21 @@
+package com.adobe.epubcheck.util;
+
+/**
+ * Invalid date exception.
+ * Exception to signal an invalid date.
+ */
+public class InvalidDateException extends Exception
+{
+
+  /**
+   * Creates an exception to signal an invalid date.
+   *
+   * @param message message associated with the exception
+   */
+  public InvalidDateException(String message)
+  {
+    super(message);
+  }
+
+  private static final long serialVersionUID = -8476118619257777307L;
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/InvalidVersionException.java b/src/main/java/com/adobe/epubcheck/util/InvalidVersionException.java
new file mode 100644
index 0000000..dcf6006
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/InvalidVersionException.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.util;
+
+import org.xml.sax.SAXException;
+
+public class InvalidVersionException extends SAXException
+{
+
+  private static final long serialVersionUID = 1L;
+
+  public final static String UNSUPPORTED_VERSION = "Version not supported";
+  public final static String VERSION_NOT_FOUND = "Version not found";
+  public final static String VERSION_ATTRIBUTE_NOT_FOUND = "Version attribute not found";
+  public final static String PACKAGE_ELEMENT_NOT_FOUND = "Package element must be the first element in the package file";
+
+  public InvalidVersionException(String message)
+  {
+    super(message);
+
+  }
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/JsonWriter.java b/src/main/java/com/adobe/epubcheck/util/JsonWriter.java
new file mode 100644
index 0000000..9c8e1c1
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/JsonWriter.java
@@ -0,0 +1,45 @@
+package com.adobe.epubcheck.util;
+
+import org.codehaus.jackson.JsonFactory;
+import org.codehaus.jackson.JsonGenerator;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.map.SerializationConfig;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+/**
+ * This is used to create json output
+ */
+public class JsonWriter
+{
+  private ObjectMapper objectMapper;
+
+  private JsonWriter(ObjectMapper objectMapper)
+  {
+    if (objectMapper == null)
+    {
+      throw new IllegalArgumentException("objectMapper argument is required.");
+    }
+    this.objectMapper = objectMapper;
+  }
+
+  public static JsonWriter createJsonWriter(boolean pretty)
+  {
+    JsonFactory jf = new JsonFactory();
+    ObjectMapper om = new ObjectMapper(jf);
+    om.configure(JsonGenerator.Feature.AUTO_CLOSE_TARGET, false);
+    om.configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, true);
+    om.configure(SerializationConfig.Feature.INDENT_OUTPUT, pretty);
+    om.configure(SerializationConfig.Feature.AUTO_DETECT_GETTERS, false);
+    om.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
+    return new JsonWriter(om);
+  }
+
+  public void writeJson(Object content, OutputStream os)
+      throws
+      IOException
+  {
+    this.objectMapper.writeValue(os, content);
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/LocationImpl.java b/src/main/java/com/adobe/epubcheck/util/LocationImpl.java
new file mode 100644
index 0000000..42eba8e
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/LocationImpl.java
@@ -0,0 +1,52 @@
+package com.adobe.epubcheck.util;
+
+import javax.xml.stream.Location;
+
+public class LocationImpl implements Location
+{
+  private final int lineNumber;
+  private final int columnNumber;
+  private final int characterOffset;
+  private final String publicId;
+  private final String systemId;
+
+
+  public LocationImpl(int lineNumber, int columnNumber, int characterOffset, String publicId, String systemId)
+  {
+    this.lineNumber = lineNumber;
+    this.columnNumber = columnNumber;
+    this.characterOffset = characterOffset;
+    this.publicId = publicId;
+    this.systemId = systemId;
+  }
+
+  @Override
+  public int getLineNumber()
+  {
+    return lineNumber;
+  }
+
+  @Override
+  public int getColumnNumber()
+  {
+    return columnNumber;
+  }
+
+  @Override
+  public int getCharacterOffset()
+  {
+    return characterOffset;
+  }
+
+  @Override
+  public String getPublicId()
+  {
+    return publicId;
+  }
+
+  @Override
+  public String getSystemId()
+  {
+    return systemId;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/Messages.java b/src/main/java/com/adobe/epubcheck/util/Messages.java
new file mode 100644
index 0000000..dc5b381
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/Messages.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.util;
+
+import com.google.common.base.Charsets;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.net.URLConnection;
+import java.text.MessageFormat;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.PropertyResourceBundle;
+import java.util.ResourceBundle;
+import java.util.ResourceBundle.Control;
+
+public class Messages {
+
+  private static final String BUNDLE_NAME = "com.adobe.epubcheck.util.messages"; //$NON-NLS-1$
+  private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME, Locale.getDefault(), new UTF8Control());
+
+  private Messages()
+  {
+  }
+
+  public static String get(String key)
+  {
+    try
+    {
+      return RESOURCE_BUNDLE.getString(key);
+    }
+    catch (MissingResourceException e)
+    {
+      return key;
+    }
+  }
+
+  public static String get(String key, Object... arguments)
+  {
+    try
+    {
+      return MessageFormat.format(RESOURCE_BUNDLE.getString(key), arguments);
+    }
+    catch (MissingResourceException e)
+    {
+      return key;
+    }
+  }
+
+  private static class UTF8Control extends Control
+  {
+    public ResourceBundle newBundle
+        (String baseName, Locale locale, String format, ClassLoader loader, boolean reload)
+        throws
+        IllegalAccessException,
+        InstantiationException,
+        IOException
+    {
+      // The below is a copy of the default implementation.
+      String bundleName = toBundleName(baseName, locale);
+      String resourceName = toResourceName(bundleName, "properties"); //$NON-NLS-1$
+      ResourceBundle bundle = null;
+      InputStream stream = null;
+      if (reload)
+      {
+        URL url = loader.getResource(resourceName);
+        if (url != null)
+        {
+          URLConnection connection = url.openConnection();
+          if (connection != null)
+          {
+            connection.setUseCaches(false);
+            stream = connection.getInputStream();
+          }
+        }
+      }
+      else
+      {
+        stream = loader.getResourceAsStream(resourceName);
+      }
+      if (stream != null)
+      {
+        try
+        {
+          // Only this line is changed to make it to read properties files as UTF-8.
+          bundle = new PropertyResourceBundle(
+              new BufferedReader(
+                  new InputStreamReader(stream, Charsets.UTF_8)));
+        }
+        finally
+        {
+          stream.close();
+        }
+      }
+      return bundle;
+    }
+  }
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/NamespaceHelper.java b/src/main/java/com/adobe/epubcheck/util/NamespaceHelper.java
new file mode 100644
index 0000000..5c03963
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/NamespaceHelper.java
@@ -0,0 +1,346 @@
+package com.adobe.epubcheck.util;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Stack;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class NamespaceHelper
+{
+  private long id = 0;
+  private static HashSet<String> expectedNamespaces = new HashSet<String>();
+  static
+  {
+    expectedNamespaces.add(""); // don't report on the default (empty) namespace
+    expectedNamespaces.add(EpubConstants.EpubTypeNamespaceUri);
+    expectedNamespaces.add(EpubConstants.XmlNamespaceUri);
+    expectedNamespaces.add(EpubConstants.HtmlNamespaceUri);
+    expectedNamespaces.add(EpubConstants.OpfNamespaceUri);
+    expectedNamespaces.add(EpubConstants.OpenDocumentContainerNamespaceUri);
+    expectedNamespaces.add(EpubConstants.DCElements);
+  }
+
+  private class IdHashMap<K,V> extends HashMap<K, V>
+  {
+    final long id;
+    public long getId()
+    {
+      return id;
+    }
+
+    public IdHashMap(long id)
+    {
+      super();
+      this.id = id;
+    }
+    public IdHashMap(long id, Map<K, V> m)
+    {
+      super(m);
+      this.id = id;
+    }
+  }
+
+  private static boolean isExpectedNamespace(String uri)
+  {
+    return (uri != null) ? expectedNamespaces.contains(uri) : false;
+  }
+  private class NamespaceInstance
+  {
+    private long id;
+    private String prefix;
+    private String uri;
+    private MessageLocation location;
+    private boolean inUse;
+    private Pattern prefixPattern;
+
+    public NamespaceInstance(long id, String prefix, String uri, MessageLocation location)
+    {
+      setId(id);
+      setPrefix(prefix);
+      setUri(uri);
+      setLocation(location);
+      setInUse(false);
+      setPrefixPattern(Pattern.compile("^" + prefix + ":.+"));
+    }
+
+    public long getId()
+    {
+      return id;
+    }
+
+    public void setId(long id)
+    {
+      this.id = id;
+    }
+
+    public String getPrefix()
+    {
+      return prefix;
+    }
+
+    public void setPrefix(String prefix)
+    {
+      this.prefix = prefix;
+    }
+
+    public String getUri()
+    {
+      return uri;
+    }
+
+    public void setUri(String uri)
+    {
+      this.uri = uri;
+    }
+
+    public MessageLocation getLocation()
+    {
+      return location;
+    }
+
+    public void setLocation(MessageLocation location)
+    {
+      this.location = location;
+    }
+
+    public boolean isInUse()
+    {
+      return inUse;
+    }
+
+    public void setInUse(boolean inUse)
+    {
+      this.inUse = inUse;
+    }
+
+    public Pattern getPrefixPattern()
+    {
+      return prefixPattern;
+    }
+
+    public void setPrefixPattern(Pattern prefixPattern)
+    {
+      this.prefixPattern = prefixPattern;
+    }
+
+    @Override
+    public String toString()
+    {
+      if (getUri() != null && getUri().length() > 0)
+      {
+        return "xmlns" + this.getPrefix() + "=" + getUri();
+      }
+      else
+      {
+        return "xmlns" + this.getPrefix();
+      }
+    }
+  }
+
+  private class NamespaceContext
+  {
+    private long id;
+    private int useCount;
+    private IdHashMap<String, String> prefixMap;
+    private IdHashMap<String, NamespaceInstance> uriMap;
+
+    public NamespaceContext(long id)
+    {
+      this.useCount = 1;
+      this.id = id;
+      this.prefixMap = new IdHashMap<String, String>(id);
+      this.uriMap = new IdHashMap<String, NamespaceInstance>(id);
+    }
+
+    public NamespaceContext(long id, NamespaceContext other)
+    {
+      other.decrementUseCount();
+      this.useCount = 1;
+      this.id = id;
+      this.prefixMap = new IdHashMap<String, String>(id, other.getPrefixMap());
+      this.uriMap = new IdHashMap<String, NamespaceInstance>(id, other.getUriMap());
+    }
+
+    public long getId()
+    {
+      return id;
+    }
+    public int getUseCount()
+    {
+      return useCount;
+    }
+    public int incrementUseCount()
+    {
+      return ++useCount;
+    }
+    public int decrementUseCount()
+    {
+      return --useCount;
+    }
+    public IdHashMap<String, String> getPrefixMap()
+    {
+      return prefixMap;
+    }
+    public IdHashMap<String, NamespaceInstance> getUriMap()
+    {
+      return  uriMap;
+    }
+  }
+
+  private Stack<NamespaceContext> contexts = new Stack<NamespaceContext>();
+
+  public NamespaceHelper()
+  {
+    contexts.push(new NamespaceContext(id++));
+  }
+
+  private void  pushContext()
+  {
+    ++id;
+    NamespaceContext currentContext = contexts.peek();
+    currentContext.incrementUseCount();
+  }
+
+  private String findMatchingPrefix(String qName)
+  {
+    NamespaceContext currentContext = contexts.peek();
+
+    for (NamespaceInstance instance : currentContext.getUriMap().values())
+    {
+      Pattern p = instance.getPrefixPattern();
+      Matcher m = p.matcher(qName);
+      if (m.find())
+      {
+        return instance.getPrefix();
+      }
+    }
+
+    return null;
+  }
+
+  public String findPrefixForUri(String uri)
+  {
+    String prefix = null;
+    NamespaceContext currentContext = contexts.peek();
+    if (uri != null)
+    {
+      NamespaceInstance instance = currentContext.getUriMap().get(uri);
+      if (instance != null)
+      {
+        prefix = instance.getPrefix();
+      }
+    }
+    return prefix;
+  }
+
+  private void recordPrefixUse(String prefix)
+  {
+    NamespaceContext currentContext = contexts.peek();
+    String uri = currentContext.getPrefixMap().get(prefix);
+    if (uri != null)
+    {
+      NamespaceInstance instance = currentContext.getUriMap().get(uri);
+      if (instance != null && !instance.isInUse())
+      {
+        instance.setInUse(true);
+      }
+    }
+  }
+
+  private void recordUriUse(String uri)
+  {
+    NamespaceContext currentContext = contexts.peek();
+    if (uri != null)
+    {
+      NamespaceInstance instance = currentContext.getUriMap().get(uri);
+      if (instance != null && !instance.isInUse())
+      {
+        instance.setInUse(true);
+      }
+    }
+  }
+
+  private void popContext(Report report)
+  {
+    NamespaceContext currentContext = contexts.peek();
+    if (0 == currentContext.decrementUseCount())
+    {
+      for (NamespaceInstance instance : currentContext.getUriMap().values())
+      {
+        // report on namespaces that are in this scope (ie, its id matches) and its not in use
+        if (currentContext.getId() == instance.getId() && !instance.isInUse())
+        {
+          report.message(MessageId.HTM_044,  instance.getLocation(), instance.getUri());
+        }
+      }
+      contexts.pop();
+    }
+  }
+
+  public void declareNamespace(String prefix, String uri, MessageLocation location, Report report)
+  {
+    NamespaceContext currentContext = contexts.peek();
+    if (id != currentContext.getId())
+    {
+      NamespaceContext newContext = new NamespaceContext(id, currentContext);
+      contexts.push(newContext);
+      currentContext = newContext;
+    }
+    currentContext.getPrefixMap().put(prefix, uri);
+    currentContext.getUriMap().put(uri, new NamespaceInstance(id, prefix, uri, location));
+    if (!isExpectedNamespace(uri))
+    {
+      report.message(MessageId.HTM_010,  location, uri);
+    }
+  }
+
+  static final Pattern xmlnsUriPattern = Pattern.compile("xmlns:([a-zA-Z]+)");
+  public void onStartElement(String fileName, Locator locator, String uri, String qName, Attributes attributes, Report report)
+  {
+
+    pushContext();
+
+    for (int i = 0; i < attributes.getLength(); ++i)
+    {
+      String aqName = attributes.getQName(i);
+      Matcher m = xmlnsUriPattern.matcher(aqName);
+      if (m.matches())
+      {
+        // the group holds the prefix, the value holds the uri
+        declareNamespace(m.group(1), attributes.getValue(i), new MessageLocation(fileName, locator.getLineNumber(), locator.getColumnNumber(), aqName), report);
+      }
+      else
+      {
+        String foundPrefix = findMatchingPrefix(aqName);
+        if (foundPrefix != null)
+        {
+          recordPrefixUse(foundPrefix);
+        }
+      }
+    }
+
+    String prefix = findMatchingPrefix(qName);
+    if (prefix != null && prefix.length() > 0)
+    {
+      recordPrefixUse(prefix);
+    }
+
+    if (uri != null && uri.length() > 0)
+    {
+      recordUriUse(uri);
+    }
+  }
+
+  public void onEndElement(Report report)
+  {
+    popContext(report);
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/OPSType.java b/src/main/java/com/adobe/epubcheck/util/OPSType.java
new file mode 100644
index 0000000..bb80d9c
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/OPSType.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.util;
+
+public class OPSType
+{
+  private final EPUBVersion version;
+  private final String mimeType;
+
+  public OPSType(String mimeType, EPUBVersion version)
+  {
+    if (mimeType == null)
+    {
+      mimeType = "";
+    }
+    this.mimeType = mimeType;
+    this.version = version;
+  }
+
+  public boolean equals(Object obj)
+  {
+    if (!(obj instanceof OPSType))
+    {
+      return false;
+    }
+
+    OPSType Obj = (OPSType) obj;
+
+    return this.version == Obj.version
+        && this.mimeType.equals(Obj.mimeType);
+  }
+
+  public int hashCode()
+  {
+    return (mimeType.hashCode() * version.ordinal());
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/PathUtil.java b/src/main/java/com/adobe/epubcheck/util/PathUtil.java
new file mode 100755
index 0000000..dc8662d
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/PathUtil.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.util;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.Stack;
+import java.util.StringTokenizer;
+
+public class PathUtil
+{
+  static final String workingDirectory  = System.getProperty("user.dir");
+
+  public static String resolveRelativeReference(String base, String ref,
+			String baseRewrite) throws IllegalArgumentException {
+
+    //baseRewrite is null unless head/base or xml:base is set in the instance
+    String actualBase = base;
+    if (baseRewrite != null && baseRewrite.length() > 0 && !baseRewrite.equals("."))
+    {
+
+      actualBase = baseRewrite;
+    }
+
+    if (ref.startsWith("data:") || ref.startsWith("http:"))
+    {
+      return ref;
+    }
+    try
+    {
+      ref = URLDecoder.decode(ref.replace("+", "%2B"), "UTF-8");
+    }
+    catch (UnsupportedEncodingException e)
+    {
+      // UTF-8 is guaranteed to be supported
+      throw new InternalError(e.toString());
+    }
+
+    if (ref.startsWith("#"))
+    {
+      int index = actualBase.indexOf("#");
+      if (index < 0)
+      {
+        ref = actualBase + ref;
+      }
+      else
+      {
+        ref = actualBase.substring(0, index) + ref;
+      }
+    }
+    else
+    {
+      int index = actualBase.lastIndexOf("/");
+      ref = actualBase.substring(0, index + 1) + ref;
+    }
+    return normalizePath(ref);
+  }
+
+	public static String normalizePath(String path)throws IllegalArgumentException 
+	{
+			
+		// Test for any ../ or ./
+		if (!path.contains("./"))
+		{
+			return path;
+    }
+
+    Stack<String> pathSegments = new Stack<String>();
+    StringTokenizer tokenizer = new StringTokenizer(path, "/");
+    while (tokenizer.hasMoreTokens())
+    {
+      String pathSegment = tokenizer.nextToken();
+			if (".".equals(pathSegment))
+			{
+			  continue;
+			}
+			if ("..".equals(pathSegment)) 
+			{
+				if (pathSegments.size() == 0)
+				{
+					throw new IllegalArgumentException("Invalid path: " + path);
+				}
+				pathSegments.pop();
+			}
+		    else
+		    {
+				pathSegments.push(pathSegment);
+			}
+		}
+		StringBuilder sb = new StringBuilder(path.length());
+		int len = pathSegments.size();
+		for (int i = 0; i < len; i++)
+    {
+			if (i != 0)
+      {
+        sb.append('/');
+      }
+			sb.append(pathSegments.elementAt(i));
+		}
+		return sb.toString();
+	}
+
+  public static String removeWorkingDirectory(String path)
+  {
+    if (path == null || path.length() == 0)
+    {
+      return path;
+    }
+    return path.replace(workingDirectory, ".");
+  }
+
+
+  public static String removeAnchor(String href)
+  {
+    int index = href.indexOf("#");
+    if (index == -1)
+    {
+      return href;
+    }
+    return (href.substring(0, index));
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/ReportingLevel.java b/src/main/java/com/adobe/epubcheck/util/ReportingLevel.java
new file mode 100644
index 0000000..9a76c92
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/ReportingLevel.java
@@ -0,0 +1,45 @@
+package com.adobe.epubcheck.util;
+
+import com.adobe.epubcheck.messages.Severity;
+
+public class ReportingLevel
+{
+  static public final int Fatal = 5;
+  static public final int Error = 4;
+  static public final int Warning = 3;
+  static public final int Info = 2;
+  static public final int Usage = 1;
+  static public final int Suppressed = 0;
+
+  public static int getReportingLevel(Severity severity)
+  {
+    if (severity == Severity.FATAL)
+    {
+      return Fatal;
+    }
+    else if (severity == Severity.ERROR)
+    {
+      return Error;
+    }
+    else if (severity == Severity.WARNING)
+    {
+      return Warning;
+    }
+    else if (severity == Severity.INFO)
+    {
+      return Info;
+    }
+    else if (severity == Severity.USAGE)
+    {
+      return Usage;
+    }
+    else if (severity == Severity.SUPPRESSED)
+    {
+      return Suppressed;
+    }
+    else
+    {
+      return -1;
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/ResourceUtil.java b/src/main/java/com/adobe/epubcheck/util/ResourceUtil.java
new file mode 100755
index 0000000..006b7d5
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/ResourceUtil.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.util;
+
+import java.io.InputStream;
+import java.net.URL;
+
+public class ResourceUtil
+{
+  public static String getResourcePath(String localName)
+  {
+    String classPath = ResourceUtil.class.getName().replace('.', '/');
+    String classPackage = classPath
+        .substring(0, classPath.lastIndexOf("/"));
+    String projectPackage = classPackage.substring(0,
+        classPackage.lastIndexOf("/"));
+    return projectPackage + "/" + localName;
+  }
+
+  public static String getExtension(String path)
+  {
+    int index = path.lastIndexOf(".");
+    if (index > 0)
+    {
+      return path.substring(index + 1);
+    }
+    return null;
+  }
+
+  public static InputStream getResourceStream(String resourcePath)
+  {
+    ClassLoader loader = ResourceUtil.class.getClassLoader();
+    if (loader == null)
+    {
+      return ClassLoader.getSystemResourceAsStream(resourcePath);
+    }
+    else
+    {
+      return loader.getResourceAsStream(resourcePath);
+    }
+  }
+
+  public static URL getResourceURL(String resourcePath)
+  {
+    ClassLoader loader = ResourceUtil.class.getClassLoader();
+    if (loader == null)
+    {
+      return ClassLoader.getSystemResource(resourcePath);
+    }
+    else
+    {
+      return loader.getResource(resourcePath);
+    }
+  }
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/SearchDictionary.java b/src/main/java/com/adobe/epubcheck/util/SearchDictionary.java
new file mode 100644
index 0000000..ef6eb2a
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/SearchDictionary.java
@@ -0,0 +1,188 @@
+package com.adobe.epubcheck.util;
+
+import com.adobe.epubcheck.messages.MessageId;
+
+import java.util.Vector;
+
+public class SearchDictionary
+{
+
+  public enum DictionaryType
+  {
+    VALID_TEXT_MEDIA_TYPES, CSS_FILES, CSS_VALUES, LINK_VALUES, SVG_MEDIA_TYPES
+  }
+
+
+  public SearchDictionary(DictionaryType dt)
+  {
+    if (dt.equals(DictionaryType.VALID_TEXT_MEDIA_TYPES))
+    {
+      buildValidTypesDictionary();
+    }
+    if (dt.equals(DictionaryType.CSS_VALUES))
+    {
+      buildCssSearchDictionary();
+    }
+    if (dt.equals(DictionaryType.CSS_FILES))
+    {
+      buildCSSTypesDictionary();
+    }
+    if (dt.equals(DictionaryType.LINK_VALUES))
+    {
+      buildLinkSearchDictionary();
+    }
+    if (dt.equals(DictionaryType.SVG_MEDIA_TYPES))
+    {
+      buildSVGSearchDictionary();
+    }
+  }
+
+  private final Vector<TextSearchDictionaryEntry> v = new Vector<TextSearchDictionaryEntry>();
+  private final Vector<TextSearchDictionaryEntry> e = new Vector<TextSearchDictionaryEntry>();
+/*
+	String[] validTypes = new String[] 
+	    { "application/xhtml+xml",
+			"application/x-dtbncx+xml", "text/css" };
+	
+	*/
+
+  void buildCSSTypesDictionary()
+  {
+    String description;
+    String value;
+    TextSearchDictionaryEntry de;
+
+
+    //search eval() expression
+    description = "text/css";
+    value = "text/css";
+    de = new TextSearchDictionaryEntry(description, value, MessageId.CSS_009);
+    v.add(de);
+
+
+  }
+
+
+  void buildCssSearchDictionary()
+  {
+    String description;
+    String value;
+    TextSearchDictionaryEntry de;
+
+
+    //search eval() expression
+    description = "rotateX()";
+    value = "rotateX()";
+    de = new TextSearchDictionaryEntry(description, value, MessageId.CSS_009);
+    v.add(de);
+
+    description = "rotateY()";
+    value = "rotateY()";
+    de = new TextSearchDictionaryEntry(description, value, MessageId.CSS_009);
+    v.add(de);
+
+
+    description = "column-count";
+    value = "column-count";
+    de = new TextSearchDictionaryEntry(description, value, MessageId.CSS_009);
+    v.add(de);
+
+    description = "column-gap";
+    value = "column-gap";
+    de = new TextSearchDictionaryEntry(description, value, MessageId.CSS_009);
+    v.add(de);
+
+    description = "column-rule";
+    value = "column-rule";
+    de = new TextSearchDictionaryEntry(description, value, MessageId.CSS_009);
+    v.add(de);
+
+    description = "keyframes";
+    value = "keyframes";
+    de = new TextSearchDictionaryEntry(description, value, MessageId.CSS_009);
+    v.add(de);
+
+    description = "transition";
+    value = "transition";
+    de = new TextSearchDictionaryEntry(description, value, MessageId.CSS_009);
+    v.add(de);
+
+  }
+
+  void buildValidTypesDictionary()
+  {
+    String description;
+    String value;
+    TextSearchDictionaryEntry de;
+
+    description = "application/xhtml+xml";
+    value = "application/xhtml+xml";
+    de = new TextSearchDictionaryEntry(description, value, null);
+    v.add(de);
+  }
+
+  void buildLinkSearchDictionary()
+  {
+    String description;
+    String value;
+    TextSearchDictionaryEntry de;
+
+
+    description = "Http:";
+    value = "[Hh][Tt][Tt][Pp]*\\:";
+    de = new TextSearchDictionaryEntry(description, value, MessageId.HTM_005);
+    v.add(de);
+
+    description = "Ftp:";
+    value = "[Ff][Tt][Pp]*\\:";
+    de = new TextSearchDictionaryEntry(description, value, MessageId.HTM_005);
+    v.add(de);
+
+    description = "File:";
+    value = "[Ff][Ii][Ll][Ee]*\\:";
+    de = new TextSearchDictionaryEntry(description, value, MessageId.HTM_005);
+    v.add(de);
+
+  }
+
+  public Vector<TextSearchDictionaryEntry> getDictEntries()
+  {
+    return v;
+  }
+
+  public Vector<TextSearchDictionaryEntry> getExceptionEntries()
+  {
+    return e;
+  }
+
+  void buildSVGSearchDictionary()
+  {
+    String description;
+    String value;
+    TextSearchDictionaryEntry de;
+
+    description = "image/svg+xml";
+    value = "image/svg+xml";
+    de = new TextSearchDictionaryEntry(description, value, null);
+    v.add(de);
+  }
+
+  public boolean isValidMediaType(String typeToCheck)
+  {
+    if (typeToCheck == null)
+    {
+      return false;
+    }
+
+    for (int i = 0; i < getDictEntries().size(); i++)
+    {
+      if ((getDictEntries().get(i).getRegexExp()).compareToIgnoreCase(typeToCheck) == 0)
+      {
+        return true;
+      }
+    }
+    return false;
+  }
+
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/TextSearchDictionaryEntry.java b/src/main/java/com/adobe/epubcheck/util/TextSearchDictionaryEntry.java
new file mode 100644
index 0000000..91805b1
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/TextSearchDictionaryEntry.java
@@ -0,0 +1,47 @@
+package com.adobe.epubcheck.util;
+
+import com.adobe.epubcheck.messages.MessageId;
+
+import java.util.regex.Pattern;
+
+public class TextSearchDictionaryEntry
+{
+
+  private String searchedValue;
+  private String regexExp;
+  private MessageId errorCode;
+  private Pattern pattern;
+
+  public TextSearchDictionaryEntry(String searchedValue, String regex, MessageId errorCode)
+  {
+    this.searchedValue = searchedValue;
+    this.regexExp = regex;
+    this.errorCode = errorCode;
+    this.pattern = null;
+  }
+
+  public String getSearchedValue()
+  {
+    return searchedValue;
+  }
+
+  public String getRegexExp()
+  {
+    return regexExp;
+  }
+
+  public MessageId getErrorCode()
+  {
+    return errorCode;
+  }
+
+  public Pattern getPattern()
+  {
+    if (pattern == null)
+    {
+      pattern = Pattern.compile(this.getRegexExp());
+    }
+    return pattern;
+  }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/adobe/epubcheck/util/URLResourceProvider.java b/src/main/java/com/adobe/epubcheck/util/URLResourceProvider.java
new file mode 100644
index 0000000..f3d1a2a
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/URLResourceProvider.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.util;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+public class URLResourceProvider implements GenericResourceProvider
+{
+
+  private URL url;
+
+  public URLResourceProvider(String url)
+  {
+    try
+    {
+      this.url = new URL(url);
+    }
+    catch (MalformedURLException e)
+    {
+      throw new RuntimeException(e);
+    }
+  }
+
+  public InputStream getInputStream(String ignore) throws
+      IOException
+  {
+    return url.openStream();
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/WriterReportImpl.java b/src/main/java/com/adobe/epubcheck/util/WriterReportImpl.java
new file mode 100644
index 0000000..323ee6d
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/WriterReportImpl.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+package com.adobe.epubcheck.util;
+
+import com.adobe.epubcheck.api.MasterReport;
+import com.adobe.epubcheck.messages.Message;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.messages.Severity;
+
+import java.io.PrintWriter;
+
+public class WriterReportImpl extends MasterReport
+{
+  static boolean DEBUG = false;
+	boolean quiet;
+  final PrintWriter out;
+
+  public WriterReportImpl(PrintWriter out)
+  {
+    this(out, "", false);
+  }
+
+  public WriterReportImpl(PrintWriter out, String info)
+  {
+    this(out, info, false);
+	}
+	
+	public WriterReportImpl(PrintWriter out, String info, boolean quiet)
+  {
+    this.out = out;
+    warning("", 0, 0, info);
+		this.quiet = quiet;
+  }
+
+  String fixMessage(String message)
+  {
+	if (message == null) return "";
+    return message.replaceAll("[\\s]+", " ");
+  }
+
+  @Override
+  public void message(Message message, MessageLocation location, Object... args)
+  {
+    if (message.getSeverity().equals(Severity.ERROR))
+    {
+      error(PathUtil.removeWorkingDirectory(location.getFileName()), location.getLine(), location.getColumn(), message.getMessage(args));
+    }
+    else if (message.getSeverity().equals(Severity.WARNING))
+    {
+      warning(PathUtil.removeWorkingDirectory(location.getFileName()), location.getLine(), location.getColumn(), message.getMessage(args));
+    }
+    else if (message.getSeverity().equals(Severity.FATAL))
+    {
+      fatalError(PathUtil.removeWorkingDirectory(location.getFileName()), location.getLine(), location.getColumn(), message.getMessage(args));
+    }
+  }
+
+  void error(String resource, int line, int column, String message)
+  {
+    message = fixMessage(message);
+    out.println("ERROR: "
+        + (resource == null ? "[top level]" : resource)
+        + (line <= 0 ? "" : "(" + line
+        + (column <= 0 ? "" : "," + column) + ")") + ": "
+        + message);
+  }
+
+  void fatalError(String resource, int line, int column, String message)
+  {
+    message = fixMessage(message);
+    out.println("ERROR: "
+        + (resource == null ? "[top level]" : resource)
+        + (line <= 0 ? "" : "(" + line
+        + (column <= 0 ? "" : "," + column) + ")") + ": "
+        + message);
+  }
+
+  void warning(String resource, int line, int column, String message)
+  {
+    message = fixMessage(message);
+    out.println("WARNING: "
+        + (resource == null ? "[top level]" : resource)
+        + (line <= 0 ? "" : "(" + line
+        + (column <= 0 ? "" : "," + column) + ")") + ": "
+        + message);
+  }
+
+  @Override
+  public void info(String resource, FeatureEnum feature, String value)
+  {
+    if (ReportingLevel.Info >= getReportingLevel())
+    {
+      switch (feature)
+      {
+        case FORMAT_VERSION:
+          if (DEBUG && !quiet)
+          {
+            outWriter.println(String.format(Messages.get("validating_version_message"), value));
+          }
+          break;
+        default:
+          if (!quiet)
+          {
+            if (resource == null)
+            {
+              outWriter.println("INFO: [" + feature + "]=" + value);
+            }
+            else
+            {
+              outWriter.println("INFO: [" + feature + " (" +
+                  resource + ")]=" + value);
+            }
+          }
+          break;
+      }
+    }
+  }
+
+  public void initialize()
+  {
+  }
+	
+	public void hint(String resource, int line, int column, String message)
+  {
+		if (!quiet)
+    {
+          out.println("HINT: " + (resource == null ? "[top level]" : resource)
+          + (line <= 0 ? "" : "(" + line
+              + (column <= 0 ? "" : "," + column) + ")") + ": "
+          + message);
+      }
+
+	}
+
+  public int generate()
+  {
+    out.flush();
+    return 0;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/XmlReportAbstract.java b/src/main/java/com/adobe/epubcheck/util/XmlReportAbstract.java
new file mode 100644
index 0000000..9404274
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/XmlReportAbstract.java
@@ -0,0 +1,319 @@
+package com.adobe.epubcheck.util;
+
+import com.adobe.epubcheck.api.MasterReport;
+import com.adobe.epubcheck.messages.Message;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.messages.Severity;
+import com.adobe.epubcheck.reporting.CheckMessage;
+
+import java.io.*;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+import org.javatuples.KeyValue;
+
+
+public abstract class XmlReportAbstract extends MasterReport
+{
+  protected final File outputFile;
+  protected PrintWriter out;
+
+  protected String epubCheckName = "epubcheck";
+  protected String epubCheckVersion;
+  protected String epubCheckDate = "2012-10-31"; // default date to be overiden by the property
+  protected String generationDate;
+
+  protected String creationDate;
+  protected String lastModifiedDate;
+  protected String identifier;
+  protected Set<String> titles = new LinkedHashSet<String>();
+  protected final Set<String> creators = new LinkedHashSet<String>();
+  protected final Set<String> contributors = new LinkedHashSet<String>();
+  protected final Set<String> subjects = new LinkedHashSet<String>();
+  protected String publisher;
+  protected final Set<String> rights = new LinkedHashSet<String>();
+  protected String date;
+
+  protected String formatName;
+  protected String formatVersion;
+  protected long pagesCount;
+  protected long charsCount;
+  protected String language;
+  protected final Set<String> embeddedFonts = new LinkedHashSet<String>();
+  protected final Set<String> refFonts = new LinkedHashSet<String>();
+  protected final Set<String> references = new LinkedHashSet<String>();
+  protected boolean hasEncryption;
+  protected boolean hasSignatures;
+  protected boolean hasAudio;
+  protected boolean hasVideo;
+  protected boolean hasFixedLayout;
+  protected boolean hasScripts;
+
+  protected final List<CheckMessage> warns = new ArrayList<CheckMessage>();
+  protected final List<CheckMessage> errors = new ArrayList<CheckMessage>();
+  protected final List<CheckMessage> fatalErrors = new ArrayList<CheckMessage>();
+  protected final List<CheckMessage> hints = new ArrayList<CheckMessage>();
+
+  public XmlReportAbstract(File out, String ePubName, String versionEpubCheck)
+  {
+    this.outputFile = out;
+    this.setEpubFileName(PathUtil.removeWorkingDirectory(ePubName));
+    this.epubCheckVersion = versionEpubCheck;
+  }
+
+  public void initialize()
+  {
+  }
+
+  @Override
+  public void close()
+  {
+  }
+
+  @Override
+  public void message(Message message, MessageLocation location, Object... args)
+  {
+	Severity s = message.getSeverity();
+	switch (s) {
+	case FATAL:
+        CheckMessage.addCheckMessage(fatalErrors, message, location, args);
+        break;
+	case ERROR:
+        CheckMessage.addCheckMessage(errors, message, location, args);
+        break;
+	case WARNING:
+        CheckMessage.addCheckMessage(warns, message, location, args);
+        break;
+	case USAGE:
+        CheckMessage.addCheckMessage(hints, message, location, args);
+        break;
+	}
+  }
+
+  @Override
+  public void info(String resource, FeatureEnum feature, String value)
+  {
+    switch (feature)
+    {
+      case TOOL_DATE:
+    	if (value != null && !value.startsWith("$")) {
+    		this.epubCheckDate = value;
+    	}
+    	break;
+      case TOOL_NAME:
+        this.epubCheckName = value;
+        break;
+      case TOOL_VERSION:
+        this.epubCheckVersion = value;
+        break;
+      case FORMAT_NAME:
+        this.formatName = value;
+        break;
+      case FORMAT_VERSION:
+        this.formatVersion = value;
+        break;
+      case CREATION_DATE:
+        this.creationDate = value;
+        break;
+      case MODIFIED_DATE:
+        this.lastModifiedDate = value;
+        break;
+      case PAGES_COUNT:
+        this.pagesCount = Long.parseLong(value);
+        break;
+      case CHARS_COUNT:
+        this.charsCount += Long.parseLong(value);
+        break;
+      case DECLARED_MIMETYPE:
+        if (value != null && value.startsWith("audio/")) {
+          this.hasAudio = true;
+        } else if (value != null && value.startsWith("video/")) {
+          this.hasVideo = true;
+        }
+        break;
+      case FONT_EMBEDDED:
+        this.embeddedFonts.add(value);
+        break;
+      case FONT_REFERENCE:
+        this.refFonts.add(value);
+        break;
+      case REFERENCE:
+        this.references.add(value);
+        break;
+      case DC_LANGUAGE:
+        this.language = value;
+        break;
+      case DC_TITLE:
+        this.titles.add(value);
+        break;
+      case DC_CREATOR:
+        this.creators.add(value);
+        break;
+      case DC_CONTRIBUTOR:
+        this.contributors.add(value);
+        break;
+      case DC_PUBLISHER:
+        this.publisher = value;
+        break;
+      case DC_SUBJECT:
+          this.subjects.add(value);
+          break;
+      case DC_RIGHTS:
+        this.rights.add(value);
+        break;
+      case DC_DATE:
+        this.date = value;
+        break;
+      case UNIQUE_IDENT:
+        if (resource == null) {
+    	  this.identifier = value;
+    	}
+        break;
+      case HAS_SIGNATURES:
+        this.hasSignatures = true;
+        break;
+      case HAS_ENCRYPTION:
+        this.hasEncryption = true;
+        break;
+      case HAS_FIXED_LAYOUT:
+        this.hasFixedLayout = true;
+        break;
+      case HAS_SCRIPTS:
+        this.hasScripts = true;
+        break;
+    }
+  }
+
+  protected String getNameFromPath(String path)
+  {
+    if (path == null || path.length() == 0)
+    {
+      return null;
+    }
+    int lastSlash = path.lastIndexOf('/');
+    if (lastSlash == -1)
+    {
+      return path;
+    }
+    else
+    {
+      return path.substring(lastSlash + 1);
+    }
+  }
+
+  public abstract int generate();
+
+  protected void output(int ident, String value)
+  {
+	if (ident != 0) {
+	    char[] spaces = new char[ident];
+	    Arrays.fill(spaces, ' ');
+	    out.print(spaces);
+    }
+    out.println(value);
+  }
+
+  protected String capitalize(String in) {
+	  StringBuilder sb = new StringBuilder();
+	  for (int i = 0; i < in.length(); i++) {
+		  char c = in.charAt(i);
+		  if (i == 0) sb.append(Character.toUpperCase(c));
+		  else sb.append(c);
+	  }
+	  return sb.toString();
+  }
+  
+  protected void startElement(int ident, String name, List<KeyValue<String, String>> attrs) {
+	    if (name == null || name.trim().length() == 0)
+	    {
+	      return;
+	    }
+	    StringBuilder sb = new StringBuilder();
+	    sb.append('<').append(name);
+	    if (attrs != null && attrs.size() != 0) {
+	    	for (KeyValue<String,String> attr : attrs) {
+		    	sb.append(' ').append(attr.getKey()).append("=\"");
+	    		sb.append(encodeContent(attr.getValue())).append('"');
+		    }
+	    }
+	    sb.append('>');
+	    output(ident, sb.toString());
+}
+  protected void startElement(int ident, String name, KeyValue<String, String> ... attrs) {
+	  startElement(ident, name, Arrays.asList(attrs));
+  }
+  protected void startElement(int ident, String name) {
+	  startElement(ident, name, (List<KeyValue<String, String>>)null);
+  }
+  
+  protected void endElement(int ident, String name) {
+	    if (name == null || name.trim().length() == 0)
+	    {
+	      return;
+	    }
+	    StringBuilder sb = new StringBuilder();
+	    sb.append("</").append(name).append('>');
+	    output(ident, sb.toString());
+}
+  
+  protected void generateElement(int ident, String name, String value)
+  {
+    if (value == null || value.trim().length() == 0)
+    {
+      return;
+    }
+    StringBuilder sb = new StringBuilder();
+    sb.append('<').append(name).append('>');
+    sb.append(encodeContent(value.trim()));
+    sb.append("</").append(name).append('>');
+    output(ident, sb.toString());
+  }
+
+  /**
+   * Encodes a content String in XML-clean form, converting characters
+   * to entities as necessary.  The null string will be
+   * converted to an empty string.
+   */
+  protected static String encodeContent(String content)
+  {
+    if (content == null)
+    {
+      content = "";
+    }
+    StringBuilder buffer = new StringBuilder(content);
+
+    int n = 0;
+    while ((n = buffer.indexOf("&", n)) > -1)
+    {
+      buffer.insert(n + 1, "amp;");
+      n += 5;
+    }
+    n = 0;
+    while ((n = buffer.indexOf("<", n)) > -1)
+    {
+      buffer.replace(n, n + 1, "<");
+      n += 4;
+    }
+    n = 0;
+    while ((n = buffer.indexOf(">", n)) > -1)
+    {
+      buffer.replace(n, n + 1, ">");
+      n += 4;
+    }
+
+    return buffer.toString();
+  }
+
+  /**
+   * Transform time into ISO 8601 string.
+   */
+  protected static String fromTime(final long time)
+  {
+    Date date = new Date(time);
+        // Waiting for Java 7: SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
+    String formatted = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
+        .format(date);
+    return formatted.substring(0, 22) + ":" + formatted.substring(22);
+  }
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/XmlReportImpl.java b/src/main/java/com/adobe/epubcheck/util/XmlReportImpl.java
new file mode 100644
index 0000000..463ba6f
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/XmlReportImpl.java
@@ -0,0 +1,305 @@
+package com.adobe.epubcheck.util;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.PrintWriter;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.javatuples.KeyValue;
+
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.reporting.CheckMessage;
+
+
+public class XmlReportImpl extends XmlReportAbstract
+{
+
+  public XmlReportImpl(File out, String ePubName, String versionEpubCheck)
+  {
+	  super(out, ePubName, versionEpubCheck);
+  }
+
+
+  @SuppressWarnings("unchecked")
+  public int generate()
+  {
+    int returnCode = 1;
+    out = null;
+    int ident = 0;
+    
+    generationDate = fromTime(System.currentTimeMillis());
+    try
+    {
+      out = new PrintWriter(outputFile, "UTF-8");
+      output(ident, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+	  List<KeyValue<String, String>> attrs = new ArrayList<KeyValue<String, String>>();
+	  attrs.add(KeyValue.with("xmlns", "http://hul.harvard.edu/ois/xml/ns/jhove"));
+	  attrs.add(KeyValue.with("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"));
+	  // attrs.add(KeyValue.with("xsi:schemaLocation", "http://hul.harvard.edu/ois/xml/ns/jhove jhove.xsd"));
+	  attrs.add(KeyValue.with("name", epubCheckName));
+	  attrs.add(KeyValue.with("release", epubCheckVersion)); 
+	  attrs.add(KeyValue.with("date", epubCheckDate));
+	  startElement(ident++, "jhove", attrs);
+
+	  generateElement(ident, "date", generationDate);
+	  startElement(ident++, "repInfo", KeyValue.with("uri", getNameFromPath(getEpubFileName())));
+      generateElement(ident, "created", creationDate);
+      generateElement(ident, "lastModified", lastModifiedDate);
+      if (formatName == null) {
+        generateElement(ident, "format", "application/octet-stream");
+      } else {
+        generateElement(ident, "format", formatName); //application/epub+zip
+      }
+      generateElement(ident, "version", formatVersion);
+      String customMessageFileName = this.getCustomMessageFile();
+      if (customMessageFileName != null && !customMessageFileName.isEmpty())
+      {
+        generateElement(ident, "customMessageFileName", customMessageFileName);
+      }
+      if (fatalErrors.isEmpty() && errors.isEmpty())
+      {
+        generateElement(ident, "status", "Well-formed");
+      }
+      else
+      {
+        generateElement(ident, "status", "Not well-formed");
+      }
+      if (!warns.isEmpty() || !fatalErrors.isEmpty() || !errors.isEmpty() || !hints.isEmpty())
+      {
+        startElement(ident++, "messages");
+        for (CheckMessage c : fatalErrors) {
+        	String m = c.getID() + ", FATAL, [" + encodeContent(c.getMessage()) + "], ";
+        	for (MessageLocation ml : c.getLocations()) {
+			  String loc = "";
+			  if (ml.getLine() > 0 || ml.getColumn() > 0) {
+				loc = " (" + ml.getLine() + "-" + ml.getColumn() + ")";
+			  }
+              generateElement(ident, "message", m + PathUtil.removeWorkingDirectory(ml.getFileName()) + loc);
+        	}
+        }
+        for (CheckMessage c : errors) {
+        	String m = c.getID() + ", ERROR, [" + encodeContent(c.getMessage()) + "], ";
+        	for (MessageLocation ml : c.getLocations()) {
+			  String loc = "";
+			  if (ml.getLine() > 0 || ml.getColumn() > 0) {
+				loc = " (" + ml.getLine() + "-" + ml.getColumn() + ")";
+			  }
+              generateElement(ident, "message", m + PathUtil.removeWorkingDirectory(ml.getFileName()) + loc);
+        	}
+        }
+        for (CheckMessage c : warns) {
+        	String m = c.getID() + ", WARN, [" + encodeContent(c.getMessage()) + "], ";
+        	for (MessageLocation ml : c.getLocations()) {
+			  String loc = "";
+			  if (ml.getLine() > 0 || ml.getColumn() > 0) {
+				loc = " (" + ml.getLine() + "-" + ml.getColumn() + ")";
+			  }
+              generateElement(ident, "message", m + PathUtil.removeWorkingDirectory(ml.getFileName()) + loc);
+        	}
+        }
+        for (CheckMessage c : hints) {
+        	String m = c.getID() + ", HINT, [" + encodeContent(c.getMessage()) + "], ";
+        	for (MessageLocation ml : c.getLocations()) {
+			  String loc = "";
+			  if (ml.getLine() > 0 || ml.getColumn() > 0) {
+				loc = " (" + ml.getLine() + "-" + ml.getColumn() + ")";
+			  }
+              generateElement(ident, "message", m + PathUtil.removeWorkingDirectory(ml.getFileName()) + loc);
+        	}
+        }
+        endElement(--ident, "messages");
+      }
+      generateElement(ident, "mimeType", formatName);
+      startElement(ident++, "properties");
+
+      generateProperty(ident, "PageCount", pagesCount);
+      generateProperty(ident, "CharacterCount", charsCount);
+      generateProperty(ident, "Language", language, "String");
+
+  	  startElement(ident++, "property");
+      generateElement(ident, "name", "Info");
+      startElement(ident++, "values", KeyValue.with("arity", "List"), KeyValue.with("type", "Property"));
+
+      generateProperty(ident, "Identifier", identifier, "String");
+      generateProperty(ident, "CreationDate", creationDate, "Date");
+      generateProperty(ident, "ModDate", lastModifiedDate, "Date");
+
+      if (!titles.isEmpty())
+      {
+          String[] cs = titles.toArray(new String[titles.size()]);
+          generateProperty(ident, "Title", cs, "String");
+      }
+      if (!creators.isEmpty())
+      {
+        String[] cs = creators.toArray(new String[creators.size()]);
+        generateProperty(ident, "Creator", cs, "String");
+      }
+      if (!contributors.isEmpty())
+      {
+        String[] cs = contributors.toArray(new String[contributors.size()]);
+        generateProperty(ident, "Contributor", cs, "String");
+      }
+      generateProperty(ident, "Date", date, "String");
+      generateProperty(ident, "Publisher", publisher, "String");
+      if (!subjects.isEmpty())
+      {
+        String[] cs = subjects.toArray(new String[subjects.size()]);
+        generateProperty(ident, "Subject", cs, "String");
+      }
+      if (!rights.isEmpty())
+      {
+        String[] cs = rights.toArray(new String[rights.size()]);
+        generateProperty(ident, "Rights", cs, "String");
+      }
+      endElement(--ident, "values");
+      endElement(--ident, "property");
+
+      if (!embeddedFonts.isEmpty() || !refFonts.isEmpty())
+      {
+ 	    startElement(ident++, "property");
+        generateElement(ident, "name", "Fonts");
+        startElement(ident++, "values", KeyValue.with("arity", "List"), KeyValue.with("type", "Property"));
+
+        for (String f : embeddedFonts)
+        {
+      	  startElement(ident++, "property");
+          generateElement(ident, "name", "Font");
+          startElement(ident++, "values", KeyValue.with("arity", "List"), KeyValue.with("type", "Property"));
+          generateProperty(ident, "FontName", encodeContent(getNameFromPath(f)), "String");
+          generateProperty(ident, "FontFile", false);
+          endElement(--ident, "values");
+          endElement(--ident, "property");
+        }
+        for (String f : refFonts)
+        {
+          startElement(ident++, "property");
+          generateElement(ident, "name", "Font");
+          startElement(ident++, "values", KeyValue.with("arity", "List"), KeyValue.with("type", "Property"));
+          generateProperty(ident, "FontName", encodeContent(getNameFromPath(f)), "String");
+          generateProperty(ident, "FontFile", false);
+          endElement(--ident, "values");
+          endElement(--ident, "property");
+        }
+        
+        endElement(--ident, "values");
+        endElement(--ident, "property");
+      }
+
+      if (!references.isEmpty())
+      {
+    	startElement(ident++, "property");
+    	generateElement(ident++, "name", "References");
+    	startElement(ident++, "values", KeyValue.with("arity", "List"), KeyValue.with("type", "Property"));
+        for (String r : references)
+        {
+          generateProperty(ident, "Reference", encodeContent(r), "String");
+        }
+        endElement(--ident, "values");
+        endElement(--ident, "property");
+      }
+
+      if (hasEncryption)
+      {
+        generateProperty(ident, "hasEncryption", hasEncryption);
+      }
+      if (hasSignatures)
+      {
+        generateProperty(ident, "hasSignatures", hasSignatures);
+      }
+      if (hasAudio)
+      {
+        generateProperty(ident, "hasAudio", hasAudio);
+      }
+      if (hasVideo)
+      {
+        generateProperty(ident, "hasVideo", hasVideo);
+      }
+      if (hasFixedLayout)
+      {
+        generateProperty(ident, "hasFixedLayout", hasFixedLayout);
+      }
+      if (hasScripts)
+      {
+        generateProperty(ident, "hasScripts", hasScripts);
+      }
+
+      endElement(--ident, "properties");
+      endElement(--ident, "repInfo");
+      endElement(--ident, "jhove");
+      returnCode = 0;
+    }
+    catch (FileNotFoundException e)
+    {
+      System.err.println("FileNotFound error: " + e.getMessage());
+      returnCode = 1;
+    }
+    catch (UnsupportedEncodingException e)
+    {
+      System.err.println("FileNotFound error: " + e.getMessage());
+      returnCode = 1;
+    }
+    catch (Exception e)
+    {
+      System.err.println("Exception encountered: " + e.getMessage());
+      returnCode = 1;
+    }
+    finally
+    {
+      if (out != null)
+      {
+        out.close();
+      }
+    }
+    return returnCode;
+  }
+
+  @SuppressWarnings("unchecked")
+  private void generateProperty(int ident, String name, String[] value, String type)
+  {
+    if (value == null || value.length == 0)
+    {
+      return;
+    }
+	startElement(ident++, "property");
+    generateElement(ident, "name", name);
+    startElement(ident++, "values", KeyValue.with("arity", value.length == 1 ? "Scalar" : "Array"), KeyValue.with("type", type));
+    for (String v : value)
+    {
+      generateElement(ident, "value", v);
+    }
+    endElement(--ident, "values");
+    endElement(--ident, "property");
+  }
+
+  @SuppressWarnings("unchecked")
+  private void generateProperty(int ident, String name, String value, String type)
+  {
+    if (value == null || value.trim().length() == 0)
+    {
+      return;
+    }
+	startElement(ident++, "property");
+    generateElement(ident, "name", name);
+    startElement(ident++, "values", KeyValue.with("arity", "Scalar"), KeyValue.with("type", type));
+    generateElement(ident, "value", value);
+    endElement(--ident, "values");
+    endElement(--ident, "property");
+  }
+
+  private void generateProperty(int ident, String name, long value)
+  {
+    if (value == 0)
+    {
+      return;
+    }
+    generateProperty(ident, name, Long.toString(value), "Long");
+  }
+
+  private void generateProperty(int ident, String name, boolean value)
+  {
+    generateProperty(ident, name, value ? "true" : "false", "Boolean");
+  }
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/XmpReportImpl.java b/src/main/java/com/adobe/epubcheck/util/XmpReportImpl.java
new file mode 100644
index 0000000..95c5334
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/XmpReportImpl.java
@@ -0,0 +1,247 @@
+package com.adobe.epubcheck.util;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.PrintWriter;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.javatuples.KeyValue;
+
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.reporting.CheckMessage;
+
+
+public class XmpReportImpl extends XmlReportAbstract
+{
+
+  public XmpReportImpl(File out, String ePubName, String versionEpubCheck)
+  {
+	  super(out, ePubName, versionEpubCheck);
+  }
+
+
+  @SuppressWarnings("unchecked")
+  public int generate()
+  {
+    int returnCode = 1;
+    out = null;
+    int ident = 0;
+    
+    generationDate = fromTime(System.currentTimeMillis());
+    try
+    {
+      out = new PrintWriter(outputFile, "UTF-8");
+      output(ident, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+	  startElement(ident++, "x:xmpmeta", 
+			  KeyValue.with("xmlns:x", "adobe:ns:meta/"), 
+			  KeyValue.with("x:xmptk", "Adobe XMP Core 5.1.0-jc003") 
+	  );
+	  startElement(ident++, "rdf:RDF", 
+			  KeyValue.with("xmlns:rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#")
+	  );
+	  List<KeyValue<String, String>> attrs = new ArrayList<KeyValue<String, String>>();
+	  attrs.add(KeyValue.with("rdf:about", ""));
+	  attrs.add(KeyValue.with("xmlns:dc", "http://purl.org/dc/elements/1.1/"));
+	  attrs.add(KeyValue.with("xmlns:xmp", "http://ns.adobe.com/xap/1.0/"));
+	  attrs.add(KeyValue.with("xmlns:xmpTPg", "http://ns.adobe.com/xap/1.0/t/pg/"));
+	  attrs.add(KeyValue.with("stFnt", "http:ns.adobe.com/xap/1.0/sType/Font#")); 
+	  attrs.add(KeyValue.with("xmlns:cp", "http://schemas.openxmlformats.org/package/2006/metadata/core-properties/"));
+	  attrs.add(KeyValue.with("xmlns:extended-properties", "http://schemas.openxmlformats.org/officeDocument/2006/extended-properties/"));
+	  attrs.add(KeyValue.with("xmlns:premis", "http://www.loc.gov/premis/rdf/v1"));
+      if (formatName == null) {
+    	  attrs.add(KeyValue.with("dc:format", "application/octet-stream"));
+      } else {
+    	  if (formatVersion == null) {
+    		  attrs.add(KeyValue.with("dc:format", formatName));
+    	  } else {
+    		  attrs.add(KeyValue.with("dc:format", formatName + ";version=" + formatVersion));
+    	  }
+      }
+	  if (creationDate != null) {
+		  attrs.add(KeyValue.with("xmp:CreateDate", creationDate));
+	  }
+	  if (charsCount != 0) {
+		  attrs.add(KeyValue.with("extended-properties:Characters", Long.toString(charsCount)));
+	  }
+	  if (pagesCount != 0) {
+		  attrs.add(KeyValue.with("xmpTPg:NPage", Long.toString(pagesCount)));
+	  }
+	  if (publisher != null) {
+		  attrs.add(KeyValue.with("dc:publisher", publisher));
+	  }
+	  attrs.add(KeyValue.with("dc:identifier", identifier));
+	  if (language != null) {
+		  attrs.add(KeyValue.with("dc:language", language));
+	  }
+	  
+	  startElement(ident++, "rdf:Description", attrs);
+	  
+	  // DC
+	  if (!creators.isEmpty()) {
+		  startElement(ident++, "dc:creator");
+		  startElement(ident++, "rdf:Seq");
+		  for (String creator : creators) {
+			  generateElement(ident,  "rdf:li", creator);
+		  }
+		  endElement(--ident, "rdf:Seq");
+		  endElement(--ident, "dc:creator");
+	  }
+	  if (!titles.isEmpty()) {
+		  startElement(ident++, "dc:title");
+		  startElement(ident++, "rdf:Alt");
+		  boolean first = true;
+		  for (String title : titles) {
+			  if (first) { 
+				  output(ident, "<rdf:li xml:lang=\"x-default\">" + title + "</rdf:li>");
+				  first =false;
+			  } else {
+				  generateElement(ident,  "rdf:li", title);
+			  }
+		  }
+		  endElement(--ident, "rdf:Alt");
+		  endElement(--ident, "dc:title");
+	  }
+	  if (!subjects.isEmpty()) {
+		  startElement(ident++, "dc:subject");
+		  startElement(ident++, "rdf:Bag");
+		  for (String subject : subjects) {
+			  generateElement(ident,  "rdf:li", subject);
+		  }
+		  endElement(--ident, "rdf:Bag");
+		  endElement(--ident, "dc:subject");
+	  }
+	  
+	  // Fonts
+	  if (!embeddedFonts.isEmpty() || !refFonts.isEmpty()) {
+		  startElement(ident++, "xmpTPg:Font");
+		  startElement(ident++, "rdf:Bag"); 
+		  for (String font : embeddedFonts) {
+			  generateFont(ident, font);
+		  }
+		  for (String font : refFonts) {
+			  generateFont(ident, font);
+		  }
+		  endElement(--ident, "rdf:Bag");
+		  
+		  endElement(ident++, "xmpTPg:Font");
+	  }	  
+	  
+	  // Premis:event
+	  startElement(ident++, "premis:hasEvent");
+	  generateElement(ident, "premis:hasEventDateTime", generationDate);
+      output(ident, "<premis:hasEventType rdf:resource=\"http://id.loc.gov/vocabulary/preservation/eventType/val\" />");
+      if (fatalErrors.isEmpty() && errors.isEmpty()) {
+        generateElement(ident, "premis:hasEventDetail", "Well-formed");
+      } else {
+        generateElement(ident, "premis:hasEventDetail", "Not well-formed");
+      }
+      generateEventOutcome(ident, fatalErrors, "FATAL");
+      generateEventOutcome(ident, errors, "ERROR");
+      generateEventOutcome(ident, warns, "WARN");
+      generateEventOutcome(ident, hints, "HINT");
+
+	  startElement(ident++, "premis:hasEventRelatedAgent");
+      output(ident, "<premis:hasAgentType rdf:resource=\"http://id.loc.gov/vocabulary/preservation/agentType/sof\" />");
+      if (epubCheckVersion == null) {
+    	  generateElement(ident, "premis:hasAgentName", epubCheckName);
+      } else {
+    	  generateElement(ident, "premis:hasAgentName", epubCheckName + " " + epubCheckVersion);
+      }
+	  endElement(--ident, "premis:hasEventRelatedAgent");
+
+	  endElement(--ident, "premis:hasEvent");
+
+	  // Significant properties
+	  generateSignificantProperty(ident, "renditionLayout", hasFixedLayout?"fixed-layout":"reflowable");
+	  generateSignificantProperty(ident, "isScripted", Boolean.toString(hasScripts));
+	  generateSignificantProperty(ident, "hasEncryption", Boolean.toString(hasEncryption));
+	  generateSignificantProperty(ident, "hasAudio", Boolean.toString(hasAudio));
+	  generateSignificantProperty(ident, "hasVideo", Boolean.toString(hasVideo));
+	  generateSignificantProperty(ident, "hasSignatures", Boolean.toString(hasSignatures));
+	  int nRefs = 0;
+	  for (String ref : references) {
+		  nRefs++;
+		  if (nRefs > 50) {
+			  generateSignificantProperty(ident, "reference", "" + (references.size() - 50) + " more references");
+			  break;
+		  }
+		  generateSignificantProperty(ident, "reference", ref);
+	  }
+	  
+	  endElement(--ident, "rdf:Description");
+	  endElement(--ident, "rdf:RDF");
+	  endElement(--ident, "x:xmpmeta");
+
+	  returnCode = 0;
+    }
+    catch (FileNotFoundException e)
+    {
+      System.err.println("FileNotFound error: " + e.getMessage());
+      returnCode = 1;
+    }
+    catch (UnsupportedEncodingException e)
+    {
+      System.err.println("FileNotFound error: " + e.getMessage());
+      returnCode = 1;
+    }
+    catch (Exception e)
+    {
+      System.err.println("Exception encountered: " + e.getMessage());
+      returnCode = 1;
+    }
+    finally
+    {
+      if (out != null)
+      {
+        out.close();
+      }
+    }
+    return returnCode;
+  }
+
+  protected void generateFont(int ident, String font) {
+	String[] elFont = font.split(",");
+	  startElement(ident++,  "rdf:li");
+	  // stFnt:fontName, stFnt:fontType, stFnt:versionString, stFnt:composite, stFnt:fontFileName
+	  generateElement(ident, "stFnt:fontFamily", capitalize(elFont[0]));
+	  String fontFace = "";
+	  for (int i = 1; i < elFont.length; i++) {
+		  fontFace += capitalize(elFont[i]) + " ";
+	  }
+	  fontFace = fontFace.trim();
+	  if (fontFace.length() == 0) {
+		  generateElement(ident, "stFnt:fontFace", "Regular");
+	  } else {
+		  generateElement(ident, "stFnt:fontFace", fontFace);
+	  }
+	  endElement(--ident,  "rdf:li");
+  }
+
+  private void generateEventOutcome(int ident, List<CheckMessage> messages, String sev) {
+	  	for (CheckMessage c : messages) {
+			startElement(ident++, "premis:hasEventOutcomeInformation");
+			generateElement(ident, "premis:hasEventOutcome", c.getID() + ", " + sev + ", " + encodeContent(c.getMessage()));
+			for (MessageLocation ml : c.getLocations()) {
+				String loc = "";
+				if (ml.getLine() > 0 || ml.getColumn() > 0) {
+					loc = " (" + ml.getLine() + "-" + ml.getColumn() + ")";
+				}
+				startElement(ident++, "premis:hasEventOutcomeDetail");
+				generateElement(ident, "premis:hasEventOutcomeDetailNote", PathUtil.removeWorkingDirectory(ml.getFileName()) + loc);
+				endElement(--ident, "premis:hasEventOutcomeDetail");
+		    }
+			endElement(--ident, "premis:hasEventOutcomeInformation");
+		}
+  }
+  
+  private void generateSignificantProperty(int ident, String property, String value) {
+	  // Significant properties
+	  startElement(ident++, "premis:hasSignificantProperties");
+	  generateElement(ident, "premis:hasSignificantPropertiesType", property);
+	  generateElement(ident, "premis:hasSignificantPropertiesValue", value);
+	  endElement(--ident, "premis:hasSignificantProperties");
+
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/util/outWriter.java b/src/main/java/com/adobe/epubcheck/util/outWriter.java
new file mode 100644
index 0000000..dbe5f53
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/util/outWriter.java
@@ -0,0 +1,55 @@
+package com.adobe.epubcheck.util;
+
+public class outWriter
+{
+  static boolean isQuiet = false;
+  public outWriter(){}
+
+  public static void setQuiet(boolean isQuiet)
+  {
+    outWriter.isQuiet = isQuiet;
+  }
+
+  public static boolean isQuiet()
+  {
+    return isQuiet;
+  }
+
+  public static void printf(String format, Object...args)
+  {
+    if (!isQuiet())
+    {
+      System.out.printf(format, args);
+    }
+  }
+  public static void println(Object x)
+  {
+    if (!isQuiet())
+    {
+      System.out.println(x);
+    }
+  }
+  public static void println(String x)
+  {
+    if (!isQuiet())
+    {
+      System.out.println(x);
+    }
+  }
+
+  public static void println()
+  {
+    System.out.println();
+  }
+
+  public static void print(String s)
+  {
+    System.out.print(s);
+  }
+
+  public static void flush()
+  {
+    System.out.flush();
+  }
+}
+
diff --git a/src/main/java/com/adobe/epubcheck/vocab/AggregateVocab.java b/src/main/java/com/adobe/epubcheck/vocab/AggregateVocab.java
new file mode 100644
index 0000000..c8800f0
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/vocab/AggregateVocab.java
@@ -0,0 +1,34 @@
+package com.adobe.epubcheck.vocab;
+
+import java.util.List;
+
+import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableList;
+
+public class AggregateVocab implements Vocab
+{
+
+  private final List<Vocab> vocabs;
+
+  public static Vocab of(Vocab... vocabs)
+  {
+    return new AggregateVocab(new ImmutableList.Builder<Vocab>().add(vocabs).build());
+  }
+
+  private AggregateVocab(List<Vocab> vocabs)
+  {
+    this.vocabs = vocabs;
+  }
+
+  @Override
+  public Optional<Property> lookup(String name)
+  {
+    for (Vocab vocab : vocabs)
+    {
+      Optional<Property> found = vocab.lookup(name);
+      if (found.isPresent()) return found;
+    }
+    return Optional.absent();
+  }
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/vocab/AltStylesheetVocab.java b/src/main/java/com/adobe/epubcheck/vocab/AltStylesheetVocab.java
new file mode 100644
index 0000000..0a105ae
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/vocab/AltStylesheetVocab.java
@@ -0,0 +1,18 @@
+package com.adobe.epubcheck.vocab;
+
+public final class AltStylesheetVocab
+{
+  public static final String PREFIX = "";
+  public static final String URI = "";
+  public static final Vocab VOCAB = new EnumVocab(PROPERTIES.class, URI, PREFIX);
+
+  public static enum PROPERTIES
+  {
+    VERTICAL, HORIZONTAL, DAY, NIGHT;
+  }
+
+  private AltStylesheetVocab()
+  {
+  }
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/vocab/EnumVocab.java b/src/main/java/com/adobe/epubcheck/vocab/EnumVocab.java
new file mode 100644
index 0000000..e26f2d0
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/vocab/EnumVocab.java
@@ -0,0 +1,91 @@
+package com.adobe.epubcheck.vocab;
+
+import java.util.EnumSet;
+import java.util.Map;
+
+import com.google.common.base.Function;
+import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Maps.EntryTransformer;
+
+/**
+ * A {@link Vocab} implementation that is backed by an {@link Enum}.
+ * 
+ * <p>
+ * Property names will be computed from {@link Enum} constant names by applying
+ * the following transformation:
+ * </p>
+ * <ul>
+ * <li>The name is converted to lower case</li>
+ * <li>The underscore character (<code>'_'</code>) is replaced by the hyphen
+ * character (<code>'-'</code>).</li>
+ * </ul>
+ * 
+ * @author Romain Deltour
+ *
+ */
+public final class EnumVocab implements Vocab
+{
+
+  public final static Function<Enum<?>, String> ENUM_TO_NAME = new Function<Enum<?>, String>()
+  {
+    @Override
+    public String apply(Enum<?> enumee)
+    {
+      return enumee.toString().toLowerCase().replace('_', '-');
+    }
+  };
+
+  private final Map<String, Property> index;
+
+  /**
+   * Creates a new vocabulary backed by the given {@link Enum} class and with
+   * properties having the common URI stem <code>base</code>. Properties of the
+   * created vocabulary will have an empty prefix (in other words, this creates
+   * a default vocabulary).
+   * 
+   * @param clazz
+   *          the enumeration backing this vocabulary.
+   * @param base
+   *          the common stem URI of properties in this vocabulary.
+   */
+  public <T extends Enum<T>> EnumVocab(final Class<T> clazz, final String base)
+  {
+    this(clazz, base, null);
+  }
+
+  /**
+   * Creates a new vocabulary backed by the given {@link Enum} class and with
+   * properties having the common URI stem <code>base</code> and prefix
+   * <code>prefix</code>
+   * 
+   * @param clazz
+   *          the enumeration backing this vocabulary.
+   * @param base
+   *          the common stem URI of properties in this vocabulary.
+   * @param prefix
+   *          the common prefix of properties in this vocabulary.
+   */
+  public <T extends Enum<T>> EnumVocab(final Class<T> clazz, final String base, final String prefix)
+  {
+    this.index = ImmutableMap.copyOf(Maps.transformEntries(
+        Maps.uniqueIndex(EnumSet.allOf(clazz), ENUM_TO_NAME),
+        new EntryTransformer<String, T, Property>()
+        {
+
+          @Override
+          public Property transformEntry(String name, T enumee)
+          {
+            return Property.newFrom(name, base, prefix, enumee);
+          }
+
+        }));
+  }
+
+  @Override
+  public Optional<Property> lookup(String name)
+  {
+    return Optional.fromNullable(index.get(name));
+  }
+}
\ No newline at end of file
diff --git a/src/main/java/com/adobe/epubcheck/vocab/ForeignVocabs.java b/src/main/java/com/adobe/epubcheck/vocab/ForeignVocabs.java
new file mode 100644
index 0000000..095b3c3
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/vocab/ForeignVocabs.java
@@ -0,0 +1,33 @@
+package com.adobe.epubcheck.vocab;
+
+/**
+ * Vocabularies which are known but not validated in EpubCheck.
+ */
+public final class ForeignVocabs
+{
+
+  public static final String DCTERMS_PREFIX = "dcterms";
+  public static final String DCTERMS_URI = "http://purl.org/dc/terms/";
+  public static final Vocab DCTERMS_VOCAB = new UncheckedVocab(DCTERMS_URI, DCTERMS_PREFIX);
+
+  public static final String MARC_PREFIX = "marc";
+  public static final String MARC_URI = "http://id.loc.gov/vocabulary/";
+  public static final Vocab MARC_VOCAB = new UncheckedVocab(MARC_URI, MARC_PREFIX);
+
+  public static final String ONIX_PREFIX = "onix";
+  public static final String ONIX_URI = "http://www.editeur.org/ONIX/book/codelists/current.html#";
+  public static final Vocab ONIX_VOCAB = new UncheckedVocab(ONIX_URI, ONIX_PREFIX);
+
+  public static final String SCHEMA_PREFIX = "schema";
+  public static final String SCHEMA_URI = "http://schema.org/";
+  public static final Vocab SCHEMA_VOCAB = new UncheckedVocab(SCHEMA_URI, SCHEMA_PREFIX);
+
+  public static final String XSD_PREFIX = "xsd";
+  public static final String XSD_URI = "http://www.w3.org/2001/XMLSchema#";
+  public static final Vocab XSD_VOCAB = new UncheckedVocab(XSD_URI, XSD_PREFIX);
+
+  private ForeignVocabs()
+  {
+  }
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/vocab/MediaOverlaysVocab.java b/src/main/java/com/adobe/epubcheck/vocab/MediaOverlaysVocab.java
new file mode 100644
index 0000000..6f661c3
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/vocab/MediaOverlaysVocab.java
@@ -0,0 +1,21 @@
+package com.adobe.epubcheck.vocab;
+
+public final class MediaOverlaysVocab
+{
+  public static final String PREFIX = "media";
+  public static final String URI = "http://www.idpf.org/epub/vocab/overlays/#";
+  public static final Vocab VOCAB = new EnumVocab(PROPERTIES.class, URI, PREFIX);
+
+  public static enum PROPERTIES
+  {
+    ACTIVE_CLASS,
+    DURATION,
+    NARRATOR,
+    PLAYBACK_ACTIVE_CLASS;
+  }
+
+  private MediaOverlaysVocab()
+  {
+  }
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/vocab/PackageVocabs.java b/src/main/java/com/adobe/epubcheck/vocab/PackageVocabs.java
new file mode 100644
index 0000000..3733593
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/vocab/PackageVocabs.java
@@ -0,0 +1,79 @@
+package com.adobe.epubcheck.vocab;
+
+import java.util.Set;
+
+import com.google.common.collect.ImmutableSet;
+
+public final class PackageVocabs
+{
+
+  public static final String PACKAGE_VOCAB_URI = "http://idpf.org/epub/vocab/package/#";
+
+  public static Vocab META_VOCAB = new EnumVocab(META_PROPERTIES.class, PACKAGE_VOCAB_URI);
+
+  public static enum META_PROPERTIES
+  {
+    ALTERNATE_SCRIPT,
+    BELONGS_TO_COLLECTION,
+    COLLECTION_TYPE,
+    DISPLAY_SEQ,
+    FILE_AS,
+    GROUP_POSITION,
+    IDENTIFIER_TYPE,
+    META_AUTH,
+    ROLE,
+    SOURCE_OF,
+    TITLE_TYPE
+  }
+
+  public static Vocab ITEM_VOCAB = new EnumVocab(ITEM_PROPERTIES.class, PACKAGE_VOCAB_URI);
+
+  public static enum ITEM_PROPERTIES
+  {
+    COVER_IMAGE("image/gif", "image/jpeg", "image/png", "image/svg+xml"),
+    MATHML("application/xhtml+xml", "image/svg+xml"),
+    NAV("application/xhtml+xml"),
+    REMOTE_RESOURCES("application/xhtml+xml", "image/svg+xml", "text/css"),
+    SCRIPTED("application/xhtml+xml", "image/svg+xml"),
+    SVG("application/xhtml+xml"),
+    SWITCH("application/xhtml+xml", "image/svg+xml");
+
+    private final Set<String> types;
+
+    private ITEM_PROPERTIES(String... types)
+    {
+      this.types = new ImmutableSet.Builder<String>().add(types).build();
+    }
+
+    public Set<String> allowedOnTypes()
+    {
+      return types;
+    }
+  }
+
+  public static Vocab ITEMREF_VOCAB = new EnumVocab(ITEMREF_PROPERTIES.class, PACKAGE_VOCAB_URI);
+
+  public static enum ITEMREF_PROPERTIES
+  {
+    PAGE_SPREAD_RIGHT,
+    PAGE_SPREAD_LEFT
+  }
+
+  public static final String LINKREL_VOCAB_URI = "http://idpf.org/epub/vocab/package/link/#";
+
+  public static Vocab LINKREL_VOCAB = new EnumVocab(LINKREL_PROPERTIES.class, LINKREL_VOCAB_URI);
+
+  public static enum LINKREL_PROPERTIES
+  {
+    MARC21XML_RECORD,
+    MODS_RECORD,
+    ONIX_RECORD,
+    XML_SIGNATURE,
+    XMP_RECORD,
+    RECORD
+  }
+
+  private PackageVocabs()
+  {
+  }
+}
\ No newline at end of file
diff --git a/src/main/java/com/adobe/epubcheck/vocab/PrefixDeclarationParser.java b/src/main/java/com/adobe/epubcheck/vocab/PrefixDeclarationParser.java
new file mode 100644
index 0000000..2f7eb6b
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/vocab/PrefixDeclarationParser.java
@@ -0,0 +1,215 @@
+package com.adobe.epubcheck.vocab;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.EnumSet;
+import java.util.List;
+import java.util.Map;
+
+import net.sf.saxon.om.Name10Checker;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.google.common.base.CharMatcher;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+
+/**
+ * Utility to parse a prefix declaration attribute into a map of prefixes to URI
+ * strings.
+ * 
+ * @author Romain Deltour
+ *
+ */
+public class PrefixDeclarationParser
+{
+
+  private enum State
+  {
+    START(CharMatcher.WHITESPACE, CharMatcher.NONE),
+    PREFIX(CharMatcher.WHITESPACE.or(CharMatcher.is(':')).negate(), CharMatcher.ANY),
+    PREFIX_END(CharMatcher.is(':'), CharMatcher.ANY),
+    SPACE(CharMatcher.WHITESPACE, CharMatcher.is(' ')),
+    URI(CharMatcher.WHITESPACE.negate(), CharMatcher.ANY),
+    WHITESPACE(CharMatcher.WHITESPACE, CharMatcher.anyOf(" \t\r\n"));
+
+    public final CharMatcher accepted;
+    public final CharMatcher allowed;
+
+    private State(CharMatcher accepted, CharMatcher allowed)
+    {
+      this.accepted = accepted;
+      this.allowed = allowed;
+    }
+  };
+
+  private static EnumSet<State> FINAL_STATES = EnumSet.of(State.START, State.PREFIX, State.WHITESPACE);
+
+  /**
+   * Parses a prefix declaration attribute into a map of prefixes to URI
+   * strings.
+   * 
+   * @param value
+   *          the string to parse (typically from a <code>prefix</code>
+   *          attribute.
+   * @param report
+   *          to report errors on the fly.
+   * @param location
+   *          the location of attribute in the validated file.
+   * @return a map of prefixes to URI strings.
+   */
+  public static Map<String, String> parsePrefixMappings(String value, Report report, MessageLocation location)
+  {
+    // ---- prefix attribute EBNF ----
+    // prefixes = mapping , { whitespace, { whitespace } , mapping } ;
+    // mapping = prefix , ":" , space , { space } , ? xsd:anyURI ? ;
+    // prefix = ? xsd:NCName ? ;
+    // space = #x20 ;
+    // whitespace = (#x20 | #x9 | #xD | #xA) ;
+
+    ImmutableMap.Builder<String, String> builder = new ImmutableMap.Builder<String, String>();
+    if (value == null)
+      return builder.build();
+    StringReader reader = new StringReader(value);
+    String prefix = null;
+    String uri = null;
+    try
+    {
+      State state = State.START;
+      int c;
+      String chars = "";
+      String badChars;
+      while ((c = reader.read()) != -1)
+      {
+        List<String> parsed = consume(reader, c, state);
+        chars = parsed.get(0);
+        badChars = parsed.get(1);
+        switch (state)
+        {
+        case START:
+          prefix = null;
+          uri = null;
+          if (!chars.isEmpty())
+            report.message(MessageId.OPF_004, location);
+          state = State.PREFIX;
+          break;
+        case PREFIX:
+          if (chars.isEmpty())
+          {
+            // empty prefix
+            report.message(MessageId.OPF_004a, location);
+          } else if (!Name10Checker.getInstance().isValidNCName(chars))
+          {
+            // bad prefix
+            report.message(MessageId.OPF_004b, location, chars);
+          } else
+          {
+            prefix = chars;
+          }
+          state = State.PREFIX_END;
+          break;
+        case PREFIX_END:
+          if (chars.isEmpty())
+          {
+            c = skip(reader, c, CharMatcher.WHITESPACE, State.PREFIX_END.accepted);
+            if (((char) c) == ':')
+            {
+              // some space before the colon char
+              report.message(MessageId.OPF_004c, location, prefix);
+              state = State.PREFIX_END;
+            } else
+            {
+              // no colon
+              report.message(MessageId.OPF_004c, location, prefix);
+              state = State.URI;
+            }
+            prefix = null;
+            break;
+          }
+          state = State.SPACE;
+          break;
+        case SPACE:
+          if (chars.isEmpty())
+          {
+            // no space
+            report.message(MessageId.OPF_004d, location, prefix);
+            prefix = null;
+          } else if (!badChars.isEmpty())
+          {
+            // unexpected whitespace
+            report.message(MessageId.OPF_004e, location, prefix);
+
+          }
+          state = State.URI;
+          break;
+        case URI:
+          try
+          {
+            uri = new URI(chars).toString();
+            if (prefix != null)
+              builder.put(prefix, uri);
+          } catch (URISyntaxException e)
+          {
+            // bad URI
+            report.message(MessageId.OPF_006, location, chars, prefix);
+          }
+          prefix = null;
+          state = State.WHITESPACE;
+          break;
+        case WHITESPACE:
+          if (!badChars.isEmpty())
+            report.message(MessageId.OPF_004f, location, prefix);
+          state = State.PREFIX;
+          break;
+        }
+      }
+      if (!FINAL_STATES.contains(state))// string ends with a single prefix
+        report.message(MessageId.OPF_005, location, prefix);
+      if (state == State.PREFIX && !chars.isEmpty())// trailing whitespace
+        report.message(MessageId.OPF_004, location);
+    } catch (IOException e)
+    {
+      throw new IllegalStateException(e);// Unexpected
+    } finally
+    {
+      reader.close();
+    }
+    return builder.build();
+  }
+
+  private static List<String> consume(Reader reader, int c, State state)
+    throws IOException
+  {
+    StringBuilder sb = new StringBuilder();
+    StringBuilder illegal = new StringBuilder();
+    while (c != -1 && state.accepted.matches((char) c))
+    {
+      reader.mark(1);
+      sb.append((char) c);
+      if (!state.allowed.matches((char) c))
+      {
+        illegal.append((char) c);
+      }
+      reader.mark(1);
+      c = reader.read();
+    }
+    reader.reset();
+    return ImmutableList.of(sb.toString(), illegal.toString());
+  }
+
+  private static int skip(Reader reader, int c, CharMatcher skipped, CharMatcher stopping)
+    throws IOException
+  {
+    while (c != -1 && !stopping.matches((char) c) && skipped.matches((char) c))
+    {
+      reader.mark(1);
+      c = reader.read();
+    }
+    reader.reset();
+    return c;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/vocab/Property.java b/src/main/java/com/adobe/epubcheck/vocab/Property.java
new file mode 100644
index 0000000..460936f
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/vocab/Property.java
@@ -0,0 +1,146 @@
+package com.adobe.epubcheck.vocab;
+
+import java.util.EnumSet;
+import java.util.Set;
+
+import com.google.common.base.Function;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Predicates;
+import com.google.common.base.Strings;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
+
+/**
+ * Represents a value of the <code>property</code> datatype, as listed in
+ * vocabulary of properties.
+ * 
+ * @author Romain Deltour
+ *
+ */
+public final class Property
+{
+  private final String name;
+  private final String prefixedName;
+  private final String fullName;
+  private final Enum<?> enumee;
+
+  /**
+   * Creates a new instance from a short name, a prefix, and a stem URI.
+   * 
+   * @param name
+   *          the short name of the property (aka "reference").
+   * @param base
+   *          the stem URI used to compute the full URI value.
+   * @param prefix
+   *          the prefix used in the CURIE form.
+   * @return
+   */
+  public static Property newFrom(String name, String base, String prefix)
+  {
+    return new Property(name, base, prefix, null);
+  }
+
+  /**
+   * Creates a new instance from a short name, a prefix, and a stem URI, and an
+   * optional {@link Enum} item used to represent this property in known
+   * vocabularies.
+   * 
+   * @param name
+   *          the short name of the property (aka "reference").
+   * @param base
+   *          the stem URI used to compute the full URI value.
+   * @param prefix
+   *          the prefix used in the CURIE form.
+   * @return
+   */
+  public static Property newFrom(String name, String base, String prefix, Enum<?> enumee)
+  {
+    return new Property(name, base, prefix, enumee);
+  }
+
+  /**
+   * Filters the given set of {@link Property} values and keeps the values
+   * backed by an {@link Enum} constant of the given type.
+   * 
+   * @param properties
+   *          the properties to filter
+   * @param clazz
+   *          the class of a vocabulary-backing enum
+   * @return An immutable {@link EnumSet} representing the filtered properties
+   */
+  public static <E extends Enum<E>> Set<E> filter(Set<Property> properties, final Class<E> clazz)
+  {
+    Preconditions.checkNotNull(clazz);
+    if (properties == null) return ImmutableSet.of();
+    return Sets.immutableEnumSet(Collections2.filter(
+        Collections2.transform(properties, new Function<Property, E>()
+        {
+          @Override
+          public E apply(Property input)
+          {
+            try
+            {
+              return clazz.cast(input.toEnum());
+            } catch (Exception e)
+            {
+              return null;
+            }
+          }
+        }), Predicates.notNull()));
+  }
+
+  private Property(String name, String base, String prefix, Enum<?> enumee)
+  {
+    this.name = name;
+    this.fullName = base + name;
+    this.prefixedName = (Strings.isNullOrEmpty(prefix)) ? name : prefix + ':' + name;
+    this.enumee = enumee;
+  }
+
+  /**
+   * Returns the short name (afa "reference") of this property.
+   * 
+   * @return the short name (afa "reference") of this property.
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * Returns the full URI value of this property.
+   * 
+   * @return the full URI value of this property.
+   */
+  public String getFullName()
+  {
+    return fullName;
+  }
+
+  /**
+   * Returns the prefixed name (aka CURIE) of this property.
+   * 
+   * @return the prefixed name (aka CURIE) of this property.
+   */
+  public String getPrefixedName()
+  {
+    return prefixedName;
+  }
+
+  /**
+   * Returns the {@link Enum} item that is used to represent this property in
+   * enum-based vocabularies.
+   * 
+   * @return the {@link Enum} item that is used to represent this property.
+   * @throws UnsupportedOperationException
+   *           if this property doesn't represent a property from an enum-based
+   *           vocabulary.
+   */
+  public Enum<?> toEnum()
+  {
+    if (enumee == null) throw new UnsupportedOperationException();
+    return enumee;
+  }
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/vocab/RenditionVocabs.java b/src/main/java/com/adobe/epubcheck/vocab/RenditionVocabs.java
new file mode 100644
index 0000000..1659660
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/vocab/RenditionVocabs.java
@@ -0,0 +1,44 @@
+package com.adobe.epubcheck.vocab;
+
+public final class RenditionVocabs
+{
+  public static final String PREFIX = "rendition";
+  public static final String URI = "http://www.idpf.org/vocab/rendition/#";
+
+  public static final Vocab META_VOCAB = new EnumVocab(META_PROPERTIES.class, URI);
+
+  enum META_PROPERTIES
+  {
+    FLOW,
+    LAYOUT,
+    ORIENTATION,
+    SPREAD,
+    VIEWPORT
+  }
+
+  public static final Vocab ITEMREF_VOCAB = new EnumVocab(ITEMREF_PROPERTIES.class, URI);
+
+  enum ITEMREF_PROPERTIES
+  {
+    ALIGN_X_CENTER,
+    FLOW_AUTO,
+    FLOW_PAGINATED,
+    FLOW_SCROLLED_CONTINUOUS,
+    FLOW_SCROLLED_DOC,
+    LAYOUT_PRE_PAGINATED,
+    LAYOUT_REFLOWABLE,
+    ORIENTATION_AUTO,
+    ORIENTATION_LANDSCAPE,
+    ORIENTATION_PORTRAIT,
+    PAGE_SPREAD_CENTER,
+    SPREAD_AUTO,
+    SPREAD_BOTH,
+    SPREAD_LANDSCAPE,
+    SPREAD_NONE,
+    SPREAD_PORTRAIT
+  }
+
+  private RenditionVocabs()
+  {
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/vocab/StagingEdupubVocab.java b/src/main/java/com/adobe/epubcheck/vocab/StagingEdupubVocab.java
new file mode 100644
index 0000000..fc4335c
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/vocab/StagingEdupubVocab.java
@@ -0,0 +1,55 @@
+package com.adobe.epubcheck.vocab;
+
+public class StagingEdupubVocab
+{
+  public static final String URI = "http://www.idpf.org/epub/vocab/structure/#";
+  public static final Vocab VOCAB = new EnumVocab(EPUB_TYPES.class, URI);
+
+  public static enum EPUB_TYPES
+  {
+    ABSTRACT,
+    ANSWER,
+    ANSWERS,
+    ASSESSMENTS,
+    BIBLIOREF,
+    CREDIT,
+    CREDITS,
+    FEEDBACK,
+    FILL_IN_THE_BLANK_PROBLEM,
+    GENERAL_PROBLEM,
+    GLOSSREF,
+    INDEX_EDITOR_NOTE,
+    INDEX_ENTRY,
+    INDEX_ENTRY_LIST,
+    INDEX_GROUP,
+    INDEX_HEADNOTES,
+    INDEX_LEGEND,
+    INDEX_LOCATOR,
+    INDEX_LOCATOR_LIST,
+    INDEX_LOCATOR_RANGE,
+    INDEX_TERM,
+    INDEX_TERM_CATEGORIES,
+    INDEX_TERM_CATEGORY,
+    INDEX_XREF_PREFERRED,
+    INDEX_XREF_RELATED,
+    KEYWORD,
+    LABEL,
+    LEARNING_OBJECTIVES,
+    LEARNING_OUTCOME,
+    LEARNING_OUTCOMES,
+    LEARNING_RESOURCES,
+    LEARNING_STANDARD,
+    LEARNING_STANDARDS,
+    MATCH_PROBLEM,
+    MULTIPLE_CHOICE_PROBLEM,
+    ORDINAL,
+    PRACTICE,
+    PRACTICES,
+    PULLQUOTE,
+    QUESTION,
+    REFERRER,
+    SERIESPAGE,
+    TOC_BRIEF,
+    TRUE_FALSE_PROBLEM;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/vocab/StructureVocab.java b/src/main/java/com/adobe/epubcheck/vocab/StructureVocab.java
new file mode 100644
index 0000000..5df2098
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/vocab/StructureVocab.java
@@ -0,0 +1,89 @@
+package com.adobe.epubcheck.vocab;
+
+public class StructureVocab
+{
+  public static final String URI = "http://www.idpf.org/epub/vocab/structure/#";
+  public static final Vocab VOCAB = new EnumVocab(EPUB_TYPES.class, URI);
+
+  public static enum EPUB_TYPES
+  {
+    ACKNOWLEDGMENTS,
+    AFTERWORD,
+    ANNOREF,
+    ANNOTATION,
+    APPENDIX,
+    ASSESSMENT,
+    BACKMATTER,
+    BIBLIOENTRY,
+    BIBLIOGRAPHY,
+    BODYMATTER,
+    BRIDGEHEAD,
+    CHAPTER,
+    COLOPHON,
+    CONCLUDING_SENTENCE,
+    CONCLUSION,
+    CONTRIBUTORS,
+    COPYRIGHT_PAGE,
+    COVER,
+    COVERTITLE,
+    DEDICATION,
+    DIVISION,
+    EPIGRAPH,
+    EPILOGUE,
+    ERRATA,
+    FIGURE,
+    FOOTNOTE,
+    FOOTNOTES,
+    FOREWORD,
+    FRONTMATTER,
+    FULLTITLE,
+    GLOSSARY,
+    GLOSSDEF,
+    GLOSSTERM,
+    HALFTITLE,
+    HALFTITLEPAGE,
+    HELP,
+    IMPRIMATUR,
+    IMPRINT,
+    INDEX,
+    INTRODUCTION,
+    KEYWORD,
+    LANDMARKS,
+    LEARNING_OBJECTIVE,
+    LEARNING_RESOURCE,
+    LIST,
+    LIST_ITEM,
+    LOA,
+    LOI,
+    LOT,
+    LOV,
+    MARGINALIA,
+    NOTE,
+    NOTEREF,
+    NOTICE,
+    OTHER_CREDITS,
+    PAGEBREAK,
+    PAGE_LIST,
+    PART,
+    PRACTICE,
+    PREAMBLE,
+    PREFACE,
+    PROLOGUE,
+    REARNOTE,
+    REARNOTES,
+    REVISION_HISTORY,
+    SIDEBAR,
+    SUBCHAPTER,
+    SUBTITLE,
+    TABLE,
+    TABLE_CELL,
+    TABLE_ROW,
+    TITLE,
+    TITLEPAGE,
+    TOC,
+    TOPIC_SENTENCE,
+    VOLUME,
+    WARNING,
+    QNA
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/vocab/UncheckedVocab.java b/src/main/java/com/adobe/epubcheck/vocab/UncheckedVocab.java
new file mode 100644
index 0000000..530ba5f
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/vocab/UncheckedVocab.java
@@ -0,0 +1,47 @@
+package com.adobe.epubcheck.vocab;
+
+import com.google.common.base.Optional;
+
+/**
+ * A {@link Vocab} implementation which always return a successful lookup
+ * result. In other words, this represents an "unchecked" vocabulary which
+ * assumes that all property names are allowed. It is used to represent
+ * user-declared custom vocabularies that are not known to EpubCheck.
+ * 
+ * @author Romain Deltour
+ *
+ */
+public final class UncheckedVocab implements Vocab
+{
+
+  private String base;
+  private String prefix;
+
+  /**
+   * Creates a new unchecked vocabulary representing properties whose URIs start
+   * with <code>base</code> and short names have the prefix <code>prefix</code>.
+   * 
+   * @param base
+   *          the URI stem used to generate URIs of properties in this
+   *          vocabulary.
+   * @param prefix
+   *          the prefix used for property names.
+   */
+  public UncheckedVocab(String base, String prefix)
+  {
+    this.base = base;
+    this.prefix = prefix;
+  }
+
+  /**
+   * Returns a reference to a new {@link Property} with the short name
+   * <code>name</code>, the same prefix and stem URI as was given when creating
+   * this vocabulary.
+   */
+  @Override
+  public Optional<Property> lookup(String name)
+  {
+    return Optional.of(Property.newFrom(name, base, prefix));
+  }
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/vocab/Vocab.java b/src/main/java/com/adobe/epubcheck/vocab/Vocab.java
new file mode 100644
index 0000000..6394b0b
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/vocab/Vocab.java
@@ -0,0 +1,23 @@
+package com.adobe.epubcheck.vocab;
+
+import com.google.common.base.Optional;
+
+/**
+ * Represents a vocabulary of properties.
+ * 
+ * @author Romain Deltour
+ *
+ */
+public interface Vocab
+{
+  /**
+   * Returns whether a property in allowed in this vocabulary.
+   * 
+   * @param name
+   *          the property name (unprefixed).
+   * @return an {@link Property} reference which contains a {@link Property} if
+   *         the lookup was successful or nothing if the property was not found
+   *         in this vocabulary.
+   */
+  Optional<Property> lookup(String name);
+}
\ No newline at end of file
diff --git a/src/main/java/com/adobe/epubcheck/vocab/VocabUtil.java b/src/main/java/com/adobe/epubcheck/vocab/VocabUtil.java
new file mode 100644
index 0000000..6e2fe4f
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/vocab/VocabUtil.java
@@ -0,0 +1,196 @@
+package com.adobe.epubcheck.vocab;
+
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Splitter;
+import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Maps;
+
+/**
+ * Utilities related to property values, vocabularies, and prefix declarations.
+ * 
+ * @author Romain Deltour
+ *
+ */
+public final class VocabUtil
+{
+  public static Vocab EMPTY_VOCAB = new EnumVocab(EMPTY.class, "");
+
+  private enum EMPTY
+  {
+  }
+
+  private static Pattern propertyPattern = Pattern.compile("(([^:]*):)?(.*)");
+  private static Splitter whitespaceSplitter = Splitter.onPattern("\\s+").omitEmptyStrings();
+
+  /**
+   * Parses a single property value and report validation errors on the fly.
+   * 
+   * @param value
+   *          the value to parse.
+   * @param vocabs
+   *          a map of prefix to vocabularies.
+   * @param report
+   *          used to report validation errors.
+   * @param location
+   *          the location in the validated file.
+   * @return an {@link Optional} containing the property if it was parsed
+   *         successfully or nothing if there was a parsing error
+   */
+  public static Optional<Property> parseProperty(String value, Map<String, Vocab> vocabs,
+      Report report, MessageLocation location)
+  {
+
+    return Optional.fromNullable(Iterables.get(
+        parseProperties(value, vocabs, false, report, location), 0, null));
+  }
+
+  /**
+   * Parses a space-separated list of property values, and report validation
+   * errors on the fly.
+   * 
+   * @param value
+   *          the value to parse.
+   * @param vocabs
+   *          a map of prefix to vocabularies.
+   * @param report
+   *          used to report validation errors.
+   * @param location
+   *          the location in the validated file.
+   * @return
+   */
+  public static Set<Property> parsePropertyList(String value, Map<String, Vocab> vocabs,
+      Report report, MessageLocation location)
+  {
+    return parseProperties(value, vocabs, true, report, location);
+  }
+
+  private static Set<Property> parseProperties(String value, Map<String, Vocab> vocabs,
+      boolean isList, Report report, MessageLocation location)
+  {
+    Preconditions.checkNotNull(vocabs);
+    Preconditions.checkNotNull(report);
+    Preconditions.checkNotNull(location);
+    if (value == null)
+    {
+      return ImmutableSet.of();
+    }
+
+    ImmutableSet.Builder<Property> builder = ImmutableSet.builder();
+
+    // split properties, report error if a list is found but not allowed
+    Iterable<String> properties = whitespaceSplitter.split(value);
+    if (!isList && !Iterables.isEmpty(Iterables.skip(properties, 1)))
+    {
+      report.message(MessageId.OPF_025, location, value);
+      return ImmutableSet.of();
+    }
+
+    for (String property : properties)
+    {
+      // parse prefix and local name, report error if malformed
+      Matcher matcher = propertyPattern.matcher(property);
+      matcher.matches();
+      if (matcher.group(1) != null && (matcher.group(2).isEmpty() || matcher.group(3).isEmpty()))
+      {
+        report.message(MessageId.OPF_026, location, property);
+        continue;
+      }
+      String prefix = Strings.nullToEmpty(matcher.group(2));
+      String name = matcher.group(3);
+
+      // lookup property in the vocab for its prefix
+      // report error if not found
+      try
+      {
+        Optional<Property> found = vocabs.get(prefix).lookup(name);
+        if (found.isPresent())
+        {
+          builder.add(found.get());
+        }
+        else
+        {
+          report.message(MessageId.OPF_027, location, property);
+          continue;
+        }
+      } catch (NullPointerException e)
+      {
+        // vocab not found (i.e. prefix undeclared), report warning
+        report.message(MessageId.OPF_028, location, prefix);
+        continue;
+      }
+    }
+    return builder.build();
+  }
+
+  /**
+   * Parses a prefix attribute value and returns a map of prefixes to
+   * vocabularies, given a pre-existing set of reserved prefixes, known
+   * vocabularies, and default vocabularies that cannot be re-declared.
+   * 
+   * @param value
+   *          the prefix declaration to parse.
+   * @param predefined
+   *          a map of reserved prefixes to associated vocabularies.
+   * @param known
+   *          a map of known URIs to known vocabularies.
+   * @param forbidden
+   *          a set of URIs of default vocabularies that cannot be re-declared.
+   * @param report
+   *          to report errors on the fly.
+   * @param location
+   *          the location of the attribute in the source file.
+   * @return
+   */
+  public static Map<String, Vocab> parsePrefixDeclaration(String value,
+      Map<String, Vocab> predefined, Map<String, Vocab> known, Set<String> forbidden,
+      Report report, MessageLocation location)
+  {
+    Map<String, Vocab> vocabs = Maps.newHashMap(predefined);
+    Map<String, String> mappings = PrefixDeclarationParser.parsePrefixMappings(value, report,
+        location);
+    for (Entry<String, String> mapping : mappings.entrySet())
+    {
+      String prefix = mapping.getKey();
+      String uri = mapping.getValue();
+      if ("_".equals(prefix))
+      {
+        // must not define the '_' prefix
+        report.message(MessageId.OPF_007a, location);
+      }
+      else if (forbidden.contains(uri))
+      {
+        // must not declare a default vocab
+        report.message(MessageId.OPF_007b, location, prefix);
+      }
+      else
+      {
+        if (predefined.containsKey(prefix))
+        {
+          // re-declaration of reserved prefix
+          report.message(MessageId.OPF_007, location, prefix);
+        }
+        Vocab vocab = known.get(uri);
+        vocabs.put(mapping.getKey(), (vocab == null) ? new UncheckedVocab(uri, prefix) : vocab);
+      }
+    }
+    return ImmutableMap.copyOf(vocabs);
+  }
+
+  private VocabUtil()
+  {
+  }
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/xml/DocumentLocatorImpl.java b/src/main/java/com/adobe/epubcheck/xml/DocumentLocatorImpl.java
new file mode 100644
index 0000000..784e19d
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/xml/DocumentLocatorImpl.java
@@ -0,0 +1,65 @@
+package com.adobe.epubcheck.xml;
+
+import org.xml.sax.Locator;
+import org.xml.sax.ext.Locator2;
+
+class DocumentLocatorImpl implements Locator2
+{
+
+  private final Locator locator;
+  private Locator2 locator2 = null;
+
+  public DocumentLocatorImpl(Locator locator)
+  {
+    this.locator = locator;
+    if (locator instanceof Locator2)
+    {
+      locator2 = (Locator2) locator;
+    }
+  }
+
+  @Override
+  public int getColumnNumber()
+  {
+    return locator.getColumnNumber();
+  }
+
+  @Override
+  public int getLineNumber()
+  {
+    return locator.getLineNumber();
+  }
+
+  @Override
+  public String getPublicId()
+  {
+    return locator.getPublicId();
+  }
+
+  @Override
+  public String getSystemId()
+  {
+    return locator.getSystemId();
+  }
+
+  @Override
+  public String getEncoding()
+  {
+    if (locator2 != null)
+    {
+      return locator2.getEncoding();
+    }
+    return null;
+  }
+
+  @Override
+  public String getXMLVersion()
+  {
+    if (locator2 != null)
+    {
+      return locator2.getXMLVersion();
+    }
+    return null;
+  }
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/xml/Namespaces.java b/src/main/java/com/adobe/epubcheck/xml/Namespaces.java
new file mode 100644
index 0000000..c2fd463
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/xml/Namespaces.java
@@ -0,0 +1,36 @@
+package com.adobe.epubcheck.xml;
+
+import javax.xml.XMLConstants;
+
+public class Namespaces {
+
+	public static final String PACKAGE = "http://www.idpf.org/2007/opf"; //$NON-NLS-1$
+	public static final String MEDIA_OVERLAYS = "http://www.w3.org/ns/SMIL"; //$NON-NLS-1$
+	public static final String OPS = "http://www.idpf.org/2007/ops"; //$NON-NLS-1$
+	public static final String CONTAINER = "urn:oasis:names:tc:opendocument:xmlns:container"; //$NON-NLS-1$
+	public static final String XINCLUDE = "http://www.w3.org/2001/XInclude"; //$NON-NLS-1$
+	public static final String XLINK = "http://www.w3.org/1999/xlink"; //$NON-NLS-1$
+	public static final String XHTML = "http://www.w3.org/1999/xhtml"; //$NON-NLS-1$
+	public static final String MATHML = "http://www.w3.org/1998/Math/MathML"; //$NON-NLS-1$
+	public static final String SVG = "http://www.w3.org/2000/svg"; //$NON-NLS-1$
+	public static final String ISOSCH = "http://purl.oclc.org/dsdl/schematron"; //$NON-NLS-1$
+	public static final String SCH = "http://www.ascc.net/xml/schematron"; //$NON-NLS-1$
+	public static final String NCX = "http://www.daisy.org/z3986/2005/ncx/"; //$NON-NLS-1$
+	public static final String PLS = "http://www.w3.org/2005/01/pronunciation-lexicon"; //$NON-NLS-1$
+	
+	public static final String DSIG_DS = "http://www.w3.org/2000/09/xmldsig#"; //$NON-NLS-1$
+	public static final String DSIG_DS11 = "http://www.w3.org/2009/xmldsig11#"; //$NON-NLS-1$
+	public static final String DSIG_DSP = "http://www.w3.org/2009/xmldsig-properties"; //$NON-NLS-1$
+	public static final String DSIG_EC = "http://www.w3.org/2001/10/xml-exc-c14n#"; //$NON-NLS-1$
+	
+	public static final String XENC = "http://www.w3.org/2001/04/xmlenc#"; //$NON-NLS-1$
+	public static final String XENC11 = "http://www.w3.org/2009/xmlenc11#"; //$NON-NLS-1$
+	
+	public static final String XMLEVENTS = "http://www.w3.org/2001/xml-events"; //$NON-NLS-1$
+	public static final String SSML = "http://www.w3.org/2001/10/synthesis"; //$NON-NLS-1$
+	public static final String XML = XMLConstants.XML_NS_URI; //$NON-NLS-1$
+	
+	
+	private Namespaces() {}
+	
+}
diff --git a/src/main/java/com/adobe/epubcheck/xml/XMLAttribute.java b/src/main/java/com/adobe/epubcheck/xml/XMLAttribute.java
new file mode 100755
index 0000000..0359bc6
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/xml/XMLAttribute.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.xml;
+
+public class XMLAttribute extends XMLNode
+{
+
+  private final String value;
+
+  XMLAttribute(String namespace, String prefix, String name, String value)
+  {
+    super(namespace, prefix, name);
+    this.value = value;
+  }
+
+  public String getValue()
+  {
+    return value;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/xml/XMLElement.java b/src/main/java/com/adobe/epubcheck/xml/XMLElement.java
new file mode 100755
index 0000000..e02fbd1
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/xml/XMLElement.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.xml;
+
+public class XMLElement extends XMLNode
+{
+
+  private final XMLAttribute[] attributes;
+
+  private final XMLElement parent;
+
+  private Object privateData;
+
+  XMLElement(String namespace, String prefix, String name,
+      XMLAttribute[] attributes, XMLElement parent)
+  {
+    super(namespace, prefix, name);
+    this.attributes = attributes;
+    this.parent = parent;
+  }
+
+  public int getAttributeCount()
+  {
+    if (attributes == null)
+    {
+      return 0;
+    }
+    return attributes.length;
+  }
+
+  public XMLAttribute getAttribute(int i)
+  {
+    return attributes[i];
+  }
+
+  public XMLElement getParent()
+  {
+    return parent;
+  }
+
+  public String getAttributeNS(String ns, String name)
+  {
+    if (attributes == null)
+    {
+      return null;
+    }
+    for (XMLAttribute attr : attributes)
+    {
+      String ans = attr.getNamespace();
+      if (attr.getName().equals(name)
+          && (ans == null ? ns == null : ns != null && ans.equals(ns)))
+      {
+        return attr.getValue();
+      }
+    }
+    return null;
+  }
+
+  public String getAttribute(String attr)
+  {
+    return getAttributeNS(null, attr);
+  }
+
+  public Object getPrivateData()
+  {
+    return privateData;
+  }
+
+  public void setPrivateData(Object privateData)
+  {
+    this.privateData = privateData;
+  }
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/xml/XMLHandler.java b/src/main/java/com/adobe/epubcheck/xml/XMLHandler.java
new file mode 100755
index 0000000..7d03877
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/xml/XMLHandler.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.xml;
+
+public interface XMLHandler
+{
+
+  public void characters(char[] chars, int arg1, int arg2);
+
+  public void ignorableWhitespace(char[] chars, int arg1, int arg2);
+
+  public void startElement();
+
+  public void endElement();
+
+  public void processingInstruction(String arg0, String arg1);
+}
diff --git a/src/main/java/com/adobe/epubcheck/xml/XMLNode.java b/src/main/java/com/adobe/epubcheck/xml/XMLNode.java
new file mode 100755
index 0000000..4d8c2a3
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/xml/XMLNode.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.xml;
+
+public class XMLNode
+{
+
+  private final String namespace;
+  private final String name;
+  private final String prefix;
+
+  XMLNode(String namespace, String prefix, String name)
+  {
+    this.namespace = namespace;
+    this.prefix = prefix;
+    this.name = name;
+  }
+
+  public String getName()
+  {
+    return name;
+  }
+
+  public String getNamespace()
+  {
+    return namespace;
+  }
+
+  public String getPrefix()
+  {
+    return prefix;
+  }
+
+}
diff --git a/src/main/java/com/adobe/epubcheck/xml/XMLParser.java b/src/main/java/com/adobe/epubcheck/xml/XMLParser.java
new file mode 100755
index 0000000..bf1a306
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/xml/XMLParser.java
@@ -0,0 +1,1058 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.xml;
+
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.ocf.OCFPackage;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.ResourceUtil;
+import com.thaiopensource.util.PropertyMapBuilder;
+import com.thaiopensource.validate.ValidateProperty;
+import com.thaiopensource.validate.Validator;
+
+import org.xml.sax.*;
+import org.xml.sax.ext.DeclHandler;
+import org.xml.sax.ext.LexicalHandler;
+import org.xml.sax.ext.Locator2;
+import org.xml.sax.helpers.AttributesImpl;
+import org.xml.sax.helpers.DefaultHandler;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import java.io.*;
+import java.util.*;
+
+public class XMLParser extends DefaultHandler implements LexicalHandler, DeclHandler
+{
+  private static final String SAXPROP_LEXICAL_HANDLER = "http://xml.org/sax/properties/lexical-handler";
+  private static final String SAXPROP_DECL_HANDLER = "http://xml.org/sax/properties/declaration-handler";
+  private SAXParser parser;
+  private final Report report;
+  private final String resource;
+  private final InputStream resourceIn;
+  private final Vector<XMLHandler> contentHandlers = new Vector<XMLHandler>();
+  private XMLElement currentElement;
+  private final Vector<ContentHandler> validatorContentHandlers = new Vector<ContentHandler>();
+  private final Vector<DTDHandler> validatorDTDHandlers = new Vector<DTDHandler>();
+  private final Vector<LexicalHandler> validatorLexicalHandlers = new Vector<LexicalHandler>();
+  private final Vector<DeclHandler> validatorDeclHandlers = new Vector<DeclHandler>();
+  private Locator2 documentLocator;
+  private final EPUBVersion version;
+  private static final String zipRoot = "file:///epub-root/";
+  private static final Hashtable<String, String> systemIdMap;
+  private final HashSet<String> entities = new HashSet<String>();
+  private final String mimeType;
+  private boolean firstStartDTDInvocation = true;
+  private OCFPackage thePackage;
+
+  public XMLParser(OCFPackage thePackage, InputStream resourceIn, String entryName, String mimeType,
+      Report report, EPUBVersion version)
+  {
+    this.report = report;
+    this.resource = entryName;
+    this.resourceIn = resourceIn;
+    this.mimeType = mimeType;
+    this.version = version;
+    this.thePackage = thePackage;
+
+    // XML predefined
+    entities.add("gt");
+    entities.add("lt");
+    entities.add("amp");
+    entities.add("quot");
+    entities.add("apos");
+
+    SAXParserFactory factory = SAXParserFactory.newInstance();
+    factory.setNamespaceAware(true);
+    factory.setValidating(false);
+
+    try
+    {
+      factory.setFeature("http://xml.org/sax/features/validation", false);
+      if (version == EPUBVersion.VERSION_3)
+      {
+        factory.setXIncludeAware(false);
+      }
+    }
+    catch (Exception ignored)
+    {
+    }
+
+    try
+    {
+      parser = factory.newSAXParser();
+
+      XMLReader reader = parser.getXMLReader();
+      reader.setDTDHandler(this);
+      reader.setContentHandler(this);
+      reader.setEntityResolver(this);
+      reader.setErrorHandler(this);
+
+      try
+      {
+        reader.setProperty(SAXPROP_LEXICAL_HANDLER, this);
+        reader.setProperty(SAXPROP_DECL_HANDLER, this);
+      }
+      catch (SAXNotRecognizedException e)
+      {
+        e.printStackTrace();
+      }
+      catch (SAXNotSupportedException e)
+      {
+        e.printStackTrace();
+      }
+    }
+    catch (ParserConfigurationException e)
+    {
+      e.printStackTrace();
+    }
+    catch (SAXException e)
+    {
+      e.printStackTrace();
+    }
+  }
+
+
+  public void addXMLHandler(XMLHandler handler)
+  {
+    if (handler != null)
+    {
+      contentHandlers.add(handler);
+    }
+  }
+
+  public void addValidator(XMLValidator xv)
+  {
+    PropertyMapBuilder propertyMapBuilder = new PropertyMapBuilder();
+    propertyMapBuilder.put(ValidateProperty.ERROR_HANDLER, this);
+    Validator validator = xv.schema.createValidator(propertyMapBuilder
+        .toPropertyMap());
+    ContentHandler contentHandler = validator.getContentHandler();
+    if (contentHandler != null)
+    {
+      validatorContentHandlers.add(contentHandler);
+    }
+    DTDHandler dtdHandler = validator.getDTDHandler();
+    if (dtdHandler != null)
+    {
+      validatorDTDHandlers.add(dtdHandler);
+    }
+  }
+
+  public void addDeclHandler(DeclHandler handler)
+  {
+    if (handler != null)
+    {
+      validatorDeclHandlers.add(handler);
+    }
+  }
+
+  public void addLexicalHandler(LexicalHandler handler)
+  {
+    if (handler != null)
+    {
+      validatorLexicalHandlers.add(handler);
+    }
+  }
+
+
+  public void process()
+  {
+    InputStream in = resourceIn;
+    try
+    {
+      //System.err.println("DEBUG XMLParser#process on" + resource);
+      if (!in.markSupported())
+      {
+        in = new BufferedInputStream(in);
+      }
+
+      String encoding = sniffEncoding(in);
+      if (encoding != null && !encoding.equals("UTF-8")
+          && !encoding.equals("UTF-16"))
+      {
+        report.message(MessageId.CSS_003, new MessageLocation(resource, 0, 0, ""), encoding);
+      }
+
+      InputSource ins = new InputSource(in);
+      ins.setSystemId(zipRoot + resource);
+      parser.parse(ins, this);
+
+    }
+    catch (FileNotFoundException e)
+    {
+      String message = e.getMessage();
+      message = new File(message).getName();
+      int p = message.indexOf("(");
+      if (p > 0)
+      {
+        message = message.substring(0, message.indexOf("("));
+      }
+      message = message.trim();
+      report.message(MessageId.RSC_001, new MessageLocation(resource, -1, -1), message);
+    }
+    catch (IOException e)
+    {
+      report.message(MessageId.PKG_008, new MessageLocation(resource, 0, 0), resource);
+    }
+    catch (IllegalArgumentException e)
+    {
+      report.message(MessageId.RSC_005, new MessageLocation(resource, 0, 0), e.getMessage());
+    }
+    catch (SAXException e)
+    {
+      report.message(MessageId.RSC_005, new MessageLocation(resource, 0, 0), e.getMessage());
+    }
+    catch (NullPointerException e)
+    {
+      // this happens for unresolved entities, reported in entityResolver
+      // code.
+    }
+    finally
+    {
+      try
+      {
+        in.close();
+      }
+      catch (IOException ignored)
+      {
+      }
+    }
+  }
+
+  public InputSource resolveEntity(String publicId, String systemId)
+      throws
+      SAXException,
+      IOException
+  {
+    //if (systemId.startsWith(zipRoot))
+    //{
+    //  InputStream inStream = this.thePackage.getInputStream(systemId.substring(zipRoot.length()));
+    //  if (inStream != null)
+    //  {
+    //    InputSource source = new InputSource(inStream);
+    //    source.setPublicId(publicId);
+    //    source.setSystemId(systemId);
+    //    return source;
+    //  }
+    //}
+    //outWriter.println("DEBUG XMLParser#resolveEntity ==> "+ publicId + ", " + systemId + ", " );
+
+    String resourcePath = systemIdMap.get(systemId);
+
+    if (resourcePath != null)
+    {
+      InputStream resourceStream = ResourceUtil.getResourceStream(resourcePath);
+      InputSource source = new InputSource(resourceStream);
+      source.setPublicId(publicId);
+      source.setSystemId(systemId);
+      return source;
+    }
+    else if (systemId.equals("about:legacy-compat"))
+    {
+      //special case
+      return new InputSource(new StringReader(""));
+
+    }
+    else
+    {
+      //check for a system prop that turns off online fetching
+      //the default is to attempt online fetching, as this has been the default forever
+      boolean offline = Boolean.parseBoolean(System.getProperty("epubcheck.offline"));
+      //outWriter.println("offline value is " + offline);
+      if (systemId.startsWith("http:") && offline)
+      {
+        return new InputSource(new StringReader(""));
+      }
+      //else return null and let the caller try to fetch the goods
+      return null;
+    }
+  }
+
+
+  public void notationDecl(String name, String publicId, String systemId)
+      throws
+      SAXException
+  {
+    int len = validatorDTDHandlers.size();
+    for (int i = 0; i < len; i++)
+    {
+      (validatorDTDHandlers.elementAt(i)).notationDecl(name,
+          publicId, systemId);
+    }
+  }
+
+  public void unparsedEntityDecl(String name, String publicId,
+      String systemId, String notationName) throws
+      SAXException
+  {
+    int len = validatorDTDHandlers.size();
+    for (int i = 0; i < len; i++)
+    {
+      (validatorDTDHandlers.elementAt(i))
+          .unparsedEntityDecl(name, publicId, systemId, notationName);
+    }
+  }
+
+  public void error(SAXParseException ex) throws
+      SAXException
+  {
+    report.message(MessageId.RSC_005,
+        new MessageLocation(resource, ex.getLineNumber(), ex.getColumnNumber()),
+        ex.getMessage());
+  }
+
+  public void fatalError(SAXParseException ex) throws
+      SAXException
+  {
+    report.message(MessageId.RSC_016,
+        new MessageLocation(resource, ex.getLineNumber(), ex.getColumnNumber()),
+        ex.getMessage());
+  }
+
+  public void warning(SAXParseException ex) throws
+      SAXException
+  {
+    report.message(MessageId.RSC_017,
+        new MessageLocation(resource, ex.getLineNumber(), ex.getColumnNumber()),
+        ex.getMessage());
+  }
+
+  public void characters(char[] arg0, int arg1, int arg2) throws
+      SAXException
+  {
+    int vlen = validatorContentHandlers.size();
+    for (int i = 0; i < vlen; i++)
+    {
+      (validatorContentHandlers.elementAt(i))
+          .characters(arg0, arg1, arg2);
+    }
+
+    int len = contentHandlers.size();
+    for (int i = 0; i < len; i++)
+    {
+      (contentHandlers.elementAt(i)).characters(arg0, arg1,
+          arg2);
+    }
+  }
+
+  public void endDocument() throws
+      SAXException
+  {
+    int len = validatorContentHandlers.size();
+    for (int i = 0; i < len; i++)
+    {
+      (validatorContentHandlers.elementAt(i))
+          .endDocument();
+    }
+  }
+
+  public void endElement(String arg0, String arg1, String arg2)
+      throws
+      SAXException
+  {
+    int vlen = validatorContentHandlers.size();
+    for (int i = 0; i < vlen; i++)
+    {
+      (validatorContentHandlers.elementAt(i))
+          .endElement(arg0, arg1, arg2);
+    }
+    int len = contentHandlers.size();
+    for (int i = 0; i < len; i++)
+    {
+      (contentHandlers.elementAt(i)).endElement();
+    }
+    currentElement = currentElement.getParent();
+  }
+
+  public void endPrefixMapping(String arg0) throws
+      SAXException
+  {
+    int vlen = validatorContentHandlers.size();
+    for (int i = 0; i < vlen; i++)
+    {
+      (validatorContentHandlers.elementAt(i))
+          .endPrefixMapping(arg0);
+    }
+  }
+
+  public void ignorableWhitespace(char[] arg0, int arg1, int arg2)
+      throws
+      SAXException
+  {
+    int vlen = validatorContentHandlers.size();
+    for (int i = 0; i < vlen; i++)
+    {
+      (validatorContentHandlers.elementAt(i))
+          .ignorableWhitespace(arg0, arg1, arg2);
+    }
+    int len = contentHandlers.size();
+    for (int i = 0; i < len; i++)
+    {
+      (contentHandlers.elementAt(i)).ignorableWhitespace(
+          arg0, arg1, arg2);
+    }
+  }
+
+  public void processingInstruction(String arg0, String arg1)
+      throws
+      SAXException
+  {
+    int vlen = validatorContentHandlers.size();
+    for (int i = 0; i < vlen; i++)
+    {
+      (validatorContentHandlers.elementAt(i))
+          .processingInstruction(arg0, arg1);
+    }
+    int len = contentHandlers.size();
+    for (int i = 0; i < len; i++)
+    {
+      (contentHandlers.elementAt(i)).processingInstruction(
+          arg0, arg1);
+    }
+  }
+
+  public void setDocumentLocator(Locator locator)
+  {
+    int vlen = validatorContentHandlers.size();
+    for (int i = 0; i < vlen; i++)
+    {
+      (validatorContentHandlers.elementAt(i))
+          .setDocumentLocator(locator);
+    }
+    documentLocator = new DocumentLocatorImpl(locator);
+  }
+
+  public void skippedEntity(String arg0) throws
+      SAXException
+  {
+    int vlen = validatorContentHandlers.size();
+    for (int i = 0; i < vlen; i++)
+    {
+      (validatorContentHandlers.elementAt(i))
+          .skippedEntity(arg0);
+    }
+  }
+
+  public void startDocument() throws
+      SAXException
+  {
+    int vlen = validatorContentHandlers.size();
+    for (int i = 0; i < vlen; i++)
+    {
+      (validatorContentHandlers.elementAt(i))
+          .startDocument();
+    }
+  }
+
+  public void startElement(String namespaceURI, String localName,
+      String qName, Attributes atts) throws
+      SAXException
+  {
+
+    AttributesImpl attribs = new AttributesImpl(atts);
+
+    if (mimeType.equals("application/xhtml+xml")
+        && version == EPUBVersion.VERSION_3)
+    {
+      try
+      {
+        int len = attribs.getLength();
+        List<String> removals = new ArrayList<String>();
+        for (int i = 0; i < len; i++)
+        {
+          if (attribs.getLocalName(i).startsWith("data-"))
+          {
+            removals.add(attribs.getQName(i));
+          } else if(isCustomNamespaceAttr(attribs.getURI(i))) {
+        	  removals.add(attribs.getQName(i));
+          }
+        }
+        for (String remove : removals)
+        {
+          int rmv = attribs.getIndex(remove);
+          //System.out.println("removing attribute " + attribs.getQName(rmv));
+          attribs.removeAttribute(rmv);
+        }
+      }
+      catch (Exception e)
+      {
+        System.err.println("data-* removal exception: "
+            + e.getMessage());
+      }
+    }
+
+    int vlen = validatorContentHandlers.size();
+    for (int i = 0; i < vlen; i++)
+    {
+      (validatorContentHandlers.elementAt(i))
+          .startElement(namespaceURI, localName, qName, attribs);
+    }
+    int index = qName.indexOf(':');
+    String prefix;
+    String name;
+    if (index < 0)
+    {
+      prefix = null;
+      name = qName;
+    }
+    else
+    {
+      prefix = qName.substring(0, index);
+      name = qName.substring(index + 1);
+    }
+    int count = attribs.getLength();
+    XMLAttribute[] attributes = count == 0 ? null : new XMLAttribute[count];
+    for (int i = 0; i < count; i++)
+    {
+      String attName = attribs.getLocalName(i);
+      String attNamespace = attribs.getURI(i);
+      String attQName = attribs.getQName(i);
+      int attIndex = attQName.indexOf(':');
+      String attPrefix;
+      if (attIndex < 0)
+      {
+        attPrefix = null;
+        attNamespace = null;
+      }
+      else
+      {
+        attPrefix = attQName.substring(0, attIndex);
+      }
+      String attValue = attribs.getValue(i);
+      assert attributes != null;
+      attributes[i] = new XMLAttribute(attNamespace, attPrefix, attName,
+          attValue);
+    }
+    currentElement = new XMLElement(namespaceURI, prefix, name, attributes,
+        currentElement);
+    int len = contentHandlers.size();
+    for (int i = 0; i < len; i++)
+    {
+      (contentHandlers.elementAt(i)).startElement();
+    }
+  }
+  
+  //3.0.1 custom attributes handling
+  private static final Set<String> knownXHTMLContentDocsNamespaces = new HashSet<String>();
+  static {
+	  knownXHTMLContentDocsNamespaces.add(Namespaces.MATHML);
+	  knownXHTMLContentDocsNamespaces.add(Namespaces.OPS);
+	  knownXHTMLContentDocsNamespaces.add(Namespaces.SSML);
+	  knownXHTMLContentDocsNamespaces.add(Namespaces.SVG);
+	  knownXHTMLContentDocsNamespaces.add(Namespaces.XHTML);
+	  knownXHTMLContentDocsNamespaces.add(Namespaces.XMLEVENTS);
+	  knownXHTMLContentDocsNamespaces.add(Namespaces.XML);
+	  knownXHTMLContentDocsNamespaces.add(Namespaces.XLINK);
+  }
+  private boolean isCustomNamespaceAttr(String nsuri) {
+
+	  
+	if(nsuri == null || nsuri.trim().length() == 0) {
+		return false;
+	}
+	
+	for(String ns : knownXHTMLContentDocsNamespaces) {
+		if(ns.equals(nsuri)) {
+			return false;
+		}
+	}
+	
+	return true;
+  }
+
+
+public void startPrefixMapping(String arg0, String arg1)
+      throws
+      SAXException
+  {
+    int vlen = validatorContentHandlers.size();
+    for (int i = 0; i < vlen; i++)
+    {
+      (validatorContentHandlers.elementAt(i))
+          .startPrefixMapping(arg0, arg1);
+    }
+  }
+
+  public void comment(char[] text, int arg1, int arg2) throws
+      SAXException
+  {
+    if (validatorLexicalHandlers.size() > 0)
+    {
+      for (LexicalHandler h : this.validatorLexicalHandlers)
+      {
+        h.comment(text, arg1, arg2);
+      }
+    }
+  }
+
+  public void endCDATA() throws
+      SAXException
+  {
+    if (validatorLexicalHandlers.size() > 0)
+    {
+      for (LexicalHandler h : this.validatorLexicalHandlers)
+      {
+        h.endCDATA();
+      }
+    }
+  }
+
+  public void endDTD() throws
+      SAXException
+  {
+    if (validatorLexicalHandlers.size() > 0)
+    {
+      for (LexicalHandler h : this.validatorLexicalHandlers)
+      {
+        h.endDTD();
+      }
+    }
+  }
+
+  public void endEntity(String ent) throws
+      SAXException
+  {
+    if (validatorLexicalHandlers.size() > 0)
+    {
+      for (LexicalHandler h : this.validatorLexicalHandlers)
+      {
+        h.endEntity(ent);
+      }
+    }
+  }
+
+  public void startCDATA() throws
+      SAXException
+  {
+    if (validatorLexicalHandlers.size() > 0)
+    {
+      for (LexicalHandler h : this.validatorLexicalHandlers)
+      {
+        h.startCDATA();
+      }
+    }
+  }
+
+  public void startDTD(String root, String publicId, String systemId)
+      throws
+      SAXException
+  {
+    if (validatorLexicalHandlers.size() > 0)
+    {
+      for (LexicalHandler h : this.validatorLexicalHandlers)
+      {
+        h.startDTD(root, publicId, systemId);
+      }
+    }
+
+    handleDocTypeUserInfo(root, publicId, systemId);
+  }
+
+  private void handleDocTypeUserInfo(String root, String publicId, String systemId)
+  {
+    //outWriter.println("DEBUG doctype ==> "+ root + ", " + publicId + ", " + systemId + ", " );
+
+    //for modular DTDs etc, just issue a warning for the top level IDs.
+    if (!firstStartDTDInvocation)
+    {
+      return;
+    }
+
+    if (version == EPUBVersion.VERSION_2)
+    {
+
+      if (mimeType != null && "application/xhtml+xml".equals(mimeType) && root.equals("html"))
+      {
+        //OPS 2.0(.1)
+        String complete = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \n" +
+            "\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">";
+
+        if (matchDoctypeId("-//W3C//DTD XHTML 1.1//EN", publicId, complete))
+        {
+          matchDoctypeId("http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd", systemId, complete);
+        }
+
+      }
+
+      if (mimeType != null && "opf".equals(mimeType) && (publicId != null || systemId != null))
+      {
+
+        //1.2: <!DOCTYPE package PUBLIC "+//ISBN 0-9673008-1-9//DTD OEB 1.2 Package//EN" "http://openebook.org/dtds/oeb-1.2/oebpkg12.dtd">
+        //http://http://idpf.org/dtds/oeb-1.2/oebpkg12.dtd
+        if ("package".equals(root)
+            && (publicId == null || publicId.equals("+//ISBN 0-9673008-1-9//DTD OEB 1.2 Package//EN"))
+            && (systemId == null || systemId.equals("http://openebook.org/dtds/oeb-1.2/oebpkg12.dtd"))
+            )
+        {
+          //for heritage content collections, dont warn about this, as its not explicitly forbidden by the spec
+        }
+        else
+        {
+          report.message(MessageId.HTM_009, new MessageLocation(resource, 0, 0));
+        }
+
+      }
+
+      if (mimeType != null && "application/x-dtbncx+xml".equals(mimeType))
+      {
+        String complete = "<!DOCTYPE ncx PUBLIC \"-//NISO//DTD ncx 2005-1//EN\" " +
+            "\n \"http://www.daisy.org/z3986/2005/ncx-2005-1.dtd\">";
+        if (matchDoctypeId("-//NISO//DTD ncx 2005-1//EN", publicId, complete))
+        {
+          matchDoctypeId("http://www.daisy.org/z3986/2005/ncx-2005-1.dtd", systemId, complete);
+        }
+      }
+
+    }
+    else if (version == EPUBVersion.VERSION_3)
+    {
+      if (mimeType != null && "application/xhtml+xml".equals(mimeType) && "html".equalsIgnoreCase(root))
+      {
+        String complete = "<!DOCTYPE html>";
+        //warn for obsolete or unknown doctypes
+        if (publicId == null && (systemId == null || systemId.equals("about:legacy-compat")))
+        {
+          // we assume to have have <!DOCTYPE html> or <!DOCTYPE html SYSTEM "about:legacy-compat">
+        }
+        else
+        {
+          report.message(MessageId.HTM_004, new MessageLocation(resource, 0, 0), publicId, complete);
+        }
+      }
+      else if ("image/svg+xml".equals(mimeType) && "svg".equalsIgnoreCase(root))
+      {
+        if (
+            !(checkDTD("-//W3C//DTD SVG 1.1//EN", "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd", publicId, systemId)  ||
+              checkDTD("-//W3C//DTD SVG 1.0//EN", "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd", publicId, systemId)  ||
+              checkDTD("-//W3C//DTD SVG 1.1 Basic//EN", "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-basic.dtd", publicId, systemId)  ||
+              checkDTD("-//W3C//DTD SVG 1.1 Tiny//EN", "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd", publicId, systemId))
+           )
+        {
+          report.message(MessageId.HTM_009, new MessageLocation(resource, 0, 0));
+        }
+      }
+      else if (mimeType != null && "application/x-dtbncx+xml".equals(mimeType))
+      {
+        String complete = "<!DOCTYPE ncx PUBLIC \"-//NISO//DTD ncx 2005-1//EN\" " +
+            "\n \"http://www.daisy.org/z3986/2005/ncx-2005-1.dtd\">";
+        if (matchDoctypeId("-//NISO//DTD ncx 2005-1//EN", publicId, complete))
+        {
+          matchDoctypeId("http://www.daisy.org/z3986/2005/ncx-2005-1.dtd", systemId, complete);
+        }
+      }
+      else
+      {
+        report.message(MessageId.HTM_009, new MessageLocation(resource, 0, 0));
+      }
+    }
+
+    firstStartDTDInvocation = false;
+  }
+
+  boolean checkDTD(String expectedPublicId, String expectedSystemId, String actualPublicId, String actualSystemId)
+  {
+    if ((actualPublicId == null || (actualPublicId != null && expectedPublicId.equalsIgnoreCase(actualPublicId))) &&
+        (actualSystemId == null || (actualSystemId != null && expectedSystemId.equalsIgnoreCase(actualSystemId))))
+    {
+      return true;
+    }
+    return false;
+  }
+
+  boolean matchDoctypeId(String expected, String given, String messageParam)
+  {
+    if (given != null && !expected.equals(given))
+    {
+      report.message(MessageId.HTM_004, new MessageLocation(resource, 0, 0), given, messageParam);
+      return false;
+    }
+    return true;
+  }
+
+  public void startEntity(String ent) throws
+      SAXException
+  {
+    if (validatorLexicalHandlers.size() > 0)
+    {
+      for (LexicalHandler h : this.validatorLexicalHandlers)
+      {
+        h.startEntity(ent);
+      }
+    }
+    if (!entities.contains(ent) && !ent.equals("[dtd]"))
+    {
+      // This message may never be reported.  Undeclared entities result in a Sax Parser Error and message RSC_005.
+      report.message(MessageId.HTM_011, new MessageLocation(resource, getLineNumber(), getColumnNumber(), ent));
+    }
+  }
+
+  public void attributeDecl(String name, String name2, String type,
+      String mode, String value) throws
+      SAXException
+  {
+    if (validatorDeclHandlers.size() > 0)
+    {
+      for (DeclHandler h : this.validatorDeclHandlers)
+      {
+        h.attributeDecl(name, name2, type, mode, value);
+      }
+    }
+  }
+
+  public void elementDecl(String name, String model) throws
+      SAXException
+  {
+    if (validatorDeclHandlers.size() > 0)
+    {
+      for (DeclHandler h : this.validatorDeclHandlers)
+      {
+        h.elementDecl(name, model);
+      }
+    }
+  }
+
+  public void externalEntityDecl(String name, String publicId, String systemId)
+      throws
+      SAXException
+  {
+    if (validatorDeclHandlers.size() > 0)
+    {
+      for (DeclHandler h : this.validatorDeclHandlers)
+      {
+        h.externalEntityDecl(name, publicId, systemId);
+      }
+    }
+
+    if (version == EPUBVersion.VERSION_3 && (mimeType.compareTo("application/xhtml+xml") == 0))
+    {
+      report.message(MessageId.HTM_003, new MessageLocation(resource, getLineNumber(), getColumnNumber(), name), name);
+      return;
+    }
+    entities.add(name);
+  }
+
+  public void internalEntityDecl(String name, String value)
+      throws
+      SAXException
+  {
+    if (validatorDeclHandlers.size() > 0)
+    {
+      for (DeclHandler h : this.validatorDeclHandlers)
+      {
+        h.internalEntityDecl(name, value);
+      }
+    }
+    entities.add(name);
+  }
+
+  public XMLElement getCurrentElement()
+  {
+    return currentElement;
+  }
+
+  public Report getReport()
+  {
+    return report;
+  }
+
+  public int getLineNumber()
+  {
+    return documentLocator.getLineNumber();
+  }
+
+  public int getColumnNumber()
+  {
+    return documentLocator.getColumnNumber();
+  }
+
+  public String getXMLVersion()
+  {
+    return documentLocator.getXMLVersion();
+  }
+
+  public String getResourceName()
+  {
+    return resource;
+  }
+
+  private static final byte[][] utf16magic = {{(byte) 0xFE, (byte) 0xFF},
+      {(byte) 0xFF, (byte) 0xFE}, {0, 0x3C, 0, 0x3F},
+      {0x3C, 0, 0x3F, 0}};
+
+  private static final byte[][] ucs4magic = {{0, 0, (byte) 0xFE, (byte) 0xFF},
+      {(byte) 0xFF, (byte) 0xFE, 0, 0},
+      {0, 0, (byte) 0xFF, (byte) 0xFE},
+      {(byte) 0xFE, (byte) 0xFF, 0, 0}, {0, 0, 0, 0x3C},
+      {0, 0, 0x3C, 0}, {0, 0x3C, 0, 0}, {0x3C, 0, 0, 0}};
+
+  private static final byte[] utf8magic = {(byte) 0xEF, (byte) 0xBB, (byte) 0xBF};
+
+  private static final byte[] ebcdicmagic = {0x4C, 0x6F, (byte) 0xA7, (byte) 0x94};
+
+  private static boolean matchesMagic(byte[] magic, byte[] buffer)
+  {
+    for (int i = 0; i < magic.length; i++)
+    {
+      if (buffer[i] != magic[i])
+      {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  private static String sniffEncoding(InputStream in) throws
+      IOException
+  {
+    // see http://www.w3.org/TR/REC-xml/#sec-guessing
+    byte[] buffer = new byte[256];
+    in.mark(buffer.length);
+    int len = in.read(buffer);
+    in.reset();
+    if (len < 4)
+    {
+      return null;
+    }
+    for (byte[] magic : utf16magic)
+    {
+      if (matchesMagic(magic, buffer))
+      {
+        return "UTF-16";
+      }
+    }
+    for (byte[] anUcs4magic : ucs4magic)
+    {
+      if (matchesMagic(anUcs4magic, buffer))
+      {
+        return "UCS-4";
+      }
+    }
+    if (matchesMagic(utf8magic, buffer))
+    {
+      return "UTF-8";
+    }
+    if (matchesMagic(ebcdicmagic, buffer))
+    {
+      return "EBCDIC";
+    }
+
+    // some ASCII-compatible encoding; read ASCII
+    int asciiLen = 0;
+    while (asciiLen < len)
+    {
+      int c = buffer[asciiLen] & 0xFF;
+      if (c == 0 || c > 0x7F)
+      {
+        break;
+      }
+      asciiLen++;
+    }
+
+    // read it into a String
+    String header = new String(buffer, 0, asciiLen, "ASCII");
+    int encIndex = header.indexOf("encoding=");
+    if (encIndex < 0)
+    {
+      return null; // probably UTF-8
+    }
+
+    encIndex += 9;
+    if (encIndex >= header.length())
+    {
+      return null; // encoding did not fit!
+    }
+
+    char quote = header.charAt(encIndex);
+    if (quote != '"' && quote != '\'')
+    {
+      return null; // confused...
+    }
+
+    int encEnd = header.indexOf(quote, encIndex + 1);
+    if (encEnd < 0)
+    {
+      return null; // encoding did not fit!
+    }
+
+    String encoding = header.substring(encIndex + 1, encEnd);
+    return encoding.toUpperCase();
+  }
+
+  static
+  {
+    Hashtable<String, String> map = new Hashtable<String, String>();
+
+    // OEB 1.2
+    map.put("http://openebook.org/dtds/oeb-1.2/oebpkg12.dtd",
+        ResourceUtil.getResourcePath("schema/20/dtd/oebpkg12.dtd"));
+    map.put("http://http://idpf.org/dtds/oeb-1.2/oebpkg12.dtd",
+        ResourceUtil.getResourcePath("schema/20/dtd/oebpkg12.dtd"));
+    map.put("http://openebook.org/dtds/oeb-1.2/oeb12.ent",
+        ResourceUtil.getResourcePath("schema/20/dtd/oeb12.dtdinc"));
+
+    //2.0 dtd, probably never published
+    map.put("http://www.idpf.org/dtds/2007/opf.dtd",
+        ResourceUtil.getResourcePath("schema/20/dtd/opf20.dtd"));
+    //xhtml 1.1
+    map.put("http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd",
+        ResourceUtil.getResourcePath("schema/20/dtd/xhtml1-transitional.dtd"));
+    map.put("http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd",
+        ResourceUtil.getResourcePath("schema/20/dtd/xhtml1-strict.dtd"));
+    map.put("http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent",
+        ResourceUtil.getResourcePath("schema/20/dtd/xhtml-lat1.dtdinc"));
+    map.put("http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent",
+        ResourceUtil.getResourcePath("schema/20/dtd/xhtml-symbol.dtdinc"));
+    map.put("http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent",
+        ResourceUtil.getResourcePath("schema/20/dtd/xhtml-special.dtdinc"));
+    //svg 1.1
+    map.put("http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd",
+        ResourceUtil.getResourcePath("schema/20/dtd/svg11.dtd"));
+    //dtbook
+    map.put("http://www.daisy.org/z3986/2005/dtbook-2005-2.dtd",
+        ResourceUtil.getResourcePath("schema/20/dtd/dtbook-2005-2.dtd"));
+    //ncx
+    map.put("http://www.daisy.org/z3986/2005/ncx-2005-1.dtd",
+        ResourceUtil.getResourcePath("schema/20/dtd/ncx-2005-1.dtd"));
+
+    //xhtml 1.1: just reference the character entities, as we validate with rng
+    map.put("http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd",
+        ResourceUtil.getResourcePath("schema/20/dtd/xhtml11-ent.dtd"));
+    map.put("http://www.w3.org/MarkUp/DTD/xhtml11.dtd",
+        ResourceUtil.getResourcePath("schema/20/dtd/xhtml11-ent.dtd"));
+
+    // non-resolved names; Saxon (which schematron requires and registers as
+    // preferred parser, it seems) passes us those (bad, bad!), work around it
+    map.put("xhtml-lat1.ent",
+        ResourceUtil.getResourcePath("dtd/xhtml-lat1.dtdinc"));
+    map.put("xhtml-symbol.ent",
+        ResourceUtil.getResourcePath("dtd/xhtml-symbol.dtdinc"));
+    map.put("xhtml-special.ent",
+        ResourceUtil.getResourcePath("dtd/xhtml-special.dtdinc"));
+    systemIdMap = map;
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/xml/XMLValidator.java b/src/main/java/com/adobe/epubcheck/xml/XMLValidator.java
new file mode 100755
index 0000000..81f3b67
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/xml/XMLValidator.java
@@ -0,0 +1,262 @@
+/*
+ * Copyright (c) 2007 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.xml;
+
+import com.adobe.epubcheck.util.ResourceUtil;
+import com.thaiopensource.resolver.Identifier;
+import com.thaiopensource.resolver.Input;
+import com.thaiopensource.resolver.Resolver;
+import com.thaiopensource.resolver.ResolverException;
+import com.thaiopensource.util.PropertyMapBuilder;
+import com.thaiopensource.validate.Schema;
+import com.thaiopensource.validate.SchemaReader;
+import com.thaiopensource.validate.ValidateProperty;
+import com.thaiopensource.validate.auto.AutoSchemaReader;
+import com.thaiopensource.validate.auto.SchemaReaderFactorySchemaReceiverFactory;
+import com.thaiopensource.validate.rng.CompactSchemaReader;
+import com.thaiopensource.validate.schematron.NewSaxonSchemaReaderFactory;
+import net.sf.saxon.Configuration;
+import net.sf.saxon.TransformerFactoryImpl;
+import net.sf.saxon.sxpath.IndependentContext;
+import net.sf.saxon.sxpath.XPathStaticContext;
+import org.idpf.epubcheck.util.saxon.ColumnNumberFunction;
+import org.idpf.epubcheck.util.saxon.LineNumberFunction;
+import org.idpf.epubcheck.util.saxon.SystemIdFunction;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+import javax.xml.transform.TransformerFactory;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+
+public class XMLValidator
+{
+
+  Schema schema;
+
+  /**
+   * Basic Resolver from Jing modified to add support for resolving zip and
+   * jar relative locations.
+   *
+   * @author george at oxygenxml.com
+   */
+  static public class BasicResolver implements Resolver
+  {
+    static private final BasicResolver theInstance = new BasicResolver();
+
+    BasicResolver()
+    {
+    }
+
+    public static BasicResolver getInstance()
+    {
+      return theInstance;
+    }
+
+    public void resolve(Identifier id, Input input) throws
+        IOException,
+        ResolverException
+    {
+      if (!input.isResolved())
+      {
+        input.setUri(resolveUri(id));
+      }
+    }
+
+    public void open(Input input) throws
+        IOException,
+        ResolverException
+    {
+      if (!input.isUriDefinitive())
+      {
+        return;
+      }
+      URI uri;
+      try
+      {
+        uri = new URI(input.getUri());
+      }
+      catch (URISyntaxException e)
+      {
+        throw new ResolverException(e);
+      }
+      if (!uri.isAbsolute())
+      {
+        throw new ResolverException("cannot open relative URI: " + uri);
+      }
+      URL url = new URL(uri.toASCIIString());
+      // XXX should set the encoding properly
+      // XXX if this is HTTP and we've been redirected, should do
+      // input.setURI with the new URI
+      input.setByteStream(url.openStream());
+    }
+
+    public static String resolveUri(Identifier id) throws
+        ResolverException
+    {
+      try
+      {
+        String uriRef = id.getUriReference();
+        URI uri = new URI(uriRef);
+        if (!uri.isAbsolute())
+        {
+          String base = id.getBase();
+          if (base != null)
+          {
+            // OXYGEN PATCH START
+            // Use class URL in order to resolve protocols like zip
+            // and jar.
+            URI baseURI = new URI(base);
+            if ("zip".equals(baseURI.getScheme())
+                || "jar".equals(baseURI.getScheme()))
+            {
+              uriRef = new URL(new URL(base), uriRef)
+                  .toExternalForm();
+              // OXYGEN PATCH END
+            }
+            else
+            {
+              uriRef = baseURI.resolve(uri).toString();
+            }
+          }
+        }
+
+        return uriRef;
+      }
+      catch (URISyntaxException e)
+      {
+        throw new ResolverException(e);
+      }
+      catch (MalformedURLException e)
+      {
+        throw new ResolverException(e);
+      }
+    }
+  }
+
+  /**
+   * Extends Jing's Saxon 9 schema reader factory by registering
+   * extension functions.
+   */
+  static public class ExtendedSaxonSchemaReaderFactory extends NewSaxonSchemaReaderFactory
+  {
+    public void initTransformerFactory(TransformerFactory factory)
+    {
+      super.initTransformerFactory(factory);
+      if (factory instanceof TransformerFactoryImpl)
+      {
+        Configuration configuration = ((TransformerFactoryImpl) factory).getConfiguration();
+        XPathStaticContext xpathContext = new IndependentContext(configuration);
+        if (!xpathContext.getFunctionLibrary().isAvailable(LineNumberFunction.QNAME, -1))
+        {
+          configuration.registerExtensionFunction(new LineNumberFunction());
+        }
+        if (!xpathContext.getFunctionLibrary().isAvailable(ColumnNumberFunction.QNAME, -1))
+        {
+          configuration.registerExtensionFunction(new ColumnNumberFunction());
+        }
+        if (!xpathContext.getFunctionLibrary().isAvailable(SystemIdFunction.QNAME, -1))
+        {
+          configuration.registerExtensionFunction(new SystemIdFunction());
+        }
+      }
+    }
+  }
+
+  // handles errors in schemas
+  private class ErrorHandlerImpl implements ErrorHandler
+  {
+
+    public void error(SAXParseException exception) throws
+        SAXException
+    {
+      exception.printStackTrace();
+    }
+
+    public void fatalError(SAXParseException exception) throws
+        SAXException
+    {
+      exception.printStackTrace();
+    }
+
+    public void warning(SAXParseException exception) throws
+        SAXException
+    {
+      exception.printStackTrace();
+    }
+
+  }
+
+  public XMLValidator(String schemaName)
+  {
+    try
+    {
+      String resourcePath = ResourceUtil.getResourcePath(schemaName);
+      URL systemIdURL = ResourceUtil.getResourceURL(resourcePath);
+      if (systemIdURL == null)
+      {
+        throw new RuntimeException("Could not find resource "
+            + resourcePath);
+      }
+      InputSource schemaSource = new InputSource(systemIdURL.toString());
+      PropertyMapBuilder mapBuilder = new PropertyMapBuilder();
+      mapBuilder.put(ValidateProperty.RESOLVER,
+          BasicResolver.getInstance());
+      mapBuilder.put(ValidateProperty.ERROR_HANDLER,
+          new ErrorHandlerImpl());
+
+      SchemaReader schemaReader;
+
+      if (schemaName.endsWith(".rnc"))
+      {
+        schemaReader = CompactSchemaReader.getInstance();
+			} else if (schemaName.endsWith(".sch")) {
+				schemaReader = new AutoSchemaReader(
+						new SchemaReaderFactorySchemaReceiverFactory(
+  								new ExtendedSaxonSchemaReaderFactory()));
+      }
+      else
+      {
+
+        schemaReader = new AutoSchemaReader();
+      }
+
+      schema = schemaReader.createSchema(schemaSource,
+          mapBuilder.toPropertyMap());
+    }
+    catch (RuntimeException e)
+    {
+      throw e;
+    }
+    catch (Exception e)
+    {
+      e.printStackTrace();
+      throw new Error("Internal error: " + e + " " + schemaName);
+    }
+  }
+}
diff --git a/src/main/java/com/adobe/epubcheck/xml/XMLValidators.java b/src/main/java/com/adobe/epubcheck/xml/XMLValidators.java
new file mode 100644
index 0000000..97c74a1
--- /dev/null
+++ b/src/main/java/com/adobe/epubcheck/xml/XMLValidators.java
@@ -0,0 +1,44 @@
+package com.adobe.epubcheck.xml;
+
+public enum XMLValidators
+{
+  CONTAINER_20_RNG("schema/20/rng/container.rng"),
+  CONTAINER_30_RNC("schema/30/ocf-container-30.rnc"),
+  DTBOOK_RNG("schema/20/rng/dtbook-2005-2.rng"),
+  ENC_20_RNG("schema/20/rng/encryption.rng"),
+  ENC_30_RNC("schema/30/ocf-encryption-30.rnc"),
+  IDUNIQUE_20_SCH("schema/20/sch/id-unique.sch"),
+  MO_30_RNC("schema/30/media-overlay-30.rnc"),
+  MO_30_SCH("schema/30/media-overlay-30.sch"),
+  NAV_30_RNC("schema/30/epub-nav-30.rnc"),
+  NAV_30_SCH("schema/30/epub-nav-30.sch"),
+  NCX_RNG("schema/20/rng/ncx.rng"),
+  NCX_SCH("schema/20/sch/ncx.sch"),
+  OPF_20_RNG("schema/20/rng/opf.rng"),
+  OPF_20_SCH("schema/20/sch/opf.sch"),
+  OPF_30_RNC("schema/30/package-30.rnc"),
+  OPF_30_SCH("schema/30/package-30.sch"),
+  SIG_20_RNG("schema/20/rng/signatures.rng"),
+  SIG_30_RNC("schema/30/ocf-signatures-30.rnc"),
+  SVG_20_RNG("schema/20/rng/svg11.rng"),
+  SVG_30_RNC("schema/30/epub-svg-30.rnc"),
+  SVG_30_SCH("schema/30/epub-svg-30.sch"),
+  XHTML_20_NVDL("schema/20/rng/ops20.nvdl"),
+  XHTML_30_SCH("schema/30/epub-xhtml-30.sch"),
+  XHTML_30_RNC("schema/30/epub-xhtml-30.rnc"),
+  XHTML_EDUPUB_HEADINGS_SCH("schema/30/edupub/edu-headings.sch"),
+  XHTML_EDUPUB_SEMANTICS_SCH("schema/30/edupub/edu-semantics.sch");
+
+  private final XMLValidator val;
+
+  private XMLValidators(String schemaName)
+  {
+    val = new XMLValidator(schemaName);
+  }
+
+  public XMLValidator get()
+  {
+    return val;
+  }
+
+}
diff --git a/src/main/java/org/idpf/epubcheck/util/css/CssContentHandler.java b/src/main/java/org/idpf/epubcheck/util/css/CssContentHandler.java
new file mode 100644
index 0000000..28660ca
--- /dev/null
+++ b/src/main/java/org/idpf/epubcheck/util/css/CssContentHandler.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2012 International Digital Publishing Forum
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package org.idpf.epubcheck.util.css;
+
+import org.idpf.epubcheck.util.css.CssGrammar.CssAtRule;
+import org.idpf.epubcheck.util.css.CssGrammar.CssDeclaration;
+import org.idpf.epubcheck.util.css.CssGrammar.CssSelector;
+
+import java.util.List;
+
+/**
+ * ContentHandler interface for CssParser.
+ *
+ * @author mgylling
+ */
+public interface CssContentHandler
+{
+
+  public void startDocument();
+
+  public void endDocument();
+
+  public void startAtRule(CssAtRule atRule);
+
+  public void endAtRule(String name);
+
+  public void selectors(List<CssSelector> selectors);
+
+  public void endSelectors(List<CssSelector> selectors);
+
+  public void declaration(CssDeclaration declaration);
+
+  /**
+   * A default, do-nothing implementation of CssContentHandler.
+   */
+  public class CssDefaultHandler implements CssContentHandler
+  {
+
+    public void startDocument()
+    {
+    }
+
+    public void endDocument()
+    {
+    }
+
+    public void startAtRule(CssAtRule atRule)
+    {
+    }
+
+    public void endAtRule(String name)
+    {
+    }
+
+    public void selectors(List<CssSelector> selectors)
+    {
+    }
+
+    public void endSelectors(List<CssSelector> selectors)
+    {
+    }
+
+    public void declaration(CssDeclaration declaration)
+    {
+    }
+
+  }
+}
diff --git a/src/main/java/org/idpf/epubcheck/util/css/CssErrorHandler.java b/src/main/java/org/idpf/epubcheck/util/css/CssErrorHandler.java
new file mode 100644
index 0000000..89df52d
--- /dev/null
+++ b/src/main/java/org/idpf/epubcheck/util/css/CssErrorHandler.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2012 International Digital Publishing Forum
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package org.idpf.epubcheck.util.css;
+
+import org.idpf.epubcheck.util.css.CssExceptions.CssException;
+
+/**
+ * ErrorHandler interface for CssParser.
+ *
+ * @author mgylling
+ */
+public interface CssErrorHandler
+{
+
+  /**
+   * Receive notification of an error in the CSS syntax.
+   *
+   * @param e CSSException
+   * @throws CssException
+   */
+  public void error(CssException e) throws
+      CssException;
+}
diff --git a/src/main/java/org/idpf/epubcheck/util/css/CssEscape.java b/src/main/java/org/idpf/epubcheck/util/css/CssEscape.java
new file mode 100644
index 0000000..d974f49
--- /dev/null
+++ b/src/main/java/org/idpf/epubcheck/util/css/CssEscape.java
@@ -0,0 +1,199 @@
+/*
+ * Copyright (c) 2012 International Digital Publishing Forum
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+package org.idpf.epubcheck.util.css;
+
+import com.google.common.base.CharMatcher;
+import com.google.common.base.Objects;
+import com.google.common.base.Optional;
+import org.idpf.epubcheck.util.css.CssExceptions.CssException;
+import org.idpf.epubcheck.util.css.CssToken.TokenBuilder;
+
+import java.io.IOException;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static org.idpf.epubcheck.util.css.CssExceptions.CssErrorCode.SCANNER_PREMATURE_EOF;
+import static org.idpf.epubcheck.util.css.CssScanner.*;
+
+/**
+ * Represents a CSS escape sequence.
+ *
+ * @author mgylling
+ */
+
+class CssEscape
+{
+  static final Optional<CssEscape> ABSENT = Optional.absent();
+  private final boolean debug = false;
+  private final CssReader reader;
+  private final TokenBuilder err;
+
+  /**
+   * The original escape sequence
+   */
+  private CharSequence sequence;
+
+  /**
+   * The character resulting from unescaping the original escape sequence
+   */
+  int character;
+
+  /**
+   * Constructor.
+   *
+   * @param reader A CssReader whose current char is the backslash.
+   * @param err    token builder
+   */
+
+  CssEscape(final CssReader reader, final TokenBuilder err)
+  {
+    this.reader = reader;
+    this.err = err;
+  }
+
+  Optional<CssEscape> create() throws
+      IOException,
+      CssException
+  {
+    if (debug)
+    {
+      checkArgument(reader.curChar == '\\', "must be backslash, was: %s", (char) reader.curChar);
+    }
+    /*
+       * The incoming is either a hex escape or single char escape, max 8 chars long
+       */
+    StringBuilder sb = new StringBuilder();
+    int[] eight = reader.peek(8);
+    int first = eight[0];
+
+    if (first == -1)
+    {
+      err.error(SCANNER_PREMATURE_EOF, reader);
+      return Optional.absent();
+    }
+    else if (isNewLine(eight) > 0)
+    {
+      //"a backslash followed by a newline stands by itself"
+      return Optional.absent();
+    }
+
+    if (CssScanner.HEXCHAR.matches((char) first))
+    {
+      //a hex escape, max six chars, + optionally single whitespace or cr+lf
+
+      boolean seenSpace = false;
+
+      for (int cur : eight)
+      {
+        if (cur == -1)
+        {
+          break;
+        }
+        char ch = (char) cur;
+
+        boolean isHexChar = HEXCHAR.matches(ch);
+        boolean isSpace = WHITESPACE.matches(ch);
+        if (!isHexChar && !isSpace)
+        {
+          break;
+        }
+
+        if (HEXCHAR.matches(ch) && !seenSpace && sb.length() < 6)
+        {
+          sb.append((char) cur);
+        }
+
+        if (isSpace)
+        {
+          if (!seenSpace)
+          {
+            sb.append((char) cur);
+            if (cur == '\r')
+            {
+              seenSpace = true;
+            }
+            else
+            {
+              break;
+            }
+          }
+          else
+          {
+            //we have a prev space which is \r
+            if (cur == '\f')
+            {
+              sb.append((char) cur);
+            }
+            break;
+          }
+        }
+      }
+
+      character = Integer.parseInt(WHITESPACE.trimTrailingFrom(sb.toString()), 16);
+      sb.insert(0, '\\');
+      sequence = sb.toString();
+
+    }
+    else
+    {
+      //a single char escape
+      sb.append('\\').append((char) eight[0]);
+      sequence = sb.toString();
+      character = eight[0];
+    }
+
+    return Optional.of(this);
+
+  }
+
+
+  /**
+   * Render this escape.
+   *
+   * @param builder   The TokenBuilder to render into
+   * @param asLiteral If given matcher matches this escapes literal, then render as literal, else as escape.
+   * @return the length of the token in the input character stream
+   */
+  int render(TokenBuilder builder, CharMatcher asLiteral)
+  {
+    char ch = (char) character;
+    if (asLiteral.matches(ch))
+    {
+      builder.append(ch);
+    }
+    else
+    {
+      //TODO could normalize space end chars
+      builder.append(sequence);
+    }
+    return sequence.length() - 1;
+  }
+
+  @Override
+  public String toString()
+  {
+    return Objects.toStringHelper(this)
+        .add("escaped", sequence)
+        .add("unescaped", (char) character)
+        .toString();
+  }
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/idpf/epubcheck/util/css/CssExceptions.java b/src/main/java/org/idpf/epubcheck/util/css/CssExceptions.java
new file mode 100644
index 0000000..c021e5d
--- /dev/null
+++ b/src/main/java/org/idpf/epubcheck/util/css/CssExceptions.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright (c) 2012 International Digital Publishing Forum
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package org.idpf.epubcheck.util.css;
+
+import com.google.common.base.Objects;
+import com.google.common.base.Optional;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Exception types and error codes.
+ *
+ * @author mgylling
+ */
+public final class CssExceptions
+{
+
+  public enum CssErrorCode
+  {
+    SCANNER_ILLEGAL_SYNTAX(SCANNER_TOKEN_SYNTAX),         //a general error code, below refines
+    SCANNER_ILLEGAL_CHAR(SCANNER_TOKEN_SYNTAX + ".char"),
+    SCANNER_ILLEGAL_FIRSTCHAR(SCANNER_TOKEN_SYNTAX + ".firstChar"),
+    SCANNER_MALFORMED_ESCAPE(SCANNER_TOKEN_SYNTAX + ".escape"),
+    SCANNER_ILLEGAL_URANGE(SCANNER_TOKEN_SYNTAX + ".urange"),
+    SCANNER_PREMATURE_EOF(SCANNER + ".prematureEOF"),
+
+    GRAMMAR_PREMATURE_EOF(GRAMMAR + ".prematureEOF"),
+    GRAMMAR_UNEXPECTED_TOKEN(GRAMMAR_TOKEN + ".unexpected"),
+    GRAMMAR_EXPECTING_TOKEN(GRAMMAR_TOKEN + ".expecting"),
+    GRAMMAR_INVALID_SELECTOR(GRAMMAR + ".invalidSelector"),;
+
+    final String value;
+
+    CssErrorCode(String value)
+    {
+      this.value = value;
+    }
+
+    @Override
+    public String toString()
+    {
+      return Objects.toStringHelper(this.getClass()).addValue(value).toString();
+    }
+
+  }
+
+
+  /**
+   * An exception with grammatical origins.
+   */
+  static class CssGrammarException extends CssException
+  {
+    CssGrammarException(final CssErrorCode errorCode, final CssLocation location, final Object... arguments)
+    {
+      super(errorCode, location, arguments);
+    }
+
+    private static final long serialVersionUID = -7470976690623543450L;
+  }
+
+  /**
+   * An exception with lexical origins.
+   */
+  static class CssScannerException extends CssException
+  {
+
+    CssScannerException(final CssToken token, final CssErrorCode errorCode, final CssLocation location, final Object... arguments)
+    {
+      super(token, errorCode, location, arguments);
+    }
+
+    CssScannerException(CssErrorCode errorCode, CssLocation location, Object... arguments)
+    {
+      super(errorCode, location, arguments);
+    }
+
+    private static final long serialVersionUID = 7105109387886737631L;
+  }
+
+  public static abstract class CssException extends Exception
+  {
+    final CssErrorCode errorCode;
+    final CssLocation location;
+    final Optional<CssToken> token;
+
+    CssException(final CssToken token, final CssErrorCode errorCode, final CssLocation location, final Object... arguments)
+    {
+      super(Messages.get(errorCode.value, arguments));
+      this.errorCode = checkNotNull(errorCode);
+      this.location = checkNotNull(location);
+      this.token = token == null ? absent : Optional.of(token);
+    }
+
+    CssException(final CssErrorCode errorCode, final CssLocation location, final Object... arguments)
+    {
+      this(null, errorCode, location, arguments);
+    }
+
+    public CssErrorCode getErrorCode()
+    {
+      return errorCode;
+    }
+
+    public CssLocation getLocation()
+    {
+      return location;
+    }
+
+    @Override
+    public String toString()
+    {
+      return Objects.toStringHelper(this.getClass())
+          .add("errorCode", errorCode)
+          .add("location", location.toString())
+          .toString();
+    }
+
+    @Override
+    public boolean equals(Object obj)
+    {
+      if (obj instanceof CssException)
+      {
+        CssException exc = (CssException) obj;
+        if (exc.errorCode.equals(this.errorCode)
+            && exc.location.equals(this.location))
+        {
+          return true;
+        }
+      }
+      return false;
+    }
+
+    private static final long serialVersionUID = -4635263495562931206L;
+  }
+
+  private final static String SCANNER = "css.scanner";
+  private final static String SCANNER_TOKEN_SYNTAX = SCANNER + ".token.syntax";
+  private final static String GRAMMAR = "css.grammar";
+  private final static String GRAMMAR_TOKEN = GRAMMAR + ".token";
+
+  private static final Optional<CssToken> absent = Optional.absent();
+
+}
diff --git a/src/main/java/org/idpf/epubcheck/util/css/CssGrammar.java b/src/main/java/org/idpf/epubcheck/util/css/CssGrammar.java
new file mode 100644
index 0000000..b69e938
--- /dev/null
+++ b/src/main/java/org/idpf/epubcheck/util/css/CssGrammar.java
@@ -0,0 +1,1405 @@
+/*
+ * Copyright (c) 2012 International Digital Publishing Forum
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package org.idpf.epubcheck.util.css;
+
+import com.google.common.base.*;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import org.idpf.epubcheck.util.css.CssExceptions.CssErrorCode;
+import org.idpf.epubcheck.util.css.CssExceptions.CssException;
+import org.idpf.epubcheck.util.css.CssExceptions.CssGrammarException;
+import org.idpf.epubcheck.util.css.CssParser.ContextRestrictions;
+import org.idpf.epubcheck.util.css.CssTokenList.CssTokenIterator;
+
+import java.util.List;
+import java.util.Map;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.idpf.epubcheck.util.css.CssExceptions.CssErrorCode.GRAMMAR_UNEXPECTED_TOKEN;
+import static org.idpf.epubcheck.util.css.CssToken.Matchers.*;
+import static org.idpf.epubcheck.util.css.CssTokenList.Filters.FILTER_NONE;
+
+/**
+ * CSS grammar components.
+ *
+ * @author mgylling
+ */
+public class CssGrammar
+{
+
+  /**
+   * Abstract base for all CssConstructs.
+   */
+  public static abstract class CssConstruct
+  {
+    final CssLocation location;
+    final Type type;
+
+    public CssConstruct(final Type type, final CssLocation location)
+    {
+      this.location = checkNotNull(location);
+      this.type = checkNotNull(type);
+    }
+
+    public final CssLocation getLocation()
+    {
+      return location;
+    }
+
+    public final Type getType()
+    {
+      return type;
+    }
+
+    public abstract String toCssString();
+
+    public enum Type
+    {
+      //atomics
+      STRING,
+      KEYWORD,
+      COMBINATOR,         //space, plus, gt, tilde
+      ATTRIBUTE_MATCH,       // "~=", "|=", "^=","$=" "*="
+      HASHNAME,          //#ident
+      CLASSNAME,          //.ident
+      QUANTITY,
+      URANGE,
+      URI,
+      SYMBOL,            //a single char, eg operators
+      TYPE_SELECTOR,        //ns|E, *|E, |E, E, *
+      PSEUDO,            //element and class
+
+      //composed
+      ATRULE,
+      FUNCTION,
+      DECLARATION,
+      SELECTOR,
+      SIMPLE_SELECTOR_SEQ,
+      ATTRIBUTE_SELECTOR,      //[...]
+      SCOPEDGROUP,        //(...) and [...], the latter when not an attr selector segment
+
+
+    }
+  }
+
+  /*********************************************
+   *
+   *    atomics
+   *
+   ********************************************/
+
+  /**
+   * A CssConstruct that is composed by a single token.
+   */
+  static abstract class CssAtomicConstruct extends CssConstruct
+  {
+    final String value;
+
+    public CssAtomicConstruct(final Type type, final String value, final CssLocation location)
+    {
+      super(type, location);
+      this.value = checkNotNull(value);
+    }
+
+    @Override
+    public String toString()
+    {
+      return Objects.toStringHelper(this).addValue(value).toString();
+    }
+
+    @Override
+    public String toCssString()
+    {
+      return value;
+    }
+
+  }
+
+  /**
+   * A CSS string. The returned value does not include start and end quotes.
+   */
+  public final static class CssString extends CssAtomicConstruct
+  {
+    public CssString(final String value, final CssLocation location)
+    {
+      super(Type.STRING, value, location);
+    }
+
+    @Override
+    public final String toCssString()
+    {
+      return "'" + value + "'";
+    }
+  }
+
+  /**
+   * A CSS keyword.
+   */
+  public final static class CssKeyword extends CssAtomicConstruct
+  {
+    public CssKeyword(final String value, final CssLocation location)
+    {
+      super(Type.KEYWORD, value, location);
+    }
+  }
+
+  /**
+   * A CSS hash name
+   */
+  public final static class CssHashName extends CssAtomicConstruct
+  {
+    public CssHashName(final String value, final CssLocation location)
+    {
+      super(Type.HASHNAME, value, location);
+    }
+  }
+
+  /**
+   * A CSS class name
+   */
+  public final static class CssClassName extends CssAtomicConstruct
+  {
+    public CssClassName(final String value, final CssLocation location)
+    {
+      super(Type.CLASSNAME, value, location);
+    }
+  }
+
+  /**
+   * A CSS unicode range
+   */
+  public final static class CssUnicodeRange extends CssAtomicConstruct
+  {
+    public CssUnicodeRange(final String value, final CssLocation location)
+    {
+      super(Type.URANGE, value, location);
+    }
+  }
+
+  /**
+   * A CSS URI.
+   */
+  public final static class CssURI extends CssAtomicConstruct
+  {
+    public CssURI(final String value, final CssLocation location)
+    {
+      super(Type.URI, value, location);
+    }
+
+    /**
+     * The URI string itself (leading/trailing whitespace+quotes stripped, url function removed)
+     */
+    public String toUriString()
+    {
+      StringBuilder builder = new StringBuilder();
+      boolean inStart = false;
+
+      for (int i = 0; i < value.length(); i++)
+      {
+        if (i > 3 && i < value.length() - 1)
+        {
+          char ch = value.charAt(i);
+          if (CssScanner.QUOTES.matches(ch)
+              || CssScanner.WHITESPACE.matches(ch))
+          {
+            if (!inStart)
+            {
+            }
+            else
+            {
+              builder.append(ch);
+            }
+          }
+          else
+          {
+            inStart = true;
+            builder.append(ch);
+          }
+        }
+      }
+
+      while (true)
+      {
+        if (builder.length() == 0)
+        {
+          break;
+        }
+        int index = builder.length() - 1;
+        char ch = builder.charAt(index);
+        if (CssScanner.QUOTES.matches(ch)
+            || CssScanner.WHITESPACE.matches(ch))
+        {
+          builder.deleteCharAt(index);
+        }
+        else
+        {
+          break;
+        }
+      }
+
+      return builder.toString();
+    }
+  }
+
+  /**
+   * A CSS single-character symbol (e.g. operator) that is not
+   * in the range of IDENT/KEYWORD and not '{', '}' or ';'. The value
+   * is interned.
+   */
+  public final static class CssSymbol extends CssAtomicConstruct
+  {
+    public CssSymbol(final String value, final CssLocation location)
+    {
+      super(Type.SYMBOL, value.intern(), location);
+      checkArgument(value.length() == 1);
+    }
+  }
+
+  /**
+   * A CSS selector combinator (space, plus, greater or tilde). The value is interned.
+   */
+  public final static class CssSelectorCombinator extends CssAtomicConstruct
+  {
+    final CssSelectorCombinator.Type subType;
+
+    public CssSelectorCombinator(final char value, final CssLocation location)
+    {
+      super(CssConstruct.Type.COMBINATOR, String.valueOf(value).intern(), location);
+
+      switch (value)
+      {
+        case ' ':
+          this.subType = Type.DESCENDANT;
+          break;
+        case '>':
+          this.subType = Type.CHILD;
+          break;
+        case '+':
+          this.subType = Type.ADJACENT_SIBLING;
+          break;
+        case '~':
+          this.subType = Type.GENERAL_SIBLING;
+          break;
+        default:
+          throw new IllegalStateException();
+      }
+    }
+
+    public final CssSelectorCombinator.Type getCombinatorType()
+    {
+      return subType;
+    }
+
+    public enum Type
+    {
+      DESCENDANT,     //S
+      CHILD,        //>
+      ADJACENT_SIBLING,  //+
+      GENERAL_SIBLING  //~
+    }
+  }
+
+  /**
+   * An attribute match selector ('=', '~=', '|=', '^=', '$=', '*=')
+   */
+  public final static class CssAttributeMatchSelector extends CssAtomicConstruct
+  {
+    final CssAttributeMatchSelector.Type subType;
+
+    public CssAttributeMatchSelector(final String value,
+        final CssAttributeMatchSelector.Type type, final CssLocation location)
+    {
+      super(CssConstruct.Type.ATTRIBUTE_MATCH, value, location);
+      this.subType = type;
+    }
+
+    public final CssAttributeMatchSelector.Type getAttributeMatchType()
+    {
+      return subType;
+    }
+
+    public enum Type
+    {
+      EQUALS,       //"="
+      INCLUDES,       //"~="
+      DASHMATCH,       //"|="
+      PREFIXMATCH,     //"^="
+      SUFFIXMATCH,     //"$="
+      SUBSTRINGMATCH   //"*="
+    }
+
+    @Override
+    public String toString()
+    {
+      return Objects.toStringHelper(this).addValue(subType.name()).addValue(value).toString();
+    }
+  }
+
+  /**
+   * A type or universal ('*') selector, possibly with namespace bindings.
+   */
+  public static class CssTypeSelector extends CssAtomicConstruct
+  {
+    public CssTypeSelector(final String value, final CssLocation location)
+    {
+      super(Type.TYPE_SELECTOR, value, location);
+    }
+  }
+
+  /**
+   * A CSS quantity.
+   */
+  public final static class CssQuantity extends CssAtomicConstruct
+  {
+    final CssQuantity.Unit subType;
+
+    public CssQuantity(final String value, final CssQuantity.Unit subtype, final CssLocation location)
+    {
+      super(CssConstruct.Type.QUANTITY, value, location);
+      this.subType = checkNotNull(subtype);
+    }
+
+    public final CssQuantity.Unit getUnit()
+    {
+      return subType;
+    }
+
+    public enum Unit
+    {
+      DIMEN,
+      PERCENTAGE,
+      LENGTH,
+      EMS,
+      EXS,
+      ANGLE,
+      TIME,
+      FREQ,
+      RESOLUTION,
+      NUMBER,
+      INTEGER,
+      REMS
+    }
+
+    @Override
+    public String toString()
+    {
+      return Objects.toStringHelper(this).addValue(subType.name()).addValue(value).toString();
+    }
+  }
+
+
+  /*********************************************
+   *
+   *    composed
+   *
+   ********************************************/
+
+  /**
+   * A CssConstruct that is composed a list of atomic and/or composed CssConstructs,
+   * and optionally a name.
+   */
+  static abstract class CssComposedConstruct extends CssConstruct
+  {
+    final List<CssConstruct> components;
+    final Optional<String> name;
+
+    public CssComposedConstruct(final Type type, final String name, final CssLocation location)
+    {
+      super(type, location);
+      this.components = Lists.newArrayList();
+      this.name = name != null ? Optional.of(name) : absent;
+    }
+
+    public CssComposedConstruct(final Type type, final CssLocation location)
+    {
+      this(type, null, location);
+    }
+
+    /**
+     * Get the components. The list may be empty but is never null.
+     */
+    public List<CssConstruct> getComponents()
+    {
+      return components;
+    }
+
+    public Optional<String> getName()
+    {
+      return name;
+    }
+
+    @Override
+    public String toString()
+    {
+      return Objects.toStringHelper(this)
+          .addValue(type)
+          .addValue(name.isPresent() ? name.get() : "")
+          .addValue(components.isEmpty() ? "" : Joiner.on(" ").join(components))
+          .toString();
+    }
+
+    final Optional<String> absent = Optional.absent();
+  }
+
+  /**
+   * An attribute selector ([name] or [name, match, ident/string] )
+   */
+  public final static class CssAttributeSelector extends CssComposedConstruct
+  {
+
+    public CssAttributeSelector(final CssLocation location)
+    {
+      super(Type.ATTRIBUTE_SELECTOR, location);
+    }
+
+    @Override
+    public String toCssString()
+    {
+      StringBuilder sb = new StringBuilder().append('[');
+      for (CssConstruct cc : components)
+      {
+        sb.append(cc.toCssString());
+      }
+      return sb.append(']').toString();
+    }
+
+  }
+
+  /**
+   * A CSS function. The function name is interned, and ASCII characters in the name
+   * are guaranteed to be lower case.
+   */
+  public final static class CssFunction extends CssComposedConstruct
+  {
+    public CssFunction(final String name, final CssLocation location)
+    {
+      super(Type.FUNCTION, Ascii.toLowerCase(checkNotNull(name)).intern(), location);
+    }
+
+    @Override
+    public String toCssString()
+    {
+      StringBuilder sb = new StringBuilder().append(name.get()).append('(');
+      for (CssConstruct cc : components)
+      {
+        sb.append(cc.toCssString());
+      }
+      return sb.append(')').toString();
+    }
+
+  }
+
+  /**
+   * A CSS at-rule. The at-rule name is interned, and ASCII characters in the name
+   * are guaranteed to be lowercase.
+   */
+  public final static class CssAtRule extends CssComposedConstruct
+  {
+    boolean hasBlock;
+
+    public CssAtRule(final String name, final CssLocation location)
+    {
+      super(Type.ATRULE, checkNotNull(
+          Ascii.toLowerCase(name).intern()), location);
+    }
+
+    public final boolean hasBlock()
+    {
+      return hasBlock;
+    }
+
+    @Override
+    public String toCssString()
+    {
+      // Note that semi or braceblock is not included in the return
+      StringBuilder sb = new StringBuilder().append(name.get()).append(' ');
+      for (CssConstruct cc : components)
+      {
+        sb.append(cc.toCssString()).append(' '); //TODO get smarter re space, joint helper function
+      }
+      return sb.deleteCharAt(sb.length() - 1).toString();
+    }
+
+  }
+
+  /**
+   * A CSS declaration. The property name is interned, and ASCII characters in the name
+   * are guaranteed to be lowercase.
+   */
+  public final static class CssDeclaration extends CssComposedConstruct
+  {
+    boolean important = false;
+
+    public CssDeclaration(final String name, final CssLocation location)
+    {
+      super(Type.DECLARATION, Ascii.toLowerCase(name).intern(), location);
+    }
+
+    /**
+     * Get the state of the important flag
+     */
+    public final boolean getImportant()
+    {
+      return important;
+    }
+
+    @Override
+    public String toCssString()
+    {
+      StringBuilder sb = new StringBuilder().append(name.get()).append(" : ");
+      for (CssConstruct cc : components)
+      {
+        sb.append(cc.toCssString()).append(' '); //TODO get smarter re space, joint helper function
+      }
+      if (getImportant())
+      {
+        sb.append("!important ");
+      }
+      return sb.deleteCharAt(sb.length() - 1).append(" ;").toString();
+    }
+  }
+
+  /**
+   * A scoped group, aka (...) and [...].
+   */
+  public final static class CssScopedGroup extends CssComposedConstruct
+  {
+    final CssScopedGroup.Type subType;
+
+    public CssScopedGroup(final CssScopedGroup.Type type, final CssLocation location)
+    {
+      super(CssConstruct.Type.SCOPEDGROUP, location);
+      this.subType = type;
+    }
+
+    @Override
+    public String toString()
+    {
+      return Objects.toStringHelper(this)
+          .addValue(type)
+          .addValue(subType)
+          .addValue(Joiner.on(" ").join(components))
+          .toString();
+    }
+
+    public final CssScopedGroup.Type getGroupType()
+    {
+      return subType;
+    }
+
+    @Override
+    public String toCssString()
+    {
+      StringBuilder sb = new StringBuilder();
+      sb.append(subType == Type.PAREN ? '(' : '[');
+      for (CssConstruct cc : components)
+      {
+        sb.append(cc.toCssString()).append(' '); //TODO get smarter re space, joint helper function
+      }
+      sb.deleteCharAt(sb.length() - 1);
+      sb.append(subType == Type.PAREN ? ')' : ']');
+      return sb.toString();
+    }
+
+    public enum Type
+    {
+      PAREN,
+      BRACKET
+    }
+
+  }
+
+  /**
+   * A CSS pseudo selector (pseudo-element and pseudo-class).
+   */
+  public final static class CssPseudoSelector extends CssComposedConstruct
+  {
+    final CssPseudoSelector.Type subType;
+    CssFunction function = null; //may remain null
+    String name = null;      //may remain null
+
+    public CssPseudoSelector(final CssPseudoSelector.Type type, final CssLocation location)
+    {
+      super(CssConstruct.Type.PSEUDO, location);
+      this.subType = type;
+    }
+
+    /*
+       * If this pseudo selector is a functional_pseudo,
+       * return the function name, else :(:)ident.
+       */
+    @Override
+    public final Optional<String> getName()
+    {
+      if (function != null)
+      {
+        return function.getName();
+      }
+      return Optional.of(name);
+    }
+
+    @Override
+    public String toString()
+    {
+      return Objects.toStringHelper(this)
+          .addValue(getSubType().name())
+          .addValue(getName().get())
+          .addValue(function != null ? Joiner.on(" ").join(function.components) : "")
+          .toString();
+    }
+
+    /**
+     * If this pseudo selector is a functional_pseudo,
+     * return it as a function, else return null.
+     */
+    public final CssFunction getFunction()
+    {
+      return function;
+    }
+
+    public final CssPseudoSelector.Type getSubType()
+    {
+      return subType;
+    }
+
+    @Override
+    public String toCssString()
+    {
+      if (function != null)
+      {
+        return function.toCssString();
+      }
+      return name;
+    }
+
+    public enum Type
+    {
+      PSEUDO_ELEMENT,
+      PSEUDO_CLASS,
+    }
+
+  }
+
+  /**
+   * A CSS selector
+   */
+  public final static class CssSelector extends CssComposedConstruct
+  {
+
+    public CssSelector(final CssLocation location)
+    {
+      super(Type.SELECTOR, location);
+    }
+
+    /**
+     * Get the list of selector constructs, consisting of at least one
+     * CssSimpleSelectorSequence, possibly followed by (CssSelectorCombinator,
+     * CssSimpleSelectorSequence)*
+     */
+    public final List<CssConstruct> getComponents()
+    {
+      return super.getComponents();
+    }
+
+    @Override
+    public String toCssString()
+    {
+      StringBuilder sb = new StringBuilder();
+      for (CssConstruct cc : components)
+      {
+        sb.append(cc.toCssString());
+      }
+      return sb.toString();
+    }
+
+  }
+
+  /**
+   * A CSS simple selector sequence
+   * <q>A sequence of simple selectors is a chain of simple selectors that are not
+   * separated by a combinator. It always begins with a type selector or a universal
+   * selector. No other type selector or universal selector is allowed in the sequence.
+   * A simple selector is either a type selector, universal selector, attribute selector,
+   * class selector, ID selector, or pseudo-class.</q>
+   */
+  public final static class CssSimpleSelectorSequence extends CssComposedConstruct
+  {
+
+    public CssSimpleSelectorSequence(final CssLocation location)
+    {
+      super(Type.SIMPLE_SELECTOR_SEQ, location);
+    }
+
+    @Override
+    public String toCssString()
+    {
+      StringBuilder sb = new StringBuilder();
+      for (CssConstruct cc : components)
+      {
+        sb.append(cc.toCssString());
+      }
+      return sb.toString();
+    }
+
+  }
+
+  /**
+   * ******************************************
+   * <p/>
+   * helpers
+   * <p/>
+   * ******************************************
+   */
+
+  static final class CssSelectorConstructFactory
+  {
+
+    /**
+     * Create a simple selector sequence. If creation fails,
+     * errors are issued, and null is returned.
+     *
+     * @throws CssException
+     */
+    public static CssSimpleSelectorSequence createSimpleSelectorSequence(final CssToken start,
+        final CssTokenIterator iter, final CssErrorHandler err) throws
+        CssException
+    {
+
+      CssSimpleSelectorSequence seq = new CssSimpleSelectorSequence(start.location);
+      CssConstruct seqItem = createSimpleSelector(start, iter, err);
+      if (seqItem == null)
+      {
+        //errors already issued
+        return null;
+      }
+
+      seq.components.add(seqItem);
+
+      CssToken next = iter.peek(FILTER_NONE);
+      while (next.type != CssToken.Type.S
+          && !MATCH_COMMA.apply(next)
+          && !MATCH_OPENBRACE.apply(next)
+          && !MATCH_COMBINATOR_CHAR.apply(next))
+      {
+        seqItem = createSimpleSelector(iter.next(FILTER_NONE), iter, err);
+        if (seqItem == null)
+        {
+          //errors already issued
+          return null;
+        }
+        seq.components.add(seqItem);
+        next = iter.peek(FILTER_NONE);
+      }
+      return seq;
+    }
+
+    /**
+     * Create one item in a simple selector sequence. If creation fails,
+     * errors are issued, and null is returned. On return, the iterator
+     * will return the next token after the constructs last token.
+     */
+    static CssConstruct createSimpleSelector(final CssToken start, final CssTokenIterator iter,
+        final CssErrorHandler err) throws
+        CssException
+    {
+
+      // type and universal selector; ns|E, *|E, |E, E
+      if (start.type == CssToken.Type.IDENT || MATCH_STAR_PIPE.apply(start))
+      {
+        //note, we bundle universal selector in CssTypeSelector
+        return createTypeSelector(start, iter, err);
+
+        // hashname #{name}
+      }
+      else if (start.type == CssToken.Type.HASHNAME)
+      {
+        return new CssHashName(start.getChars(), start.location);
+
+        // classname .{name}
+      }
+      else if (start.type == CssToken.Type.CLASSNAME)
+      {
+        return new CssClassName(start.getChars(), start.location);
+
+        //attribute selector [...]
+      }
+      else if (MATCH_OPENSQUAREBRACKET.apply(start))
+      {
+        return createAttributeSelector(iter.next(), iter, err);
+
+        //pseudo selector
+      }
+      else if (MATCH_COLON.apply(start))
+      {
+        return createPseudoSelector(start, iter, err);
+
+			//keyframes percentage 
+			} else if(start.type == CssToken.Type.QNTY_PERCENTAGE) {	
+				//note, for now, "from" and "to" keywords become type selectors above, 
+				//this handles only the percentage TODO FIX				
+				CssSelector sel = new CssSelector(start.location);
+				sel.components.add(new CssQuantity(start.chars, CssQuantity.Unit.PERCENTAGE, start.location));
+				return sel;
+      }
+      else
+      {
+				
+        err.error(new CssGrammarException(GRAMMAR_UNEXPECTED_TOKEN, start.location, start.chars));
+        return null;
+      }
+
+    }
+
+    /**
+     * Create a combinator. Note that this method does not support the S combinator.
+     * This method also returns null without issuing errors
+     */
+    static CssSelectorCombinator createCombinator(final CssToken start,
+        final CssTokenIterator iter, final CssErrorHandler err)
+    {
+      char symbol;
+      if (start.type == CssToken.Type.CHAR)
+      {
+        char ch = start.getChar();
+        if (ch == '>')
+        {
+          symbol = ch;
+        }
+        else if (ch == '+')
+        {
+          symbol = ch;
+        }
+        else if (ch == '~')
+        {
+          symbol = ch;
+        }
+        else
+        {
+          return null;
+        }
+      }
+      else
+      {
+        return null;
+
+      }
+      return new CssSelectorCombinator(symbol, start.location);
+    }
+
+    static CssPseudoSelector createPseudoSelector(final CssToken start,
+        final CssTokenIterator iter, final CssErrorHandler err) throws
+        CssException
+    {
+
+      CssPseudoSelector.Type type;
+      CssPseudoSelector cps;
+
+      StringBuilder sb = new StringBuilder();
+      sb.append(start.getChars());
+      CssToken next = iter.next(FILTER_NONE);
+      if (MATCH_COLON.apply(next))
+      {
+        type = CssPseudoSelector.Type.PSEUDO_ELEMENT;
+        sb.append(next.getChars());
+        next = iter.next(FILTER_NONE);
+      }
+      else
+      {
+        type = CssPseudoSelector.Type.PSEUDO_CLASS;
+      }
+      cps = new CssPseudoSelector(type, start.location);
+
+      if (next.type == CssToken.Type.IDENT)
+      {
+        sb.append(next.getChars());
+        cps.name = sb.toString();
+
+      }
+      else if (next.type == CssToken.Type.FUNCTION)
+      {
+
+        //need to get the colons into the name so clone and mod the token
+        CssToken tk = new CssToken(next.type, next.location,
+            sb.toString() + next.chars, next.errors.isPresent() ? next.errors.get() : null);
+
+        //general functional pseudos and negation pseudos have different contentmodels
+        //functional: [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+
+        //pseudo: type_selector | universal | HASH | class | attrib | pseudo
+
+        CssConstruct func;
+        if (Ascii.toLowerCase(next.getChars()).startsWith("not"))
+        {
+          func = createNegationPseudo(tk, iter, err);
+        }
+        else
+        {
+          func = createFunctionalPseudo(tk, iter, MATCH_OPENBRACE, err);
+        }
+
+        if (func == null)
+        {
+          err.error(new CssGrammarException(
+              CssErrorCode.GRAMMAR_UNEXPECTED_TOKEN, iter.last.location, iter.last.chars,
+              next.getChars()));
+          return null;
+        }
+        cps.function = (CssFunction) func;
+      }
+      return cps;
+    }
+
+    static CssConstruct createFunctionalPseudo(final CssToken start,
+        final CssTokenIterator iter, final Predicate<CssToken> limit,
+        final CssErrorHandler err)
+    {
+
+      String name = start.getChars().substring(0, start.getChars().length() - 1);
+      CssFunction function = new CssFunction(name, start.location);
+
+      CssToken tk = iter.next();
+      while (!MATCH_CLOSEPAREN.apply(tk))
+      {
+        if (limit.apply(tk))
+        {
+          return null;
+        }
+        CssConstruct cc = CssConstructFactory.create(tk, iter, limit, ContextRestrictions.PSEUDO_FUNCTIONAL);
+        if (cc == null)
+        {
+          return null;
+        }
+        else
+        {
+          function.components.add(cc);
+        }
+        tk = iter.next();
+      }
+      return function;
+    }
+
+    static CssConstruct createNegationPseudo(final CssToken start,
+        final CssTokenIterator iter, final CssErrorHandler err) throws
+        CssException
+    {
+
+      String name = start.getChars().substring(0, start.getChars().length() - 1);
+
+      CssFunction negation = new CssFunction(name, start.location);
+
+      CssToken tk = iter.next();
+      CssConstruct cc = CssSelectorConstructFactory.createSimpleSelector(tk, iter, err);
+      if (cc == null || !ContextRestrictions.PSEUDO_NEGATION.apply(cc))
+      {
+        return null;
+      }
+      else
+      {
+        negation.components.add(cc);
+        iter.next();
+      }
+      return negation;
+    }
+
+    static CssAttributeSelector createAttributeSelector(final CssToken start,
+        final CssTokenIterator iter, final CssErrorHandler err) throws
+        CssException
+    {
+
+      CssAttributeSelector cas = new CssAttributeSelector(start.location);
+
+      CssTypeSelector cts = createTypeSelector(start, iter, err);
+      if (cts == null)
+      {
+        //factory method has issued errors
+        return null;
+      }
+      cas.components.add(cts);
+
+      CssToken next = iter.next(); // ']' or string matcher
+      if (!MATCH_CLOSESQUAREBRACKET.apply(next))
+      {
+        if (MATCH_ATTRIBUTE_SELECTOR_MATCHERS.apply(next))
+        {
+          CssAttributeMatchSelector casm = createAttributeMatchSelector(next, iter, err);
+          cas.components.add(casm);
+
+          next = iter.next();
+          CssConstruct val = CssConstructFactory.create(next, iter, MATCH_CLOSESQUAREBRACKET,
+              ContextRestrictions.ATTRIBUTE_SELECTOR_VALUE);
+          if (val != null)
+          {
+            cas.components.add(val);
+          }
+          else
+          {
+            err.error(new CssGrammarException(
+                CssErrorCode.GRAMMAR_EXPECTING_TOKEN, next.location, next.chars,
+                Messages.get("a_string_or_dentifier")));
+            return null;
+          }
+          iter.next(); // ']'
+        }
+        else
+        {
+          err.error(new CssGrammarException(
+              CssErrorCode.GRAMMAR_EXPECTING_TOKEN, next.location, next.chars,
+              Messages.get("an_attribute_value_matcher")));
+          return null;
+        }
+      }
+      return cas;
+    }
+
+    static CssAttributeMatchSelector createAttributeMatchSelector(final CssToken tk,
+        final CssTokenIterator iter, final CssErrorHandler err)
+    {
+      CssAttributeMatchSelector.Type type;
+      switch (tk.type)
+      {
+        case INCLUDES:
+          type = CssAttributeMatchSelector.Type.INCLUDES;
+          break;
+        case DASHMATCH:
+          type = CssAttributeMatchSelector.Type.DASHMATCH;
+          break;
+        case PREFIXMATCH:
+          type = CssAttributeMatchSelector.Type.PREFIXMATCH;
+          break;
+        case SUFFIXMATCH:
+          type = CssAttributeMatchSelector.Type.SUFFIXMATCH;
+          break;
+        case SUBSTRINGMATCH:
+          type = CssAttributeMatchSelector.Type.SUBSTRINGMATCH;
+          break;
+        default:
+          type = CssAttributeMatchSelector.Type.EQUALS;
+          break;
+      }
+      return new CssAttributeMatchSelector(tk.getChars(), type, tk.location);
+    }
+
+    private static CssTypeSelector createTypeSelector(final CssToken start,
+        final CssTokenIterator iter, final CssErrorHandler err) throws
+        CssException
+    {
+
+      if (start.type != CssToken.Type.IDENT && !MATCH_STAR_PIPE.apply(start))
+      {
+        err.error(new CssGrammarException(
+            CssErrorCode.GRAMMAR_EXPECTING_TOKEN, start.location,
+            start.getChars(), Messages.get("a_type_or_universal_selector")));
+        return null;
+      }
+
+      StringBuilder sb = new StringBuilder();
+      sb.append(start.getChars());
+
+      if (MATCH_PIPE.apply(start))
+      {
+        //|E
+        CssToken next = iter.peek(FILTER_NONE);
+        if (next.type != CssToken.Type.IDENT)
+        {
+          err.error(new CssGrammarException(
+              CssErrorCode.GRAMMAR_EXPECTING_TOKEN, next.location,
+              next.getChars(), Messages.get("a_type_or_universal_selector")));
+          return null;
+        }
+        else
+        {
+          sb.append(iter.next().getChars());
+        }
+      }
+      else if (MATCH_PIPE.apply(iter.peek(FILTER_NONE)))
+      {
+        //ns|E, *|E,
+        sb.append(iter.next().getChars());
+        CssToken next = iter.next(FILTER_NONE);
+        if (next.type != CssToken.Type.IDENT && !MATCH_STAR.apply(next))
+        {
+          err.error(new CssGrammarException(
+              CssErrorCode.GRAMMAR_EXPECTING_TOKEN, start.location,
+              next.getChars(), Messages.get("a_type_or_universal_selector")));
+          return null;
+        }
+        else
+        {
+          sb.append(next.getChars());
+        }
+      }
+      else if (iter.peek(FILTER_NONE).type == CssToken.Type.IDENT)
+      {
+        sb.append(iter.next().getChars());
+      }
+
+      return new CssTypeSelector(sb.toString(), start.location);
+    }
+  }
+
+  static final class CssConstructFactory
+  {
+
+    static CssConstruct create(final CssToken start, final CssTokenIterator iter,
+        final Predicate<CssToken> limit, final Predicate<CssConstruct> permitted)
+    {
+
+      CssTokenTransform transform = transformerMappings.get(start.type);
+      return transform == null ? null : transform.build(start, iter, limit, permitted);
+
+    }
+
+
+    static final CssTokenTransform BUILDER_FUNCTION = new CssTokenTransform()
+    {
+      public CssFunction build(CssToken start, CssTokenIterator iter,
+          Predicate<CssToken> limit, Predicate<CssConstruct> permitted)
+      {
+
+        String name = start.getChars().substring(0, start.getChars().length() - 1);
+        CssFunction function = new CssFunction(name, start.location);
+
+        CssToken tk = iter.next();
+        while (!MATCH_CLOSEPAREN.apply(tk))
+        {
+          if (limit.apply(tk))
+          {
+            return null;
+          }
+          CssConstruct cc = CssConstructFactory.create(tk, iter, limit,
+              ContextRestrictions.FUNCTION);
+          if (cc == null || !permitted.apply(cc))
+          {
+            return null;
+          }
+          else
+          {
+            function.components.add(cc);
+          }
+          tk = iter.next();
+        }
+        return function;
+      }
+
+    };
+
+    private static final CssTokenTransform BUILDER_ATOMIC = new CssTokenTransform()
+    {
+      public CssConstruct build(final CssToken start, final CssTokenIterator iter,
+          final Predicate<CssToken> limit, final Predicate<CssConstruct> permitted)
+      {
+
+        CssConstruct.Type type = genericTypeMappings.get(start.type);
+        CssConstruct cc;
+
+        switch (type)
+        {
+          case KEYWORD:
+            cc = new CssKeyword(start.getChars(), start.location);
+            break;
+          case URI:
+            cc = new CssURI(start.getChars(), start.location);
+            break;
+          case STRING:
+            cc = new CssString(start.getChars(), start.location);
+            break;
+          case URANGE:
+            cc = new CssUnicodeRange(start.getChars(), start.location);
+            break;
+          case HASHNAME:
+            cc = new CssHashName(start.getChars(), start.location);
+            break;
+          case CLASSNAME:
+            cc = new CssClassName(start.getChars(), start.location);
+            break;
+          default:
+            throw new IllegalStateException("CssTokenTransform BUILDER_ATOMIC");
+        }
+
+        return permitted.apply(cc) ? cc : null;
+
+      }
+    };
+
+    private static final CssTokenTransform BUILDER_CHAR = new CssTokenTransform()
+    {
+      public CssConstruct build(CssToken start, CssTokenIterator iter,
+          Predicate<CssToken> limit, Predicate<CssConstruct> permitted)
+      {
+        CssConstruct ret;
+
+        char chr = start.getChar();
+        if (chr == '{' || chr == '}' || chr == ';')
+        {
+          return null;
+        }
+        else if (chr == '(' || chr == '[')
+        {
+          ret = BUILDER_SCOPEDGROUP.build(start, iter, limit, permitted);
+        }
+        else
+        {
+          ret = new CssSymbol(start.chars, start.location);
+        }
+
+        if (ret == null)
+        {
+          return null;
+        }
+        return permitted.apply(ret) ? ret : null;
+      }
+    };
+
+    /**
+     * Builder for general scoped groups aka (...) and [...]
+     */
+    static final CssTokenTransform BUILDER_SCOPEDGROUP = new CssTokenTransform()
+    {
+      public CssConstruct build(CssToken start, CssTokenIterator iter,
+          Predicate<CssToken> limit, Predicate<CssConstruct> permitted)
+      {
+
+        CssScopedGroup.Type type;
+        Predicate<CssToken> end;
+
+
+        if (MATCH_OPENPAREN.apply(start))
+        {
+          type = CssScopedGroup.Type.PAREN;
+          end = MATCH_CLOSEPAREN;
+        }
+        else if (MATCH_OPENSQUAREBRACKET.apply(start))
+        {
+          type = CssScopedGroup.Type.BRACKET;
+          end = MATCH_CLOSESQUAREBRACKET;
+        }
+        else
+        {
+          throw new IllegalStateException();
+        }
+
+        CssScopedGroup group = new CssScopedGroup(type, start.location);
+
+        CssToken tk = iter.next();
+        while (!end.apply(tk))
+        {
+          if (limit.apply(tk))
+          {
+            return null;
+          }
+          CssConstruct cc = CssConstructFactory.create(tk, iter, limit,
+              ContextRestrictions.FUNCTION);
+          if (cc == null || !permitted.apply(cc))
+          {
+            return null;
+          }
+          else
+          {
+            group.components.add(cc);
+          }
+          tk = iter.next();
+        }
+        return group;
+      }
+
+    };
+
+    private static final CssTokenTransform BUILDER_QNTY = new CssTokenTransform()
+    {
+      public CssConstruct build(final CssToken start, final CssTokenIterator iter,
+          final Predicate<CssToken> limit, final Predicate<CssConstruct> permitted)
+      {
+
+        CssQuantity cq = new CssQuantity(start.chars, quantityMappings.get(start.type),
+            start.location);
+
+        return permitted.apply(cq) ? cq : null;
+
+      }
+    };
+
+    private static final Map<CssToken.Type, CssTokenTransform> transformerMappings
+        = new ImmutableMap.Builder<CssToken.Type, CssTokenTransform>()
+        .put(CssToken.Type.FUNCTION, BUILDER_FUNCTION)
+        .put(CssToken.Type.CHAR, BUILDER_CHAR)
+        .put(CssToken.Type.IDENT, BUILDER_ATOMIC)
+        .put(CssToken.Type.URI, BUILDER_ATOMIC)
+        .put(CssToken.Type.STRING, BUILDER_ATOMIC)
+        .put(CssToken.Type.AND, BUILDER_ATOMIC)
+        .put(CssToken.Type.NOT, BUILDER_ATOMIC)
+        .put(CssToken.Type.ONLY, BUILDER_ATOMIC)
+        .put(CssToken.Type.URANGE, BUILDER_ATOMIC)
+        .put(CssToken.Type.HASHNAME, BUILDER_ATOMIC)
+        .put(CssToken.Type.CLASSNAME, BUILDER_ATOMIC)
+        .put(CssToken.Type.QNTY_ANGLE, BUILDER_QNTY)
+        .put(CssToken.Type.QNTY_DIMEN, BUILDER_QNTY)
+        .put(CssToken.Type.QNTY_REMS, BUILDER_QNTY)
+        .put(CssToken.Type.QNTY_EMS, BUILDER_QNTY)
+        .put(CssToken.Type.QNTY_EXS, BUILDER_QNTY)
+        .put(CssToken.Type.QNTY_FREQ, BUILDER_QNTY)
+        .put(CssToken.Type.QNTY_LENGTH, BUILDER_QNTY)
+        .put(CssToken.Type.QNTY_PERCENTAGE, BUILDER_QNTY)
+        .put(CssToken.Type.QNTY_RESOLUTION, BUILDER_QNTY)
+        .put(CssToken.Type.QNTY_TIME, BUILDER_QNTY)
+        .put(CssToken.Type.NUMBER, BUILDER_QNTY)
+        .put(CssToken.Type.INTEGER, BUILDER_QNTY)
+        .build();
+
+    /* Map used by BUILDER_GENERIC to get type */
+    private static final Map<CssToken.Type, CssConstruct.Type> genericTypeMappings
+        = new ImmutableMap.Builder<CssToken.Type, CssConstruct.Type>()
+        .put(CssToken.Type.IDENT, CssConstruct.Type.KEYWORD)
+        .put(CssToken.Type.URI, CssConstruct.Type.URI)
+        .put(CssToken.Type.STRING, CssConstruct.Type.STRING)
+        .put(CssToken.Type.AND, CssConstruct.Type.KEYWORD)
+        .put(CssToken.Type.NOT, CssConstruct.Type.KEYWORD)
+        .put(CssToken.Type.ONLY, CssConstruct.Type.KEYWORD)
+        .put(CssToken.Type.URANGE, CssConstruct.Type.URANGE)
+        .put(CssToken.Type.HASHNAME, CssConstruct.Type.HASHNAME)
+        .put(CssToken.Type.CLASSNAME, CssConstruct.Type.CLASSNAME)
+        .build();
+
+    /* Map used by BUILDER_QNTY to get subtype */
+    private static final Map<CssToken.Type, CssQuantity.Unit> quantityMappings
+        = new ImmutableMap.Builder<CssToken.Type, CssQuantity.Unit>()
+        .put(CssToken.Type.QNTY_ANGLE, CssQuantity.Unit.ANGLE)
+        .put(CssToken.Type.QNTY_DIMEN, CssQuantity.Unit.DIMEN)
+        .put(CssToken.Type.QNTY_REMS, CssQuantity.Unit.REMS)
+        .put(CssToken.Type.QNTY_EMS, CssQuantity.Unit.EMS)
+        .put(CssToken.Type.QNTY_EXS, CssQuantity.Unit.EXS)
+        .put(CssToken.Type.QNTY_FREQ, CssQuantity.Unit.FREQ)
+        .put(CssToken.Type.QNTY_LENGTH, CssQuantity.Unit.LENGTH)
+        .put(CssToken.Type.QNTY_PERCENTAGE, CssQuantity.Unit.PERCENTAGE)
+        .put(CssToken.Type.QNTY_RESOLUTION, CssQuantity.Unit.RESOLUTION)
+        .put(CssToken.Type.QNTY_TIME, CssQuantity.Unit.TIME)
+        .put(CssToken.Type.NUMBER, CssQuantity.Unit.NUMBER)
+        .put(CssToken.Type.INTEGER, CssQuantity.Unit.INTEGER)
+        .build();
+
+    interface CssTokenTransform
+    {
+      CssConstruct build(CssToken start, CssTokenIterator iter, Predicate<CssToken> limit,
+          Predicate<CssConstruct> permitted);
+    }
+  }
+}
diff --git a/src/main/java/org/idpf/epubcheck/util/css/CssInputStream.java b/src/main/java/org/idpf/epubcheck/util/css/CssInputStream.java
new file mode 100644
index 0000000..75b9e33
--- /dev/null
+++ b/src/main/java/org/idpf/epubcheck/util/css/CssInputStream.java
@@ -0,0 +1,244 @@
+/*
+ * Copyright (c) 2012 International Digital Publishing Forum
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package org.idpf.epubcheck.util.css;
+
+import com.adobe.epubcheck.util.outWriter;
+import com.google.common.base.Optional;
+import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import com.google.common.io.ByteStreams;
+import com.google.common.primitives.Bytes;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PushbackInputStream;
+import java.util.List;
+import java.util.Map;
+
+import static org.idpf.epubcheck.util.css.CssScanner.QUOTES;
+import static org.idpf.epubcheck.util.css.CssScanner.TERMINATOR;
+
+/**
+ * An InputStream for CSS files that detects and skips past BOMs, and
+ * peeks for @charset rules.
+ *
+ * @author mgylling
+ */
+public class CssInputStream extends PushbackInputStream
+{
+  Optional<String> bom = Optional.absent();
+  Optional<String> charset = Optional.absent();
+  private static final int MAX_PUSHBACK = 256;
+  private static final Map<String, byte[]> boms = new ImmutableMap.Builder<String, byte[]>()
+      .put("UTF-32BE", new byte[]{(byte) 0x00, (byte) 0x00, (byte) 0xFE, (byte) 0xFF})
+      .put("UTF-32LE", new byte[]{(byte) 0xFE, (byte) 0xFF, (byte) 0x00, (byte) 0x00})
+      .put("UTF-8", new byte[]{(byte) 0xEF, (byte) 0xBB, (byte) 0xBF})
+      .put("UTF-16BE", new byte[]{(byte) 0xFE, (byte) 0xFF})
+      .put("UTF-16LE", new byte[]{(byte) 0xFF, (byte) 0xFE})
+      .build();
+	private boolean debug = false;
+
+  public CssInputStream(final InputStream in) throws
+      IOException
+  {
+    super(in instanceof BufferedInputStream
+        ? in : new BufferedInputStream(in), MAX_PUSHBACK);
+
+    String enc = getBOM();
+    if (!Strings.isNullOrEmpty(enc))
+    {
+      this.bom = Optional.of(enc);
+    }
+
+    enc = getCssCharset(enc);
+    if (!Strings.isNullOrEmpty(enc))
+    {
+      this.charset = Optional.of(enc);
+    }
+    	
+    	if(debug)
+      {
+    		String s = bom.isPresent() ? bom.get() : " none.";
+    		outWriter.println("detected BOM: " + s);
+    		s = charset.isPresent() ? charset.get() : " none.";
+    		outWriter.println("detected charset: " + s);
+    	}
+
+  }
+
+  private String getBOM() throws
+      IOException
+  {
+    byte[] data = new byte[4];
+    int read, unread;
+    read = ByteStreams.read(this, data, 0, data.length);
+    String key = map(data);
+    unread = key == null ? read : data.length - boms.get(key).length;
+    if (unread > 0)
+    {
+      unread(data, read - unread, unread);
+    }
+    return key;
+  }
+
+  private String getCssCharset(final String bom) throws
+      IOException
+  {
+    /*
+       * Because each char can be represented by 1-4 bytes, and because
+       * there can be any amount of whitespace between @charset and the
+       * open quote, this is fiddly.
+       *
+       * We read maximally four bytes at a time (required to decode UTF32 to a single char)
+       */
+
+    String enc = bom != null ? bom : "UTF-8";
+
+    int len = 1;
+    if (enc.startsWith("UTF-16"))
+    {
+      len = 2;
+    }
+    else if (enc.startsWith("UTF-32"))
+    {
+      len = 4;
+    }
+
+    Endian endian = null;
+    if (len != 1)
+    {
+      endian = enc.endsWith("BE") ? Endian.BIG : Endian.LITTLE;
+    }
+
+    String value = null;
+    List<Byte> unread = Lists.newArrayList(); //all bytes read
+    StringBuilder sbuf = new StringBuilder(); //all chars read
+    char openQuote = 0;
+    int openQuotePos = -1;
+    byte[] bbuf;
+
+    while (true)
+    {
+      bbuf = new byte[len];
+      for (int i = 0; i < len; i++)
+      {
+        int b = read();
+        if (b == -1)
+        {
+          break;
+        }
+        unread.add((byte) b);
+        bbuf[i] = (byte) b;
+      }
+
+      if (unread.size() == MAX_PUSHBACK)
+      {
+        break;
+      }
+
+      if (len == 1 || endian == Endian.LITTLE)
+      {
+        sbuf.append((char) bbuf[0]);
+      }
+      else
+      {
+        sbuf.append((char) bbuf[len - 1]);
+      }
+
+      char cur = sbuf.charAt(sbuf.length() - 1);
+      if ((sbuf.length() == 1 && cur != '@')
+          || (TERMINATOR.matches(cur))
+          || (sbuf.length() == 8
+          && !sbuf.toString().equals("@charset")))
+      {
+        break;
+      }
+      else if (openQuote == 0 && QUOTES.matches(cur))
+      {
+        openQuote = cur;
+        openQuotePos = sbuf.length();
+      }
+      else if (openQuote == cur)
+      {
+        if (QUOTES.matches(cur))
+        {
+          value = sbuf.substring(openQuotePos, sbuf.length() - 1);
+        }
+        break;
+      }
+
+    }
+
+    unread(Bytes.toArray(unread));
+    return value;
+  }
+
+  private static String map(byte[] data)
+  {
+    for (String name : boms.keySet())
+    {
+      byte[] bom = boms.get(name);
+      boolean match = true;
+      for (int i = 0; i < bom.length; i++)
+      {
+        if (data[i] != bom[i])
+        {
+          match = false;
+          break;
+        }
+      }
+      if (match)
+      {
+        return name;
+      }
+    }
+    return null;
+  }
+
+  private enum Endian
+  {
+    LITTLE, BIG
+  }
+
+  /**
+   * Get the character set as detected from a BOM. If present, the returned string
+   * is one of 'UTF-32BE', 'UTF-32LE", 'UTF-8", 'UTF-16BE' or 'UTF-16LE".
+   */
+
+  public final Optional<String> getBomCharset()
+  {
+    return bom;
+  }
+
+  /**
+   * Get the value of the CSS @charset rule, if present.
+   */
+  public final Optional<String> getCssCharset()
+  {
+    return charset;
+  }
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/idpf/epubcheck/util/css/CssLocation.java b/src/main/java/org/idpf/epubcheck/util/css/CssLocation.java
new file mode 100644
index 0000000..c73bb86
--- /dev/null
+++ b/src/main/java/org/idpf/epubcheck/util/css/CssLocation.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2012 International Digital Publishing Forum
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package org.idpf.epubcheck.util.css;
+
+import com.google.common.base.Objects;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Represents a location in a CSS file.
+ *
+ * @author mgylling
+ */
+public final class CssLocation
+{
+
+  final int line;
+  final int col;
+  private final int charOffset;
+  private final String systemID;
+
+  CssLocation(final int line, final int col, final int charOffset, final String systemID)
+  {
+    this.line = checkNotNull(line);
+    this.col = checkNotNull(col);
+    this.charOffset = checkNotNull(charOffset);
+    this.systemID = checkNotNull(systemID);
+  }
+
+  static CssLocation create(final CssReader reader)
+  {
+    return new CssLocation(reader.line, reader.col, reader.offset, reader.systemID);
+  }
+
+  public int getLine()
+  {
+    return line;
+  }
+
+  public int getColumn()
+  {
+    return col;
+  }
+
+  public int getCharOffset()
+  {
+    return charOffset;
+  }
+
+  public String getSystemID()
+  {
+    return systemID;
+  }
+
+  @Override
+  public String toString()
+  {
+    return Objects.toStringHelper(this)
+        .add("line", line)
+        .add("col", col)
+        .add("charOffset", charOffset)
+        .toString();
+  }
+
+  @Override
+  public boolean equals(Object obj)
+  {
+    if (obj instanceof CssLocation)
+    {
+      CssLocation loc = (CssLocation) obj;
+      if (loc.charOffset == this.charOffset
+          && loc.line == this.line
+          && loc.col == this.col
+          && loc.systemID.equals(this.systemID))
+      {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Canonical representation of the location system id
+   * for virtual resources
+   */
+  public static final String NO_SID = "VIRTUAL";
+}
diff --git a/src/main/java/org/idpf/epubcheck/util/css/CssParser.java b/src/main/java/org/idpf/epubcheck/util/css/CssParser.java
new file mode 100644
index 0000000..1353c2a
--- /dev/null
+++ b/src/main/java/org/idpf/epubcheck/util/css/CssParser.java
@@ -0,0 +1,746 @@
+/*
+ * Copyright (c) 2012 International Digital Publishing Forum
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+package org.idpf.epubcheck.util.css;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Lists;
+import org.idpf.epubcheck.util.css.CssExceptions.CssException;
+import org.idpf.epubcheck.util.css.CssExceptions.CssGrammarException;
+import org.idpf.epubcheck.util.css.CssGrammar.*;
+import org.idpf.epubcheck.util.css.CssToken.CssTokenConsumer;
+import org.idpf.epubcheck.util.css.CssTokenList.CssTokenIterator;
+import org.idpf.epubcheck.util.css.CssTokenList.PrematureEOFException;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+import static com.google.common.base.Preconditions.*;
+import static org.idpf.epubcheck.util.css.CssExceptions.CssErrorCode.*;
+import static org.idpf.epubcheck.util.css.CssToken.Matchers.*;
+import static org.idpf.epubcheck.util.css.CssTokenList.Filters.FILTER_S_CMNT;
+import static org.idpf.epubcheck.util.css.CssTokenList.Filters.FILTER_S_CMNT_CDO_CDC;
+
+/**
+ * A CSS parser.
+ *
+ * @author mgylling
+ */
+public final class CssParser
+{
+  private final boolean debug = false;
+
+  /*
+    * TODOs
+    * - pseudo-elements are restricted to one per selector and
+    *   occur only in the last simple_selector_sequence (testParserSelectorsFunctionalPseudoInvalid001).
+    * - baduri 1 and 2 and 3 #buildURI
+    * - check uc range in tokenbuilder#append
+    * - cssreader#forward should be fully escape aware
+    */
+
+  /**
+   * Parse a CSS document.
+   */
+  public void parse(final CssSource source, final CssErrorHandler err, final CssContentHandler doc) throws
+      IOException,
+      CssException
+  {
+    parse(source.newReader(), source.getSystemID(), err, doc);
+  }
+
+  /**
+   * Parse a CSS document.
+   */
+  public void parse(final Reader reader, final String systemID, final CssErrorHandler err, final CssContentHandler doc)
+      throws
+      IOException,
+      CssException
+  {
+
+    CssTokenIterator iter = scan(reader, systemID, err);
+
+    doc.startDocument();
+
+    while (iter.hasNext(FILTER_S_CMNT_CDO_CDC))
+    {
+      CssToken tk = iter.next(FILTER_S_CMNT_CDO_CDC);
+      try
+      {
+
+        if (tk.type == CssToken.Type.ATKEYWORD)
+        {
+          handleAtRule(tk, iter, doc, err);
+          if (debug)
+          {
+            checkArgument(MATCH_SEMI_CLOSEBRACE.apply(iter.last));
+          }
+        }
+        else
+        {
+          handleRuleSet(tk, iter, doc, err);
+          if (debug)
+          {
+            checkArgument(MATCH_CLOSEBRACE.apply(iter.last));
+          }
+        }
+
+      }
+      catch (PrematureEOFException te)
+      {
+        // The subroutines report premature EOF to ErrHandler
+        // on occurrence; if the listener rethrows it will
+        // be a CssException so we don't catch it here.
+        break;
+      }
+    }
+
+    doc.endDocument();
+  }
+
+  /**
+   * Parse a CSS style attribute.
+   */
+  public void parseStyleAttribute(final Reader reader, String systemID, final CssErrorHandler err, final CssContentHandler doc) throws
+      IOException,
+      CssException
+  {
+    CssTokenIterator iter = scan(reader, systemID, err);
+    doc.startDocument();
+    while (iter.hasNext())
+    {
+      CssToken tk = iter.next();
+			
+			if(MATCH_SEMI.apply(tk)) 
+			{
+				continue; //starting with ';' is allowed, Issue 238
+			}
+      try
+      {
+			
+        CssDeclaration decl = handleDeclaration(tk, iter, doc, err, true);
+        if (decl != null)
+        {
+          doc.declaration(decl);
+        }
+        else
+        {
+          // #handleDeclaration has issued errors
+          return;
+        }
+      }
+      catch (PrematureEOFException te)
+      {
+        // The subroutines report premature EOF to ErrHandler
+        // on occurrence; if the listener rethrows it will
+        // be a CssException so we don't catch it here.
+        break;
+      }
+    }
+    doc.endDocument();
+  }
+
+  private CssTokenIterator scan(Reader reader, String systemID, CssErrorHandler err) throws
+      IOException,
+      CssException
+  {
+
+    final CssTokenList tokens = new CssTokenList();
+
+    new CssScanner(reader, systemID, err, new CssTokenConsumer()
+    {
+      public void add(final CssToken token)
+      {
+        tokens.add(token);
+      }
+    }).scan();
+
+    return tokens.iterator(FILTER_S_CMNT); // default filter
+  }
+
+  /**
+   * With the start token expected to be the first token of a selector group,
+   * create and issue the group, then invoke handleDeclarationBlock. At exit
+   * the last token returned from the iterator is expected to be '}'.
+   */
+  private void handleRuleSet(CssToken start, final CssTokenIterator iter, final CssContentHandler doc,
+      CssErrorHandler err) throws
+      CssException
+  {
+
+    char errChar = '{';
+    try
+    {
+      List<CssSelector> selectors = handleSelectors(start, iter, err);
+      errChar = '}';
+      if (selectors == null)
+      {
+        // handleSelectors() has issued errors, we forward
+        iter.next(MATCH_CLOSEBRACE);
+        return;
+      }
+      if (debug)
+      {
+        checkState(iter.last.getChar() == '{');
+        checkState(!selectors.isEmpty());
+      }
+
+      doc.selectors(selectors);
+
+      handleDeclarationBlock(iter.next(), iter, doc, err);
+
+      doc.endSelectors(selectors);
+
+    }
+    catch (NoSuchElementException nse)
+    {
+      err.error(new CssGrammarException(GRAMMAR_PREMATURE_EOF,
+          iter.last.location, "'" + errChar + "'"));
+      throw new PrematureEOFException();
+    }
+
+    if (debug)
+    {
+      checkState(iter.last.getChar() == '}');
+    }
+  }
+
+  /**
+   * With start token being the first non-ignorable token inside the
+   * declaration block, iterate issuing CssDeclaration objects until the block
+   * ends.
+   */
+  private void handleDeclarationBlock(CssToken start, CssTokenIterator iter,
+      final CssContentHandler doc, CssErrorHandler err) throws
+      CssException
+  {
+
+    while (true)
+    {
+      if (MATCH_CLOSEBRACE.apply(start))
+      {
+        return;
+      }
+      CssDeclaration decl = handleDeclaration(start, iter, doc, err, false);
+      try
+      {
+        if (decl != null)
+        {
+          doc.declaration(decl);
+          if (debug)
+          {
+            checkState(MATCH_SEMI_CLOSEBRACE.apply(iter.last));
+          }
+
+          // continue or return: we may be at "; next decl" or "}" or ";}"
+          if (MATCH_CLOSEBRACE.apply(iter.last))
+          {
+            return;
+          }
+          else if (MATCH_SEMI.apply(iter.last) && MATCH_CLOSEBRACE.apply(iter.peek()))
+          {
+            iter.next();
+            return;
+          }
+          else
+          {
+            if (debug)
+            {
+              checkState(MATCH_SEMI.apply(iter.last));
+            }
+            // we have ';', expect another decl
+            start = iter.next(); // first token after ';'
+          }
+
+        }
+        else
+        {
+          // #handleDeclaration returned null to signal error
+          // #handleDeclaration has issued errors, we forward
+          start = iter.next(MATCH_SEMI_CLOSEBRACE);
+          if (MATCH_SEMI.apply(start))
+          {
+            start = iter.next();
+          }
+        }
+      }
+      catch (NoSuchElementException nse)
+      {
+        err.error(new CssGrammarException(GRAMMAR_PREMATURE_EOF, iter.last.location, "';' "
+            + Messages.get("or") + " '}'"));
+        throw new PrematureEOFException();
+      }
+    }
+  }
+
+  /**
+   * With start expected to be an IDENT token representing the property name,
+   * build the declaration and return after hitting ';' or '}'. On error,
+   * issue to errhandler, return null, caller forwards.
+   */
+  private CssDeclaration handleDeclaration(CssToken name, CssTokenIterator iter,
+      CssContentHandler doc, CssErrorHandler err, boolean isStyleAttribute) throws
+      CssException
+  {
+
+    if (name.type != CssToken.Type.IDENT)
+    {
+      err.error(new CssGrammarException(GRAMMAR_EXPECTING_TOKEN, name.location, name
+          .getChars(), Messages.get("a_property_name")));
+      return null;
+    }
+
+    CssDeclaration declaration = new CssDeclaration(name.getChars(), name.location);
+
+    try
+    {
+      if (!MATCH_COLON.apply(iter.next()))
+      {
+        err.error(new CssGrammarException(GRAMMAR_EXPECTING_TOKEN, name.location, iter.last
+            .getChars(), ":"));
+        return null;
+      }
+    }
+    catch (NoSuchElementException nse)
+    {
+      err.error(new CssGrammarException(GRAMMAR_PREMATURE_EOF, iter.last.location, ":"));
+      throw new PrematureEOFException();
+    }
+
+    try
+    {
+      while (true)
+      {
+        CssToken value = iter.next();
+        if (MATCH_SEMI_CLOSEBRACE.apply(value))
+        {
+          if (declaration.components.size() < 1)
+          {
+            err.error(new CssGrammarException(GRAMMAR_EXPECTING_TOKEN,
+                iter.last.location, value.getChar(), Messages
+                .get("a_property_value")));
+            return null;
+          }
+          else
+          {
+            return declaration;
+          }
+        }
+        else
+        {
+          if (!handlePropertyValue(declaration, value, iter, isStyleAttribute))
+          {
+            err.error(new CssGrammarException(GRAMMAR_UNEXPECTED_TOKEN,
+                iter.last.location, iter.last.getChars()));
+            return null;
+          }
+          else
+          {
+            if (isStyleAttribute && !iter.hasNext())
+            {
+              return declaration;
+            }
+          }
+        }
+      }
+    }
+    catch (NoSuchElementException nse)
+    {
+      err.error(new CssGrammarException(GRAMMAR_PREMATURE_EOF, iter.last.location, "';' "
+          + Messages.get("or") + " '}'"));
+      throw new PrematureEOFException();
+    }
+
+  }
+
+  /**
+   * Append property value components to declaration.value, return false if
+   * fail with iter.last at the the token which caused the fail.
+   */
+  private boolean handlePropertyValue(CssDeclaration declaration, CssToken start,
+      CssTokenIterator iter, boolean isStyleAttribute)
+  {
+    // we dont worry about EOF here, throw to caller
+    while (true)
+    {
+
+      if (start.type == CssToken.Type.IMPORTANT)
+      {
+        declaration.important = true;
+      }
+      else
+      {
+        CssConstruct cc = CssConstructFactory.create(
+            start, iter, MATCH_SEMI_CLOSEBRACE,
+            ContextRestrictions.PROPERTY_VALUE);
+        if (cc == null)
+        {
+          return false;
+        }
+        else
+        {
+          declaration.components.add(cc);
+        }
+      }
+
+      //if isStyleAttribute, then parse as declaration-list grammar,
+      //i.e. no braces
+      if ((isStyleAttribute && !iter.hasNext())
+          || (MATCH_SEMI.apply(iter.peek()))
+          || (!isStyleAttribute && MATCH_CLOSEBRACE.apply(iter.peek())))
+      {
+        return declaration.components.size() > 0;
+      }
+      else
+      {
+        start = iter.next();
+      }
+    }
+  }
+
+  /**
+   * With start inparam being the first significant token in a selector, build
+   * the selector group (aka comma separated selectors), expected return when
+   * iter.last is '{'. On error, issue to errorlistener, and return
+   * (caller will forward).
+   *
+   * @return A syntactically valid CssSelector list, or null if fail.
+   * @throws CssException
+   */
+  private List<CssSelector> handleSelectors(CssToken start, CssTokenIterator iter,
+      CssErrorHandler err) throws
+      CssException
+  {
+
+    List<CssSelector> selectors = Lists.newArrayList();
+    boolean end = false;
+    while (true)
+    { // comma loop
+      CssSelector selector = new CssSelector(start.location);
+      while (true)
+      { //combinator loop
+        CssSimpleSelectorSequence seq = CssSelectorConstructFactory
+            .createSimpleSelectorSequence(start, iter, err);
+        if (seq == null)
+        {
+          //errors already issued
+          return null;
+        }
+        selector.components.add(seq);
+        int idx = iter.index();
+        start = iter.next();
+        if (MATCH_OPENBRACE.apply(start))
+        {
+          end = true;
+          break;
+        }
+        if (MATCH_COMMA.apply(start))
+        {
+          break;
+        }
+
+        CssSelectorCombinator comb =
+            CssSelectorConstructFactory.createCombinator(start, iter, err);
+        if (comb != null)
+        {
+          selector.components.add(comb);
+          start = iter.next();
+        }
+        else if (iter.list.get(idx + 1).type == CssToken.Type.S)
+        {
+          selector.components.add(new CssSelectorCombinator(' ', start.location));
+        }
+        else
+        {
+          err.error(new CssGrammarException(GRAMMAR_UNEXPECTED_TOKEN,
+              iter.last.location, iter.last.chars));
+          return null;
+        }
+      } //combinator loop
+      selectors.add(selector);
+      if (end)
+      {
+        break;
+      }
+      if (debug)
+      {
+        checkState(MATCH_COMMA.apply(start));
+      }
+      start = iter.next();
+    } // comma loop
+    return selectors;
+  }
+
+  /**
+   * With start token required to be an ATKEYWORD, collect at-rule parameters if
+   * any, and if the at-rule has a block, invoke those handlers.
+   */
+  private void handleAtRule(CssToken start, CssTokenIterator iter, CssContentHandler doc,
+      CssErrorHandler err) throws
+      CssException
+  {
+
+    if (debug)
+    {
+      checkArgument(start.type == CssToken.Type.ATKEYWORD);
+      checkArgument(iter.index() == iter.list.indexOf(start));
+      checkArgument(iter.filter() == FILTER_S_CMNT);
+    }
+
+    CssAtRule atRule = new CssAtRule(start.getChars(), start.location);
+
+    CssToken tk;
+    try
+    {
+      while (true)
+      {
+        tk = iter.next();
+        if (MATCH_SEMI_OPENBRACE.apply(tk))
+        {
+          // ';' or '{', expected end
+          atRule.hasBlock = tk.getChar() == '{';
+          break;
+        }
+        else
+        {
+          CssConstruct param = handleAtRuleParam(tk, iter, doc, err);
+          if (param == null)
+          {
+            // issue error, forward, then return
+            err.error(new CssGrammarException(GRAMMAR_UNEXPECTED_TOKEN,
+                iter.last.location, iter.last.chars));
+            //skip to atrule closebrace, ignoring any inner blocks
+            int stack = 0;
+            while (true)
+            {
+              CssToken tok = iter.next();
+              if (MATCH_SEMI.apply(tok) && stack == 0)
+              {
+                return; //a non-block at rule
+              }
+              else if (MATCH_OPENBRACE.apply(tok))
+              {
+                stack++;
+              }
+              else if (MATCH_CLOSEBRACE.apply(tok))
+              {
+                if (stack == 1)
+                {
+                  break;
+                }
+                stack--;
+              }
+            }
+            return;
+          }
+          else
+          {
+            atRule.components.add(param);
+          }
+        }
+      }
+    }
+    catch (NoSuchElementException nse)
+    {
+      // UAs required to close any open constructs on premature EOF
+      doc.startAtRule(atRule);
+      err.error(new CssGrammarException(GRAMMAR_PREMATURE_EOF, iter.last.location, "';' "
+          + Messages.get("or") + " '{'"));
+      doc.endAtRule(atRule.getName().get());
+      throw new PrematureEOFException();
+    }
+
+    if (debug)
+    {
+      checkArgument(MATCH_SEMI_OPENBRACE.apply(iter.last));
+      checkArgument(iter.filter() == FILTER_S_CMNT);
+    }
+
+    // ending up here only on expected end
+    doc.startAtRule(atRule);
+    if (atRule.hasBlock)
+    {
+      try
+      {
+        if (hasRuleSet(atRule, iter))
+        {
+          while (!MATCH_CLOSEBRACE.apply(iter.next()))
+          {
+            if (iter.last.type == CssToken.Type.ATKEYWORD)
+            {
+              handleAtRule(iter.last, iter, doc, err);
+            }
+            else
+            {
+              handleRuleSet(iter.last, iter, doc, err);
+            }
+          }
+        }
+        else
+        {
+          handleDeclarationBlock(iter.next(), iter, doc, err);
+        }
+      }
+      catch (NoSuchElementException nse)
+      {
+        err.error(new CssGrammarException(GRAMMAR_PREMATURE_EOF, iter.last.location, "'}'"));
+        doc.endAtRule(atRule.name.get());
+        throw new PrematureEOFException();
+      }
+    }
+    doc.endAtRule(atRule.name.get());
+  }
+
+  /**
+   * With inparam token being the first token of an atrule param, create the
+   * construct and return it.
+   *
+   * @return A CssConstruct, or null if fail.
+   */
+  private CssConstruct handleAtRuleParam(CssToken start, CssTokenIterator iter,
+      CssContentHandler doc, CssErrorHandler err)
+  {
+    return CssConstructFactory.create(start, iter, MATCH_SEMI_OPENBRACE,
+        ContextRestrictions.ATRULE_PARAM);
+  }
+
+  /**
+   * With iter.last at '{', discover the at-rule type. The
+   * contents is a ruleset if '{' comes before ';' or '}'.
+   */
+  private boolean hasRuleSet(CssAtRule atRule, CssTokenIterator iter)
+  {
+    int debugIndex;
+    if (debug)
+    {
+      checkArgument(iter.last.getChar() == '{');
+      debugIndex = iter.index();
+    }
+    List<CssToken> list = iter.list;
+    for (int i = iter.index() + 1; i < list.size(); i++)
+    {
+      CssToken tk = list.get(i);
+      if (MATCH_OPENBRACE.apply(tk))
+      {
+        return true;
+      }
+      else if (MATCH_SEMI_CLOSEBRACE.apply(tk))
+      {
+        return false;
+      }
+    }
+    if (debug)
+    {
+      checkState(iter.last.getChar() == '{');
+      checkState(iter.index() == debugIndex);
+    }
+    return false;
+  }
+
+  static final class ContextRestrictions
+  {
+
+    /**
+     * A context restriction for the contents of a function.
+     */
+    static final Predicate<CssConstruct> FUNCTION = new Predicate<CssConstruct>()
+    {
+      public boolean apply(CssConstruct cc)
+      {
+        checkNotNull(cc);
+        return cc.type != CssConstruct.Type.FUNCTION;
+      }
+    };
+
+    /**
+     * A context restriction for at-rule parameters.
+     */
+    static final Predicate<CssConstruct> ATRULE_PARAM = new Predicate<CssConstruct>()
+    {
+      public boolean apply(CssConstruct cc)
+      {
+        checkNotNull(cc);
+        return true; // atrule param space allows SYMBOL (aka DELIM) too
+      }
+    };
+
+    /**
+     * A context restriction for property values.
+     */
+    static final Predicate<CssConstruct> PROPERTY_VALUE = new Predicate<CssConstruct>()
+    {
+      public boolean apply(CssConstruct cc)
+      {
+        checkNotNull(cc);
+        return cc.type != CssConstruct.Type.ATRULE; //TODO
+      }
+    };
+
+    /**
+     * A context restriction for the value segment of an attribute selector ([name+match+value]).
+     */
+    static final Predicate<CssConstruct> ATTRIBUTE_SELECTOR_VALUE = new Predicate<CssConstruct>()
+    {
+      public boolean apply(final CssConstruct cc)
+      {
+        checkNotNull(cc);
+        return cc.type == CssConstruct.Type.KEYWORD || cc.type == CssConstruct.Type.STRING;
+      }
+    };
+
+    /**
+     * A context restriction for elements inside a functional pseudo.
+     */
+    static final Predicate<CssConstruct> PSEUDO_FUNCTIONAL = new Predicate<CssConstruct>()
+    {
+      public boolean apply(CssConstruct cc)
+      {
+        checkNotNull(cc);
+        return cc.type == CssConstruct.Type.KEYWORD
+            || cc.type == CssConstruct.Type.STRING
+            || cc.type == CssConstruct.Type.QUANTITY
+            || (cc.type == CssConstruct.Type.SYMBOL && cc.toCssString().equals("+"))
+            || (cc.type == CssConstruct.Type.SYMBOL && cc.toCssString().equals("-"))
+            ;
+      }
+    };
+
+    /**
+     * A context restriction for elements inside a negation pseudo.
+     */
+    static final Predicate<CssConstruct> PSEUDO_NEGATION = new Predicate<CssConstruct>()
+    {
+      public boolean apply(final CssConstruct cc)
+      {
+        checkNotNull(cc);
+        return cc.type == CssConstruct.Type.TYPE_SELECTOR
+            || cc.type == CssConstruct.Type.HASHNAME
+            || cc.type == CssConstruct.Type.CLASSNAME
+            || (cc.type == CssConstruct.Type.ATTRIBUTE_SELECTOR)
+            || (cc.type == CssConstruct.Type.PSEUDO)
+            ;
+      }
+    };
+  }
+
+}
diff --git a/src/main/java/org/idpf/epubcheck/util/css/CssReader.java b/src/main/java/org/idpf/epubcheck/util/css/CssReader.java
new file mode 100644
index 0000000..8bab652
--- /dev/null
+++ b/src/main/java/org/idpf/epubcheck/util/css/CssReader.java
@@ -0,0 +1,389 @@
+/*
+ * Copyright (c) 2012 International Digital Publishing Forum
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+package org.idpf.epubcheck.util.css;
+
+import com.google.common.base.CharMatcher;
+import com.google.common.base.Objects;
+import com.google.common.collect.Lists;
+import com.google.common.primitives.Ints;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.util.List;
+
+import static com.google.common.base.Preconditions.*;
+
+/**
+ * A wrapper around java.io.Reader with a pushback buffer, offset and
+ * line+column tracking. This is used by CssScanner.
+ *
+ * @author mgylling
+ */
+final class CssReader
+{
+  static final int DEFAULT_PUSHBACK_BUFFER_SIZE = 8096;
+  private final int[] buf;
+  private int pos;
+  private final Reader in;
+  private int prevLine = 1;
+
+  /**
+   * The systemID of the resource being read. If the resource being read
+   * is virtual the value is set to CssLocaton.NO_SID
+   */
+  final String systemID;
+
+  /**
+   * The char that this reader is currently positioned at, or -1 if EOF is
+   * reached.
+   */
+  int curChar = 0;
+
+  /**
+   * The previous char, or 0 if curChar is the first character in the resource
+   * being read.
+   */
+  int prevChar = 0;
+
+  /**
+   * The offset (in characters) of prevChar from the start of the resource
+   * being read.
+   */
+  int offset = 0;
+
+  /**
+   * The current line in the resource being read
+   */
+  int line = 1;
+
+  /**
+   * The current column in the resource being read
+   */
+  int col = 1;
+
+  CssReader(Reader reader, String systemID, int pushbackSize)
+  {
+    this.in = checkNotNull(reader) instanceof BufferedReader
+        ? reader
+        : new BufferedReader(reader);
+    this.systemID = checkNotNull(systemID);
+    checkArgument(pushbackSize >= 1);
+    this.pos = pushbackSize;
+    this.buf = new int[pushbackSize];
+
+  }
+
+  /**
+   * Returns the next character in the stream and advances the readers
+   * position. If there are no more characters, -1 is returned the first time
+   * this method is invoked in that state; multiple invocations at EOF will
+   * yield an IllegalStateException.
+   */
+  int next() throws
+      IOException
+  {
+    prevChar = curChar;
+    checkState(prevChar > -1);
+
+    if (pos < buf.length)
+    {
+      curChar = buf[pos++];
+    }
+    else
+    {
+      curChar = in.read();
+    }
+
+    offset++;
+
+    /*
+       * Handle line and col
+       * lf=\n, cr=\r
+       */
+    if (curChar == '\r' || curChar == '\n')
+    {
+      if (curChar == '\n' && prevChar == '\r')
+      {
+        //second char in a windows CR+LF
+      }
+      else
+      {
+        prevLine = line;
+        line++;
+      }
+
+    }
+    else if (prevLine < line)
+    {
+      col = 1;
+      prevLine = line;
+    }
+    else
+    {
+      if (prevChar != 0)
+      {
+        col++;
+      }
+    }
+
+    return curChar;
+  }
+
+  /**
+   * Returns the next character in the stream without advancing the readers
+   * position. If there are no more characters, -1 is returned.
+   */
+  int peek() throws
+      IOException
+  {
+    Mark m = mark();
+    int ch = next();
+    unread(ch, m);
+    return ch;
+  }
+
+  /**
+   * Returns the the next n characters in the stream without advancing the
+   * readers position.
+   *
+   * @param n the number of characters to read
+   * @return An array with guaranteed length n, with -1 being the value for
+   *         all elements at and after EOF.
+   * @throws IOException
+   */
+  int[] peek(int n) throws
+      IOException
+  {
+    int[] buf = new int[n];
+    Mark m = mark();
+    boolean seenEOF = false;
+
+    for (int i = 0; i < buf.length; i++)
+    {
+      if (!seenEOF)
+      {
+        buf[i] = next();
+      }
+      else
+      {
+        buf[i] = -1;
+      }
+      if (buf[i] == -1)
+      {
+        seenEOF = true;
+      }
+    }
+    if (!seenEOF)
+    {
+      unread(buf, m);
+    }
+    else
+    {
+      List<Integer> ints = Lists.newArrayList();
+      for (int aBuf : buf)
+      {
+        ints.add(aBuf);
+        if (aBuf == -1)
+        {
+          break;
+        }
+      }
+      unread(ints, m);
+    }
+
+    return buf;
+  }
+
+  /**
+   * Peek and return the character at position n from current position, or -1
+   * if EOF is reached before or at that position.
+   */
+  int at(int n) throws
+      IOException
+  {
+    Mark mark = mark();
+    List<Integer> cbuf = Lists.newArrayList();
+    for (int i = 0; i < n; i++)
+    {
+      cbuf.add(next());
+      if (curChar == -1)
+      {
+        break;
+      }
+    }
+    unread(cbuf, mark);
+    return cbuf.get(cbuf.size() - 1);
+  }
+
+  /**
+   * Reads forward and returns the the next n characters in the stream. Escapes
+   * are returned verbatim. At return, the reader is at positioned such that
+   * next() will return n+1 or EOF (-1).
+   *
+   * @param n the number of characters to read
+   * @return An array with guaranteed length n, with -1 being the value for
+   *         all elements at and after EOF.
+   * @throws IOException
+   */
+  int[] collect(int n) throws
+      IOException
+  {
+    int[] buf = new int[n];
+    boolean seenEOF = false;
+    for (int i = 0; i < buf.length; i++)
+    {
+      if (seenEOF)
+      {
+        buf[i] = -1;
+      }
+      else
+      {
+        buf[i] = next();
+        if (curChar == -1)
+        {
+          seenEOF = true;
+        }
+      }
+    }
+    return buf;
+  }
+
+  /**
+   * Read forward until the next non-escaped character matches the given
+   * CharMatcher or is EOF.
+   *
+   * @throws IOException
+   */
+  CssReader forward(CharMatcher matcher) throws
+      IOException
+  {
+    while (true)
+    {
+      Mark mark = mark();
+      next();
+      //TODO escape awareness
+      if (curChar == -1 || (matcher.matches((char) curChar) && prevChar != '\\'))
+      {
+        unread(curChar, mark);
+        break;
+      }
+    }
+    return this;
+  }
+
+  /**
+   * Read forward n characters, or until the next character is EOF.
+   *
+   * @throws IOException
+   */
+  CssReader forward(int n) throws
+      IOException
+  {
+    for (int i = 0; i < n; i++)
+    {
+      //TODO escape awareness
+      Mark mark = mark();
+      next();
+      if (curChar == -1)
+      {
+        unread(curChar, mark);
+        break;
+      }
+    }
+    return this;
+  }
+
+  void unread(final int ch, final Mark mark)
+  {
+    checkState(pos > 0);
+    buf[--pos] = ch;
+    reset(mark);
+  }
+
+  void unread(final int cbuf[], final Mark mark) throws
+      IOException
+  {
+    unread(cbuf, 0, cbuf.length, mark);
+  }
+
+  void unread(final List<Integer> cbuf, final Mark mark) throws
+      IOException
+  {
+    unread(Ints.toArray(cbuf), mark);
+  }
+
+  void unread(final int cbuf[], final int off, final int len, final Mark mark)
+  {
+    checkArgument(len < pos);
+    pos -= len;
+    System.arraycopy(cbuf, off, buf, pos, len);
+    reset(mark);
+  }
+
+  Mark mark()
+  {
+    return new Mark(curChar, prevChar, line, col, prevLine, offset);
+  }
+
+  private CssReader reset(final Mark mark)
+  {
+    this.curChar = mark.mCur;
+    this.prevChar = mark.mPrev;
+    this.line = mark.mLine;
+    this.col = mark.mCol;
+    this.prevLine = mark.mPrevLine;
+    this.offset = mark.mOffset;
+    return this;
+  }
+
+  final class Mark
+  {
+    final int mLine;
+    final int mCol;
+    final int mPrev;
+    final int mCur;
+    final int mPrevLine;
+    final int mOffset;
+
+    private Mark(final int curChar, final int prevChar, final int line, final int col,
+        final int prevLine, final int offset)
+    {
+      this.mCur = curChar;
+      this.mPrev = prevChar;
+      this.mLine = line;
+      this.mCol = col;
+      this.mPrevLine = prevLine;
+      this.mOffset = offset;
+    }
+  }
+
+  @Override
+  public String toString()
+  {
+    return Objects.toStringHelper(this)
+        .add("curChar", (char) curChar)
+        .add("prevChar", (char) prevChar)
+        .toString();
+  }
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/idpf/epubcheck/util/css/CssScanner.java b/src/main/java/org/idpf/epubcheck/util/css/CssScanner.java
new file mode 100644
index 0000000..f67606e
--- /dev/null
+++ b/src/main/java/org/idpf/epubcheck/util/css/CssScanner.java
@@ -0,0 +1,1415 @@
+/*
+ * Copyright (c) 2012 International Digital Publishing Forum
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+package org.idpf.epubcheck.util.css;
+
+import com.google.common.base.Ascii;
+import com.google.common.base.CharMatcher;
+import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.primitives.Ints;
+import org.idpf.epubcheck.util.css.CssExceptions.CssErrorCode;
+import org.idpf.epubcheck.util.css.CssExceptions.CssException;
+import org.idpf.epubcheck.util.css.CssReader.Mark;
+import org.idpf.epubcheck.util.css.CssToken.CssTokenConsumer;
+import org.idpf.epubcheck.util.css.CssToken.TokenBuilder;
+import org.idpf.epubcheck.util.css.CssToken.Type;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.util.List;
+import java.util.Map;
+
+import static com.google.common.base.Preconditions.*;
+import static org.idpf.epubcheck.util.css.CssExceptions.CssErrorCode.SCANNER_ILLEGAL_CHAR;
+import static org.idpf.epubcheck.util.css.CssExceptions.CssErrorCode.SCANNER_PREMATURE_EOF;
+
+/**
+ * A lexical scanner for CSS.
+ * <p>
+ * Lexical errors are stored as attributes on the tokens in which they occurred.
+ * The supplied CssErrorHandler is also invoked when a lexical error occurs, so
+ * that clients can terminate the scanning by a rethrow.
+ * </p>
+ *
+ * @author mgylling
+ */
+
+final class CssScanner
+{
+
+  private final CssReader reader;
+  private final CssToken.CssTokenConsumer consumer;
+  private final CssEscapeMemoizer escapes;
+  private TokenBuilder builder;
+  private final CssErrorHandler errHandler;
+  private final boolean debug = false;
+  private char cur;
+
+  private CssScanner(final Reader in, final String systemID, final CssErrorHandler errHandler,
+      final CssTokenConsumer consumer, final int pushbackBufferSize)
+  {
+    this.consumer = checkNotNull(consumer);
+    this.errHandler = checkNotNull(errHandler);
+    this.reader = new CssReader(in, systemID, pushbackBufferSize);
+    this.escapes = new CssEscapeMemoizer(reader);
+  }
+
+  CssScanner(Reader in, final String systemID, final CssErrorHandler errHandler,
+      final CssTokenConsumer consumer)
+  {
+    this(in, systemID, errHandler, consumer, CssReader.DEFAULT_PUSHBACK_BUFFER_SIZE);
+  }
+
+  void scan() throws
+      IOException,
+      CssException
+  {
+    int ch;
+    int next;
+    while (true)
+    {
+      ch = reader.next();
+      if (ch == -1)
+      {
+        break;
+      }
+      builder = new TokenBuilder(reader, /* this, */errHandler);
+      cur = (char) ch;
+      next = reader.peek();
+      escapes.reset(builder);
+
+      if (WHITESPACE.matches(cur))
+      {
+        _ws();
+      }
+      else if (cur == '-' && equals(reader.peek(2), CDC_LL))
+      {
+        _cdc();
+      }
+      else if (O.matches(cur) && matchesOrEOF(reader.at(4), WHITESPACE)
+          && equals(reader.peek(3), ONLY_LL, true))
+      {
+        _only();
+      }
+      else if (N.matches(cur) && matchesOrEOF(reader.at(3), WHITESPACE)
+          && equals(reader.peek(2), NOT_LL, true))
+      {
+        _not();
+      }
+      else if (A.matches(cur) && matchesOrEOF(reader.at(3), WHITESPACE)
+          && equals(reader.peek(2), AND_LL, true))
+      {
+        _and();
+      }
+      else if (U.matches(cur) && equals(reader.peek(3), URI_LL, true))
+      {
+        _uri();
+      }
+      else if (U.matches(cur) && next == '+'
+          && matchesOrEOF(reader.at(2), URANGESTART))
+      {
+        _urange();
+      }
+      else if (NMSTART.matches(cur) || cur == '-'
+          && matches(next, NMSTART) || escapes.get(0).isPresent()
+          || (cur == '-' && escapes.get(1).isPresent()))
+      {
+        _ident();
+        if (reader.peek() == '(')
+        {
+          _function();
+        }
+      }
+      else if (cur == '@'
+          && ((matches(next, NMSTART) || escapes.get(1).isPresent()) || (next == '-'
+          && (matches(reader.at(2), NMSTART)) || escapes.get(
+          2).isPresent())))
+      {
+        _atkeyword();
+      }
+      else if (NUMEND.matches(cur) || NUMSTART.matches(cur)
+          && matches(next, NUMEND) || UNARY.matches(cur)
+          && next == '.' && matches(reader.at(2), NUMEND))
+      {
+        _num();
+      }
+      else if (cur == '<' && equals(reader.peek(3), CDO_LL))
+      {
+        _cdo();
+      }
+      else if (cur == '/' && next == '*')
+      {
+        _comment();
+      }
+      else if (QUOTES.matches(cur))
+      {
+        _string();
+      }
+      else if (cur == '#'
+          && (matches(next, NMCHAR) || escapes.get(1).isPresent()))
+      {
+        _hashname();
+      }
+      else if (cur == '.'
+          && (matches(next, NMCHAR) || escapes.get(1).isPresent()))
+      {
+        _classname();
+      }
+      else if (cur == '!'
+          && forwardMatch("important", true, false))
+      {
+        _important();
+      }
+      else if (cur == '~' && next == '=')
+      {
+        _includes();
+      }
+      else if (cur == '|' && next == '=')
+      {
+        _dashmatch();
+      }
+      else if (cur == '^' && next == '=')
+      {
+        _prefixmatch();
+      }
+      else if (cur == '$' && next == '=')
+      {
+        _suffixmatch();
+      }
+      else if (cur == '*' && next == '=')
+      {
+        _substringmatch();
+      }
+      else
+      {
+        builder.type = Type.CHAR;
+        builder.append(cur);
+      }
+      consumer.add(builder.asToken());
+    }
+  }
+
+  /**
+   * FUNCTION {ident}\(
+   *
+   * @throws IOException
+   */
+  private void _function() throws
+      IOException
+  {
+    // Assumes that builder already contains an IDENT
+    if (debug)
+    {
+      checkArgument('(' == reader.peek());
+    }
+    builder.type = Type.FUNCTION;
+    builder.append(reader.next());
+  }
+
+  /**
+   * URI url\({w}{string}{w}\) |
+   * url\({w}([!#$%&*-\[\]-~]|{nonascii}|{escape})*{w}\)
+   */
+  private void _uri() throws
+      IOException,
+      CssException
+  {
+    /*
+       * Need to run this before IDENT and FUNCTION since the first three
+       * chars match IDENT and the entire trigger token matches FUNCTION.
+       */
+
+    builder.append("url(");
+    reader.forward(3);
+    if (debug)
+    {
+      checkArgument('(' == reader.curChar || -1 == reader.peek());
+    }
+    reader.forward(NOT_WHITESPACE);
+    int uristart = reader.next();
+
+    if (-1 == uristart)
+    {
+      builder.error(SCANNER_PREMATURE_EOF, reader);
+    }
+    else if (QUOTES.matches((char) uristart))
+    {
+      builder.append('\'');
+      _string();
+      builder.append('\'');
+
+      if (debug && builder.errors.size() < 1)
+      {
+        checkArgument(QUOTES.matches((char) reader.curChar));
+      }
+      reader.forward(NOT_WHITESPACE);
+      if (reader.peek() > -1)
+      {
+        reader.next(); // ')'
+      }
+    }
+    else
+    {
+      // unquoted uri
+      builder.append(uristart);
+      if (debug)
+      {
+        checkArgument(NOT_WHITESPACE.matches((char) reader.curChar));
+      }
+      StringBuilder buf = new StringBuilder();
+      while (true)
+      {
+        CssReader.Mark mark = reader.mark();
+        int ch = reader.next();
+        if (ch == -1)
+        {
+          builder.error(SCANNER_PREMATURE_EOF, reader);
+          reader.unread(ch, mark);
+          break;
+        }
+        else if (ch == ')')
+        {
+          break;
+        }
+        buf.append((char) ch);
+      }
+      builder.append(WHITESPACE.trimTrailingFrom(buf.toString()));
+    }
+    builder.append(')');
+    builder.type = Type.URI;
+
+    if (')' != reader.curChar && builder.errors.size() == 0)
+    {
+      builder.error(CssErrorCode.SCANNER_ILLEGAL_SYNTAX, reader, reader.curChar);
+    }
+  }
+
+  /**
+   * string1 \"([^\n\r\f\\"]|\\{nl}|{escape})*\"
+   * string2 \'([^\n\r\f\\']|\\{nl}|{escape})*\'
+   */
+  private void _string() throws
+      IOException,
+      CssException
+  {
+
+    if (debug)
+    {
+      checkState(QUOTES.matches((char) reader.curChar));
+    }
+
+    /*
+       * Note: resulting token excludes start+end quotes
+       */
+
+    builder.type = Type.STRING;
+    int quoteType = reader.curChar;
+
+    // in strings, we let escapes in general pass through
+    while (true)
+    {
+      CssReader.Mark mark = reader.mark();
+      int ch = reader.next();
+      if (ch == -1)
+      {
+        builder.error(SCANNER_PREMATURE_EOF, reader);
+        reader.unread(ch, mark);
+        break;
+      }
+      else if (ch == '\n' || ch == '\r' || ch == '\f')
+      {
+        builder.error(SCANNER_ILLEGAL_CHAR, reader, "NEWLINE",
+            Type.STRING.name());
+        reader.forward(TERMINATOR);
+        break;
+      }
+      else if (ch == '\\')
+      {
+        int[] peek = reader.peek(2);
+        int nl = isNewLine(peek);
+        if (nl > 0)
+        {
+          // in strings, ignore backslash followed by a literal
+          // newline
+          reader.forward(nl);
+          continue;
+        }
+
+      }
+      else if (ch == quoteType && reader.prevChar != '\\')
+      {
+        break;
+      }
+
+      builder.append(ch);
+    }
+
+    if (debug && builder.errors.size() == 0)
+    {
+      checkState(QUOTES.matches((char) reader.curChar));
+    }
+  }
+
+  /**
+   * ATKEYWORD '@'[-]?{nmstart}{nmchar}* nmstart [_a-z]|{nonascii}|{escape}
+   * nmchar [_a-z0-9-]|{nonascii}|{escape}
+   *
+   * @throws CssException
+   */
+  private void _atkeyword() throws
+      IOException,
+      CssException
+  {
+    if (debug)
+    {
+      checkState('@' == reader.curChar);
+    }
+
+    builder.type = Type.ATKEYWORD;
+    builder.append(cur); // @
+    append(NMSTART);
+    append(NMCHAR);
+
+    if (debug)
+    {
+      int nxt = reader.peek();
+      checkState(NMCHAR.matches((char) reader.curChar));
+      if (nxt > -1)
+      {
+        checkState(!NMCHAR.matches((char) nxt));
+      }
+    }
+  }
+
+  /**
+   * IDENT [-]?{nmstart}{nmchar}*
+   */
+  private void _ident() throws
+      IOException,
+      CssException
+  {
+
+    builder.type = Type.IDENT;
+
+    Optional<CssEscape> esc = escapes.get(0);
+
+    // first NMSTART char or '-'
+    if (esc.isPresent())
+    {
+      int length = esc.get().render(builder, NMSTART);
+      reader.forward(length);
+    }
+    else
+    {
+      builder.append(cur);
+    }
+
+    if (cur == '-' || (esc.isPresent() && esc.get().character == '-'))
+    {
+      // The NMSTART that matched in the main loop if clause
+      if (escapes.get(1).isPresent())
+      {
+        reader.forward(escapes.get(1).get().render(builder, NMSTART));
+      }
+      else
+      {
+        builder.append(reader.next());
+      }
+
+    }
+    append(NMCHAR);
+  }
+
+  /**
+   * DASHMATCH |=
+   */
+  private void _dashmatch() throws
+      IOException
+  {
+    if (debug)
+    {
+      checkState(reader.curChar == '|');
+    }
+    builder.type = Type.DASHMATCH;
+    builder.append("|=");
+    reader.next();
+    if (debug)
+    {
+      checkState(reader.curChar == '=');
+    }
+  }
+
+  /**
+   * INCLUDES ~=
+   */
+  private void _includes() throws
+      IOException
+  {
+    if (debug)
+    {
+      checkState(reader.curChar == '~');
+    }
+    builder.type = Type.INCLUDES;
+    builder.append("~=");
+    reader.next();
+    if (debug)
+    {
+      checkState(reader.curChar == '=');
+    }
+  }
+
+  /**
+   * PREFIXMATCH ^=
+   */
+  private void _prefixmatch() throws
+      IOException
+  {
+    if (debug)
+    {
+      checkState(reader.curChar == '^');
+    }
+    builder.type = Type.PREFIXMATCH;
+    builder.append("^=");
+    reader.next();
+    if (debug)
+    {
+      checkState(reader.curChar == '=');
+    }
+  }
+
+  /**
+   * SUFFIXMATCH $=
+   */
+  private void _suffixmatch() throws
+      IOException
+  {
+    if (debug)
+    {
+      checkState(reader.curChar == '$');
+    }
+    builder.type = Type.SUFFIXMATCH;
+    builder.append("$=");
+    reader.next();
+    if (debug)
+    {
+      checkState(reader.curChar == '=');
+    }
+  }
+
+  /**
+   * SUBSTRINGMATCH *=
+   */
+  private void _substringmatch() throws
+      IOException
+  {
+    if (debug)
+    {
+      checkState(reader.curChar == '*');
+    }
+    builder.type = Type.SUBSTRINGMATCH;
+    builder.append("*=");
+    reader.next();
+    if (debug)
+    {
+      checkState(reader.curChar == '=');
+    }
+  }
+
+  /**
+   * HASHNAME "#"{name} name {nmchar}+ [_a-z0-9-]|{nonascii}|{escape}
+   *
+   * @throws CssException
+   */
+  private void _hashname() throws
+      IOException,
+      CssException
+  {
+    if (debug)
+    {
+      checkState(reader.curChar == '#');
+      checkState(NMCHAR.matches((char) reader.peek()) || isNextEscape());
+    }
+    builder.type = Type.HASHNAME;
+    builder.append('#');
+    append(NMCHAR);
+  }
+
+  /**
+   * CLASSNAME "."{name} This is not part of formal lexical constructs, but
+   * seems to be safe to do at scanner level. name {nmchar}+
+   * [_a-z0-9-]|{nonascii}|{escape}
+   *
+   * @throws CssException
+   */
+  private void _classname() throws
+      IOException,
+      CssException
+  {
+    if (debug)
+    {
+      checkState(reader.curChar == '.');
+      checkState(NMCHAR.matches((char) reader.peek()) || isNextEscape());
+    }
+    builder.type = Type.CLASSNAME;
+    builder.append('.');
+    append(NMCHAR);
+  }
+
+  /**
+   * IMPORTANT !{w}important
+   */
+  private void _important()
+  {
+    /*
+       * Note that #lex needs to use #forwardMatch to maintain correct
+       * position
+       */
+    builder.type = Type.IMPORTANT;
+    builder.append("!important");
+  }
+
+  /**
+   * Builds a comment token, excluding the leading and trailing comment
+   * tokens.
+   */
+  private void _comment() throws
+      IOException,
+      CssException
+  {
+    if (debug)
+    {
+      checkState(reader.curChar == '/' && reader.peek() == '*');
+    }
+    /*
+       * badcomment1 \/\*[^*]*\*+([^/*][^*]*\*+)* badcomment2
+       * \/\*[^*]*(\*+[^/*][^*]*)* comment \/\*[^*]*\*+([^/*][^*]*\*+)*\/
+       *
+       *
+       * "comments can not nest" just close at first occurrence of comment
+       * close and let the grammar level handle reporting
+       */
+
+    builder.type = Type.COMMENT;
+
+    reader.next(); // '*'
+
+    while (true)
+    {
+      Mark mark = reader.mark();
+      int ch = reader.next();
+      if (ch == -1)
+      {
+        builder.error(SCANNER_PREMATURE_EOF, reader);
+        reader.unread(ch, mark);
+        break;
+      }
+      else if (ch == '*' && reader.peek() == '/')
+      {
+        reader.next();
+        break;
+      }
+      else
+      {
+        builder.append(ch);
+      }
+    }
+
+    if (debug && builder.errors.size() < 1)
+    {
+      checkState('/' == reader.curChar && '*' == reader.prevChar);
+    }
+
+  }
+
+  private void _cdo() throws
+      IOException
+  {
+    if (debug)
+    {
+      checkState('<' == reader.curChar);
+    }
+    builder.type = Type.CDO;
+    builder.append("<!--");
+    reader.forward(3);
+
+    if (debug)
+    {
+      checkState('-' == reader.curChar && '-' == reader.prevChar);
+    }
+  }
+
+  private void _num() throws
+      IOException,
+      CssException
+  {
+
+    /*
+       * NUM [0-9]+|[0-9]*\.[0-9]+
+       */
+
+    if (debug)
+    {
+      checkState(NUMSTART.matches(cur));
+    }
+
+    builder.type = Type.INTEGER;
+    builder.append(cur);
+    if (cur == '.')
+    {
+      builder.type = Type.NUMBER;
+    }
+
+    while (true)
+    {
+      Mark mark = reader.mark();
+      int nm = reader.next();
+      if (nm == -1)
+      {
+        if (builder.getLength() == 1 && builder.getLast() == '.')
+        {
+          builder.type = Type.CHAR;
+        }
+        reader.unread(nm, mark);
+        break;
+      }
+      else if (!NUM.matches((char) nm))
+      {
+        reader.unread(nm, mark);
+        break;
+      }
+      else if (nm == '.' && !NUMEND.matches((char) reader.peek()))
+      {
+        reader.unread(nm, mark);
+        break;
+      }
+      builder.append(nm);
+
+      if (nm == '.')
+      {
+        builder.type = Type.NUMBER;
+      }
+    }
+
+    int qnt = reader.peek();
+    if (qnt > -1 && (QNTSTART.matches((char) qnt)) || isNextEscape())
+    {
+      // this num is the start of a quantity literal
+      _quantity();
+    }
+  }
+
+  /**
+   * With incoming builder containing a valid NUMBER, and next char being a
+   * valid QNTSTART, modify the type and append to the builder
+   */
+  private void _quantity() throws
+      IOException,
+      CssException
+  {
+
+    if (debug)
+    {
+      int ch = reader.peek();
+      checkState(QNTSTART.matches((char) ch) || isNextEscape());
+      checkState(builder.getLength() > 0
+          && NUM.matches(builder.getLast()));
+    }
+
+    /*
+       * Assume we have a {num}{ident} instance (DIMEN), and then override
+       * that if a specific quantity literal is found.
+       */
+    builder.type = Type.QNTY_DIMEN;
+    TokenBuilder suffix = new TokenBuilder(reader, errHandler);
+    append(QNTSTART, suffix);
+    if (suffix.getLast() != '%')
+    { // QNTSTART = NMSTART | '%'
+      append(NMCHAR, suffix);
+    }
+
+    if (suffix.getLength() > QNT_TOKEN_MAXLENGTH)
+    {
+      // longer than max length in quantities map
+      builder.append(suffix.toString());
+      return;
+    }
+
+    // shorter or equal to max length in quantities map
+    // we might have a more specific match
+    final int[] ident = suffix.toArray();
+    int[] match = null;
+
+    for (int[] test : quantities.keySet())
+    {
+      if (equals(ident, test, true))
+      {
+        builder.type = quantities.get(test);
+        match = test;
+        break;
+      }
+    }
+
+    if (builder.type == Type.QNTY_DIMEN)
+    {
+      builder.append(ident);
+    }
+    else
+    {
+      if (debug)
+      {
+        checkState(match != null);
+      }
+      builder.append(match);
+    }
+
+  }
+
+  private void _and() throws
+      IOException
+  {
+    /*
+       * Need to run this before IDENT since the token alse matches IDENT
+       * Whitespace as terminator required: see prose under example XX in MQ
+       * spec
+       */
+    if (debug)
+    {
+      checkArgument('A' == reader.curChar || 'a' == reader.curChar);
+    }
+
+    builder.type = Type.AND;
+    builder.append("and");
+    reader.forward(2);
+
+    if (debug)
+    {
+      checkArgument(('d' == reader.curChar || 'D' == reader.curChar)
+          && (reader.peek() == -1 || WHITESPACE.matches((char) reader
+          .peek())));
+    }
+  }
+
+  private void _not() throws
+      IOException
+  {
+    /*
+       * Need to run this before IDENT since the token also matches IDENT
+       * Whitespace as terminator required: see prose under example XX in MQ
+       * spec
+       */
+
+    if (debug)
+    {
+      checkArgument('N' == reader.curChar || 'n' == reader.curChar);
+    }
+
+    builder.type = Type.NOT;
+    builder.append("not");
+    reader.forward(2);
+
+    if (debug)
+    {
+      checkArgument(('t' == reader.curChar || 'T' == reader.curChar)
+          && (reader.peek() == -1 || WHITESPACE.matches((char) reader
+          .peek())));
+    }
+  }
+
+  private void _only() throws
+      IOException
+  {
+    /*
+       * Need to run this before IDENT since the token else matches IDENT
+       * Whitespace as terminator required: see prose under example XX in MQ
+       * spec
+       */
+    if (debug)
+    {
+      checkArgument('o' == reader.curChar || 'O' == reader.curChar);
+    }
+
+    builder.type = Type.ONLY;
+    builder.append("only");
+    reader.forward(3);
+
+    if (debug)
+    {
+      checkArgument(('y' == reader.curChar || 'Y' == reader.curChar)
+          && (reader.peek() == -1 || WHITESPACE.matches((char) reader
+          .peek())));
+    }
+  }
+
+  private void _cdc() throws
+      IOException
+  {
+    /*
+       * Need to run this before IDENT since the first two chars match IDENT.
+       */
+
+    if (debug)
+    {
+      checkArgument('-' == reader.curChar);
+    }
+
+    builder.type = Type.CDC;
+    builder.append("-->");
+    reader.forward(2);
+
+    if (debug)
+    {
+      checkArgument('>' == reader.curChar && '-' == reader.prevChar);
+    }
+  }
+
+  /**
+   * Whitespace w ::= wc wc ::= #x9 | #xA | #xC | #xD | #x20
+   */
+  private void _ws() throws
+      IOException
+  {
+    builder.type = Type.S;
+    // no need to preserve exact whitespace
+    // but append an S char to keep the token
+    // contract of always having a value
+    builder.append(' ');
+    reader.forward(NOT_WHITESPACE);
+
+    if (debug)
+    {
+      int nxt = reader.peek();
+      checkArgument(WHITESPACE.matches((char) reader.curChar));
+      if (nxt > -1)
+      {
+        checkArgument(NOT_WHITESPACE.matches((char) nxt));
+      }
+    }
+  }
+
+  private static final int QNT_TOKEN_MAXLENGTH = 4; // update when adding more
+  // to map
+  private static final Map<int[], Type> quantities = new ImmutableMap.Builder<int[], Type>()
+      .put(new int[]{'d', 'p', 'c', 'm'}, Type.QNTY_RESOLUTION)
+      .put(new int[]{'d', 'p', 'p', 'x'}, Type.QNTY_RESOLUTION)
+      .put(new int[]{'g', 'r', 'a', 'd'}, Type.QNTY_ANGLE)
+      .put(new int[]{'t', 'u', 'r', 'n'}, Type.QNTY_ANGLE)
+      .put(new int[]{'v', 'm', 'i', 'n'}, Type.QNTY_LENGTH)
+      .put(new int[]{'d', 'e', 'g'}, Type.QNTY_ANGLE)
+      .put(new int[]{'k', 'h', 'z'}, Type.QNTY_FREQ)
+      .put(new int[]{'r', 'a', 'd'}, Type.QNTY_ANGLE)
+      .put(new int[]{'r', 'e', 'm'}, Type.QNTY_REMS)
+      .put(new int[]{'d', 'p', 'i'}, Type.QNTY_RESOLUTION)
+      .put(new int[]{'e', 'm'}, Type.QNTY_EMS)
+      .put(new int[]{'c', 'm'}, Type.QNTY_LENGTH)
+      .put(new int[]{'p', 'x'}, Type.QNTY_LENGTH)
+      .put(new int[]{'m', 'm'}, Type.QNTY_LENGTH)
+      .put(new int[]{'i', 'n'}, Type.QNTY_LENGTH)
+      .put(new int[]{'p', 't'}, Type.QNTY_LENGTH)
+      .put(new int[]{'p', 'c'}, Type.QNTY_LENGTH)
+      .put(new int[]{'c', 'h'}, Type.QNTY_LENGTH)
+      .put(new int[]{'v', 'w'}, Type.QNTY_LENGTH)
+      .put(new int[]{'v', 'h'}, Type.QNTY_LENGTH)
+      .put(new int[]{'e', 'x'}, Type.QNTY_EXS)
+      .put(new int[]{'m', 's'}, Type.QNTY_TIME)
+      .put(new int[]{'h', 'z'}, Type.QNTY_FREQ)
+      .put(new int[]{'%'}, Type.QNTY_PERCENTAGE)
+      .put(new int[]{'s'}, Type.QNTY_TIME).build();
+
+  /**
+   * Builds a UNICODE_RANGE token.
+   */
+  private void _urange() throws
+      IOException,
+      CssException
+  {
+    if (debug)
+    {
+      checkArgument((reader.curChar == 'U' || reader.curChar == 'u')
+          && reader.peek() == '+');
+    }
+
+    builder.type = Type.URANGE;
+    reader.next(); // '+'
+
+    List<Integer> cbuf = Lists.newArrayList();
+
+    int count = 0;
+
+    while (true)
+    {
+      Mark mark = reader.mark();
+      int ch = reader.next();
+
+      if (ch == -1)
+      {
+        reader.unread(ch, mark);
+        break;
+      }
+
+      if (URANGECHAR.matches((char) ch))
+      {
+        count = ch == '-' ? 0 : count + 1;
+        if (count == 7)
+        {
+          builder.error(CssErrorCode.SCANNER_ILLEGAL_URANGE, reader,
+              "U+" + toString(cbuf) + (char) ch);
+        }
+        cbuf.add(ch);
+      }
+      else
+      {
+        reader.unread(ch, mark);
+        break;
+      }
+    }
+    builder.append("U+");
+    builder.append(Ints.toArray(cbuf));
+  }
+
+  /**
+   * Returns true if reader next() is the start of a valid escape sequence.
+   *
+   * @return whether or not the reader is at the start of a valid escape sequence.
+   * @throws IOException
+   */
+  private boolean isNextEscape() throws
+      IOException
+  {
+    boolean result = false;
+    Mark mark = reader.mark();
+    int ch = reader.next();
+    if (ch == '\\')
+    {
+      try
+      {
+        Optional<CssEscape> esc = new CssEscape(reader, builder)
+            .create();
+        result = esc.isPresent();
+      }
+      catch (CssException ignore)
+      {
+
+      }
+    }
+    reader.unread(ch, mark);
+    return result;
+  }
+
+  /**
+   * Parse forward and append to the TokenBuilder field all characters that
+   * match matcher, or until the next character is EOF. Escapes are included
+   * verbatim if they don't match matcher, else literal.
+   *
+   * @throws IOException
+   * @throws CssException
+   */
+  private void append(CharMatcher matcher) throws
+      IOException,
+      CssException
+  {
+    append(matcher, builder);
+  }
+
+  /**
+   * Parse forward and append to the supplied builder all characters that
+   * match matcher, or until the next character is EOF. Escapes are included
+   * verbatim if they don't match matcher, else literal.
+   */
+  private void append(CharMatcher matcher, TokenBuilder builder)
+      throws
+      IOException,
+      CssException
+  {
+    while (true)
+    {
+      Mark mark = reader.mark();
+      int ch = reader.next();
+      if (ch > -1 && matcher.matches((char) ch))
+      {
+        builder.append(ch);
+      }
+      else if (ch == '\\')
+      {
+        Optional<CssEscape> escape = new CssEscape(reader, builder)
+            .create();
+        if (escape.isPresent())
+        {
+          reader.forward(escape.get().render(builder, matcher));
+        }
+        else
+        {
+          reader.unread(ch, mark);
+          break;
+        }
+      }
+      else
+      {
+        reader.unread(ch, mark);
+        break;
+      }
+    }
+  }
+
+  /**
+   * Check if a forward scan will equal given match string
+   *
+   * @param match       The string to match
+   * @param ignoreCase  Whether case should be ignored
+   * @param resetOnTrue Whether the reader should be reset on found match
+   * @throws IOException
+   */
+  private boolean forwardMatch(String match, boolean ignoreCase, boolean resetOnTrue)
+      throws
+      IOException
+  {
+    Mark mark = reader.mark();
+    List<Integer> cbuf = Lists.newArrayList();
+    StringBuilder builder = new StringBuilder();
+
+    boolean result = true;
+    boolean seenChar = false;
+
+    while (true)
+    {
+      cbuf.add(reader.next());
+
+      char ch = (char) reader.curChar;
+
+      if (reader.curChar == -1)
+      {
+        result = false;
+        break;
+      }
+      else if (WHITESPACE.matches(ch))
+      {
+        if (seenChar)
+        {
+          builder.append(ch);
+        }
+      }
+      else
+      {
+        if (builder.length() == 0)
+        {
+          seenChar = true;
+        }
+        builder.append(ch);
+        int index = builder.length() - 1;
+
+        if (!ignoreCase
+            && (builder.charAt(index) == match.charAt(index)))
+        {
+          result = false;
+          break;
+        }
+
+        if (ignoreCase
+            && (Ascii.toLowerCase(builder.charAt(index)) != Ascii
+            .toLowerCase(match.charAt(index))))
+        {
+          result = false;
+          break;
+        }
+      }
+
+      if (builder.length() == match.length())
+      {
+        if (!match.equalsIgnoreCase(builder.toString()))
+        {
+          result = false;
+        }
+        break;
+      }
+    }
+
+    if (!result || resetOnTrue)
+    {
+      reader.unread(cbuf, mark);
+    }
+
+    return result;
+  }
+
+  private String toString(List<Integer> ints)
+  {
+    StringBuilder builder = new StringBuilder();
+    for (int i : ints)
+    {
+      builder.append((char) i);
+    }
+    return builder.toString();
+  }
+
+  /**
+   * Like Arrays.equals, but does not return true when both are null.
+   */
+  private static boolean equals(int[] a, int[] b)
+  {
+    return equals(a, b, false);
+  }
+
+  /**
+   * Like Arrays.equals, but does not return true when both are null.
+   *
+   * @param ignoreAsciiCase If true, ascii case differences are ignored.
+   */
+  private static boolean equals(int[] a, int[] b, boolean ignoreAsciiCase)
+  {
+    if ((a == null && b == null) || a == null || b == null
+        || (a.length != b.length))
+    {
+      return false;
+    }
+
+    for (int i = 0; i < a.length; i++)
+    {
+      if (!ignoreAsciiCase)
+      {
+        if (a[i] != b[i])
+        {
+          return false;
+        }
+      }
+      else
+      {
+        if (a[i] == -1 && b[i] == -1)
+        {
+        }
+        else if (a[i] == -1 || b[i] == -1)
+        {
+          return false;
+        }
+        else if (Ascii.toLowerCase((char) a[i]) != Ascii
+            .toLowerCase((char) b[i]))
+        {
+          return false;
+        }
+      }
+    }
+    return true;
+  }
+
+  /**
+   * Return true if ch represents EOF (-1), or if it matches matcher.
+   */
+  private static boolean matchesOrEOF(final int ch, CharMatcher matcher)
+  {
+    return ch == -1 || matcher.matches((char) ch);
+  }
+
+  /**
+   * Return true if ch matches matcher, false if not or if ch represents EOF
+   * (-1).
+   */
+  private static boolean matches(final int ch, CharMatcher matcher)
+  {
+    return ch != -1 && matcher.matches((char) ch);
+  }
+
+  /**
+   * Determine whether a sequence of chars begin with a CSS newline.
+   *
+   * @param chars An array with minimum two characters
+   * @return 0 if there is no newline, else 1 or 2, representing the newline
+   *         length in characters.
+   */
+  static int isNewLine(int[] chars)
+  {
+    checkArgument(chars.length > 1);
+    // nl \n|\r\n|\r|\f
+    if (chars[0] == '\r' && chars[1] == '\n')
+    {
+      return 2;
+    }
+    else if (chars[0] == '\n' || chars[0] == '\r' || chars[0] == '\f')
+    {
+      return 1;
+    }
+    return 0;
+  }
+
+  static final CharMatcher WHITESPACE = CharMatcher.anyOf(" \t\n\r\f")
+      .precomputed();
+  private static final CharMatcher NOT_WHITESPACE = WHITESPACE.negate().precomputed();
+  static final CharMatcher QUOTES = CharMatcher.anyOf("\"'").precomputed();
+  private static final CharMatcher U = CharMatcher.anyOf("Uu").precomputed();
+  private static final CharMatcher O = CharMatcher.anyOf("Oo").precomputed();
+  private static final CharMatcher N = CharMatcher.anyOf("Nn").precomputed();
+  private static final CharMatcher A = CharMatcher.anyOf("Aa").precomputed();
+
+  /**
+   * {nmstart} excluding {escape}
+   */
+  private static final CharMatcher NMSTART = CharMatcher
+      .inRange('A', 'Z')
+      .or(CharMatcher.inRange('a', 'z').or(
+          CharMatcher.is('_').or(
+              CharMatcher.inRange('\u0080', '\uFFFF'))))
+      .precomputed();
+
+  /**
+   * {nmchar} excluding {escape}
+   */
+  private static final CharMatcher NMCHAR = NMSTART.or(
+      CharMatcher.inRange('0', '9').or(CharMatcher.is('-')))
+      .precomputed();
+
+  /**
+   * start of quantities that followed after {num} excluding {escape}
+   */
+  private static final CharMatcher QNTSTART = NMSTART.or(CharMatcher.is('%'))
+      .precomputed();
+
+  /**
+   * {num} end char cannot be period
+   */
+  private static final CharMatcher NUMEND = CharMatcher.inRange('0', '9')
+      .precomputed();
+
+  /**
+   * {num}
+   */
+  private static final CharMatcher NUM = NUMEND.or(CharMatcher.is('.'))
+      .precomputed();
+
+  private static final CharMatcher UNARY = CharMatcher.anyOf("+-")
+      .precomputed();
+
+  /**
+   * {num} start char can be unary operators
+   */
+  private static final CharMatcher NUMSTART = NUM.or(UNARY).precomputed();
+
+  static final CharMatcher HEXCHAR = CharMatcher.anyOf(
+      "AaBbCcDdEeFf0123456789").precomputed();
+
+  private static final CharMatcher URANGESTART = HEXCHAR.or(CharMatcher
+      .anyOf("?"));
+
+  private static final CharMatcher URANGECHAR = HEXCHAR.or(CharMatcher
+      .anyOf("?-"));
+
+  static final CharMatcher TERMINATOR = CharMatcher.anyOf(";}{");
+
+  /**
+   * The three last characters in the CDO token
+   */
+  private static final int[] CDO_LL = new int[]{'!', '-', '-'}; // <!--
+
+  /**
+   * The two last characters in the CDC token
+   */
+  private static final int[] CDC_LL = new int[]{'-', '>'}; // -->
+
+  /**
+   * The three last characters in the URI start token
+   */
+  private static final int[] URI_LL = new int[]{'r', 'l', '('};
+
+  /**
+   * The three last characters in the ONLY token
+   */
+  private static final int[] ONLY_LL = new int[]{'n', 'l', 'y'};
+
+  /**
+   * The three last characters in the NOT token
+   */
+  private static final int[] NOT_LL = new int[]{'o', 't'};
+
+  /**
+   * The three last characters in the AND token
+   */
+  private static final int[] AND_LL = new int[]{'n', 'd'};
+
+  /**
+   * Memoizer for escapes at forward reader positions. Owner must invoke
+   * reset() every time the reader position changes (excluding closured
+   * unreads).
+   */
+  static class CssEscapeMemoizer
+  {
+    private final Map<Integer, Optional<CssEscape>> map = Maps.newHashMap();
+    private TokenBuilder errFunnel;
+    private final CssReader reader;
+
+    CssEscapeMemoizer(final CssReader reader)
+    {
+      this.reader = reader;
+    }
+
+    CssEscapeMemoizer reset(final TokenBuilder errFunnel)
+    {
+      map.clear();
+      this.errFunnel = errFunnel;
+      return this;
+    }
+
+    Optional<CssEscape> get(final int n) throws
+        IOException
+    {
+      checkNotNull(errFunnel);
+      if (!map.containsKey(n))
+      {
+        map.put(n, create(n));
+      }
+      return map.get(n);
+    }
+
+    private Optional<CssEscape> create(int n) throws
+        IOException
+    {
+      List<Integer> cbuf = Lists.newArrayList();
+      Mark mark = reader.mark();
+
+      for (int i = 0; i < n; i++)
+      {
+        int ch = reader.next();
+        cbuf.add(ch);
+        if (ch == -1)
+        {
+          reader.unread(cbuf, mark);
+          return CssEscape.ABSENT;
+        }
+      }
+
+      if (reader.curChar == '\\')
+      {
+        try
+        {
+          Optional<CssEscape> esc = new CssEscape(reader, errFunnel)
+              .create();
+          reader.unread(cbuf, mark);
+          return esc;
+        }
+        catch (CssException ignore)
+        {
+
+        }
+      }
+      reader.unread(cbuf, mark);
+      return CssEscape.ABSENT;
+
+    }
+  }
+}
diff --git a/src/main/java/org/idpf/epubcheck/util/css/CssSource.java b/src/main/java/org/idpf/epubcheck/util/css/CssSource.java
new file mode 100644
index 0000000..ffd9d61
--- /dev/null
+++ b/src/main/java/org/idpf/epubcheck/util/css/CssSource.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2012 International Digital Publishing Forum
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+package org.idpf.epubcheck.util.css;
+
+import java.io.UnsupportedEncodingException;
+import com.google.common.base.Objects;
+
+import java.io.*;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Represents a CSS source.
+ *
+ * @author mgylling
+ */
+public class CssSource
+{
+  private final String systemID;
+  private final CssInputStream stream;
+
+  public CssSource(String systemID, InputStream input) throws
+      IOException
+  {
+    this.systemID = checkNotNull(systemID);
+    this.stream = checkNotNull(input) instanceof CssInputStream
+        ? (CssInputStream) input
+        : new CssInputStream(input);
+  }
+
+  public CssSource(String systemID, CharSequence input) throws
+      IOException
+  {
+    this.systemID = checkNotNull(systemID);
+    this.stream = new CssInputStream(new ByteArrayInputStream(input.toString().getBytes()));
+  }
+
+  public String getSystemID()
+  {
+    return systemID;
+  }
+
+  public CssInputStream getInputStream()
+  {
+    return stream;
+  }
+
+	public Reader newReader() 
+	{		
+		String enc = "utf-8";
+		if (stream.bom.isPresent()) {
+			enc = stream.bom.get();
+		} else if (stream.charset.isPresent()) {
+			enc = stream.charset.get();
+		}
+		try
+		{
+			return new BufferedReader(new InputStreamReader(stream, enc));
+		}
+		catch (UnsupportedEncodingException e) 
+		{
+		  //TODO log/errout
+          return new BufferedReader(new InputStreamReader(stream));
+	    }	
+  }
+
+  @Override
+  public String toString()
+  {
+    return Objects.toStringHelper(this).addValue(systemID).toString();
+  }
+
+  @Override
+  public boolean equals(Object obj)
+  {
+    if (obj instanceof CssSource)
+    {
+      CssSource cs = (CssSource) obj;
+      return cs.systemID.equals(this.systemID);
+    }
+    return false;
+  }
+}
diff --git a/src/main/java/org/idpf/epubcheck/util/css/CssToken.java b/src/main/java/org/idpf/epubcheck/util/css/CssToken.java
new file mode 100644
index 0000000..d95bb63
--- /dev/null
+++ b/src/main/java/org/idpf/epubcheck/util/css/CssToken.java
@@ -0,0 +1,532 @@
+/*
+ * Copyright (c) 2012 International Digital Publishing Forum
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+package org.idpf.epubcheck.util.css;
+
+import com.google.common.base.*;
+import com.google.common.collect.Lists;
+import org.idpf.epubcheck.util.css.CssExceptions.CssErrorCode;
+import org.idpf.epubcheck.util.css.CssExceptions.CssException;
+import org.idpf.epubcheck.util.css.CssExceptions.CssScannerException;
+
+import java.util.Iterator;
+import java.util.List;
+
+import static com.google.common.base.Preconditions.checkState;
+
+/**
+ * Represents a CSS token.
+ *
+ * @author mgylling
+ * @see CssTokenList
+ */
+final class CssToken
+{
+  final Type type;
+  final CssLocation location;
+  final String chars;     //for tokens with string values
+  Optional<List<CssScannerException>> errors = Optional.absent();
+
+  /**
+   * Constructor for tokens with type other than CHAR
+   */
+  CssToken(final Type type, final CssLocation location, final String chars, final List<CssScannerException> errors)
+  {
+    this.type = type;
+    this.location = location;
+    this.chars = chars;
+    if (errors != null)
+    {
+      this.errors = Optional.of(errors);
+    }
+  }
+
+  /**
+   * Constructor for CHAR tokens
+   */
+  CssToken(final Type type, final CssLocation location, final char chr, final List<CssScannerException> errors)
+  {
+    this.type = type;
+    this.location = location;
+    this.chars = String.valueOf(chr);
+    if (errors != null)
+    {
+      this.errors = Optional.of(errors);
+    }
+  }
+
+  public Type getType()
+  {
+    return type;
+  }
+
+  public CssLocation getLocation()
+  {
+    return location;
+  }
+
+  public String getChars()
+  {
+    return chars;
+  }
+
+  public char getChar()
+  {
+    checkState(chars.length() == 1);
+    return chars.charAt(0);
+  }
+
+  boolean hasErrors()
+  {
+    return errors.isPresent();
+  }
+
+  public Optional<Iterator<CssScannerException>> getErrors()
+  {
+    if (hasErrors())
+    {
+      return Optional.of(errors.get().iterator());
+    }
+    return Optional.absent();
+  }
+
+  @Override
+  public String toString()
+  {
+    return Objects.toStringHelper(this)
+        .add("type", type.name())
+        .add("value", chars)
+        .add("errors", errors.isPresent() ? Joiner.on(", ").join(errors.get()) : "none")
+        .toString();
+  }
+
+  @Override
+  public boolean equals(Object obj)
+  {
+    if (obj instanceof CssToken)
+    {
+      CssToken tk = (CssToken) obj;
+      if (tk.type.equals(this.type)
+          && tk.chars.equals(this.chars)
+          && tk.location.equals(this.location))
+      {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Token types.
+   */
+  public static enum Type
+  {
+    S,
+    COMMENT,
+    CDO,         //		<!--
+    CDC,         //		-->
+    IDENT,         // 		[-]?{nmstart}{nmchar}*
+    FUNCTION,      //		[-]?{nmstart}{nmchar}*[(]
+    ATKEYWORD,       // 		[@][-]?{nmstart}{nmchar}*
+    NUMBER,        //		[0-9]+|[0-9]*\.[0-9]+
+    INTEGER,      //		[0-9]+
+    STRING,        //
+    URI,        //		url\({w}{string}{w}\) | url\({w}([!#$%&*-\[\]-~]|{nonascii}|{escape})*{w}\)
+    HASHNAME,      //		"#"{name}
+    CLASSNAME,      //		"."{name}
+    URANGE,        //
+
+    INCLUDES,       //		"~="
+    DASHMATCH,       //		"|="
+    PREFIXMATCH,    //		"^="
+    SUFFIXMATCH,    //		"$="
+    SUBSTRINGMATCH,    //		"*="
+
+    QNTY_DIMEN,      //		{num}{ident}
+    QNTY_PERCENTAGE,  //		{num}%
+    QNTY_LENGTH,     //		{num}cm, {num}px, {num}mm, {num}in, {num}pt, {num}pc
+    QNTY_EMS,      //		{num}em
+    QNTY_EXS,      //		{num}ex
+    QNTY_ANGLE,      //		{num}deg, {num}rad, {num}grad
+    QNTY_TIME,      //		{num}ms, {num}s
+    QNTY_FREQ,      //		{num}Hz, {num}kHz
+    QNTY_RESOLUTION,  //		{num}{D}{P}{I}, {num}{D}{P}{C}{M}
+    QNTY_REMS,      //		{num}rem
+
+    ONLY,        //		MediaQueries
+    NOT,        //		MediaQueries
+    AND,        //		MediaQueries
+
+    IMPORTANT,      //		"!{w}important"
+    CHAR,          //		any other character and not ' or "
+
+    ;
+  }
+
+  /**
+   * Token predicate matchers.
+   */
+  static final class Matchers
+  {
+
+    /**
+     * Matches a CssToken.Type.CHAR with values ';' or '{'
+     */
+    static final Predicate<CssToken> MATCH_SEMI_OPENBRACE = new Predicate<CssToken>()
+    {
+      public final boolean apply(final CssToken input)
+      {
+        return input.type == CssToken.Type.CHAR
+            && (input.getChar() == ';' || input.getChar() == '{');
+      }
+    };
+
+    /**
+     * Matches a CssToken.Type.CHAR with values ';' or '}'
+     */
+    static final Predicate<CssToken> MATCH_SEMI_CLOSEBRACE = new Predicate<CssToken>()
+    {
+      public final boolean apply(final CssToken input)
+      {
+        return input.type == CssToken.Type.CHAR
+            && (input.getChar() == ';' || input.getChar() == '}');
+      }
+    };
+
+    /**
+     * Matches a CssToken.Type.CHAR with values ',' or '}'
+     */
+    static final Predicate<CssToken> MATCH_COMMA_OPENBRACE = new Predicate<CssToken>()
+    {
+      public final boolean apply(final CssToken input)
+      {
+        return input.type == CssToken.Type.CHAR
+            && (input.getChar() == ',' || input.getChar() == '{');
+      }
+    };
+
+    /**
+     * Matches a CssToken.Type.CHAR with value ':'
+     */
+    static final Predicate<CssToken> MATCH_COLON = new Predicate<CssToken>()
+    {
+      public final boolean apply(final CssToken input)
+      {
+        return input.type == CssToken.Type.CHAR
+            && (input.getChar() == ':');
+      }
+    };
+
+    /**
+     * Matches a CssToken.Type.CHAR with value '|'
+     */
+    static final Predicate<CssToken> MATCH_PIPE = new Predicate<CssToken>()
+    {
+      public final boolean apply(final CssToken input)
+      {
+        return input.type == CssToken.Type.CHAR
+            && (input.getChar() == '|');
+      }
+    };
+
+    /**
+     * Matches a CssToken.Type.CHAR with value '}'
+     */
+    static final Predicate<CssToken> MATCH_CLOSEBRACE = new Predicate<CssToken>()
+    {
+      public final boolean apply(final CssToken input)
+      {
+        return input.type == CssToken.Type.CHAR
+            && (input.getChar() == '}');
+      }
+    };
+
+    /**
+     * Matches a CssToken.Type.CHAR with value '{'
+     */
+    static final Predicate<CssToken> MATCH_OPENBRACE = new Predicate<CssToken>()
+    {
+      public final boolean apply(final CssToken input)
+      {
+        return input.type == CssToken.Type.CHAR
+            && (input.getChar() == '{');
+      }
+    };
+
+    /**
+     * Matches a CssToken.Type.CHAR with value '>', '+' or '~'. Note that S is the fourth
+     * CSS combinator which is not matched here.
+     */
+    static final Predicate<CssToken> MATCH_COMBINATOR_CHAR = new Predicate<CssToken>()
+    {
+      public final boolean apply(final CssToken input)
+      {
+        return input.type == CssToken.Type.CHAR
+            && (input.getChar() == '>'
+            || input.getChar() == '+'
+            || input.getChar() == '~');
+      }
+    };
+
+    /**
+     * Matches a CssToken.Type.CHAR with value ';'
+     */
+    static final Predicate<CssToken> MATCH_SEMI = new Predicate<CssToken>()
+    {
+      public final boolean apply(final CssToken input)
+      {
+        return input.type == CssToken.Type.CHAR
+            && (input.getChar() == ';');
+      }
+    };
+
+    /**
+     * Matches a CssToken.Type.CHAR with value ','
+     */
+    static final Predicate<CssToken> MATCH_COMMA = new Predicate<CssToken>()
+    {
+      public final boolean apply(final CssToken input)
+      {
+        return input.type == CssToken.Type.CHAR
+            && (input.getChar() == ',');
+      }
+    };
+
+    /**
+     * Matches a CssToken.Type.CHAR with value ')'
+     */
+    static final Predicate<CssToken> MATCH_CLOSEPAREN = new Predicate<CssToken>()
+    {
+      public final boolean apply(final CssToken input)
+      {
+        return input.type == CssToken.Type.CHAR
+            && (input.getChar() == ')');
+      }
+    };
+
+    /**
+     * Matches a CssToken.Type.CHAR with value '('
+     */
+    static final Predicate<CssToken> MATCH_OPENPAREN = new Predicate<CssToken>()
+    {
+      public final boolean apply(final CssToken input)
+      {
+        return input.type == CssToken.Type.CHAR
+            && (input.getChar() == '(');
+      }
+    };
+
+    /**
+     * Matches a CssToken.Type.CHAR with value '*' or '|'
+     */
+    static final Predicate<CssToken> MATCH_STAR_PIPE = new Predicate<CssToken>()
+    {
+      public final boolean apply(final CssToken input)
+      {
+        return input.type == CssToken.Type.CHAR
+            && (input.getChar() == '*' || input.getChar() == '|');
+      }
+    };
+
+    /**
+     * Matches a CssToken.Type.CHAR with value '*'
+     */
+    static final Predicate<CssToken> MATCH_STAR = new Predicate<CssToken>()
+    {
+      public final boolean apply(final CssToken input)
+      {
+        return input.type == CssToken.Type.CHAR
+            && (input.getChar() == '*');
+      }
+    };
+
+    /**
+     * Matches a CssToken.Type.CHAR with value '['
+     */
+    static final Predicate<CssToken> MATCH_OPENSQUAREBRACKET = new Predicate<CssToken>()
+    {
+      public final boolean apply(final CssToken input)
+      {
+        return input.type == CssToken.Type.CHAR
+            && (input.getChar() == '[');
+      }
+    };
+
+    /**
+     * Matches a CssToken.Type.CHAR with value ']'
+     */
+    static final Predicate<CssToken> MATCH_CLOSESQUAREBRACKET = new Predicate<CssToken>()
+    {
+      public final boolean apply(final CssToken input)
+      {
+        return input.type == CssToken.Type.CHAR
+            && (input.getChar() == ']');
+      }
+    };
+
+    /**
+     * Matches CssToken.Type.IDENT and CssToken.Type.STRING
+     */
+    static final Predicate<CssToken> MATCH_STRING_IDENT = new Predicate<CssToken>()
+    {
+      public final boolean apply(final CssToken input)
+      {
+        return input.type == CssToken.Type.IDENT || input.type == CssToken.Type.STRING;
+
+      }
+    };
+
+    static final Predicate<CssToken> MATCH_ATTRIBUTE_SELECTOR_MATCHERS = new Predicate<CssToken>()
+    {
+      public final boolean apply(final CssToken input)
+      {
+        return (input.type == CssToken.Type.CHAR
+            && input.getChar() == '=')
+            || input.type == CssToken.Type.INCLUDES
+            || input.type == CssToken.Type.DASHMATCH
+            || input.type == CssToken.Type.PREFIXMATCH
+            || input.type == CssToken.Type.SUFFIXMATCH
+            || input.type == CssToken.Type.SUBSTRINGMATCH;
+
+      }
+    };
+  }
+
+  static class TokenBuilder
+  {
+    Type type;
+    final int line;
+    final int col;
+    final int offset;
+    final String systemID;
+    private final StringBuilder chars;
+    final List<CssScannerException> errors;
+    private final boolean debug = false;
+    private final CssErrorHandler errorListener;
+
+    TokenBuilder(final String systemID, final int line, final int col, final int offset, final CssErrorHandler errorListener)
+    {
+      this.systemID = systemID;
+      this.line = line;
+      this.col = col;
+      this.offset = offset;
+      this.chars = new StringBuilder();
+      this.errors = Lists.newArrayList();
+      this.errorListener = errorListener;
+    }
+
+    TokenBuilder(final CssReader reader, final CssErrorHandler errorListener)
+    {
+      this(reader.systemID, reader.line, reader.col, reader.offset, errorListener);
+    }
+
+    TokenBuilder append(int ch)
+    {
+      chars.append((char) ch);
+      return this;
+    }
+
+    TokenBuilder append(CharSequence str)
+    {
+      chars.append(str);
+      return this;
+    }
+
+    int getLength()
+    {
+      return chars.length();
+    }
+
+    char getLast()
+    {
+      return chars.charAt(chars.length() - 1);
+    }
+
+    TokenBuilder append(int[] chrs)
+    {
+      for (int chr : chrs)
+      {
+        append(chr);
+      }
+      return this;
+    }
+
+    /**
+     * All lexer-time errors are funnelled through this method. Reported errors are stored in
+     * the resulting CssToken. This method also passes the error on to a CssErrorHandler,
+     * which can opt to rethrow to terminate the scanning.
+     */
+    void error(CssErrorCode errorCode, CssReader reader, Object... arguments) throws
+        CssException
+    {
+      CssScannerException cse = new CssScannerException(errorCode, CssLocation.create(reader), arguments);
+      errors.add(cse);
+      errorListener.error(cse);
+    }
+
+    CssToken asToken()
+    {
+      String value = chars.toString();
+      if (debug)
+      {
+        checkState(type != null);
+        if (type == Type.STRING || type == Type.COMMENT)
+        {
+          // empty STRING and COMMENT tokens are not forbidden
+          checkState(value != null);
+        }
+        else
+        {
+          checkState(!Strings.isNullOrEmpty(value));
+        }
+      }
+      return new CssToken(type, new CssLocation(line, col, offset, systemID), value, errors);
+    }
+
+    /**
+     * Return the chars appended so far to this builder.
+     */
+    int[] toArray()
+    {
+      int[] arr = new int[chars.length()];
+      for (int i = 0; i < chars.length(); i++)
+      {
+        arr[i] = chars.charAt(i);
+      }
+      return arr;
+    }
+
+    /**
+     * Return the chars appended so far to this builder.
+     */
+    @Override
+    public String toString()
+    {
+      return chars.toString();
+    }
+
+  }
+
+  interface CssTokenConsumer
+  {
+    public void add(CssToken token);
+  }
+}
diff --git a/src/main/java/org/idpf/epubcheck/util/css/CssTokenList.java b/src/main/java/org/idpf/epubcheck/util/css/CssTokenList.java
new file mode 100644
index 0000000..ddaf843
--- /dev/null
+++ b/src/main/java/org/idpf/epubcheck/util/css/CssTokenList.java
@@ -0,0 +1,225 @@
+/*
+ * Copyright (c) 2012 International Digital Publishing Forum
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+package org.idpf.epubcheck.util.css;
+
+import com.google.common.base.Predicate;
+import org.idpf.epubcheck.util.css.CssToken.Type;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+final class CssTokenList extends ArrayList<CssToken>
+{
+
+  public CssTokenList()
+  {
+    this(2048);
+  }
+
+  private CssTokenList(int initSize)
+  {
+    super(initSize);
+  }
+
+  CssTokenIterator iterator(final Predicate<CssToken> filter)
+  {
+    return new CssTokenIterator(filter, this);
+  }
+
+  class CssTokenIterator
+  {
+
+    private final Predicate<CssToken> filter;
+    final List<CssToken> list;
+    int next; // index of next element to return
+    int lastRet = -1; // index of last element returned
+    CssToken last = null; // last token returned
+
+    /**
+     * Constructor.
+     *
+     * @param filter A filter Predicate that is applied to all tokens unless
+     *               another Predicate is passed using #next(Predicate)
+     */
+    CssTokenIterator(final Predicate<CssToken> filter, List<CssToken> list)
+    {
+      this.filter = checkNotNull(filter);
+      this.list = list;
+    }
+
+    /**
+     * Get the next token in the token list. This method uses the
+     * constructor filter.
+     */
+    CssToken next()
+    {
+      return next(filter);
+    }
+
+    /**
+     * Get the next token in the token list that matches the given filter,
+     * or NoSuchElementException if no more tokens exist.
+     */
+    CssToken next(final Predicate<CssToken> filter)
+    {
+      while (true)
+      {
+        int i = next;
+        if (i >= size())
+        {
+          throw new NoSuchElementException();
+        }
+        next = i + 1;
+        CssToken tk = get(lastRet = i);
+        if (filter.apply(tk))
+        {
+          last = tk;
+          return tk;
+        }
+      }
+    }
+
+    /**
+     * Using the constructor filter.
+     */
+    boolean hasNext()
+    {
+      return hasNext(filter);
+    }
+
+    /**
+     * Using the supplied filter.
+     */
+    boolean hasNext(final Predicate<CssToken> filter)
+    {
+      int i = next;
+      while (true)
+      {
+        if (i == size())
+        {
+          return false;
+        }
+        if (filter.apply(get(i)))
+        {
+          return true;
+        }
+        i++;
+      }
+    }
+
+    /**
+     * Get the next token without advancing the iterators position.
+     */
+    public CssToken peek()
+    {
+      return peek(filter);
+    }
+
+    /**
+     * Get the next token without advancing the iterators position.
+     */
+    public CssToken peek(Predicate<CssToken> filter)
+    {
+      int _next = next;
+      int _lastRet = lastRet;
+      CssToken _last = last;
+      if (hasNext(filter))
+      {
+        CssToken tk = next(filter);
+        next = _next;
+        lastRet = _lastRet;
+        last = _last;
+        return tk;
+      }
+      throw new NoSuchElementException();
+    }
+
+    /**
+     * Get the list index of the last element returned prior to filtering,
+     * or -1 if no element has yet been returned.
+     */
+    int index()
+    {
+      return lastRet;
+    }
+
+    /**
+     * Get the filter that is currently being used for invocations of next()
+     * and hasNext()
+     */
+    Predicate<CssToken> filter()
+    {
+      return filter;
+    }
+
+  }
+
+  static final class Filters
+  {
+
+    /**
+     * A filter that filters whitespace and comments
+     */
+    static final Predicate<CssToken> FILTER_S_CMNT = new Predicate<CssToken>()
+    {
+      public boolean apply(final CssToken input)
+      {
+        return !(input.type == Type.S || input.type == Type.COMMENT);
+      }
+    };
+
+    /**
+     * A filter that filters whitespace, comments, CDO and CDC
+     */
+    static final Predicate<CssToken> FILTER_S_CMNT_CDO_CDC = new Predicate<CssToken>()
+    {
+      public boolean apply(final CssToken input)
+      {
+        return !(input.type == Type.S || input.type == Type.COMMENT
+            || input.type == Type.CDO || input.type == Type.CDC);
+      }
+    };
+
+    /**
+     * A filter that filters nothing.
+     */
+    static final Predicate<CssToken> FILTER_NONE = new Predicate<CssToken>()
+    {
+      public boolean apply(final CssToken input)
+      {
+        return true;
+      }
+    };
+
+  }
+
+  static final class PrematureEOFException extends RuntimeException
+  {
+    private static final long serialVersionUID = 343701466381708884L;
+  }
+
+  private static final long serialVersionUID = 924068097174100851L;
+
+}
diff --git a/src/main/java/org/idpf/epubcheck/util/css/Messages.java b/src/main/java/org/idpf/epubcheck/util/css/Messages.java
new file mode 100644
index 0000000..b28db41
--- /dev/null
+++ b/src/main/java/org/idpf/epubcheck/util/css/Messages.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2012 International Digital Publishing Forum
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+package org.idpf.epubcheck.util.css;
+
+import com.google.common.base.Charsets;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.net.URLConnection;
+import java.text.MessageFormat;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.PropertyResourceBundle;
+import java.util.ResourceBundle;
+import java.util.ResourceBundle.Control;
+
+final class Messages
+{
+  private static final String BUNDLE_NAME = "org.idpf.epubcheck.util.css.messages"; //$NON-NLS-1$
+  private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME, Locale.getDefault(), new UTF8Control());
+
+  static String get(String key)
+  {
+    try
+    {
+      return RESOURCE_BUNDLE.getString(key);
+    }
+    catch (MissingResourceException e)
+    {
+      return key;
+    }
+  }
+
+  static String get(String key, Object... arguments)
+  {
+    try
+    {
+      return MessageFormat.format(RESOURCE_BUNDLE.getString(key), arguments);
+    }
+    catch (MissingResourceException e)
+    {
+      return key;
+    }
+  }
+
+  private static class UTF8Control extends Control
+  {
+    public ResourceBundle newBundle
+        (String baseName, Locale locale, String format, ClassLoader loader, boolean reload)
+        throws
+        IllegalAccessException,
+        InstantiationException,
+        IOException
+    {
+      // The below is a copy of the default implementation.
+      String bundleName = toBundleName(baseName, locale);
+      String resourceName = toResourceName(bundleName, "properties"); //$NON-NLS-1$
+      ResourceBundle bundle = null;
+      InputStream stream = null;
+      if (reload)
+      {
+        URL url = loader.getResource(resourceName);
+        if (url != null)
+        {
+          URLConnection connection = url.openConnection();
+          if (connection != null)
+          {
+            connection.setUseCaches(false);
+            stream = connection.getInputStream();
+          }
+        }
+      }
+      else
+      {
+        stream = loader.getResourceAsStream(resourceName);
+      }
+      if (stream != null)
+      {
+        try
+        {
+          // Only this line is changed to make it to read properties files as UTF-8.
+          bundle = new PropertyResourceBundle(
+              new BufferedReader(
+                  new InputStreamReader(stream, Charsets.UTF_8)));
+        }
+        finally
+        {
+          stream.close();
+        }
+      }
+      return bundle;
+    }
+  }
+
+  private Messages()
+  {
+  }
+}
diff --git a/src/main/java/org/idpf/epubcheck/util/saxon/ColumnNumberFunction.java b/src/main/java/org/idpf/epubcheck/util/saxon/ColumnNumberFunction.java
new file mode 100644
index 0000000..dd65277
--- /dev/null
+++ b/src/main/java/org/idpf/epubcheck/util/saxon/ColumnNumberFunction.java
@@ -0,0 +1,79 @@
+package org.idpf.epubcheck.util.saxon;
+
+import net.sf.saxon.expr.XPathContext;
+import net.sf.saxon.lib.ExtensionFunctionCall;
+import net.sf.saxon.lib.ExtensionFunctionDefinition;
+import net.sf.saxon.om.NodeInfo;
+import net.sf.saxon.om.Sequence;
+import net.sf.saxon.om.StructuredQName;
+import net.sf.saxon.trans.XPathException;
+import net.sf.saxon.value.Int64Value;
+import net.sf.saxon.value.SequenceType;
+
+public class ColumnNumberFunction extends ExtensionFunctionDefinition
+{
+
+  private static final long serialVersionUID = -4202710868367933385L;
+
+  public static StructuredQName QNAME = new StructuredQName("saxon", "http://saxon.sf.net/", "column-number");
+
+  @Override
+  public StructuredQName getFunctionQName()
+  {
+    return QNAME;
+  }
+
+  @Override
+  public int getMaximumNumberOfArguments()
+  {
+    return 1;
+  }
+
+  @Override
+  public int getMinimumNumberOfArguments()
+  {
+    return 0;
+  }
+
+  @Override
+  public SequenceType[] getArgumentTypes()
+  {
+    return new SequenceType[]{SequenceType.SINGLE_NODE};
+  }
+
+  @Override
+  public SequenceType getResultType(SequenceType[] suppliedArgumentTypes)
+  {
+    return SequenceType.SINGLE_INTEGER;
+  }
+
+  @Override
+  public boolean dependsOnFocus()
+  {
+    return true;
+  }
+
+  @Override
+  public boolean trustResultType()
+  {
+    return true;
+  }
+
+  @Override
+  public ExtensionFunctionCall makeCallExpression()
+  {
+    return new ExtensionFunctionCall()
+    {
+      private static final long serialVersionUID = -4202710868367933385L;
+
+      public Sequence call(XPathContext context, @SuppressWarnings("rawtypes") Sequence[] arguments) throws XPathException
+      {
+        if (context.getContextItem() instanceof NodeInfo)
+        {
+          return new Int64ValueSequence(new Int64Value(((NodeInfo) context.getContextItem()).getColumnNumber()));
+        }
+        throw new XPathException("Unexpected XPath context for saxon:column-number");
+      }
+    };
+  }
+}
diff --git a/src/main/java/org/idpf/epubcheck/util/saxon/Int64ValueSequence.java b/src/main/java/org/idpf/epubcheck/util/saxon/Int64ValueSequence.java
new file mode 100644
index 0000000..aab0448
--- /dev/null
+++ b/src/main/java/org/idpf/epubcheck/util/saxon/Int64ValueSequence.java
@@ -0,0 +1,29 @@
+package org.idpf.epubcheck.util.saxon;
+
+import net.sf.saxon.om.Item;
+import net.sf.saxon.om.Sequence;
+import net.sf.saxon.om.SequenceIterator;
+import net.sf.saxon.trans.XPathException;
+import net.sf.saxon.value.Int64Value;
+
+class Int64ValueSequence implements Sequence
+{
+  private Int64Value item;
+
+  public Int64ValueSequence(Int64Value item)
+  {
+    this.item = item;
+  }
+
+  public Item head()
+  {
+    return item;
+  }
+
+  @Override
+  public SequenceIterator<? extends Item> iterate() throws
+      XPathException
+  {
+    return item.iterate();
+  }
+}
diff --git a/src/main/java/org/idpf/epubcheck/util/saxon/LineNumberFunction.java b/src/main/java/org/idpf/epubcheck/util/saxon/LineNumberFunction.java
new file mode 100644
index 0000000..9e7e82f
--- /dev/null
+++ b/src/main/java/org/idpf/epubcheck/util/saxon/LineNumberFunction.java
@@ -0,0 +1,80 @@
+package org.idpf.epubcheck.util.saxon;
+
+import net.sf.saxon.expr.XPathContext;
+import net.sf.saxon.lib.ExtensionFunctionCall;
+import net.sf.saxon.lib.ExtensionFunctionDefinition;
+import net.sf.saxon.om.NodeInfo;
+import net.sf.saxon.om.Sequence;
+import net.sf.saxon.om.StructuredQName;
+import net.sf.saxon.trans.XPathException;
+import net.sf.saxon.value.Int64Value;
+import net.sf.saxon.value.SequenceType;
+
+public class LineNumberFunction extends ExtensionFunctionDefinition
+{
+
+  private static final long serialVersionUID = -4202710868367933385L;
+
+  public static StructuredQName QNAME = new StructuredQName("saxon", "http://saxon.sf.net/", "line-number");
+
+  @Override
+  public StructuredQName getFunctionQName()
+  {
+    return QNAME;
+  }
+
+  @Override
+  public int getMaximumNumberOfArguments()
+  {
+    return 1;
+  }
+
+  @Override
+  public int getMinimumNumberOfArguments()
+  {
+    return 0;
+  }
+
+  @Override
+  public SequenceType[] getArgumentTypes()
+  {
+    return new SequenceType[]{SequenceType.SINGLE_NODE};
+  }
+
+  @Override
+  public SequenceType getResultType(SequenceType[] suppliedArgumentTypes)
+  {
+    return SequenceType.SINGLE_INTEGER;
+  }
+
+  @Override
+  public boolean dependsOnFocus()
+  {
+    return true;
+  }
+
+  @Override
+  public boolean trustResultType()
+  {
+    return true;
+  }
+
+  @Override
+  public ExtensionFunctionCall makeCallExpression()
+  {
+    return new ExtensionFunctionCall()
+    {
+
+      private static final long serialVersionUID = -4202710868367933385L;
+
+      public Sequence call(XPathContext context, @SuppressWarnings("rawtypes") Sequence[] arguments) throws XPathException
+      {
+        if (context.getContextItem() instanceof NodeInfo)
+        {
+          return new Int64ValueSequence(new Int64Value(((NodeInfo) context.getContextItem()).getLineNumber()));
+        }
+        throw new XPathException("Unexpected XPath context for saxon:line-number");
+      }
+    };
+  }
+}
diff --git a/src/main/java/org/idpf/epubcheck/util/saxon/SystemIdFunction.java b/src/main/java/org/idpf/epubcheck/util/saxon/SystemIdFunction.java
new file mode 100644
index 0000000..68412da
--- /dev/null
+++ b/src/main/java/org/idpf/epubcheck/util/saxon/SystemIdFunction.java
@@ -0,0 +1,103 @@
+package org.idpf.epubcheck.util.saxon;
+
+import net.sf.saxon.expr.XPathContext;
+import net.sf.saxon.lib.ExtensionFunctionCall;
+import net.sf.saxon.lib.ExtensionFunctionDefinition;
+import net.sf.saxon.om.Item;
+import net.sf.saxon.om.NodeInfo;
+import net.sf.saxon.om.SequenceIterator;
+import net.sf.saxon.om.Sequence;
+import net.sf.saxon.om.StructuredQName;
+import net.sf.saxon.trans.XPathException;
+import net.sf.saxon.value.AnyURIValue;
+import net.sf.saxon.value.SequenceType;
+
+public class SystemIdFunction extends ExtensionFunctionDefinition
+{
+
+  private static final long serialVersionUID = -4202710868367933385L;
+
+  public static StructuredQName QNAME = new StructuredQName("saxon", "http://saxon.sf.net/", "system-id");
+
+  @Override
+  public StructuredQName getFunctionQName()
+  {
+    return QNAME;
+  }
+
+  @Override
+  public int getMaximumNumberOfArguments()
+  {
+    return 0;
+  }
+
+  @Override
+  public int getMinimumNumberOfArguments()
+  {
+    return 0;
+  }
+
+  @Override
+  public SequenceType[] getArgumentTypes()
+  {
+    return new SequenceType[]{};
+  }
+
+  @Override
+  public SequenceType getResultType(SequenceType[] suppliedArgumentTypes)
+  {
+    return SequenceType.SINGLE_STRING;
+  }
+
+  @Override
+  public boolean dependsOnFocus()
+  {
+    return true;
+  }
+
+  @Override
+  public boolean trustResultType()
+  {
+    return true;
+  }
+
+  @Override
+  public ExtensionFunctionCall makeCallExpression()
+  {
+    return new ExtensionFunctionCall()
+    {
+      private static final long serialVersionUID = -4202710868367933385L;
+
+      public Sequence call(XPathContext context, @SuppressWarnings("rawtypes") Sequence[] arguments) throws XPathException
+      {
+        if (context.getContextItem() instanceof NodeInfo)
+        {
+          return new SystemIdSequence(new AnyURIValue(((NodeInfo) context.getContextItem()).getSystemId()));
+        }
+        throw new XPathException("Unexpected XPath context for saxon:line-number");
+      }
+    };
+  }
+
+  class SystemIdSequence implements Sequence
+  {
+    private AnyURIValue item;
+
+    public SystemIdSequence(AnyURIValue item)
+    {
+      this.item = item;
+    }
+
+    public Item head()
+    {
+      return item;
+    }
+
+    @Override
+    public SequenceIterator<? extends Item> iterate() throws
+        XPathException
+    {
+      return item.iterate();
+    }
+  }
+}
diff --git a/src/main/licenses/Apache-2.0.txt b/src/main/licenses/Apache-2.0.txt
new file mode 100644
index 0000000..f474855
--- /dev/null
+++ b/src/main/licenses/Apache-2.0.txt
@@ -0,0 +1,201 @@
+   Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
\ No newline at end of file
diff --git a/src/main/licenses/BSD-3-Clause.txt b/src/main/licenses/BSD-3-Clause.txt
new file mode 100644
index 0000000..7504854
--- /dev/null
+++ b/src/main/licenses/BSD-3-Clause.txt
@@ -0,0 +1,27 @@
+Copyright (c) {{YEAR}}, {{OWNER}} 
+All rights reserved. 
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice, this
+list of conditions and the following disclaimer.
+
+Redistributions in binary form must reproduce the above copyright notice, this
+list of conditions and the following disclaimer in the documentation and/or
+other materials provided with the distribution.
+
+Neither the name of {{the ORGANIZATION nor the names of its contributors}} may
+be used to endorse or promote products derived from this software without
+specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY {{THE COPYRIGHT HOLDERS AND CONTRIBUTORS}} "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL {{THE COPYRIGHT HOLDER OR CONTRIBUTORS}} BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
diff --git a/src/main/licenses/MPL-1.0.txt b/src/main/licenses/MPL-1.0.txt
new file mode 100644
index 0000000..21b0818
--- /dev/null
+++ b/src/main/licenses/MPL-1.0.txt
@@ -0,0 +1,360 @@
+                           MOZILLA PUBLIC LICENSE
+                                Version 1.0
+
+                              ----------------
+
+1. Definitions.
+
+     1.1. ``Contributor'' means each entity that creates or contributes to
+     the creation of Modifications.
+
+     1.2. ``Contributor Version'' means the combination of the Original
+     Code, prior Modifications used by a Contributor, and the Modifications
+     made by that particular Contributor.
+
+     1.3. ``Covered Code'' means the Original Code or Modifications or the
+     combination of the Original Code and Modifications, in each case
+     including portions thereof.
+
+     1.4. ``Electronic Distribution Mechanism'' means a mechanism generally
+     accepted in the software development community for the electronic
+     transfer of data.
+
+     1.5. ``Executable'' means Covered Code in any form other than Source
+     Code.
+
+     1.6. ``Initial Developer'' means the individual or entity identified as
+     the Initial Developer in the Source Code notice required by Exhibit A.
+
+     1.7. ``Larger Work'' means a work which combines Covered Code or
+     portions thereof with code not governed by the terms of this License.
+
+     1.8. ``License'' means this document.
+
+     1.9. ``Modifications'' means any addition to or deletion from the
+     substance or structure of either the Original Code or any previous
+     Modifications. When Covered Code is released as a series of files, a
+     Modification is:
+
+          A. Any addition to or deletion from the contents of a file
+          containing Original Code or previous Modifications.
+
+          B. Any new file that contains any part of the Original Code or
+          previous Modifications.
+
+     1.10. ``Original Code'' means Source Code of computer software code
+     which is described in the Source Code notice required by Exhibit A as
+     Original Code, and which, at the time of its release under this License
+     is not already Covered Code governed by this License.
+
+     1.11. ``Source Code'' means the preferred form of the Covered Code for
+     making modifications to it, including all modules it contains, plus any
+     associated interface definition files, scripts used to control
+     compilation and installation of an Executable, or a list of source code
+     differential comparisons against either the Original Code or another
+     well known, available Covered Code of the Contributor's choice. The
+     Source Code can be in a compressed or archival form, provided the
+     appropriate decompression or de-archiving software is widely available
+     for no charge.
+
+     1.12. ``You'' means an individual or a legal entity exercising rights
+     under, and complying with all of the terms of, this License or a future
+     version of this License issued under Section 6.1. For legal entities,
+     ``You'' includes any entity which controls, is controlled by, or is
+     under common control with You. For purposes of this definition,
+     ``control'' means (a) the power, direct or indirect, to cause the
+     direction or management of such entity, whether by contract or
+     otherwise, or (b) ownership of fifty percent (50%) or more of the
+     outstanding shares or beneficial ownership of such entity.
+
+2. Source Code License.
+
+     2.1. The Initial Developer Grant.
+     The Initial Developer hereby grants You a world-wide, royalty-free,
+     non-exclusive license, subject to third party intellectual property
+     claims:
+
+          (a) to use, reproduce, modify, display, perform, sublicense and
+          distribute the Original Code (or portions thereof) with or without
+          Modifications, or as part of a Larger Work; and
+
+          (b) under patents now or hereafter owned or controlled by Initial
+          Developer, to make, have made, use and sell (``Utilize'') the
+          Original Code (or portions thereof), but solely to the extent that
+          any such patent is reasonably necessary to enable You to Utilize
+          the Original Code (or portions thereof) and not to any greater
+          extent that may be necessary to Utilize further Modifications or
+          combinations.
+
+     2.2. Contributor Grant.
+     Each Contributor hereby grants You a world-wide, royalty-free,
+     non-exclusive license, subject to third party intellectual property
+     claims:
+
+          (a) to use, reproduce, modify, display, perform, sublicense and
+          distribute the Modifications created by such Contributor (or
+          portions thereof) either on an unmodified basis, with other
+          Modifications, as Covered Code or as part of a Larger Work; and
+
+          (b) under patents now or hereafter owned or controlled by
+          Contributor, to Utilize the Contributor Version (or portions
+          thereof), but solely to the extent that any such patent is
+          reasonably necessary to enable You to Utilize the Contributor
+          Version (or portions thereof), and not to any greater extent that
+          may be necessary to Utilize further Modifications or combinations.
+
+3. Distribution Obligations.
+
+     3.1. Application of License.
+     The Modifications which You create or to which You contribute are
+     governed by the terms of this License, including without limitation
+     Section 2.2. The Source Code version of Covered Code may be distributed
+     only under the terms of this License or a future version of this
+     License released under Section 6.1, and You must include a copy of this
+     License with every copy of the Source Code You distribute. You may not
+     offer or impose any terms on any Source Code version that alters or
+     restricts the applicable version of this License or the recipients'
+     rights hereunder. However, You may include an additional document
+     offering the additional rights described in Section 3.5.
+
+     3.2. Availability of Source Code.
+     Any Modification which You create or to which You contribute must be
+     made available in Source Code form under the terms of this License
+     either on the same media as an Executable version or via an accepted
+     Electronic Distribution Mechanism to anyone to whom you made an
+     Executable version available; and if made available via Electronic
+     Distribution Mechanism, must remain available for at least twelve (12)
+     months after the date it initially became available, or at least six
+     (6) months after a subsequent version of that particular Modification
+     has been made available to such recipients. You are responsible for
+     ensuring that the Source Code version remains available even if the
+     Electronic Distribution Mechanism is maintained by a third party.
+
+     3.3. Description of Modifications.
+     You must cause all Covered Code to which you contribute to contain a
+     file documenting the changes You made to create that Covered Code and
+     the date of any change. You must include a prominent statement that the
+     Modification is derived, directly or indirectly, from Original Code
+     provided by the Initial Developer and including the name of the Initial
+     Developer in (a) the Source Code, and (b) in any notice in an
+     Executable version or related documentation in which You describe the
+     origin or ownership of the Covered Code.
+
+     3.4. Intellectual Property Matters
+
+          (a) Third Party Claims.
+          If You have knowledge that a party claims an intellectual property
+          right in particular functionality or code (or its utilization
+          under this License), you must include a text file with the source
+          code distribution titled ``LEGAL'' which describes the claim and
+          the party making the claim in sufficient detail that a recipient
+          will know whom to contact. If you obtain such knowledge after You
+          make Your Modification available as described in Section 3.2, You
+          shall promptly modify the LEGAL file in all copies You make
+          available thereafter and shall take other steps (such as notifying
+          appropriate mailing lists or newsgroups) reasonably calculated to
+          inform those who received the Covered Code that new knowledge has
+          been obtained.
+
+          (b) Contributor APIs.
+          If Your Modification is an application programming interface and
+          You own or control patents which are reasonably necessary to
+          implement that API, you must also include this information in the
+          LEGAL file.
+
+     3.5. Required Notices.
+     You must duplicate the notice in Exhibit A in each file of the Source
+     Code, and this License in any documentation for the Source Code, where
+     You describe recipients' rights relating to Covered Code. If You
+     created one or more Modification(s), You may add your name as a
+     Contributor to the notice described in Exhibit A. If it is not possible
+     to put such notice in a particular Source Code file due to its
+     structure, then you must include such notice in a location (such as a
+     relevant directory file) where a user would be likely to look for such
+     a notice. You may choose to offer, and to charge a fee for, warranty,
+     support, indemnity or liability obligations to one or more recipients
+     of Covered Code. However, You may do so only on Your own behalf, and
+     not on behalf of the Initial Developer or any Contributor. You must
+     make it absolutely clear than any such warranty, support, indemnity or
+     liability obligation is offered by You alone, and You hereby agree to
+     indemnify the Initial Developer and every Contributor for any liability
+     incurred by the Initial Developer or such Contributor as a result of
+     warranty, support, indemnity or liability terms You offer.
+
+     3.6. Distribution of Executable Versions.
+     You may distribute Covered Code in Executable form only if the
+     requirements of Section 3.1-3.5 have been met for that Covered Code,
+     and if You include a notice stating that the Source Code version of the
+     Covered Code is available under the terms of this License, including a
+     description of how and where You have fulfilled the obligations of
+     Section 3.2. The notice must be conspicuously included in any notice in
+     an Executable version, related documentation or collateral in which You
+     describe recipients' rights relating to the Covered Code. You may
+     distribute the Executable version of Covered Code under a license of
+     Your choice, which may contain terms different from this License,
+     provided that You are in compliance with the terms of this License and
+     that the license for the Executable version does not attempt to limit
+     or alter the recipient's rights in the Source Code version from the
+     rights set forth in this License. If You distribute the Executable
+     version under a different license You must make it absolutely clear
+     that any terms which differ from this License are offered by You alone,
+     not by the Initial Developer or any Contributor. You hereby agree to
+     indemnify the Initial Developer and every Contributor for any liability
+     incurred by the Initial Developer or such Contributor as a result of
+     any such terms You offer.
+
+     3.7. Larger Works.
+     You may create a Larger Work by combining Covered Code with other code
+     not governed by the terms of this License and distribute the Larger
+     Work as a single product. In such a case, You must make sure the
+     requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+     If it is impossible for You to comply with any of the terms of this
+     License with respect to some or all of the Covered Code due to statute
+     or regulation then You must: (a) comply with the terms of this License
+     to the maximum extent possible; and (b) describe the limitations and
+     the code they affect. Such description must be included in the LEGAL
+     file described in Section 3.4 and must be included with all
+     distributions of the Source Code. Except to the extent prohibited by
+     statute or regulation, such description must be sufficiently detailed
+     for a recipient of ordinary skill to be able to understand it.
+
+5. Application of this License.
+
+     This License applies to code to which the Initial Developer has
+     attached the notice in Exhibit A, and to related Covered Code.
+
+6. Versions of the License.
+
+     6.1. New Versions.
+     Netscape Communications Corporation (``Netscape'') may publish revised
+     and/or new versions of the License from time to time. Each version will
+     be given a distinguishing version number.
+
+     6.2. Effect of New Versions.
+     Once Covered Code has been published under a particular version of the
+     License, You may always continue to use it under the terms of that
+     version. You may also choose to use such Covered Code under the terms
+     of any subsequent version of the License published by Netscape. No one
+     other than Netscape has the right to modify the terms applicable to
+     Covered Code created under this License.
+
+     6.3. Derivative Works.
+     If you create or use a modified version of this License (which you may
+     only do in order to apply it to code which is not already Covered Code
+     governed by this License), you must (a) rename Your license so that the
+     phrases ``Mozilla'', ``MOZILLAPL'', ``MOZPL'', ``Netscape'', ``NPL'' or
+     any confusingly similar phrase do not appear anywhere in your license
+     and (b) otherwise make it clear that your version of the license
+     contains terms which differ from the Mozilla Public License and
+     Netscape Public License. (Filling in the name of the Initial Developer,
+     Original Code or Contributor in the notice described in Exhibit A shall
+     not of themselves be deemed to be modifications of this License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN ``AS IS'' BASIS,
+     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+     This License and the rights granted hereunder will terminate
+     automatically if You fail to comply with terms herein and fail to cure
+     such breach within 30 days of becoming aware of the breach. All
+     sublicenses to the Covered Code which are properly granted shall
+     survive any termination of this License. Provisions which, by their
+     nature, must remain in effect beyond the termination of this License
+     shall survive.
+
+9. LIMITATION OF LIABILITY.
+
+     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE INITIAL
+     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO YOU OR ANY OTHER
+     PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+     OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF
+     GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND
+     ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE
+     BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THAT
+     EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+     The Covered Code is a ``commercial item,'' as that term is defined in
+     48 C.F.R. 2.101 (Oct. 1995), consisting of ``commercial computer
+     software'' and ``commercial computer software documentation,'' as such
+     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
+     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
+     all U.S. Government End Users acquire Covered Code with only those
+     rights set forth herein.
+
+11. MISCELLANEOUS.
+
+     This License represents the complete agreement concerning subject
+     matter hereof. If any provision of this License is held to be
+     unenforceable, such provision shall be reformed only to the extent
+     necessary to make it enforceable. This License shall be governed by
+     California law provisions (except to the extent applicable law, if any,
+     provides otherwise), excluding its conflict-of-law provisions. With
+     respect to disputes in which at least one party is a citizen of, or an
+     entity chartered or registered to do business in, the United States of
+     America: (a) unless otherwise agreed in writing, all disputes relating
+     to this License (excepting any dispute relating to intellectual
+     property rights) shall be subject to final and binding arbitration,
+     with the losing party paying all costs of arbitration; (b) any
+     arbitration relating to this Agreement shall be held in Santa Clara
+     County, California, under the auspices of JAMS/EndDispute; and (c) any
+     litigation relating to this Agreement shall be subject to the
+     jurisdiction of the Federal Courts of the Northern District of
+     California, with venue lying in Santa Clara County, California, with
+     the losing party responsible for costs, including without limitation,
+     court costs and reasonable attorneys fees and expenses. The application
+     of the United Nations Convention on Contracts for the International
+     Sale of Goods is expressly excluded. Any law or regulation which
+     provides that the language of a contract shall be construed against the
+     drafter shall not apply to this License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+     Except in cases where another Contributor has failed to comply with
+     Section 3.4, You are responsible for damages arising, directly or
+     indirectly, out of Your utilization of rights under this License, based
+     on the number of copies of Covered Code you made available, the
+     revenues you received from utilizing such rights, and other relevant
+     factors. You agree to work with affected parties to distribute
+     responsibility on an equitable basis.
+
+EXHIBIT A.
+
+     ``The contents of this file are subject to the Mozilla Public License
+     Version 1.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.mozilla.org/MPL/
+
+     Software distributed under the License is distributed on an "AS IS"
+     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+     License for the specific language governing rights and limitations
+     under the License.
+
+     The Original Code is ______________________________________.
+
+     The Initial Developer of the Original Code is ________________________.
+     Portions created by ______________________ are Copyright (C) ______
+     _______________________. All Rights Reserved.
+
+     Contributor(s): ______________________________________.''
\ No newline at end of file
diff --git a/src/main/licenses/W3C.txt b/src/main/licenses/W3C.txt
new file mode 100644
index 0000000..3179df0
--- /dev/null
+++ b/src/main/licenses/W3C.txt
@@ -0,0 +1,16 @@
+W3C® SOFTWARE NOTICE AND LICENSE
+
+Copyright © 1994-2002 World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. http://www.w3.org/Consortium/Legal/
+
+This W3C work (including software, documents, or other related items) is being provided by the copyright holders under the following license. By obtaining, using and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions:
+
+Permission to use, copy, modify, and distribute this software and its documentation, with or without modification,  for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the software and documentation or portions thereof, including modifications, that you make:
+
+The full text of this NOTICE in a location viewable to users of the redistributed or derivative work.
+Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, a short notice of the following form (hypertext is preferred, text is permitted) should be used within the body of any redistributed or derivative code: "Copyright © [$date-of-software] World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. http://www.w3.org/Consortium/Legal/"
+Notice of any changes or modifications to the W3C files, including the date changes were made. (We recommend you provide URIs to the location from which the code is derived.)
+THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
+
+COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
+
+The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the software without specific, written prior permission. Title to copyright in this software and any associated documentation will at all times remain with copyright holders.
\ No newline at end of file
diff --git a/src/main/licenses/third-party.ftl b/src/main/licenses/third-party.ftl
new file mode 100644
index 0000000..1ecbbcf
--- /dev/null
+++ b/src/main/licenses/third-party.ftl
@@ -0,0 +1,36 @@
+<#-- To render the third-party file.
+ Available context :
+
+ - dependencyMap a collection of Map.Entry with
+   key are dependencies (as a MavenProject) (from the maven project)
+   values are licenses of each dependency (array of string)
+
+ - licenseMap a collection of Map.Entry with
+   key are licenses of each dependency (array of string)
+   values are all dependencies using this license
+-->
+<#function licenseFormat licenses>
+    <#assign result = "    "/>
+    <#list licenses as license>
+        <#assign result = result + license/>
+    </#list>
+    <#return result>
+</#function>
+<#function artifactFormat p>
+    <#return "  " + p.name + ", v" + p.version + "\n"+ "    by "+ p.organization.name +" (" + (p.url!"no url defined") + ")">
+</#function>
+Licenses of third-party dependencies
+------------------------------------
+
+<#list dependencyMap as e>
+    <#assign project = e.getKey()/>
+    <#assign licenses = e.getValue()/>
+  ${project.name}, ${project.version}
+<#--     by ${project.organization.name} (${project.url}) -->
+    <#list licenses as license>
+    ${license}
+    </#list>
+
+</#list>
+
+Copies of the licenses are provided in the 'licenses' directory.
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/api/project.properties b/src/main/resources/com/adobe/epubcheck/api/project.properties
new file mode 100644
index 0000000..a119ab5
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/api/project.properties
@@ -0,0 +1,2 @@
+version=${pom.version}
+buildDate=${tool.build.date}
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/messages/MessageBundle.properties b/src/main/resources/com/adobe/epubcheck/messages/MessageBundle.properties
new file mode 100644
index 0000000..d7c212d
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/messages/MessageBundle.properties
@@ -0,0 +1,281 @@
+# This is the default MessageBundle.properties file
+
+#Accessibility
+ACC_001='img' or 'area' HTML element has no 'alt' attribute.
+ACC_002='input' HTML element is not referenced by a corresponding label element.
+ACC_003=Non-text html elements should include a 'title' attribute for accessibility.
+ACC_004=Html 'a' element must have text.
+ACC_005=Table heading cells should be identified by 'th' elements for accessibility.
+ACC_006=Tables should include a 'thead' element for accessibility.
+ACC_007=Content Documents do not use 'epub:type' attributes for semantic inflection.
+ACC_008=Navigation Document has no 'landmarks nav' element.
+ACC_009=MathML should either have an alt text attribute or annotation-xml child element.
+ACC_010=Headings should not be used within blockquote and figure elements.
+ACC_011=Link elements within SVG should include an xlink:title attribute.
+ACC_012=Table elements should include a caption element.
+ACC_013=Content file contains at least one inline style declaration.
+ACC_013_SUG=Inline styles are not compatible with accessibility settings and display personalization. Use CSS Styles instead.
+ACC_014=CSS Selector font-size attribute value does not use a relative size.
+ACC_014_SUG=Acceptable values include percentages, em multiples, 'larger', 'smaller', 'normal' or 'inherit'.
+ACC_015=CSS Selector font line-height attribute value does not use a relative size.
+ACC_015_SUG=Acceptable values include percentages, numeric multiples, em multiples, 'normal', or 'inherit'.
+ACC_016=CSS Selector font-size attribute value should use a relative size.
+ACC_016_SUG=Acceptable values include percentages, em multiples, 'larger', 'smaller', 'normal' or 'inherit'.
+ACC_017=CSS Selector font line-height attribute value does not use a relative size.
+ACC_017_SUG=Acceptable values include percentages, numeric multiples, em multiples, 'normal', or 'inherit'.
+
+#Checker Errors
+CHK_001=The custom message overrides file was not found.
+CHK_002=Unrecognized custom message id %1$s encountered in message overrides file '%2$s'.
+CHK_003=Unrecognized custom message severity '%1$s' encountered in message overrides file '%2$s'.
+CHK_004=The custom message contains too many parameters in message overrides file '%1$s'.
+CHK_005=The custom suggestion contains too many parameters in message overrides file '%1$s'.
+CHK_006=Unable to parse the custom format parameter in message overrides file '%1$s'.
+CHK_007=Error encountered while processing custom message file '%1$s': "%2$s".
+
+#CSS
+CSS_001=The \'%1$s\' property must not be included in an ePub Style Sheet.
+CSS_002=Empty or NULL reference found.
+CSS_003=Only UTF-8 and UTF-16 encodings are allowed, detected %1$s.
+CSS_004=Only UTF-8 and UTF-16 encodings are allowed, detected %1$s BOM.
+CSS_005=Conflicting alternate style attributes found: %1$s.
+CSS_006=CSS position:fixed property should not be used in EPUBs.
+CSS_007=Font-face reference %1$s refers to non-standard font type %2$s.
+CSS_008=An error occurred while parsing the CSS: %1$s.
+CSS_009=Use of certain CSS such as Columns, Transforms, Transitions, box-sizing or KeyFrames can cause pagination issues.
+CSS_010=Use of non-standard stylesheet.
+CSS_011=Excessive number of css files.
+CSS_011_SUG=Consider merging CSS files to reduce the number of CSS files.
+CSS_012=Document links to multiple CSS files.
+CSS_013=CSS Selector attribute is declared !Important.
+CSS_015=Alternate Stylesheet has no title.
+CSS_016=Alternate Stylesheet precedes primary stylesheet.
+CSS_017=CSS Selector specifies absolute position.
+CSS_019=CSS font-face declaration has no attributes.
+CSS_020=CSS font selector declaration uses unexpected font-size value '%1$s'.
+CSS_020_SUG=Acceptable values include percentages, em multiples, 'larger', 'smaller', 'normal' or 'inherit'.
+CSS_021=CSS Selector font shorthand specifies an invalid System Font.
+CSS_021_SUG=Acceptable values include 'caption', 'icon', 'menu', 'message-box', 'small-caption',  'status-bar', or 'inherit'.
+CSS_022=CSS Selector specifies global margin setting.
+CSS_023=CSS Selector specifies media query.
+CSS_024=CSS class Selector is not used.
+CSS_024_SUG=Remove unused CSS selectors.
+CSS_025=CSS class Selector is not found.
+CSS_025_SUG=Check for typos or define a class selector to document the use of the class.
+CSS_027=CSS Selector specifies absolute position.
+CSS_028=Use of Font-face declaration.
+
+#HTM - XHTML related messages
+HTM_001=Any publication resource that is an XML-based media type must be a valid XML 1.0 document. XML version found: %1$s.
+HTM_002=The installed xml parser doesn't support xml version verification. Xml files must be a valid XML 1.0 document.
+HTM_003=External entities are not allowed in ePub v3 documents. External entity declaration found: %1$s.
+HTM_004=Irregular DOCTYPE: found '%1$s', expected '%2$s'.
+HTM_005=An external reference was found.
+HTM_006=An XHTML Named Entity was found.
+HTM_007=Empty or whitespace-only value of attribute ssml:ph.
+HTM_008=The src attribute is required.
+HTM_009=The DOCTYPE provided is obsolete or irregular and can be removed.
+HTM_010=Namespace uri '%1$s' was found.
+HTM_011=Entity is undeclared.
+HTM_011_SUG=Define the entity or use the numbered entity instead.
+HTM_012=Found a link to a CFI in an external book.
+HTM_013=Intra-Publication CFIs found in document.
+HTM_014=Invalid file extension for HTML file, expecting (html, htm or xhtml).
+HTM_014a=XHTML Content Document file name '%1$s' should have the extension '.xhtml'.
+HTM_015=HTML4 DOCTYPE definition within ePub v3.
+HTM_016=HTML5 DOCTYPE definition within ePub v2.
+HTM_017=Content file has different language value in attributes xml:lang and lang.
+HTM_018=Content file has invalid language value at attribute xml:lang.
+HTM_019=Content file has invalid language definition at attribute lang.
+HTM_020=Content file doesn't contain xml:lang attribute.
+HTM_021=Content file doesn't contain lang attribute.
+HTM_022=Document may contain excessive DIV or SPAN tags.
+HTM_022_SUG=Merge DIV or SPAN tags when they are consecutive and use the same style.
+HTM_023=An invalid XHTML Named Entity was found: '%1$s'.
+HTM_023_SUG=Check the spelling or use numbered entities instead.
+HTM_024=An XHTML Named Entity was found. Only '&' ''' '"e;' '<' or '>' are allowed.
+HTM_024_SUG=Check the spelling or use numbered entities instead.
+HTM_025=Non-registered URI scheme type found in href.
+HTM_027=List contains less than 2 items.
+HTM_027_SUG=Lists should have more than one item for accessibility.
+HTM_028=Input html elements should include an id.
+HTM_029=Label html elements should include a 'for' attribute referencing the id of an input element.
+HTM_033=HTML 'head' element does not have a 'title' child element.
+HTM_036=IFrames are highly discouraged.
+HTM_038=Ensure b, i, em, and strong elements are used in compliance with W3C HTML5 directives.
+HTM_038_SUG=CSS styles are usually more appropriate for italics or bold text.
+HTM_043=SVG elements should include an xml:lang and lang attributes.
+HTM_044=Namespace uri '%1$s' was included but not used.
+HTM_044_SUG=Remove unused Namespace URIs.
+HTM_045=Encountered empty href.
+HTM_045_SUG=Empty hrefs are valid self-references.  These should be validated to ensure that this is the desired intent.
+HTM_046=Fixed format item has no viewport defined.
+HTM_046_SUG=A viewport declaration is required for fixed format items.
+HTM_047=Html viewport is missing height and/or width.
+HTM_047_SUG=The viewport declaration must declare both width and height.
+HTM_048=SVG ViewBox is missing on fixed format document.
+HTM_048_SUG=A viewBox declaration is required for fixed format documents.
+HTM_049=Html element does not have an xmlns set to 'http://www.w3.org/1999/xhtml'.
+HTM_049_SUG=Add xmlns="http://www.w3.org/1999/xhtml" to the html element.
+HTM_050=Found epub:type="pagebreak" attribute in content document.
+
+#media
+MED_001=Video poster must have core media image type.
+MED_002=%1$s element doesn't provide fallback.
+MED_003=Non-standard image resource of type %1$s found.
+MED_004=Image file header may be corrupted.
+MED_005=Media Overlay audio reference %1$s to non-standard audio type %2$s found.
+MED_006=Some browsers do not support rendering SVG images which use a filename in the xlink:href property.
+
+#NAV ePub v3 Table of contents
+NAV_001=The nav file is not supported for ePub v2.
+NAV_002=Found epub:type="page-list" in nav document
+NAV_003=Found both epub:type="page-list" in nav document and epub:type="pagebreak" in content document(s)
+NAV_003_SUG=Using multiple paging constructs can cause unpredictable paging behavior in some epub readers.
+
+#NCX ePub v2 Table of Contents
+NCX_001=Failed performing NCX Schematron tests: %1$s.
+NCX_002=toc attribute was not found on the spine element.
+NCX_003=An .NCX file is required for TOC navigation on ePub v2 readers.
+NCX_004=NCX identifier does not match ocf identifier: %1$s
+NCX_005=Found ncx "page-list" in .ncx file
+NCX_006=Found both "page-list" construct in ncx document and Adobe page-map attribute on the spine.
+NCX_006_SUG=Using multiple paging constructs can cause unpredictable paging behavior in some readers.
+
+#OPF
+OPF_001=There was an error when parsing the ePub version: %1$s.
+OPF_002=The OPF file '%1$s' was not found in the ePub.
+OPF_003=Item '%1$s' exists in the ePub, but is not declared in the OPF manifest.
+OPF_004=Invalid prefix declaration: leading or trailing whitespace is not allowed.
+OPF_004a=Invalid prefix declaration: found empty prefix.
+OPF_004b=Invalid prefix '%1$s': must be a valid non-colonized name (aka 'NCName').
+OPF_004c=Invalid prefix declaration: prefix '%1$s' must be immediately followed by a colon character (':').
+OPF_004d=Invalid prefix declaration: prefix '%1$s' must be separated by its URI with a space.
+OPF_004e=Invalid prefix declaration: found illegal whitespace between prefix and URI.
+OPF_004f=Invalid prefix declaration: found illegal whitespace between prefix mappings.
+OPF_005=Invalid prefix declaration: URI for prefix '%1$s' doesn't exist.
+OPF_006=Invalid prefix declaration: URI '%1$s' is not a valid URI.
+OPF_007=Re-declaration of reserved prefix '%1$s'.
+OPF_007a=Invalid prefix mapping: prefix '_' must not be declared.
+OPF_007b=Invalid prefix mapping: default vocabulary '%1$s' must not be re-declared.
+OPF_008=Handler binding for core Media-type '%1$s' is not allowed.
+OPF_009=The media-type %1$s has already been assigned handler '%2$s'.
+OPF_010=Error resolving reference: '%1$s'.
+OPF_011=itemref can't have both page-spread-right and page-spread-left properties.
+OPF_012=Item property '%1$s' is not defined for media type '%2$s'.
+OPF_013=The type property '%1$s' on the object tag does not match the declared media-type '%2$s' in the OPF manifest.
+OPF_014=The property '%1$s' should be declared in the OPF file.
+OPF_015=The property '%1$s' should not be declared in the OPF file.
+OPF_016=The element \"rootfile\" is missing its required attribute \"full-path\".
+OPF_017=The attribute \"full-path\" on element \"rootfile\" must not be empty.
+OPF_018=The 'remote-resources' property was declared in the OPF, but no reference to remote resources has been found. Make sure this property is legitimate.
+OPF_019=Spine tag was not found in the OPF file.
+OPF_020=Excessive number of spine items.
+OPF_021=Use of non-registered URI scheme type in href: '%1$s'.
+OPF_022=Invalid path: '%1$s'.
+OPF_024=Found unknown ePub version %1$s.
+OPF_025=Property '%1$s' can take only one value.
+OPF_026=Found malformed property value: '%1$s'.
+OPF_027=Undefined property: '%1$s'.
+OPF_028=Undeclared prefix: '%1$s'.
+OPF_029=The file '%1$s' does not appear to match the media type %2$s, as specified in the OPF file.
+OPF_030=The unique-identifier '%1$s' was not found.
+OPF_031=File listed in reference element in guide was not declared in OPF manifest: %1$s.
+OPF_032=Guide references '%1$s' which is not a valid 'OPS Content Document'.
+OPF_033=The spine contains no linear resources.
+OPF_034=The spine contains multiple references to the manifest item with id '%1$s'.
+OPF_035=Media type 'text/html' is not appropriate for XHTML/OPS.
+OPF_035_SUG=Use 'application/xhtml+xml' instead.
+OPF_036=Video type '%1$s' might not be supported by reading systems 
+OPF_036_SUG=Use 'video/mp4', 'video/h264' or 'video/webm' instead.
+OPF_037=Found deprecated media-type '%1$s'.
+OPF_038=Media type '%1$s' is not appropriate for an OEBPS 1.2 context; Use 'text/x-oeb1-document' instead.
+OPF_039=Media-type '%1$s' is not appropriate in an OEBPS 1.2 context. Use 'text/x-oeb1-css' instead.
+OPF_040=Fallback item could not be found.
+OPF_041=Fallback-style item could not be found.
+OPF_042='%1$s' is not a permissible spine media-type.
+OPF_043=Spine item with non-standard media-type '%1$s' has no fallback.
+OPF_044=Spine item with non-standard media-type '%1$s' has a fallback to non-standard media-type.
+OPF_045=Encountered circular reference in fallback chain.
+OPF_046=Scripted property is not set on mediaType handler.
+OPF_047=OPF file is using OEBPS 1.2 syntax allowing backwards compatibility.
+OPF_048=Package tag is missing its required unique-identifier attribute and value.
+OPF_049=Item id '%1$s' was not found in the manifest.
+OPF_050=TOC attribute references resource with non-NCX mime type; 'application/x-dtbncx+xml' is expected.
+OPF_051=Image dimensions exceed recommended size.
+OPF_052=Role value '%1$s' is not valid.
+OPF_053=Date value '%1$s' does not follow recommended syntax as per http://www.w3.org/TR/NOTE-datetime:%2$s.
+OPF_054=Date value '%1$s' is not valid as per http://www.w3.org/TR/NOTE-datetime:%2$s.
+OPF_055=%1$s tag is empty.
+OPF_056=Media type '%1$s' is not an appropriate audio mimetype.
+OPF_056_SUG=Use 'audio/mp3', 'audio/mp4' or 'audio/ogg' instead.
+OPF_057=Image file length exceeds recommended size.
+OPF_058=Spine item has no TOC entry reference.
+OPF_058_SUG=Every spine item in the manifest should be referenced by at least one TOC entry.
+OPF_059=Spine item has no NAV entry reference.
+OPF_059_SUG=Every spine item in the manifest should be referenced by at least one NAV entry.
+OPF_060=Duplicate entry in the ZIP file: '%1$f'.
+OPF_061=Duplicate entry in the ZIP file (after Unicode NFC normalization) '%1$f'.
+OPF_062=Found Adobe page-map attribute on spine element in opf file.
+OPF_063=Referenced Adobe page-map item '%1$s' was not found in the manifest.
+
+#Package
+PKG_001=Validating the ePub against version %1$s but detected version %2$s.
+PKG_003=Unable to read ePub file header.  This is likely a corrupted ePub file.
+PKG_004=Corrupted ePub ZIP header.
+PKG_005=The mimetype file has an extension of length %1$s.  No filename extensions are permitted for the mimetype file.
+PKG_006=Mimetype file entry is missing or is not the first file in the archive.
+PKG_007=Mimetype file should only contain the string 'application/epub+zip'.
+PKG_008=Unable to read file '%1$s'.
+PKG_009=File name contains characters that are not allowed in OCF file names: '%1$s'.
+PKG_010=Filename contains spaces, therefore URI escaping is necessary. Consider removing spaces from filename.
+PKG_011=Filename is not allowed to end with '.'.
+PKG_012=File name contains the following non-ascii characters: %1$s. Consider changing the filename.
+PKG_013=The ePub file includes multiple OPS renditions.
+PKG_014=The ePub contains empty directory '%1$s'.
+PKG_015=Unable to read ePub contents: %1$s
+PKG_016=Use only lowercase characters for the ePub file extension for maximum compatibility.
+PKG_016_SUG=For maximum compatibility, use '.epub'.
+PKG_017=Uncommon ePub file extension.
+PKG_017_SUG=For maximum compatibility, use '.epub'.
+PKG_018=The ePub file is not found.
+PKG_020=OPF file '%1$s' is not found.
+PKG_021=Corrupted image file encountered.
+PKG_022=Wrong file extension for image. The image is a '%1$s' file but has the file extension '%2$s'.
+
+#Resources
+RSC_001=File '%1$s' is not found.
+RSC_002=Required META-INF/container.xml resource is not found.
+RSC_003=No rootfile tag with media type 'application/oebps-package+xml' was found in the container.
+RSC_004=File '%1$s' could not be decrypted.
+RSC_005=Error while parsing file '%1$s'.
+RSC_006=Remote resource reference not allowed; resource must be placed in the OCF.
+RSC_006_SUG=Only audio and video remote resources are permitted.
+RSC_007=Referenced resource is not found in the ePub.
+RSC_008=Referenced resource is not declared in the OPF manifest.
+RSC_009=A fragment identifier should not be used with an img src attribute.
+RSC_010=Reference to non-standard resource type found.
+RSC_011=Found a reference to a resource that is not a spine item.
+RSC_012=Fragment identifier is not defined.
+RSC_013=Fragment identifier is used in a reference to a stylesheet resource.
+RSC_014=Fragment identifier defines an incompatible resource type.
+RSC_015=A fragment identifier is required for svg use tag references.
+RSC_016=Fatal Error while parsing file '%1$s'.
+RSC_017=Warning while parsing file '%1$s'.
+RSC_018=Altimg file '%1$s' is not found.
+
+#Scripting
+SCP_001=Use of Javascript eval() function in ePub scripts is a security risk.
+SCP_002=Use of XMLHttpRequest in ePub scripts is a security risk.
+SCP_003=Local and Session Storage is not currently supported.
+SCP_004=Content file contains script which is not supported in ePub v2.
+SCP_005=Content file contains script but it is not marked as scripted.
+SCP_006=Inline scripts found.
+SCP_007=Script references 'innerHtml'.
+SCP_007_SUG=Use a DOM instead.
+SCP_008=Script references 'innerText'.
+SCP_008_SUG=Use 'textContent' instead.
+SCP_009=Content file uses mouse event handlers.
+SCP_009_SUG=Ensure that all mouse driven functionality is accessible from the keyboard and touch devices.
+SCP_010=Epub 3 content file contains script.
+
diff --git a/src/main/resources/com/adobe/epubcheck/messages/MessageBundle_ja.properties b/src/main/resources/com/adobe/epubcheck/messages/MessageBundle_ja.properties
new file mode 100644
index 0000000..f117624
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/messages/MessageBundle_ja.properties
@@ -0,0 +1,279 @@
+# This is the Japanese translation of MessageBundle.properties file.
+
+#Accessibility
+ACC_001='img' or 'area' HTML element has no 'alt' attribute.
+ACC_002=HTMLのinput要素は対応するlabel要素から参照されるべきです.
+ACC_003=HTMLのNon-text要素はアクセシビリティのため 'title' 属性を持つべきです.
+ACC_004=HTMLの 'a' 要素にはテキスト内容が必要です.
+ACC_005=tableの見出しのセルはアクセシビリティのため 'th' 要素で識別されるべきです.
+ACC_006=tableはアクセシビリティのため 'thead' 要素を持つべきです.
+ACC_007=Content Documents do not use 'epub:type' attributes for semantic inflection.
+ACC_008=Navigation Document has no 'landmarks nav' element.
+ACC_009=MathMLはalt属性のテキストか、annotation-xml子要素を持つべきです.
+ACC_010=blockquote要素かfigure要素内では見出しを使うべきではありません.
+ACC_011=SVG内のlink要素はxlink:title属性を持つべきです.
+ACC_012=table要素はcaption要素を含むべきです.
+ACC_013=コンテンツファイルは少なくとも1つのインラインスタイル宣言を含むべきです.
+ACC_013_SUG=インラインスタイルはアクセシビリティ設定と表示のパーソナライゼーションに適合しません. 代わりにCSSスタイルを使って下さい.
+ACC_014=CSSセレクタのfont-size属性値に相対サイズを使っていません.
+ACC_014_SUG=取りうる値はパーセンテージか、em単位か、'larger'、'smaller'、'normal'、または 'inherit' です.
+ACC_015=CSSセレクタのフォントのline-height属性値に相対サイズを使っていません.
+ACC_015_SUG=取りうる値はパーセンテージか、数値単位か、em単位か、'normal'、または 'inherit' です.
+ACC_016=CSSセレクタのfont-size属性値には相対サイズを使うべきです.
+ACC_016_SUG=取りうる値はパーセンテージか、em単位か、'larger'、'smaller'、'normal'、または 'inherit' です.
+ACC_017=CSSセレクタのフォントのline-height属性値に相対サイズを使っていません.
+ACC_017_SUG=取りうる値はパーセンテージか、数値単位か、em単位か、'normal'、または 'inherit' です.
+
+#Checker Errors
+CHK_001=ファイルを上書きしているカスタムメッセージが見つかりませんでした.
+CHK_002=認識できないカスタムメッセージid '%1$s' がファイル '%2$s' を上書きしたメッセージ内で見つかりました.
+CHK_003=認識できないカスタムメッセージ重要度 '%1$s' がファイル '%2$s' を上書きしたメッセージ内で見つかりました.
+CHK_004=ファイル '%1$s' を上書きしたメッセージ内のカスタムメッセージのパラメタが多すぎます.
+CHK_005=ファイル '%1$s' を上書きするメッセージ内のカスタムサジェッションに含まれるパラメタが多すぎます.
+CHK_006=ファイル '%1$s' を上書きするメッセージ内のカスタムフォーマットパラメタが解析できません.
+CHK_007=カスタムメッセージファイル '%1$s' の処理中にエラーが発生しました: "%2$s".
+
+#CSS
+CSS_001=プロパティ \'%1$s\' は ePubのスタイルシートに含めることはできません.
+CSS_002=空またはNULLの参照が見つかりました.
+CSS_003=文字エンコード %1$s が検知されました. UTF-8またはUTF-16のみ許可されています.
+CSS_004=文字エンコード %1$s BOMが検知されました. UTF-8またはUTF-16のみ許可されています.
+CSS_005=矛盾する代替スタイル属性が見つかりました: %1$s.
+CSS_006=CSS position:fixed property should not be used in EPUBs.
+CSS_007=Font-face 参照 %1$s は、非標準のフォントタイプ %2$s を参照しています.
+CSS_008=CSSパース中にエラーが発生しました: %1$s.
+CSS_009=Columns、 Transforms、 Transitions、 box-sizingやKeyFramesなどのCSSを使うとページネーションの問題が起きる可能性があります.
+CSS_010=非標準のスタイルシートが使われています.
+CSS_011=CSSファイルが多すぎます.
+CSS_011_SUG=CSSのファイル数を減らすため、CSSファイルをマージすることを検討してください.
+CSS_012=文書が複数のCSSファイルへリンクしています.
+CSS_013=CSSセレクタ属性が!Important宣言されています.
+CSS_015=代替スタイルシートにタイトルがありません.
+CSS_016=代替スタイルシートが基本スタイルシートより優先されています.
+CSS_017=CSSセレクタでabsolute positionを指定しています.
+CSS_019=CSS font-face宣言に属性がありません.
+CSS_020=CSS font selector宣言が予期しないfont-size値 '%1$s' を使用しています.
+CSS_020_SUG=取りうる値はパーセンテージか、em単位か、'larger'、'smaller'、'normal'、または 'inherit' です.
+CSS_021=CSSセレクタ fontショートハンドで無効なシステムフォントが指定されています.
+CSS_021_SUG=取りうる値は 'caption'、 'icon'、 'menu'、 'message-box'、 'small-caption'、  'status-bar' または 'inherit' です.
+CSS_022=CSSセレクタがグローバルマージン設定を指定しています.
+CSS_023=CSSセレクタがメディアクエリを指定しています.
+CSS_024=CSSクラスセレクタが使われていません.
+CSS_024_SUG=使用していないCSSセレクタを削除してください.
+CSS_025=CSSクラスセレクタが見つかりません.
+CSS_025_SUG=タイプミスをチェックするか、クラスを利用するセレクタを定義してください.
+CSS_027=CSSセレクタでabsolute positionを指定しています.
+CSS_028=Font-face宣言が使われています.
+
+#HTM - XHTML related messages
+HTM_001=XMLベースのメディアタイプであるpublication resouceはすべて、validなXML 1.0文書でなくてはなりません. XMLバージョンが検出されました: %1$s.
+HTM_002=XMLパーサがXMLバージョンのverificationをサポートしていません. XMLファイルはvalidなXML 1.0の文書でなくてはなりません.
+HTM_003=ePub v3文書では外部エンティティは許可されていません. 外部エンティティの宣言が見つかりました: %1$s.
+HTM_004=不正なDOCTYPE '%1$s' が見つかりました. '%2$s' であるべきです.
+HTM_005=外部参照が見つかりました.
+HTM_006=XHTML 名前付き実体が見つかりました.
+HTM_007=属性ssml:phが空か、空白文字のみの値です.
+HTM_008=src属性が必要です.
+HTM_009=DOCTYPEがobsoleteであるか不正なので、削除可能です.
+HTM_010=名前空間URI '%1$s' が見つかりました.
+HTM_011=実体が宣言されていません.
+HTM_011_SUG=実体を宣言するか、数値文字参照を使って下さい.
+HTM_012=外部の書籍のCFIへのリンクが見つかりました.
+HTM_013=パブリケーション内CFIが文書に見つかりました.
+HTM_014=HTML5に対する不正な拡張子が使われています. html、htmまたはxhtmlを使うべきです.
+HTM_015=ePub v3にHTML4のDOCTYPE定義がされています.
+HTM_016=HTML5 DOCTYPE宣言がePub v2に含まれています.
+HTM_017=コンテンツファイルのxml:lang属性とlang属性に指定された言語が異なっています.
+HTM_018=コンテンツファイルのxml:lang属性の値が不正な言語になっています.
+HTM_019=コンテンツファイルのlang属性の値が不正な言語定義になっています.
+HTM_020=コンテンツファイルにxml:lang属性が含まれていません.
+HTM_021=コンテンツファイルにlang属性が含まれていません.
+HTM_022=Document may contain excessive DIV or SPAN tags.
+HTM_022_SUG=複数のDIVまたはSPANタグが連続していて、かつ同じスタイルを使っているなら、マージしてください.
+HTM_023=不正な XHTML 名前付き実体が見つかりました : '%1$s'.
+HTM_023_SUG=スペルを確認するか、代わりに数値実体を使ってください.
+HTM_024=XHTML 名前付き実体が見つかりました. '&' ''' '"e;' '<' または '>' のみが許可されています.
+HTM_024_SUG=スペルを確認するか、代わりに数値実体を使ってください.
+HTM_025=登録されていないURI schemeがhrefで検出されました.
+HTM_027=List contains less than 2 items.
+HTM_027_SUG=アクセスビリティのために、リストは1つ以上の要素を含んでいなくてはなりません.
+HTM_028=input HTML要素はidを含んでいなくてはなりません.
+HTM_029=label HTML要素は、input要素のidを参照するfor属性を含んでいなくてはなりません.
+HTM_033=HTML head要素にtitleが含まれていません.
+HTM_036=IFRAMEは強く非推奨です.
+HTM_038=b、i、em、strong要素がW3C HTML5の規定に従って使われていることを確認してください.
+HTM_038_SUG=イタリックやボールドのテキストは、CSSのスタイルで指定するほうが通常は適切です.
+HTM_043=SVG要素はxml:langまたはlang属性を含んでいなくてはなりません.
+HTM_044=名前空間URI '%1$s' が含まれていますが、使われていません.
+HTM_044_SUG=使われていない名前空間URIは削除してください.
+HTM_045=空のhrefを検出しました.
+HTM_045_SUG=空のhrefは、有効な自己参照です. それが意図したものか確認するためにvalidateする必要があります.
+HTM_046=固定フォーマットのitemにviewportが宣言されていません.
+HTM_046_SUG=固定フォーマットのitemにはvieport宣言が必要です.
+HTM_047=HTML viewportにheightまたはwidthがありません.
+HTM_047_SUG=viewport宣言にはwidthとheightの両方が宣言されている必要があります.
+HTM_048=SVG ViewBoxが固定フォーマット文書にありません.
+HTM_048_SUG=固定フォーマット文書にはSVG ViewBox宣言が必要です.
+HTM_049=html要素の名前空間が 'http://www.w3.org/1999/xhtml' になっていません.
+HTM_049_SUG=html要素に xmlns="http://www.w3.org/1999/xhtml" を追加してください.
+HTM_050=Found epub:type="pagebreak" attribute in content document.
+
+#media
+MED_001=video posterにはcore media image typeが必要です.
+MED_002=%1$s 要素にフォールバックが与えられていません.
+MED_003=非標準的な画像タイプのリソース %1$s が見つかりました.
+MED_004=画像ファイルのヘッダが壊れている可能性があります.
+MED_005=非標準の音声タイプ %2$s へのメディアオーバーレイの音声の参照 %1$s が見つかりました.
+MED_006=いくつかのブラウザではxlink:hrefプロパティ内でファイル名を使ったSVG画像の描画をサポートしていません.
+
+#NAV ePub v3 Table of contents
+NAV_001=navファイルはePub v2ではサポートされていません.
+NAV_002=Found epub:type="page-list" in nav document
+NAV_003=Found both epub:type="page-list" in nav document and epub:type="pagebreak" in content document(s)
+NAV_003_SUG=Using multiple paging constructs can cause unpredictable paging behavior in some epub readers.
+
+#NCX ePub v2 Table of Contents
+NCX_001=NCX Schematronテストの実行に失敗しました: %1$s.
+NCX_002=spine要素にtoc属性が見つかりませんでした.
+NCX_003=ePub v2リーダでのTOCナビゲーションのためには.NCX ファイルが必要です.
+NCX_004=NCX識別子がocf識別子: %1$s とマッチしません.
+NCX_005=Found ncx "page-list" in .ncx file
+NCX_006=Found both "page-list" construct in ncx document and Adobe page-map attribute on the spine.
+NCX_006_SUG=Using multiple paging constructs can cause unpredictable paging behavior in some readers.
+
+#OPF
+OPF_001=ePubバージョン: %1$s の解析時にエラーが発生しました.
+OPF_002=OPFファイル '%1$s' がePub内に見つかりませんでした.
+OPF_003=アイテム '%1$s' がePub内に存在しますが、OPFマニフェストで宣言されていません.
+OPF_004=Invalid prefix declaration: leading or trailing whitespace is not allowed.
+OPF_004a=Invalid prefix declaration: found empty prefix.
+OPF_004b=Invalid prefix '%1$s': must be a valid non-colonized name (aka 'NCName').
+OPF_004c=Invalid prefix declaration: prefix '%1$s' must be immediately followed by a colon character (':').
+OPF_004d=Invalid prefix declaration: prefix '%1$s' must be separated by its URI with a space.
+OPF_004e=Invalid prefix declaration: found illegal whitespace between prefix and URI.
+OPF_004f=Invalid prefix declaration: found illegal whitespace between prefix mappings.
+OPF_005=Invalid prefix declaration: URL for prefix '%1$s' doesn't exist.
+OPF_006=Invalid prefix declaration: URI '%1$s' is not a valid URI.
+OPF_007=予約されたプリフィックス '%1$s' が再宣言されています.
+OPF_007a=Invalid prefix mapping: prefix '_' must not be declared.
+OPF_007b=Invalid prefix mapping: default vocabulary '%1$s' must not be re-declared.
+OPF_008=コアメディアタイプ '%1$s' のハンドラーバインディングは許されていません.
+OPF_009=メディアタイプ %1$s はすでに '%2$s' ハンドラーにアサインされています.
+OPF_010=参照の解決に失敗しました: '%1$s'.
+OPF_011=itemref は spread-right と page-spread-left 属性を同時に持つことはできません.
+OPF_012=メディアタイプ '%2$s' に対して、アイテムのプロパティ '%1$s' が定義されていません.
+OPF_013=オブジェクトタグのタイププロパティ '%1$s' がOPFマニフェストで宣言されたメディアタイプ '%2$s' と合っていません.
+OPF_014=プロパティ '%1$s' をOPFで宣言してください.
+OPF_015=プロパティ '%1$s' はOPFで宣言すべきではありません.
+OPF_016=\"rootfile\" が必要な属性 \"full-path\" を持っていません.
+OPF_017=\"rootfile\" 要素の \"full-path\" 属性は空ではいけません.
+OPF_018=OPFで 'remote-resources' プロパティが宣言されていますが、リモートリソースへの参照が見当たりません.このプロパティが正しいかどうか確認してください.
+OPF_019=OPFファイルにspineタグが見当たりません.
+OPF_020=spineアイテムの数が多すぎます.
+OPF_021=href '%1$s' の中で登録されていないURIスキーマが使われています.
+OPF_022=無効なパス: '%1$s'.
+OPF_024=未知のePubバージョンを発見しまいした: %1$s.
+OPF_025='%1$s' プロパティは一つの値しか取ることができません.
+OPF_026=プロパティの値が不正です: '%1$s'.
+OPF_027=未定義のプロパティ: '%1$s'.
+OPF_028=未定義のプレフィックス '%1$s'.
+OPF_029=ファイル '%1$s' がOPFファイルで指定されたメディアタイプ %2$s と一致していないようです.
+OPF_030=ユニークID '%1$s' が見つかりません.
+OPF_031=guide要素のreference要素で指定された以下のファイルがOPFのマニフェストで宣言されていません: %1$s.
+OPF_032=guide要素が '%1$s' を参照していますが、これは有効なOPFコンテンツドキュメントではありません.
+OPF_033=spine要素にlinear指定されたリソースが含まれていません.
+OPF_034=spine要素に '%1$s' というIDを持ったマニフェストのアイテムへの重複した参照が含まれています.
+OPF_035=XHTML/OPSに適したメディアタイプは 'text/html' です.
+OPF_035_SUG='application/xhtml+xml' を代わりに使ってください.
+OPF_036=Video type '%1$s' might not be supported by reading systems
+OPF_036_SUG= 'video/mp4' or 'video/h264' or 'video/webm' を代わりに使ってください.
+OPF_037=廃止予定のメディアタイプ '%1$s' を見つけました.
+OPF_038=メディアタイプ '%1$s' はOEBPS 1.2には適していません. 'text/x-oeb1-document' を使ってください.
+OPF_039=メディアタイプ '%1$s' はOEBPS 1.2には適していません. 'text/x-oeb1-css' を使ってください.
+OPF_040=フォールバック用アイテムが見つかりません.
+OPF_041=フォールバックスタイルのアイテムが見つかりません.
+OPF_042='%1$s' はspine要素に使用可能なメディアタイプではありません.
+OPF_043=非標準のメディアタイプ '%1$s' を持ったspine要素はフォールバックできません.
+OPF_044=非標準のメディアタイプ '%1$s' を持ったspine要素は非標準のメディアタイプにフォールバックします.
+OPF_045=フォールバックチェーンに循環参照がありました.
+OPF_046=記述されたプロパティはメディアタイプハンドラにセットされていません.
+OPF_047=OPFのファイルは後方互換性のためにOEBPS 1.2を使っています.
+OPF_048=packageタグに必須のユニークID属性と値がありません.
+OPF_049=ID '%1$s' のアイテムがマニフェストにありません.
+OPF_050=TOC属性がNCXではないmime typeのリソースを参照しています. 'application/x-dtbncx+xml' ではないでしょうか.
+OPF_051=画像のサイズが推奨サイズを超過しています.
+OPF_052=roleの値 '%1$s' は有効ではありません.
+OPF_053=dateの値 '%1$s' は http://www.w3.org/TR/NOTE-datetime:%2$s で推奨されている文法に従っていません.
+OPF_054=dateの値 '%1$s' は http://www.w3.org/TR/NOTE-datetime:%2$s によると有効ではありません.
+OPF_055=%1$sタグが空です.
+OPF_056=メディアタイプ '%1$s' は適切なオーディオ用メディアタイプではありません.
+OPF_056_SUG='audio/mp3'、'audio/mp4' または 'audio/ogg' を代わりに使ってください.
+OPF_057=画像の辺の長さが推奨のサイズを超えています.
+OPF_058=spineアイテムにTOCエントリからの参照がありません.
+OPF_058_SUG=マニフェストのspineアイテムは少なくとも一つのTOCエントリーによって参照されなければなりません.
+OPF_059=spineアイテムにNAVエントリーからの参照がありません.
+OPF_059_SUG=マニフェストのどのspineアイテムも、少なくとも一つのNAVエントリから参照されなければなりません.
+OPF_060=ZIPファイル中の以下のエントリが重複しています: '%1$f'
+OPF_061=ZIPファイル中の以下のエントリが重複しています(UnicodeのNFC正規化後):  '%1$f'.
+OPF_062=Found Adobe page-map attribute on spine element in opf file.
+OPF_063=Referenced Adobe page-map item '%1$s' was not found in the manifest.
+
+#Package
+PKG_001=ePubバージョン %1$s としてvalidateしていますが、バージョン %2$s を検知しました.
+PKG_003=ePubファイルヘッダーが読めません. 壊れたePubファイルだと思われます.
+PKG_004=ePub ZIPヘッダが壊れています.
+PKG_005=mimetypeファイルに長さ%1$sのextensionがあります. mimetypeファイルにはfilename extensionは許可されていません.
+PKG_006=mimetypeファイルエントリが存在しないか、アーカイブの先頭以外の場所に存在しています.
+PKG_007=mimetypeファイルは文字列 'application/epub+zip' だけを含むべきです.
+PKG_008=ファイル '%1$s' が読み込めません.
+PKG_009=OCFファイル名で許可されていない文字がファイル名に含まれています: '%1$s'.
+PKG_010=ファイル名に空白文字が含まれているため、URIエスケープが必要です. ファイル名から空白文字を削除することを検討してください.
+PKG_011=ファイル名が '.' で終わってはいけません.
+PKG_012=ファイル名が次のnon-ascii文字を含んでいます: %1$s. ファイル名の変更を検討してください.
+PKG_013=ePubファイルが複数のOPS renditionを含んでいます.
+PKG_014=ePubが空のディレクトリ '%1$s' を含んでいます.
+PKG_015=ePubコンテンツ: %1$s を読み込めません.
+PKG_016=互換性を最大限高めるため小文字だけをファイル拡張子に使ってください.
+PKG_016_SUG=互換性のため、'.epub' を使って下さい.
+PKG_017=一般的ではないePubファイル拡張子です.
+PKG_017_SUG=互換性のため、'.epub' を使って下さい.
+PKG_018=ePubファイルが見つかりません.
+PKG_020=OPFファイル '%1$s' が見つかりません.
+PKG_021=壊れた画像ファイルがありました.
+
+#Resources
+RSC_001=ファイル '%1$s' が見つかりません.
+RSC_002=必須の META-INF/container.xml リソースが見つかりません.
+RSC_003=コンテナ内にメディアタイプ 'application/oebps-package+xml' を持つルートファイルタグが見つかりませんでした.
+RSC_004=ファイル '%1$s' が復号できませんでした.
+RSC_005=ファイル解析時のエラー '%1$s'.
+RSC_006=外部リソースへの参照は許されていません; リソースはOCF内になければいけません.
+RSC_006_SUG=音声と画像の外部リソースのみ許可されています.
+RSC_007=参照されているリソースがePub内に見つかりません.
+RSC_008=参照されているリソースがOPF manifest内で宣言されていません.
+RSC_009=フラグメント識別子はimg要素のsrc属性で使うべきではありません.
+RSC_010=標準ではないリソースタイプへの参照が見つかりました.
+RSC_011=spine項目ではないリソースへの参照が見つかりました.
+RSC_012=フラグメント識別子が定義されていません.
+RSC_013=スタイルシートへの参照の中でフラグメント識別子が使われています.
+RSC_014=不適合なリソースタイプ内でフラグメント識別子が定義されています.
+RSC_015=タグリファレンスを使ったSVGにはフラグメント識別子が必要です.
+RSC_016=ファイル解析時の致命的なエラー '%1$s'.
+RSC_017=ファイル解析時の警告 '%1$s'.
+RSC_018=代替画像ファイル '%1$s' が見つかりません.
+
+#Scripting
+SCP_001=ePubスクリプト内でのJavascript eval()関数の使用にはセキュリティ上のリスクがあります.
+SCP_002=ePubスクリプト内でのXMLHttpRequest関数の使用にはセキュリティ上のリスクがあります.
+SCP_003=ローカルストレージとセッションストレージは現状サポートされていません.
+SCP_004=ePub v2ではスクリプトを含むコンテンツファイルがサポートされていません.
+SCP_005=スクリプトを含むコンテンツファイルがscriptedとしてマークされていません.
+SCP_006=インラインスクリプトが見つかりました.
+SCP_007=スクリプトが 'innerHtml' を参照しています.
+SCP_007_SUG=代わりにDOMを使って下さい.
+SCP_008=スクリプトが 'innerText' を参照しています.
+SCP_008_SUG=代わりに 'textContent' を使って下さい.
+SCP_009=コンテンツファイルがmouse event handlerを使っています.
+SCP_009_SUG=全てのマウスを使った機能がキーボードやタッチデバイスからも利用可能か確認してください.
+SCP_010=Epub 3 コンテンツファイルがスクリプトを含んでいます.
+
diff --git a/src/main/resources/com/adobe/epubcheck/ops/registeredSchemas.txt b/src/main/resources/com/adobe/epubcheck/ops/registeredSchemas.txt
new file mode 100644
index 0000000..4ab3299
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/ops/registeredSchemas.txt
@@ -0,0 +1,75 @@
+aaa://
+aaas://
+acap://
+cap://
+cid:
+crid://
+data:
+dav:
+dict://
+dns://
+fax:
+file://
+ftp://
+go://
+gopher://
+h323:
+http://
+https://
+icap://
+im:
+imap://
+info:
+ipp://
+iris:
+iris.beep:
+iris.xpc:
+iris.xpcs:
+iris.lwz:
+javascript:
+ldap://
+mailto:
+mid:
+modem:
+msrp://
+msrps://
+mtqp://
+mupdate://
+news://
+nfs://
+nntp://
+opaquelocktoken:
+pop://
+pres:
+rtsp://
+service:
+shttp://
+sip:
+sips:
+snmp://
+soap.beep://
+soap.beeps://
+tag:
+tel:
+telnet://
+tftp://
+thismessage:
+tip://
+tv:
+urn:
+vemmi://
+xmlrpc.beep://
+xmlrpc.beeps://
+xmpp://
+z39.50r://
+z39.50s://
+afs:
+dtn:
+iax:
+mailserver:
+pack://
+tn3270:
+prospero://
+snews://
+videotex:
+wais://
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/dtd/dtbook-2005-2.dtd b/src/main/resources/com/adobe/epubcheck/schema/20/dtd/dtbook-2005-2.dtd
new file mode 100644
index 0000000..1177407
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/dtd/dtbook-2005-2.dtd
@@ -0,0 +1,2824 @@
+<!-- DTBook DTD v2005-2  2006-09-08
+file: dtbook-2005-2.dtd   
+ 
+The following identifiers apply to this DTD:    
+  "-//NISO//DTD dtbook 2005-2//EN"
+  "http://www.daisy.org/z3986/2005/dtbook-2005-2.dtd">
+-->
+
+<!--jpritchett at rfbd.org:  2006-09-08  Changes that update to version 2005-2, per committee decisions 
+    Issue numbers noted in change log below refer to Z39.86 issue tracker at 
+    http://www.daisy.org/z3986/issues/ 
+-->
+
+<!--HB: 2004-03-25 - 2004-04-28 Changes that update dtbook 1.1.0 Document
+    Type Declaration: 
+    When the change date is followed by "nn:" or "nna" that represents the
+    number/letter code on the change list supplied from Michael Moodie on
+    that date. Additional changes not so noted have been made in discussion
+    with Michael Moodie.
+    These changes have been made by Harvey Bingham. -->
+
+<!--HB: 2004-04-15 Editorial revisions made at the group meeting 2004-04-15 -->
+
+<!--    
+    Original authors:
+
+    Harvey Bingham 
+    George Kerscher 
+    Michael Moodie 
+    David Pawson 
+
+    Assisted by DAISY Consortium and NISO DTB Committee work teams.
+
+    1. Purpose
+
+    The Digital Talking Book Document Type Definition (DTD) provides
+    the means to mark up the text of a document to permit support for
+    the combination of professional narration and navigation into that
+    narration. It also facilitates the output of a document's content in
+    a variety of accessible formats. The markup tags in the book convey
+    its content in structure, and contain some metadata about the book
+    content and its structure.
+
+    The Document Type Definition names and defines the allowable element
+    types, their allowable content, and their attributes. Correct markup
+    of the text of the book permits the textual material to be synchronized
+    using SMIL [SMIL2.0] files with the professionally narrated version of
+    that book. The synchronization can permit concurrent display of the
+    text being narrated. The textual content can be searched in context to
+    locate material desired for narration.
+
+    More detailed documentation of this dtbook dtd [DTBOOKV20052DTD] is
+    available as an html document. See [DTBOOKV20052DOC].
+
+    1.1. Prior Related Work
+
+    The DAISY (Digital Accessible Information SYstem) Consortium
+    contributed substantially to the development of this DTD.
+    This application of XML is the next generation after several DAISY
+    versions of 2.X specifications, see [DAISY202].
+
+    The DAISY Statement of Principles for the Creation and Production
+    of Accessible Books and Materials [DAISY-2-GUIDELINES] represents
+    the minimum standard to be met by Libraries of the Blind and producers
+    of alternative format materials.
+
+    Its Navigation Control Center (NCC) provided for synchronizing
+    document structure with narration.
+
+    The NCC evolved into an XML application called the "Navigation Control
+    File for XML applications" (NCX). Its content is derived from
+    the markup of documents tagged using the dtbook DTD. Richer
+    structuring capability is one of the objectives of that DTD. The
+    Synchronized Multimedia Integration Language [SMIL2.0] is used
+    to provide synchronized narrations and text. The NCX provides
+    navigation using the identified elements of documents tagged to this DTD.
+
+    The dtbook DTD includes many, but not all, of the element types found
+    in both the [HTML401STRICT] and [XHTML11STRICT] strict DTDs. HTML
+    authoring tools permit those additional element tags, and may ignore
+    the additional tags that are dtbook-specific. The lowercase names
+    from XHTML are used, rather than the uppercase names from HTML.
+
+    1.2. Evolution from HTML and XHTML
+
+
+    Dtbook-2005-2 has 83 element types. It shares 46 element types with the
+    HTML4.0 Strict DTD [HTML401STRICT] (as adjusted to use the lower-case
+    names consonant with the XHTML Strict DTD [XHTML11STRICT]). It omits
+    31 element types from them, and has 32 unique element types.
+
+    Endtag markup is sometimes optional in HTML. It is required for use with
+    xhtml and dtbook. Any XML application [XML12] requires endtags, or their
+    abbreviated form for empty elements, such as "<link />". The benefit of
+    including endtags is that the tagged document has dependable structure
+    that can be validated against the dtbook dtd.
+
+    Some tools available for browsing HTML may be used with dtbook
+    material, at the expense of their discarding or ignoring some specific
+    tagging and attributes that are not part of HTML 4.0. A CSS-based
+    stylesheet [CSS1] or [CSS2] that identifies the presentation expectations
+    for the HTML and non-HTML tags, or a filter to map those tags onto
+    suitable HTML tags can provide appropriate visual presentation.
+
+    2. Document Prolog
+
+    A Digital Talking Book document is an XML application. Therefore, it
+    must begin with the XML declaration, followed by the DOCTYPE
+    declaration.
+
+    2.1. XML Declaration
+
+    The XML declaration identifies the version of XML, and the
+    optional character set encoding for the document:
+
+        <?xml version="1.0" encoding="UTF-8" ?>
+
+
+
+    2.2. Character Set Encodings (removed as redundant; unicode suffices)
+
+
+
+
+    2.3. DOCTYPE Declaration
+
+    The document type declaration, the DOCTYPE, follows. It has several forms.
+    The simpler form assumes that the proper version of the dtbook DTD
+    is in the same directory as the dtbook file itself.
+
+        <!DOCTYPE dtbook SYSTEM
+            "dtbook-2005-2.dtd">
+
+    A more general form provides the PUBLIC URI from which the SYSTEM
+    filename can be substituted, should that system copy be missing:
+
+        <!DOCTYPE dtbook PUBLIC
+            "http://www.daisy.org/z3986/2005/dtbook-2005-2.dtd"
+            "dtbook-2005-2.dtd">
+
+    That assumes the URI can be reached, which may not be true for
+    portable dtbook players.
+
+    The still more general form recommended for xml applications [XML12] is:
+
+        <!DOCTYPE dtbook PUBLIC
+            "-//NISO//DTD dtbook 2005-2//EN"
+            "http://www.daisy.org/z3986/2005/dtbook-2005-2.dtd">
+
+    where the Formal Public Identifier (FPI) on the second line is converted
+    to the URI where it may be publicly found:
+
+    http://www.daisy.org/z3986/2005/dtbook-2005-2.dtd
+
+    The [OASIS-TR9401] Entity Management Catalog provides an indirect
+    means to provide that mapping from FPI to the dtd.
+
+    That catalog is more generally useful to provide the mapping from
+    any external entity names (such as modules) to URIs where they may
+    be found.
+
+    Note that the reference above is to a particular version of the DTD,
+    distinguished by the string "2005-2".
+
+    2.4. Digital Talking Book File MIME Type
+
+    A Digital Talking Book document is tagged to the dtbook XML
+    application. Its MIME media-type is "text/xml". The tagged book
+    filename should have suffix ".xml". See [RFC2045].
+
+    3. Modular Extension to the DTD
+
+    The dtbook DTD has four parameter entities defined that provide means
+    to allow an individual book to modularly extend the content models:
+
+        <!ENTITY % externalblock "">
+        <!ENTITY % externalinline "">
+        <!ENTITY % externalFlow "">
+        <!ENTITY % externalNamespaces "">
+
+    These parameter entities appear in corresponding block and inline
+    content models. With this "" content they have no effect on books
+    tagged to the dtbook DTD. In a book that needs a modular extension,
+    values are given by redefinition in the internal subset of that book.
+    This extends the dtbook DTD without having to change it.
+
+    A book can augment the dtbook DTD by including other declarations
+    or parameter entity references in the internal subset of declarations.
+    The internal subset may occur in square brackets following the
+    ExternalID and before the concluding ">" of the initial DOCTYPE
+    declaration that identifies the dtbook DTD.
+
+    Those additional markup declarations in the internal subset
+    take preference over any in the dtbook DTD itself. The effective
+    DTD is thereby augmented by the parameter entity values and any other
+    declarations of the book's internal subset. When a given parameter
+    entity declaration appears more than once in the external modules and
+    the dtbook DTD, the first occurrence of that declaration is the one
+    that takes effect, with modules in the internal subset being processed
+    in order, before the DTD itself.
+
+    For example:
+
+        <!DOCTYPE dtbook SYSTEM
+        "dtbook.dtd"
+        [
+            <!ENTITY % dramaModule SYSTEM "drama.dtd">
+            %dramaModule;
+            <!ENTITY % externalblock "| d:drama">
+            <!ENTITY % externalinline "| d:character">
+            <!ENTITY % externalFlow "| d:stagedir">
+            <!ENTITY % externalNamespaces "xmlns:d CDATA #FIXED 'http://www.sample.org/drama'">
+        ]>
+
+    The "%dramaModule;" invocation causes all declarations made within
+    dramaModule to become the initial part of the dtbook DTD. Within the
+    book, the empty entity declarations for % externalblock, 
+    % externalinline, % externalFlow, and %externalNamespaces
+    are replaced by these new definitions. Thus the
+    block element d:drama can appear wherever block elements may occur in
+    dtbook, d:character can appear wherever inline elements may occur, and
+    d:stagedir can appear in either block or inline contexts.  Note that
+    each extension element must appear in no more than one of these three
+    entities. The namespace attribute xmlns:d can occur on any element with 
+    the fixed value of "http://www.sample.org/drama".
+
+    More than one module may be needed and included in a book, for example
+    both poem and drama can appear in the internal subset of the book.
+    For example, the internal subset of the book could contain:
+
+        <!DOCTYPE dtbook SYSTEM
+        "dtbook.dtd"
+        [
+            <!ENTITY % poemModule SYSTEM "poem.dtd">
+            %poemModule;
+            <!ENTITY % dramaModule SYSTEM "drama.dtd">
+            %dramaModule;
+            <!ENTITY % externalblock "| poem | stanza | verse | drama">
+            <!ENTITY % externalinline "| stagedir">
+        ]>
+
+    Such external modules need to include the definitions of any parameter
+    entities that are used in the modules since their definitions are needed
+    before they can be expanded in their references. They cannot depend
+    on parameter entities in the SystemLiteral or PubidLiteral.
+
+    Note that arbitrary external modules from other sources may not have
+    all the needed attributes. XML allows augmentation of ATTLISTs in the
+    internal subset. Additional attribute names can be added to an
+    associated element type. Any redefinitions of a particular named
+    attribute resulting from presence in the internal subset have
+    precedence.
+
+    Note that tools and players processing any extended markup that affects
+    navigation structure will need to know of those modular extensions.
+
+    The form above for augmenting the dtbook dtd through the document's
+    internal subset does not require the XML namespace mechanism, with
+    its namespace-specific prefix on element and attribute names to
+    disambiguate any potential name collisions. However, use of XML
+    namespaces [XML-NAMES] is recommended.
+
+    4. References
+
+    These references are informative. The bracketed names here are targets for
+    indirect reference from the corresponding bracketed names in other parts
+    of this document or in descriptions within this section.
+
+    [CSS1] Cascading Style Sheets, Level 1. Rec-CSS1-1999011 Revised 11 Jan 1999
+
+        http://www.w3.org/TR/REC-CSS1
+
+    [CSS2] Cascading Style Sheets, Level 2 CSS2 Specification REC-CSS2-19980512
+
+        http://www.w3.org/TR/REC-CSS2
+
+    [DAISY202] The DAISY 2.02 Specification for the DAISY Digital Talking
+    Book (DTB) format, which enables navigation within a sequential
+    and hierarchical structure consisting of (marked-up) text synchronized
+    with audio.
+
+        http://www.daisy.org/dtbook/spec/2/final/d202/daisy_202.html
+
+    [DAISY-2-GUIDELINES] The DAISY 2.02 Specification for
+    the Creation and Production of Accessible Books and Materials,
+    Version 0.99 1999-09-23 represents minimum standard to be met by
+    Libraries for the Blind and producers of alternative format materials:
+
+        http://www.daisy.org/dtbook/guidelines/draft/principles.htm
+
+    [DTBOOKV20052DTD] The dtbook DTD version 2005-2 (this DTD) is available at:
+
+        http://www.daisy.org/z3986/2005/dtbook-2005-2.dtd
+
+    Note that some browsers do not permit downloading a file with suffix dtd.
+
+    [DTBOOKV20052DOC] Digital Talking Book Expanded Document Type Definition
+    Documentation for Version 2005-2 of this DTD is available as an
+    HTML 4.0 document:
+
+        http://www.daisy.org/z3986/2005/dtbook/dtbookdoc.html
+
+    Should revisions occur, a new directory with node named for the year
+    of change will contain the revisions.
+
+    Any prior specific version of the dtbook dtd and its documentation will
+    persist.
+
+    [DTBOOK3] The last public beta version was dtbook3-07.dtd (2001-01-31).
+
+        http://www.loc.gov/nls/z3986/background/dtbk3_old_dtds/dtbk3-07.dtd
+
+    and its expanded documentation:
+
+        http://www.loc.gov/nls/z3986/background/dtbk3_old_dtds/dtbk3-07doc.htm
+
+    Those and prior versions are available at:
+
+        http://www.loc.gov/nls/z3986/background/dtbk3_old_dtds/index.html
+
+    The history of changes prior to this version, including those
+    in internal drafts through dtbk110.dtd and before is in:
+
+        http://www.loc.gov/nls/z3986/background/dtbook-dtd-changes.txt
+
+    In that directory also are the old dtdbk3 dtds, some of which have
+    been used for test markup,  and their documentation. See its
+    index.html for the list. (Caution: some browsers may not
+    permit downloading DTDs.)
+
+        http://www.loc.gov/nls/z3986/background/index.html
+
+    [HTML401STRICT] "HTML 4.0 Strict DTD," 1999-12-24, Dave Raggett,
+    Arnaud Le hors, and Ian Jacobs. Dtbook110 was originally based on
+    the HTML 4.0 Strict DTD with design adaptation for dtbook110.
+    A principal adaptation is to use lower-case names for element types
+    and attribute names. For expanded discussion, see [HTML401].
+
+        http://www.w3.org/TR/1999/REC-html401-19991224/strict.dtd
+
+    [HTML401] "HTML 4.01 Specification" W3C Recommendation 24 December 1999
+    Documentation of the element types that come from the HTML 4.0 Strict
+    DTD [HTML401STRICT] is available at:
+
+        http://www.w3.org/TR/1999/REC-html401-19991224/
+
+    Dtbook110 (and now Dtbook122) is partially harmonized with the
+    [XHTML11STRICT] DTD.
+
+    The XHTML camelCase parameter entity names are retained, and comments
+    and references following those parameter entities explain them. The
+    lower-case element and attribute names are used. The simplified table
+    content model of just table rows is included.
+
+    [ISO10646] "Information Technology - Universal Multiple-Octet Coded
+    Character Set (UCS) - Part 1: Architecture and Basic Multilingual
+    Plane", ISO/IEC 10646-1:1993. The current specification also takes
+    into consideration the first five amendments to ISO/IEC 10646-1:1993.
+
+    [ISO8859] "Information Processing - 8-bit single-byte coded graphic
+    character sets - Part 1: Latin alphabet No. 1," ISO 8859-1:1987.
+    Other suffixes "-2 through -9" correspond to other character sets
+    in the family.
+
+    [JIS] "JIS Character Sets" describes the history of JIS, and the
+    several character sets for KANJI, KANA and other characters.
+
+        http://www.io.com/~kazushi/encoding/jis.html
+
+    [ANSINISOZ39-86-2002] Specifications for the Digital Talking Book.
+
+        http://www.niso.org
+    
+    [ANSINISOZ39-86-2005] Specifications for the Digital Talking Book.
+
+        http://www.niso.org    
+
+    [NLS-Z3986] Development of ANSI/NISO Z39.86
+    Contains links to the DTDs developed for ANSI/NISO Z39.86,
+    Specifications for the Digital Talking Book
+
+        http://www.loc.gov/nls/z3986/index.html
+
+    [OASIS-TR9401] Entity Management, OASIS Technical Resolution 9401:1997
+    (Amendment 2 to TR 9401). Paul Grosso, 1997 September 10.
+
+        http://www.oasis-open.org/specs/tr9401.html
+
+    [RFC1556] "Handling of Bi-directional Texts in MIME," H. Nussbacher,
+    December 1993.
+
+        http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc1556.html
+
+    [RFC1942] "HTML Tables", D. Raggett, May 1996
+
+        http://www.ietf.org/rfc/rfc1942.txt
+
+    Contains detailed descriptions of table elements and their
+    inheritance of attribute values. Adjustment for XML application is
+    required: end-tags are necessary, not optional, attribute values
+    must be quoted.
+
+    [RFC2045] "Multipurpose Internet Mail Extensions (MIME) Part One:
+    Format of Internet Message Bodies", N. Freed and N. Borenstein,
+    November 1996. Note that this RFC obsoletes RFC1521, RFC1522, and RFC1590.
+    The %ContentType; and %ContentTypes; media types and the
+    %Charset; and %Charsets; character encoding values are from [RFC2045].
+
+        http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2045.html
+
+    [RFC2046] "Multipurpose Internet Mail Extensions (MIME) Part Two:
+    Media Types," N. Freed, November 1996. Source for %ContentType; and
+    %ContentTypes; permitted values:
+
+        http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2046.html
+
+    [RFC2396] "Uniform Resource Identifiers (URI): Generic Syntax,"
+    T. Berners-Lee, R. Fielding, L. Masinter, August 1998. Note that this RFC
+    revises and replaces the generic definitions in RFC 1738 and RFC 1808.
+
+        http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2396.html
+
+
+
+    [RFC3066] "Tags for the Identification of Languages,"
+    H. Alvestrand, January 2001
+
+        http://www.faqs.org/rfcs/rfc3066.html
+
+
+    [SMIL2.0] The Synchronized Multimedia Integration Language SMIL 2.0
+    W3C Recommendation 07 August 2001 is available at:
+
+        http://www.w3.org/TR/2001/REC-smil20-20010807/smil20.html
+
+    [XHTML11] "XHTML (tm) 1.0: The Extensible HyperText Markup Language,"
+    W3C Recommendation 26 January 2000, A reformulation of HTML4 in XML 1.0
+    includes case-sensitive names, lower-case for elements and their
+    attributes (but not parameter entity names) and in some cases
+    equivalent content models that do not require SGML inclusions
+    and exclusion exceptions (as occurred in the HTML4.0 strict
+    DTD [HTML401STRICT]) is available at:
+
+        http://www.w3.org/TR/xhtml/
+
+    [XML-NAMES] "Namespaces in XML 1.1" World Wide Web Consortium
+    W3C Recommendation 4-Febrary-2004
+
+        http://www.w3.org/TR/REC-xml-names11-20040204
+
+
+    [XHTML11STRICT] Expanded documentation of the element types that come
+    from the XHTML11 strict.dtd and its other DTDs is available within
+    the zip file:
+
+        http://www.w3.org/TR/xhtml1/DTD/xhtml1/xhtml1.zip
+
+    Note: some browsers cannot download a dtd directly.
+
+
+
+    [XML12] This dtbook-2005-2.dtd is an application of the Extensible Markup
+    Language XML 1.0 (Second Edition) W3C Recommendation 6 October 2000.
+    It is available at:
+
+        http://www.w3.org/TR/REC-xml
+
+    -->
+
+<!--======================= Change Log Summary ============================-->
+
+<!--HB: 2004-04-28 changed all version references from 1.1.2 to 1.2.0 -->
+<!--HB: 2004-03-25 - 2004-04-28 Changes that update dtbook 1.1.0 Document
+    Type Declaration: 
+    When the change date is followed by "nn:" or "nna" that represents the
+    number/letter code on the change list supplied from Michael Moodie on
+    that date. Additional changes not so noted have been made in discussion
+    with Michael Moodie.
+    These changes have been made by Harvey Bingham. -->
+<!--HB: 2004-04-15 Editorial revisions made at the group meeting 2004-04-15 -->
+<!--HB: 2004-03-25 32: Drop section 2.2 on Character Set Encoding, retained
+    number so external references won't break to subsequent sections. -->
+<!--HB: 2004-04-02 dtbook: updated public identifier
+        fro:  "http://www.loc.bov/nls/z3986/v100"
+        to:   "http://www.loc.gov/nls/z3986/2004". --> 
+<!--HB: 2004-04-02 dtbook: updated public identifier 
+    from: "http://www.loc.bov/nls/z3986/v100/dtbook110.dtd"
+    to:   "http://www.loc.gov/nls/z3986/2004/dtbook.dtd". -->
+<!--HB: 2004-03-25 Changed reference from RFC1766 to its revison, RFC 3066. -->
+<!--HB: 2004-03-25 Changed reference from RFC1766 to its revison, RFC 3066. -->
+<!--HB: 2004-04-05 % list removed: as content reduced to contain only <list>.-->
+<!--HB: 2004-03-25 36f: caption: removed from % inlineinblock. -->
+<!--HB: 2004-03-25 30: hr: eliminated, so dropped from % block. -->
+<!--HB: 2004-03-29 % block additions:
+    poem | linegroup | byline | dateline | epigraph. -->
+<!--HB: 2004-03-25 30: hr: eliminated, dropped from % blocknoimggroup. -->
+<!--HB: 2004-03-29 % blocknoimggroup additions:
+    poem | linegroup | byline | dateline | epigraph. -->
+<!--HB: 2004-03-29 % docblockorinline additions:
+    poem | linegroup | byline | dateline | epigraph. -->
+<!--HB: 2004-04-08 covertitle: added to % docblockorinline -->
+<!--HB: 2004-04-27 blockhead: added to % docblockorinline; -->
+<!--HB: 2004-03-25 33: % coreattrs: dropped mention of character
+    mnemonic entities, as use unicode. -->    
+<!--HB: 2004-03-25 36a: % i18n: removed lang attribute,
+    as redundant with xml:lang. -->
+<!--HB: 2004-04-05 dtbook: added attribute xmlns with FIXED value 
+    'http://www.loc.gov/nls/z3986/2004/dtbook'
+    Also updated version value from 1.1.0' to '1.1.1'. -->
+<!--HB: 2004-04-05 version: updated from '1.1.0' to '1.1.1'.
+    added value for xmlns: 
+    %URI #FIXED 'http://www.loc.gov/nls/z3986/2004/dtbook/'. -->
+<!--HB: 2004-03-25 36: % headmisc: removed style. -->
+<!--HB: 2004-04-02 title: element removed from head,
+    now only used for cite and poem. -->
+<!--HB: 2004-03-29 Dublin Core: minimum requirement 
+    name="dc:title" content="book title"; encourage use of
+    additional name/content pairs from Dublin Core 
+    name="dc:..." and from Digital Talking Book name="dtb:..."
+    Encourage inclusion of additional Dublin Core and Dtbook metadata
+    attributes to make more useful the dtbook as stand-alone content. -->
+<!--HB: 2004-03-25 36: head: drop th removed element style. -->
+<!--HB: 2004-03-25 29: frontmatter: eliminate %block;
+    level or level1 container is required. -->
+<!--HB: 2004-04-08 frontmatter: added covertitle. -->
+<!--HB: 2004-03-25 29: bodymatter: eliminate %block;
+    level or level1 container is required. -->
+<!--HB: 2004-03-25 29: rearmatter: eliminate %block;
+    level or level1 container is required. -->
+<!--HB: 2004-03-25 28: level: add constraint - at most one <levelhd> (later 
+        changed to <hd>) per <level>. -->
+<!--HB: 2004-03-26 34: level: make contentmodel (...)+, rather than (...)*. -->
+<!--HB: 2004-03-25 28: level1: added constraint - at most one <h1> 
+        per <level1>. -->
+<!--HB: 2004-03-26 34: level1: make contentmodel (...)+, rather than (...)*. -->
+<!--HB: 2004-03-25 28: level2: added constraint - at most one <h2> 
+        per <level2>. -->
+<!--HB: 2004-03-26 34: level2: make contentmodel (...)+, rather than (...)*. -->
+<!--HB: 2004-03-25 28: level3: added constraint - at most one <h3> 
+        per <level3>. -->
+<!--HB: 2004-03-25 28: level4: added constraint - at most one <h4> 
+        per <level4>. -->
+<!--HB: 2004-03-25 28: level5: added constraint - at most one <h5> 
+        per <level5>. -->
+<!--HB: 2004-03-25 28: level6: added constraint - at most one <h6> 
+        per <level6>. -->
+<!--HB: 2004-04-23 % special: eliminated linenum from % special,
+     linenum only appears within line. --> 
+<!--HB: 2004-04-23 % specialnoa: eliminated linenum from % specialnoa,
+     linenum only appears within line. --> 
+<!--HB: 2004-03-25 36h: to % inlinenoa add %dtbookinline;. -->
+<!--HB: 2004-03-30 poem: added linenum use. -->
+<!--HB: 2004-04-08 div: added covertitle. --> 
+<!--HB: 2004-04-04 35b  title: added <title> for use in <poem> or <cite>. -->
+<!--HB: 2004-03-25 35d: notice element dropped: its purpose is sufficiently
+    achieved with sidebar with attribute render="required." This provides
+    sufficient capability for admonitions like warning, hazard, 
+    danger, or caution. -->
+<!--HB: 2004-03-25 35g: prodnote: use render="required" to achieve the explicit
+    admonition such as caution, warning, danger, or hazard, from the
+    text. Optionally put the specific admonition in the class attribute
+    value, repeating it from the text. -->
+<!--HB: 2004-03-25 35g: sidebar: use render="required" to achieve the explicit
+    admonition such as caution, warning, danger, or hazard, from the
+    text. Optionally put the specific admonition in the class attribute
+    value, repeating it from the text. -->
+<!--HB: 2004-03-30 epigraph: element added. -->
+<!--HB: 2004-30-30 byline: element added. -->
+<!--HB: 2004-30-30 dateline: element added. -->
+<!--HB: 2004-03-30 linegroup: The class attribute value can identify the
+    kind of linegroup, such as "stanza", "chorus", or "canto". -->
+<!--HB: 2004-03-30 poem: removed notice and hr from content model. -->
+<!--HB: 2004-03-30 poem: added title and author to content model. -->
+<!--HB: 2004-03-25 35a: cite: allow title and author. -->
+<!--HB: 2004-03-25 30: hr: element dropped horizontal rule as purely visual. -->
+<!--HB: 2004-04-08 covertitle: element added -->
+<!--HB: 2004-04-02 bridgehead: element added. -->
+<!--HB: 2004-03-25 36i: blockquote allow pagenum. -->
+<!--HB: 2004-03-25 36d: list: added start attribute to indicate initial
+    ordinal of a numbered list. -->
+<!--HB: 2004-03-31 list: changed enum from 'U' to 'A' for uppercase, and
+    "X" to 'I' for uppercase Roman. --> 
+<!--HB: 2004-03-31 list: changed enum value choices from "U" to "A" for
+    uppercase, and "X" to "I" for uppercase Roman for compatibility
+    with xhtml. -->
+<!--HB: 2004-04-02 list: expanded discussion on enum attribute. -->
+<!--HB: 2004-04-27 list: added type "pl" to indicate that the list is 
+    preformatted so no bullets or enumerations should be added. -->
+<!--HB: 2004-04-22 list: removed bullet attribute, It is up to a style-sheet to
+    make any needed visual distinction for nested unordered lists, or if the
+    list type is "pl" preformatted the bullet form may be there. -->
+<!--HB: 2004-03-25 36f: caption: removed use for <img>. -->
+<!--MM: 2004-07-08 Various editorial changes. -->
+<!--MM: 2004-07-08 34: level3: make contentmodel (...)+, rather than (...)*. -->
+<!--MM: 2004-07-08 34: level4: make contentmodel (...)+, rather than (...)*. -->
+<!--MM: 2004-07-08 34: level5: make contentmodel (...)+, rather than (...)*. -->
+<!--MM: 2004-07-08 34: level6: make contentmodel (...)+, rather than (...)*. -->
+<!--MM: 2004-07-23 In %docblockorinline: changed blockhead to bridgehead; 
+        eliminated poem, linegroup, byline, dateline, and epigraph since already
+        present via %block -->
+<!--MM: 2004-07-23 In %inlinenoa: removed %externalinline; since already present
+        via %dtbookinline;.-->
+<!--MM: 2004-07-23 34: level6: replaced "%block | %inlineinblock" with 
+        "%docblockorinline;" per other leveln models. -->
+<!--MM: 2004-07-30  Changed content models of level and level1 - level6 to 
+        eliminate ambiguity. Changed version to 1.1.5a-->
+<!--MM: 2004-07-30 Dropped 'level' attribute from element div. Revised 
+        description of page types for 'page' attribute on element pagenum.  
+        Dropped recommendation to use page number as id. Copied recent change 
+        comments to text. Removed comments explaining amp, lt, gt, etc. Changed 
+        version to 1.1.5b-->
+<!--MM, DP: 2004-08-17 Corrected typos in content models of level and level1 - 
+        level6. Added missing exclamation point in previous change message.-->
+<!--MM: 2004-08-17 Added %dtbookblocknoimggroup; to % blocknoimggroup, from 
+        which it had been accidentally dropped. Deleted section on 
+        character entities. -->
+<!--MM: 2004-09-15: caption: changed content model to %flow;. -->
+<!--MM: 2004-09-15 Deleted element levelhd, replacing it with hd in content 
+        model of level. -->
+<!--MM: 2004-09-15 bridgehead: changed content model to (%inline;)*, to match 
+        hd, and h1-h6. -->
+<!--MM: 2004-09-16 Changed version to 1.2.0 -->
+<!--MM: 2005-03-10 level, level1 - level6: Reverted to 2004-08-17 content model 
+        as simplified content model was not valid. -->
+<!--MM: 2005-03-10 Changed version to 1.2.1 -->
+<!--MM: 2005-03-11 changed value for xmlns to: 
+    %URI; #FIXED 'http://www.loc.gov/nls/z3986/2005/dtbook/'. -->
+<!--MM: 2005-04-22 epigraph - changed ATTLIST to %attrs; -->
+<!--MM: 2005-04-22 byline - changed ATTLIST to %attrs; -->
+<!--MM: 2005-04-22 dateline - changed ATTLIST to %attrs; -->
+<!--MM: 2005-04-22 linegroup - changed ATTLIST to %attrs; -->
+<!--MM: 2005-04-22 poem - changed ATTLIST to %attrs; -->
+<!--MM: 2005-04-22 dtbook - changed version to 1.2.1a -->
+<!--MM: 2005-04-26 version: updated from 1.2.1a to 1.2.2-->
+<!--MG: 2005-05-03 fixed malformed comments (double hyphen) -->
+<!--NB: 2005-06-22 wrapped all lines at 80 columns -->
+<!-- 2005-06-26 M. Gylling. Changed pid, sid, ns uri, and filename for Z3986-2005 -->
+<!--jpritchett at rfbd.org:  2006-07-06.  Changed pid, sid, version, and filename for 2005-2 throughout -->
+<!--jpritchett at rfbd.org:  2006-07-06.  (Issue 45) Changed div model to %docblockorinline to include bridgehead -->
+<!--jpritchett at rfbd.org:  2006-07-06.  (Issue 51) Changed content model for frontmatter.  doctitle now required, order of doctitle, covertitle, docauthor fixed. -->
+<!--jpritchett at rfbd.org:  2006-07-06.  (Issue 129) Removed @style from %coreattrs and %attrsrqd -->
+<!--jpritchett at rfbd.org:  2006-07-06.  Removed definition of %StyleSheet, since it is no longer needed -->
+<!--jpritchett at rfbd.org:  2006-07-06.  (Issues 50/68)  Added xml:space to %coreattrs and %attrsrqd -->
+<!--jpritchett at rfbd.org:  2006-07-06.  (Issue 52) Added %coreattrs (id, class, title, xml:space) to title attribute list -->
+<!--jpritchett at rfbd.org:  2006-07-07.  (Issue 102) Changed @idref type for noteref/annoref to %URI to clarify usage -->
+<!--jpritchett at rfbd.org:  2006-07-07.  (Issue 102) Modified comments in noteref/annoref ATTLISTs to clarify @idref usage -->
+<!--jpritchett at rfbd.org:  2006-07-07.  (Issue 119) Changed @lang to @xml:lang in bdo -->
+<!--jpritchett at rfbd.org:  2006-07-07.  (Issue 48) Corrected reference to RFC2046 in comments regarding @type for a, annoref, noteref -->
+<!--jpritchett at rfbd.org:  2006-07-07.  (Issue 65) Corrected usage comment for meta -->
+<!--jpritchett at rfbd.org:  2006-07-07.  (Issue 120) Corrected terminology in section 2 of general documentation comment -->
+<!--jpritchett at rfbd.org:  2006-07-07.  (Issue 92) Added comment deprecating @showin -->
+<!--jpritchett at rfbd.org:  2006-07-07.  (Issue 113) Created new entity %externalFlow; for extension elements that are both block and inline -->
+<!--jpritchett at rfbd.org:  2006-07-07.  (Issue 113) Added %externalFlow to %flow;, %flownopagenum;, %inlines;, %inlinew;, %dtbookblock;, %block; -->
+<!--jpritchett at rfbd.org:  2006-07-07.  (Issue 117) Created new entity %externalNamespaces; for extension namespace attributes -->
+<!--jpritchett at rfbd.org:  2006-07-07.  (Issue 117) Added %externalNamespaces; to %coreattrs;, %attrsrqd;, and dtbook -->
+<!--jpritchett at rfbd.org:  2006-08-11.  (Issue 113) Added %externalFlow; to %dtbookinline; -->
+<!--jpritchett at rfbd.org:  2006-09-08.  (Issues 50/68) Rewrote attribute lists of code and samp to prevent duplication of @xml:lang -->
+
+<!--================= Comment Classification Conventions ==================-->
+
+<!--       Some comments start with a pattern followed by a colon:
+
+               Use: element type and its use.
+
+               Attuse: attribute use for associated element type.
+
+               HB: date object comment on change by Michael Moodie.
+
+           Other comments without such a pattern are dividing lines,
+           details about the DTD structure, or about dtbook objects.
+    -->
+
+<!--=================== Imported Parameter Entity Names ===================-->
+
+<!-- Many parameter entities come from the [XHTML11STRICT] strict DTD. -->
+
+<!--jpritchett at rfbd.org:  2006-07-06.  Removed definition of %StyleSheet, since it is no longer needed -->
+
+
+<!ENTITY % Character "CDATA" >
+    <!-- a single character from [ISO10646]. -->
+
+<!ENTITY % Charset "CDATA" >
+    <!-- a character encoding, as per [RFC2045]. -->
+
+<!ENTITY % ContentType "CDATA" >
+    <!-- media type, as per [RFC2046]. -->
+
+<!--HB: 2004-03-25 Changed reference from RFC1766 to its revison, RFC 3066. -->
+
+<!ENTITY % LanguageCode "NMTOKEN" >
+    <!-- a language code, per [RFC3066]. -->
+
+<!ENTITY % Number "CDATA" >
+    <!-- one or more digits. -->
+
+<!ENTITY % LinkTypes "CDATA" >
+    <!-- space-separated list of link types. -->
+
+<!ENTITY % MediaDesc "CDATA" >
+    <!-- single or comma-separated list of media descriptors;
+        possible values include BRAILLE, PRINT, PROJECTION, SPEECH, ALL,
+        or the default SCREEN. -->
+
+<!ENTITY % Text "CDATA" >
+    <!-- used for titles etc. -->
+
+<!ENTITY % URI "CDATA" >
+    <!-- a Uniform Resource Identifier, see [RFC2396]. -->
+
+<!--================== dtbook External Module Inclusion ===================-->
+
+<!ENTITY % externalblock "" >
+    <!-- placeholder for block element expansion from external modules;
+        if changed, string in external subset begins " | blockelementname". -->
+
+<!ENTITY % externalinline "" >
+    <!-- placeholder for inline element expansion from external modules;
+        if changed, string in external subset begins " | inlineelementname". -->
+
+<!--jpritchett at rfbd.org:  2006-07-07.  Created new entity %externalFlow; for extension elements that are both block and inline -->
+
+<!ENTITY % externalFlow "" >
+	<!-- placeholder for elements that can be either block or inline from 
+	     external modules; if changed, string in external subset begins 
+	     " | flowelementname". -->
+
+<!--jpritchett at rfbd.org:  2006-07-07.  Created new entity %externalNamespaces; for extension namespace attributes -->
+
+<!ENTITY % externalNamespaces "" >
+	<!-- placeholder for namespace attributes for external modules.  These 
+	     attributes will be available on all elements.  If changed, string
+	     in external subset is in format 
+	     	"xmlns:sample   CDATA #FIXED 'http://www.sample.org/example'"
+	-->
+<!--======================== dtbook Content Models ========================-->
+
+<!--HB: 2004-04-05 % list removed: as content reduced to contain only <list>.-->
+
+<!--jpritchett at rfbd.org:  2006-07-07.  Added %externalFlow; to %dtbookblock;-->
+
+<!ENTITY % dtbookblock
+    "author | prodnote | sidebar | note | imggroup |
+        annotation %externalblock; %externalFlow;" >
+    <!-- block elements unique to dtbook. -->
+
+<!ENTITY % dtbookblocknoimggroup
+    "author | prodnote | sidebar | note |
+        annotation %externalblock;" >
+    <!-- block elements unique to dtbook without imggroup. -->
+
+<!--HB: 2004-03-25 36f: caption: removed from % inlineinblock. -->
+
+<!ENTITY % inlineinblock
+    "a | cite | samp | kbd | pagenum" >
+    <!-- inlines that may alternatively be in block elements. -->
+
+<!--HB: 2004-03-25 30: hr: eliminated, so dropped from % block. -->
+
+<!--HB: 2004-03-29 % block additions:
+    poem | linegroup | byline | dateline | epigraph. -->
+
+<!--jpritchett at rfbd.org:  2006-07-07.  Added %externalFlow; to %block;-->
+
+<!ENTITY % block
+    "p | list | dl | div | blockquote | img | imggroup |
+         poem | linegroup | byline | dateline | epigraph |
+         table | address | line | %dtbookblocknoimggroup; %externalFlow;" >
+
+    <!-- block elements from [HTML401STRICT] dtd augmented by dtbook-unique
+         elements (note: list container difers from html ol and ul.) -->
+
+<!--HB: 2004-03-25 30: hr: eliminated, dropped from % blocknoimggroup. -->
+
+<!--HB: 2004-03-29 % blocknoimggroup additions:
+    poem | linegroup | byline | dateline | epigraph. -->
+
+<!--MM: 2004-08-17 Added %dtbookblocknoimggroup; to % blocknoimggroup, 
+        from which it had been accidentally dropped.-->
+<!ENTITY % blocknoimggroup
+    "p | list | dl | div | blockquote |
+         poem | linegroup | byline | dateline | epigraph |
+         table | address | line | %dtbookblocknoimggroup;" >
+
+    <!-- block elements from [HTML401STRICT] dtd augmented by dtbook-unique
+        elements. -->
+
+<!--HB: 2004-03-29 % docblockorinline additions:
+    poem | linegroup | byline | dateline | epigraph. -->
+
+<!--HB: 2004-04-08 covertitle: added to % docblockorinline -->
+
+<!--HB: 2004-04-27 blockhead: added to % docblockorinline; -->
+<!--MM: 2004-07-23 changed blockhead to bridgehead; eliminated poem, linegroup, 
+        byline, dateline, and epigraph since already present via %block -->
+
+<!ENTITY % docblockorinline
+         "doctitle | docauthor | covertitle | bridgehead | 
+          %block; | %inlineinblock;">
+    <!-- common non-head elements for use with level or levelN -->
+
+<!--========================= Generic Attributes ==========================-->
+
+<!--HB: 2004-03-25 33: % coreattrs: dropped mention of character
+    mnemonic entities, as use unicode. -->    
+
+<!--jpritchett at rfbd.org:  2006-07-06.  Removed @style -->
+<!--jpritchett at rfbd.org:  2006-07-06 Added @xml:space -->
+<!--jpritchett at rfbd.org:  2006-07-07.  Added %externalNamespaces; -->
+
+<!ENTITY % coreattrs
+    "id          ID             #IMPLIED
+     class       CDATA          #IMPLIED
+     title       %Text;         #IMPLIED 
+     xml:space 	(default|preserve) 	#IMPLIED 
+     %externalNamespaces;" 
+ >
+
+    <!-- coreattrs are attributes permissible for most elements
+
+        id       document-wide unique id
+        class    space separated list of classes used for rendering
+        title    advisory title/amplification
+        xml:space	whitespace handling (see http://www.w3.org/TR/xml11/#sec-white-space)
+    -->
+
+<!--HB: 2004-03-25 36a: % i18n: removed lang attribute,
+    as redundant with xml:lang. -->
+
+<!ENTITY % i18n
+    "xml:lang    %LanguageCode; #IMPLIED
+     dir         (ltr|rtl)      #IMPLIED" >
+
+    <!-- i18n internationalization attributes
+        xml:lang    language code (as per XML 1.0 spec)
+        dir         direction for weak/neutral text
+                    ltr=left to right
+                    rtl=right to left
+
+    xhtml recommendation: use xml:lang such as "en-US", on the major
+    containing block, to provide source language for
+    the #IMPLIED values of its descendent elements.
+    See [RFC1556] for handling bi-directional text in MIME.
+    -->
+
+<!--jpritchett at rfbd.org:  2006-07-07  Added comment deprecating @showin -->
+
+<!ENTITY % showin
+    "showin (xxx|xxp|xlx|xlp|bxx|bxp|blx|blp) #IMPLIED" >
+    <!-- NOTE:
+    	 With version 2005-2 of the DTD, the use of the showin attribute is deprecated.
+    	 Following more modern conventions that have evolved since showin was
+    	 originally added, the Z39.86 Maintenance Committee's intention is to use
+    	 namespaces to distinguish output-format-specific information via extension
+    	 modules
+	-->
+    <!--showin attribute applies for text elements to permit identification
+        of the kinds of display appropriate for the element, so presentation
+        choice by the reader among alternative readings can be provided, when
+        appropriate. Values of showin are coded with three letters in order:
+        "b"=Braille, "l"=Largeprint, and "p"=Print; or "x"=inappropriate:
+
+            Value  Braille  Largeprint Print   Interpretation
+
+            "xxx"                              hide
+            "xxp"                      p       print only
+            "xlx"           l                  largeprint only
+            "xlp"           l          p       largeprint and print
+            "bxx"   b                          braille only
+            "bxp"   b                  p       braille and print
+            "blx"   b       l                  braille and largeprint
+            "blp"   b       l          p       braille, largeprint, and print
+
+        There is no default value; this attribute value is implied
+        from the most immediate ancestor that specifies a value.
+        The usual default for showin is 'blp'. If only one showin
+        value is needed it should be included with <book>.
+
+        Different content for the same element (usually <prodnote>) meeting
+        different needs is possible, with showin serving as a switch to
+        differentiate among them. Both largeprint and print are appropriate
+        for screen rendering as well as printing. Different corresponding
+        styles may be appropriate.
+
+        It is possible to include equivalent content from any major structure
+        below <book> to provide the different content suitable for different
+        media. These would be independent, sharing no direct content, possibly
+        having common references to images, with different accompanying text
+        descriptions.
+    -->
+
+<!ENTITY % attrs 
+    "%coreattrs;
+     %i18n;
+     smilref      CDATA       #IMPLIED
+     %showin;" >
+
+    <!-- %attrs; is part of most attribute lists. It includes
+
+    %coreattrs; from which come the four #IMPLIED attributes:
+        id, class, title, and xml:space
+
+    %i18n; from which come the implied attributes: xml:lang, and dir
+
+    smilref is a pointer to a [SMIL2.0] file, normally to the time container
+        (SMIL <par> or <seq>) containing the media object that references this
+        element. However, in a text-only DTB consisting of a sequence of
+        text media objects, smilref points to the media object that
+        references this element. smilref allows resumption of SMIL
+        presentation at the proper location after navigation via dtbook file.
+        All smilref values are expected to be added to an augmented
+        version of the <dtbook> during production.
+
+    %showin; (See entity declaration.)
+    -->
+
+<!--jpritchett at rfbd.org:  2006-07-06.  Removed @style -->
+<!--jpritchett at rfbd.org:  2006-07-06.  Added xml:space.  This allows control of whitespace handling on any element. -->
+<!--jpritchett at rfbd.org:  2006-07-07.  Added %externalNamespaces; -->
+
+
+<!ENTITY % attrsrqd
+    "id          ID             #REQUIRED
+     class       CDATA          #IMPLIED
+     title       %Text;         #IMPLIED
+     xml:space 	(default|preserve) 	#IMPLIED
+     smilref     CDATA          #IMPLIED
+     %i18n;
+     %showin; 
+     %externalNamespaces; " >
+    <!-- %attrsrqd; includes required id and implied class,
+        title, and xml:space (see %coreattrs above)
+
+    %i18n; from which come the implied attributes: xml:lang, and dir
+
+    smilref is a pointer to a [SMIL2.0] file, normally to the time container
+        (SMIL <par> or <seq>) containing the media object that references this
+        element. However, in a text-only DTB consisting of a sequence of
+        text media objects, smilref points to the media object that
+        references this element. smilref allows resumption of SMIL
+        presentation at the proper location after navigation via dtbook file.
+        All smilref values are expected to be added to an augmented
+        version of the <dtbook> during production.
+        
+    %externalnamespace; (See entity declaration)
+
+    %showin; (See entity declaration.)
+    -->
+
+<!--========================= Document Structure ==========================-->
+
+<!ENTITY % dtbookcontent
+    "head, book" >
+    <!-- dtbookContent designates that each dtbook has a <head> of
+        metainformation preceding the <book> content.
+    -->
+
+<!--Use: dtbook is the root element in the Digital Talking Book DTD.
+    <dtbook> contains metadata in <head> and the contents itself
+    in <book>.
+    -->
+
+<!ELEMENT dtbook (%dtbookcontent;) >
+
+<!--HB: 2004-04-05 dtbook: added attribute xmlns with FIXED value 
+    'http://www.loc.gov/nls/z3986/2004/dtbook'
+    Also updated version value from 1.1.0' to '1.1.1'. -->
+
+<!--Attuse: dtbook
+
+    "version" is required, and contains the specific
+    version of the dtd, so that the dtd version for any dtbook can
+    be recognized.
+
+    "xmlns" is the URL where this dtd and its related materials can
+    be found.
+
+    "%i18n;" internationalization attributes characterize the <book>.
+    Those values may be adjusted for language changes within it.
+    -->
+
+<!--HB: 2004-04-05 version: updated from '1.1.0' to '1.1.1'.
+    added value for xmlns: 
+    %URI; #FIXED 'http://www.loc.gov/nls/z3986/2004/dtbook/'. -->
+    <!--MM: 2005-03-11 changed value for xmlns to: 
+    %URI; #FIXED 'http://www.loc.gov/nls/z3986/2005/dtbook/'. -->
+    <!--MM: 2005-04-26 version: updated to 1.2.2-->
+    <!--MG: 2005-06-26 version: updated to 2005-1-->
+    <!--jpritchett at rfbd.org:  2006-07-07  updated @version to 2005-2 -->
+<!--jpritchett at rfbd.org:  2006-07-07.  Added %externalNamespaces; -->
+<!ATTLIST dtbook
+  version CDATA #FIXED '2005-2'
+  xmlns   %URI; #FIXED 'http://www.daisy.org/z3986/2005/dtbook/'
+  %i18n;
+  %externalNamespaces;
+  >
+
+<!--======================== Document Head Metadata =======================-->
+
+<!--HB: 2004-03-25 36: % headmisc: removed style. -->
+
+<!ENTITY % headmisc
+    "meta | link " >
+    <!-- optional head elements -->
+
+<!--Use: head contains metainformation about the book but no
+    actual content of the book itself, which is placed in <book>.
+    This information is consonant with the <head> information
+    in xhtml, see [XHTML11STRICT].
+    -->
+
+<!--HB: 2003-03-25 head: element drop title -->
+
+<!ELEMENT head (%headmisc;)* >
+
+<!--Attuse: head
+    "profile" gives one or more
+    whitespace-separated profile URI targets that may provide
+    additional information about the current document.
+    -->
+
+<!ATTLIST head
+  %i18n;
+  profile %URI; #IMPLIED
+  >
+
+<!--HB: 2004-04-02 title: element removed from head,
+    now only used for cite and poem. -->
+
+<!--Use: link is an empty element appearing in the <head> section
+    of a document that establishes a connection between the current
+    document and another document. The <link> element conveys
+    relationship information (for example, "next" and "previous") that
+    may be rendered by user agents in a variety of ways.
+    -->
+
+<!ELEMENT link EMPTY >
+
+<!--Attuse: link
+
+    Each attribute use indicated by a parameter entity is
+    defined in the comment following its definition.
+    -->
+
+<!ATTLIST link
+  %attrs;
+  charset %Charset; #IMPLIED
+  href %URI; #IMPLIED
+  hreflang %LanguageCode; #IMPLIED
+  type %ContentType; #IMPLIED
+  rel %LinkTypes; #IMPLIED
+  rev %LinkTypes; #IMPLIED
+  media %MediaDesc; #IMPLIED
+  >
+
+<!--HB: 2004-03-29 Dublin Core: minimum requirement 
+    name="dc:title" content="book title"; encourage use of
+    additional name/content pairs from Dublin Core 
+    name="dc:..." and from Digital Talking Book name="dtb:..."
+    Encourage inclusion of additional Dublin Core and Dtbook metadata
+    attributes to make more useful the dtbook as stand-alone content. -->
+
+<!--jpritchett at rfbd.org:  2006-07-07  Corrected usage comment  -->
+<!--Use: meta indicates metadata about the book. It is an empty
+    element that may appear repeatedly only in <head>.
+    Meta is the container for the Dublin Core attributes, 
+    and the additional DTBook attributes.
+    As a minumum the dc:Title and dtb:uid meta are required.
+    Inclusion of the full range of applicable Dublin Core elements is 
+    recommended, to make a DTBook document more useful as stand-alone 
+    content.
+    The Dublin Core specification is available at:
+    	http://purl.org/dc/
+    -->
+
+<!ELEMENT meta EMPTY >
+
+<!--Attuse: meta
+
+    "http-equiv" connects the content attribute
+    value to an http header field.
+
+    "name" value identifies the specific kind of
+    content value.
+
+    "content" indicates the value for that "name",
+    possibly constrained by the semantics for the individual names.
+
+    "scheme" indicates a predetermined format for interpreting
+    the content value, such as the Dublin Core.
+    -->
+
+<!ATTLIST meta
+  %i18n;
+  http-equiv NMTOKEN #IMPLIED
+  name NMTOKEN #IMPLIED
+  content CDATA #REQUIRED
+  scheme CDATA #IMPLIED
+  >
+
+<!--HB: 2004-03-25 36: head: removed element style. -->
+
+<!--============================ Book Content =============================-->
+
+<!--Use: book surrounds the actual content of the document, which
+    is divided into <frontmatter>, <bodymatter>, and <rearmatter>.
+    <head>, which contains metadata, precedes <book>.
+    -->
+
+<!ELEMENT book (frontmatter?, bodymatter?, rearmatter?) >
+
+<!ATTLIST book
+  %attrs;
+  >
+
+<!--======================== Book Major Structures ========================-->
+
+<!--Use: frontmatter usually contains <doctitle> and <docauthor>, as
+    well as preliminary material that is often enclosed in appropriate
+    <level> or <level1>. Content may include copyright notice, foreword,
+    acknowledgments, table of contents, etc. <frontmatter> serves as a
+    guide to the content and nature of a <book>.
+    -->
+<!--HB: 2004-03-25 29: frontmatter: eliminate %block;
+    level or level1 container is required. -->
+
+<!--HB: 2004-04-08 frontmatter: added covertitle. -->
+
+<!--jpritchett at rfbd.org:  2006-07-06 doctitle now required, order of doctitle, covertitle, docauthor fixed. -->
+
+<!ELEMENT frontmatter (doctitle, covertitle?, docauthor*, (level | level1)*) >
+
+<!ATTLIST frontmatter
+  %attrs;
+  >
+
+<!--Use: bodymatter consists of the text proper of a book, as contrasted
+    with preliminary material <frontmatter> or supplementary information
+    in <rearmatter>.
+    -->
+
+<!--HB: 2004-03-25 29: bodymatter: eliminate %block;
+    level or level1 container is required. -->
+
+<!ELEMENT bodymatter (level | level1)+ >
+
+<!ATTLIST bodymatter
+  %attrs;
+  >
+
+<!--Use: rearmatter contains supplementary material such as
+    appendices, glossaries, bibliographies, and indices. It follows
+    the <bodymatter> of the book.
+    -->
+<!--HB: 2004-03-25 29: rearmatter: eliminate %block;
+    level or level1 container is required. -->
+
+<!ELEMENT rearmatter (level | level1)+ >
+
+<!ATTLIST rearmatter
+  %attrs;
+  >
+
+<!--================== dtbook Recursive Structure level ===================-->
+
+<!--HB: 2004-03-25 28: level: add constraint - at most one <levelhd> 
+        (later changed to <hd>) per <level>. -->
+
+<!--Use: level is an alternative tag for marking the major
+    structures in a book. It may be used recursively, i.e., repeated
+    indefinitely with each successive occurrence nesting within the
+    previous. It may also be included in a subsequent higher level.
+    At most one <hd> heading child may be used.
+    Subordinate levels have greater depth. Contrast with the explicit
+    <level1>...<level6> elements, which may not be intermixed with
+    <level>.
+    -->
+<!--HB: 2004-03-26 34: level: make contentmodel (...)+, rather than (...)*. -->
+<!--MM: 2004-07-30 level: Changed content model to eliminate ambiguity. -->
+<!--MM, DP: 2004-08-17 Corrected typos in content models of level 
+            and level1-level6.-->
+<!--MM: 2004-09-15 level: Simplified content model. -->
+<!--MM: 2005-03-10 level: Reverted to 2004-08-17 content model as simplified 
+        content model was not valid. -->
+
+<!ELEMENT level ((hd, (%docblockorinline; | level)+) | 
+  ((%docblockorinline; | level)+, (hd, (%docblockorinline; | level)+)?))
+>
+
+<!--Attuse: level
+
+    "class" identifies the actual name (e.g., part,
+    chapter, section, subsection) of the structure it marks.
+    "depth" indicates the nesting depth, starting at 1.
+    -->
+
+<!ATTLIST level
+  %attrs;
+  depth CDATA #IMPLIED
+  >
+
+<!--============ dtbook Hierarchic Structure level1 ... level6 ============-->
+
+<!--Use: level1 is the highest-level container of major divisions of
+    a book. Used in <frontmatter>, <bodymatter>, and <rearmatter> to
+    mark the largest divisions of the book (usually parts or chapters),
+    inside which level2 subdivisions (often sections) may nest.
+    The class attribute identifies the actual name (e.g., part, chapter)
+    of the structure it marks. Contrast with <level>.
+    At most one heading <h1> may be used.
+    -->
+
+<!--HB: 2004-03-25 28: level1: added constraint - at most one <h1> 
+        per <level1>. -->
+
+<!--HB: 2004-03-26 34: level1: make contentmodel (...)+, rather than (...)*. -->
+<!--MM: 2004-07-30 level1: Changed content model to eliminate ambiguity. -->
+<!--MM, DP: 2004-08-17 Corrected typos in content models of level 
+            and level1-level6.-->
+<!--MM: 2004-09-15 level1: Simplified content model. -->
+<!--MM: 2005-03-10 level1: Reverted to 2004-08-17 content model as simplified 
+        content model was not valid. -->
+
+<!ELEMENT level1 ((h1, (%docblockorinline; | level2)+) | 
+((%docblockorinline; | level2)+, (h1, (%docblockorinline; | level2)+)?))
+>
+
+<!ATTLIST level1
+  %attrs;
+  >
+
+<!--Use: level2 contains subdivisions that nest within <level1>
+    divisions. The class attribute identifies the actual name (e.g.,
+    subpart, chapter, subsection) of the structure it marks.
+    At most one heading <h2> may be used.
+    -->
+
+<!--HB: 2004-03-25 28: level2: added constraint - at most one <h2> 
+        per <level2>. -->
+<!--HB: 2004-03-26 34: level2: make contentmodel (...)+, rather than (...)*. -->
+<!--MM: 2004-07-30 level2: Changed content model to eliminate ambiguity. -->
+<!--MM, DP: 2004-08-17 Corrected typos in content models of level 
+            and level1-level6.-->
+<!--MM: 2004-09-15 level2: Simplified content model. -->
+<!--MM: 2005-03-10 level2: Reverted to 2004-08-17 content model as simplified 
+        content model was not valid. -->
+
+<!ELEMENT level2 ((h2, (%docblockorinline; | level3)+) | 
+((%docblockorinline; | level3)+, (h2, (%docblockorinline; | level3)+)?))
+>
+
+<!ATTLIST level2
+  %attrs;
+  >
+
+<!--HB: 2004-03-25 28: level3: added constraint - at most one <h3> 
+        per <level3>. -->
+<!--MM: 2004-07-08 34: level3: make contentmodel (...)+, rather than (...)*. -->
+<!--MM: 2004-07-30 level3: Changed content model to eliminate ambiguity. -->
+<!--MM, DP: 2004-08-17 Corrected typos in content models of level 
+            and level1-level6.-->
+<!--MM: 2004-09-15 level3: Simplified content model. -->
+<!--MM: 2005-03-10 level3: Reverted to 2004-08-17 content model as simplified 
+        content model was not valid. -->
+
+
+<!--Use: level3 contains sub-subdivisions that nest within <level2>
+    subdivisions (e.g., sub-subsections within subsections). The class
+    attribute identifies the actual name (e.g., section, subpart,
+    subsubsection) of the subordinate structure it marks.
+    At most one heading <h3> may be used.
+    -->
+
+<!ELEMENT level3 ((h3, (%docblockorinline; | level4)+) | 
+((%docblockorinline; | level4)+, (h3, (%docblockorinline; | level4)+)?))
+>
+
+<!ATTLIST level3
+  %attrs;
+  >
+
+<!--HB: 2004-03-25 28: level4: added constraint - at most one <h4> 
+        per <level4>. -->
+<!--MM: 2004-07-08 34: level4: make contentmodel (...)+, rather than (...)*. -->
+<!--MM: 2004-07-30 level4: Changed content model to eliminate ambiguity. -->
+<!--MM, DP: 2004-08-17 Corrected typos in content models of level 
+            and level1-level6.-->
+<!--MM: 2004-09-15 level4: Simplified content model. -->
+<!--MM: 2005-03-10 level4: Reverted to 2004-08-17 content model as simplified 
+        content model was not valid. -->
+
+
+<!--Use: level4 contains further subdivisions that nest within <level3>
+    subdivisions. The class attribute identifies the actual name
+    of the subordinate structure it marks.
+    At most one heading <h4> may be used.
+    -->
+
+<!ELEMENT level4 ((h4, (%docblockorinline; | level5)+) | 
+((%docblockorinline; | level5)+, (h4, (%docblockorinline; | level5)+)?))
+>
+
+<!ATTLIST level4
+  %attrs;
+  >
+
+<!--HB: 2004-03-25 28: level5: added constraint - at most one <h5> 
+        per <level5>. -->
+<!--MM: 2004-07-08 34: level5: make contentmodel (...)+, rather than (...)*. -->
+<!--MM: 2004-07-30 level5: Changed content model to eliminate ambiguity. -->
+<!--MM, DP: 2004-08-17 Corrected typos in content models of level 
+            and level1-level6.-->
+<!--MM: 2004-09-15 level5: Simplified content model. -->
+<!--MM: 2005-03-10 level5: Reverted to 2004-08-17 content model as simplified 
+        content model was not valid. -->
+
+
+<!--Use: level5 contains further subdivisions that nest within <level4>
+    subdivisions. The class attribute identifies the actual name
+    of the subordinate structure it marks.
+    At most one heading <h5> may be used.
+    -->
+
+
+<!ELEMENT level5 ((h5, (%docblockorinline; | level6)+) | 
+((%docblockorinline; | level6)+, (h5, (%docblockorinline; | level6)+)?))
+>
+
+<!ATTLIST level5
+  %attrs;
+  >
+
+<!--HB: 2004-03-25 28: level6: added constraint - at most one <h6> 
+        per <level6>. -->
+<!--MM: 2004-07-08 34: level6: make contentmodel (...)+, rather than (...)*. -->
+<!--MM: 2004-07-23 34: level6: replaced "%block | %inlineinblock" 
+        with "%docblockorinline;" per other leveln models. -->
+<!--MM: 2004-07-30 level6: Changed content model to eliminate ambiguity. -->
+<!--MM, DP: 2004-08-17 Corrected typos in content models of level 
+            and level1-level6.-->
+<!--MM: 2004-09-15 level6: Simplified content model. -->
+<!--MM: 2005-03-10 level6: Reverted to 2004-08-17 content model as simplified 
+        content model was not valid. -->
+
+
+<!--Use: level6 contains further subdivisions that nest within <level5>
+    subdivisions. The class attribute identifies the actual name
+    of the subordinate structure it marks.
+    At most one heading <h6> may be used.
+    -->
+
+<!ELEMENT level6 ((h6, (%docblockorinline;)+) | 
+((%docblockorinline;)+, (h6, (%docblockorinline;)+)?))
+>
+
+<!ATTLIST level6
+  %attrs;
+  >
+
+<!--============================= Text Markup =============================-->
+
+<!ENTITY % phrase
+    "em | strong | dfn | code | samp | kbd | cite | abbr | acronym" >
+    <!-- inline text elements -->
+
+<!--HB: 2004-04-23 % special: eliminated linenum from % special,
+     linenum only appears within line. --> 
+
+<!ENTITY % special
+    "a | img | imggroup | br | q | sub | sup | span | bdo " >
+    <!-- special inline text elements -->
+
+<!--HB: 2004-04-23 % specialnoa: eliminated linenum from % specialnoa,
+     linenum only appears within line. --> 
+
+<!ENTITY % specialnoa
+    "img | imggroup | br | q | sub | sup | span | bdo " >
+    <!-- specialnoa inline text elements for anchor <a> -->
+
+
+<!--=========================== Inline Entities ===========================-->
+
+<!--jpritchett at rfbd.org:  2006-08-11.  Add %externalFlow to %dtbookinline; -->
+
+<!ENTITY % dtbookinline
+     "sent | w | pagenum | prodnote | annoref | noteref %externalinline; %externalFlow;" >
+    <!-- dtbook added inline text elements -->
+
+<!ENTITY % inline
+    "#PCDATA | %phrase; | %special; | %dtbookinline;" >
+    <!-- inline text elements -->
+    
+<!--HB: 2004-03-25 36h: to % inlinenoa add %dtbookinline;. -->
+<!--MM: 2004-07-23 Remove %externalinline; since already present 
+        via %dtbookinline;.-->
+
+<!ENTITY % inlinenoa
+    "#PCDATA | %phrase; | %specialnoa; | %dtbookinline;" >
+    <!-- inlinenoa excludes nested <a> -->
+
+<!--jpritchett at rfbd.org:  2006-07-07.  Added %externalFlow %inlines;, %inlinew; -->
+
+<!ENTITY % inlines
+     "#PCDATA | %phrase; | %special; | pagenum | w | prodnote | annoref |
+         noteref %externalinline; %externalFlow;" >
+    <!-- inlines excludes direct nesting of sentences <sent> -->
+
+<!ENTITY % inlinew
+     "#PCDATA | %phrase; | %special; %externalinline; %externalFlow;" >
+    <!-- inlinew for word <w> excludes any of the %dtbookinline; -->
+
+<!ENTITY % inlinenopagenum
+     "#PCDATA | %phrase; | %special; |
+          sent | w | annoref | noteref %externalinline;" >
+    <!-- inlinenopagenum excludes direct <pagenum> in <table> <th> and <td>. -->
+
+<!ENTITY % inlinenoprodnote
+     "#PCDATA | %phrase; | %special; |
+          sent | w | pagenum | annoref | noteref %externalinline;" >
+    <!-- inlinenoprodnote excludes direct <prodnote>, as they shouldn't nest -->
+
+<!--=================== Flow (Block or Inline) Entities ===================-->
+
+<!--jpritchett at rfbd.org:  2006-07-07.  Added %externalFlow to %flow;, %flownopagenum; -->
+
+<!ENTITY % flow
+    "%inlinenoprodnote; | %blocknoimggroup; %externalFlow;" >
+    <!-- flow elements add inlinenoprodnote to block -->
+
+
+<!ENTITY % flownopagenum
+    "%inlinenopagenum; | %blocknoimggroup; %externalFlow; " >
+    <!-- flownopagenum ideally excludes pagenum though can get in
+        indirectly through elements of %blocknoimggroup; -->
+
+<!--========= Br, Line, Linenum, Address, and Div Content Models ==========-->
+
+<!--Use: br marks a forced line break.
+    -->
+
+<!ELEMENT br EMPTY >
+
+<!--Attuse: br
+
+    The %coreattrs; only appear, as there is no content
+    to which the more general %attrs; apply.
+    -->
+
+<!ATTLIST br
+  %coreattrs;
+  >
+
+<!--Use: line marks a single logical line of text. Often used in
+    conjunction with <linenum> in documents with numbered lines.
+    -->
+
+<!ELEMENT line (%inline; | linenum)* >
+
+<!ATTLIST line
+  %attrs;
+  >
+
+<!--HB: 2004-03-30 poem: added linenum use. -->
+
+<!--Use: linenum contains a line number, for example in legal text, or <poem>.
+    -->
+
+<!ELEMENT linenum (#PCDATA) >
+
+<!ATTLIST linenum
+  %attrs;
+  >
+
+<!--Use: address contains a location at which a person or agency
+    may be contacted. By use of <line> to contain content of the
+    individual lines, the class attribute can be used to identify
+    the content of that <line>. For example, class values might include:
+    name, address, region (state. province, etc.), country, location
+    code (such as zipcode, provincial code), phone, fax, email, etc.
+    -->
+
+<!ELEMENT address (%inline; | line)* >
+
+<!ATTLIST address
+  %attrs;
+  >
+
+<!--Use: div is a generic container for subdivisions of a book. The
+    <level1> ... <level6> hierarchy, or the <level> tag used recursively,
+    should mark the major hierarchical structures of a book, while <div>
+    is used in less formal circumstances or when for production purposes
+    it is desired that a structure should be treated differently.
+    Compare with <span>, which is used in inline settings.
+    -->
+
+<!--HB: 2004-04-08 div: added covertitle. --> 
+<!--MM: 2004-07-30 Dropped 'level' attribute from element div. -->
+<!--jpritchett at rfbd.org:  2006-07-06 Changed model to %docblockorinline to include bridgehead -->
+
+<!ELEMENT div (%docblockorinline;)+ >
+
+<!--Attuse: div
+
+    "class" value can identify the
+    actual name (e.g., part, chapter, letter) of the structure it marks.
+    -->
+
+<!ATTLIST div
+  %attrs;
+>
+
+<!--=== dtbook Block Elements: Title, Author, Prodnote, Sidebar ===-->
+
+<!--HB: 2004-04-04 35b  title: added <title> for use in <poem> or <cite>. -->
+
+<!--Use: title contains the title of a <poem> or <cite> (citation)
+    -->
+
+<!--jpritchett at rfbd.org:  2006-07-06 Added %coreattrs (id, class, title, xml:space) to attribute list -->
+
+<!ELEMENT title (#PCDATA) >
+
+<!ATTLIST title
+  %i18n;
+  %coreattrs;
+  >
+
+<!--Use: author identifies the writer of a work other than this one.
+    Contrast with <docauthor>,  which identifies the author of this work.
+    <author> typically occurs within <poem>, <blockquote> or <cite>.
+    -->
+
+<!ELEMENT author (%inline;)* >
+
+<!ATTLIST author
+  %attrs;
+  >
+
+<!--HB: 2004-03-25 35d: notice element dropped: its purpose is sufficiently
+    achieved with sidebar with attribute render="required." This provides
+    sufficient capability for admonitions like warning, hazard, 
+    danger, or caution. -->
+
+<!--Use: prodnote contains language added to the alternative-format
+    version by the producer; commonly used to:
+    1) provide descriptions of one or more visual elements such
+        as charts, graphs, etc.
+    2) supply operating instructions
+    3) describe differences between the print book and the audio
+    version.
+    -->
+
+<!ELEMENT prodnote (%flow;)* >
+
+<!--Attuse: prodnote
+
+    "imgref" identifies the space-separated id value(s)
+    on pertinent images <img>.
+
+    "render" indicates that the content is
+    'required' or 'optional' for the user. If optional, some user
+    preference may allow skipping over the content. But <prodnote
+    render='required'> is essential content for the user. An
+    audible cue could announce the presence of the <prodnote>.
+    -->
+
+<!--HB: 2004-03-25 35g: prodnote: use render="required" to achieve the explicit
+    admonition such as caution, warning, danger, or hazard, from the
+    text. Optionally put the specific admonition in the class attribute
+    value, repeating it from the text. -->
+
+
+<!ATTLIST prodnote
+  %attrs;
+  imgref IDREFS #IMPLIED
+  render (required | optional) #REQUIRED
+  >
+
+<!--Use: sidebar contains information supplementary to the main
+    text and/or narrative flow and is often boxed and printed apart
+    from the main text block on a page. It may have a heading <hd>.
+    -->
+
+<!ELEMENT sidebar (%flow; | hd)* >
+
+<!--HB: 2004-03-25 35g: sidebar: use render="required" to achieve the explicit
+    admonition such as caution, warning, danger, or hazard, from the
+    text. Optionally put the specific admonition in the class attribute
+    value, repeating it from the text. -->
+
+<!ATTLIST sidebar
+  %attrs;
+  render (required | optional) #REQUIRED
+  >
+
+<!--Use: note marks a footnote, endnote, etc. Any local reference to
+    <note id="yyy"> is by <noteref idref="#yyy">.
+    -->
+
+<!ELEMENT note (%block; | %inlineinblock;)+ >
+
+<!ATTLIST note
+  %attrsrqd;
+  >
+
+<!--Use: annotation is a comment on or explanation of a portion of
+    a printed book. It differs from <note> in that an <annotation>
+    is usually set in the margin or on a facing page, often with
+    no explicit reference to it inserted in the text. Any local
+    reference to <annotation id="xxx"> is by <annoref idref="#xxx">.
+    -->
+
+<!ELEMENT annotation (%block; | %inlineinblock;)+ >
+
+<!ATTLIST annotation
+  %attrsrqd;
+  >
+
+<!--====================== Byline, Epigraph, Dateline =====================-->
+
+<!-- Addenda module for dtbook
+     M. Moodie and J. Pritchett
+     9 July 2003
+     This module defines the <epigraph>, <dateline>, and <byline> elements.
+-->
+
+<!--HB: 2004-03-30 epigraph: element added. -->
+
+<!-- Use: epigraph marks a quotation placed at the beginnihg of a work
+    or a division of a work.
+    -->
+
+<!--MM: 2005-04-22 epigraph - changed ATTLIST to %attrs; --> 
+
+<!ELEMENT epigraph (%flow;)* >
+
+<!ATTLIST epigraph
+  %attrs;
+  >
+
+<!--HB: 2004-30-30 byline: element added. -->
+
+<!-- Use: byline contains information about the creator of or contributor
+    to a work. 
+    -->
+    
+    <!--MM: 2005-04-22 byline - changed ATTLIST to %attrs; --> 
+
+<!ELEMENT byline (%inline;)* >
+
+<!ATTLIST byline
+  %attrs;
+  >
+
+<!--HB: 2004-30-30 dateline: element added. -->
+
+<!-- Use: dateline contains information about the time and/or place at which
+    a work was authored. 
+    -->
+    
+    <!--MM: 2005-04-22 dateline - changed ATTLIST to %attrs; --> 
+
+<!ELEMENT dateline (%inline;)* >
+
+<!ATTLIST dateline
+  %attrs;
+  >
+
+<!--============================= Poem, Linegroup =========================-->
+
+<!-- dtbook poetry module
+     M. Moodie and J. Pritchett
+     9 July 2003
+     This module defines the <linegroup> and <poem> elements.
+-->
+
+<!-- Use: linegroup provides means to group a set of lines of a <poem>.
+    -->  
+
+<!ELEMENT linegroup 
+    (hd | dateline | epigraph | byline | linegroup | line | pagenum | prodnote |
+    noteref | annoref | note | annotation | p | blockquote | img | imggroup)* >
+
+<!--HB: 2004-03-30 linegroup: The class attribute value can identify the
+    kind of linegroup, such as "stanza", "chorus", or "canto". -->
+    <!--MM: 2005-04-22 linegroup - changed ATTLIST to %attrs; --> 
+
+<!ATTLIST linegroup 
+  %attrs;
+  >
+
+<!--HB: 2004-03-30 poem: removed notice and hr from content model. -->
+
+<!--HB: 2004-03-30 poem: added title and author to content model. -->
+
+<!-- Use: poem is a complete <poem> or fragment thereof.
+    -->
+    
+    <!--MM: 2005-04-22 poem - changed ATTLIST to %attrs; --> 
+
+<!ELEMENT poem (title | author | hd | dateline | epigraph | byline | 
+    linegroup | line | pagenum | img | imggroup | sidebar)* >
+
+<!ATTLIST poem
+  %attrs;
+  >
+
+<!--========================= The Anchor Element ==========================-->
+
+<!--Use: a contains an anchor, which is used to reference another
+    location, within the same or another <dtbook>.
+    -->
+
+<!ELEMENT a (%inlinenoa;)* >
+
+<!--jpritchett at rfbd.org:  2006-07-07  Corrected reference to RFC2046 in comment regarding @type -->
+
+<!--Attuse: a
+
+    "href" value may have three forms:
+
+    1) '#idref', in the <dtbook>, to the element type having the
+        referenced id value;
+
+    2) 'uri', a uniform resource identifier to a resource, typically a
+        document, see [RFC2396], possibly restricted to work with only
+        the <dtbook> document content, as referenced content is
+        expected to be available on the same media, and off-media
+        references may not be available;
+
+    3) 'uri#xxx', in the resource uri, the element with id='xxx'.
+
+    Uses of the remaining attributes other than %attrs; are:
+
+        "type" is advisory content MIME type of the target, see [RFC2046];
+
+        "hreflang" is the language code of the href target, see [RFC3066];
+
+        "rel" is a list of forward link type(s), the relationship(s)
+            expressed by the href value to the target, space-separated
+            if multiple;
+
+        "rev" is a list of reverse link types, the relationship(s)
+            to this location from the href target, space-separated
+            if multiple;
+
+        "accesskey"=accessibility key character shortcut;
+
+        "tabindex"=tabbing order.
+        
+        "external" An external link points to media content that is not part 
+            of the DTB.  The external media content must be rendered by an 
+            external application, whether or not that content is renderable by 
+            the DTB player.
+    -->
+
+<!ATTLIST a
+  %attrs;
+  type %ContentType; #IMPLIED
+  href %URI; #IMPLIED
+  hreflang %LanguageCode; #IMPLIED
+  rel %LinkTypes; #IMPLIED
+  rev %LinkTypes; #IMPLIED
+  accesskey %Character; #IMPLIED
+  tabindex %Number; #IMPLIED
+  external (true | false) 'false'
+  >
+
+<!--=========================== Inline Elements ===========================-->
+
+<!--Use: em indicates emphasis. Usually <em> is rendered in italics.
+Compare with <strong>.
+    -->
+
+<!ELEMENT em (%inline;)* >
+
+<!ATTLIST em
+  %attrs;
+  >
+
+<!--Use: strong marks stronger emphasis than <em>. Visually <strong> is
+    usually rendered bold.
+    -->
+
+<!ELEMENT strong (%inline;)* >
+
+<!ATTLIST strong
+  %attrs;
+  >
+
+<!--Use: dfn marks the first occurrence of a word or term that is
+    defined or explained there or elsewhere in <book>. Often
+    <dfn> is rendered in italics, sometimes in parentheses.
+    -->
+
+<!ELEMENT dfn (%inline;)* >
+
+<!ATTLIST dfn
+  %attrs;
+  >
+
+<!--Use: kbd designates information that the reader is to input
+    directly into a computer using the keyboard.
+    -->
+
+<!ELEMENT kbd (%inline;)* >
+
+<!ATTLIST kbd
+  %attrs;
+  >
+
+<!--Use: code designates a fragment of computer code.
+    -->
+
+<!ELEMENT code (%inline;)* >
+
+<!-- jpritchett at rfbd.org: 2006-09-08  Expanded %attrs; to prevent duplication of @xml:space -->
+<!--Attuse: code
+
+    See http://www.w3.org/TR/xml11/#sec-white-space for information on xml:space.
+    -->
+
+<!ATTLIST code
+  id          ID             #IMPLIED
+  class       CDATA          #IMPLIED
+  title       %Text;         #IMPLIED 
+  xml:space 	(default|preserve) 	'preserve' 
+  %externalNamespaces;
+  %i18n;
+  smilref      CDATA       #IMPLIED
+  %showin;
+  >
+
+<!--Use: samp contains a sample of work created by the author for
+    use as an example or template. For example, a sample business
+    letter, resume, computer program output, or form.
+    -->
+
+<!ELEMENT samp (%inline;)* >
+
+<!-- jpritchett at rfbd.org: 2006-09-08  Expanded %attrs; to prevent duplication of @xml:space -->
+<!--Attuse: samp
+
+    See http://www.w3.org/TR/xml11/#sec-white-space for information on xml:space.
+    -->
+
+<!ATTLIST samp
+  id          ID             #IMPLIED
+  class       CDATA          #IMPLIED
+  title       %Text;         #IMPLIED 
+  xml:space 	(default|preserve) 	'preserve' 
+  %externalNamespaces;
+  %i18n;
+  smilref      CDATA       #IMPLIED
+  %showin;
+  >
+
+<!--Use: cite marks a reference (or citation) to another document.
+    -->
+
+<!--HB: 2004-03-25 35a: cite: allow title and author. -->
+
+<!ELEMENT cite (%inline; | title | author)* >
+
+<!ATTLIST cite
+  %attrs;
+  >
+
+<!--Use: abbr designates an abbreviation, a shortened form of a
+    word. For examples: Mr., approx., lbs., rec'd.
+    Contrast with <acronym>.
+    -->
+
+<!ELEMENT abbr (%inline;)* >
+
+<!--Attuse: abbr
+
+    "title" value may expand that abbreviation.
+    -->
+
+<!ATTLIST abbr
+  %attrs;
+  >
+
+<!--Use: acronym marks a word formed from key letters (usually
+    initials) of a group of words. For examples: UNESCO, NATO, XML, US.
+    Contrast with <abbr>.
+    -->
+
+<!ELEMENT acronym (%inline;)* >
+
+<!--Attuse: acronym
+
+    "title" value may expand that acronym.
+    "pronounce" value 'yes' indicates that the
+    acronym is pronounceable as a word (for example, NATO);
+    'no' that the acronym is best presented as a sequence
+    of letters (for examples, "XML" or  "US").
+    -->
+
+<!ATTLIST acronym
+  %attrs;
+  pronounce (yes | no) #IMPLIED
+  >
+
+<!--Use: sub indicates a subscript character (printed below a
+    character's normal baseline). Can be used recursively and/or
+    intermixed with <sup>.
+    -->
+
+<!ELEMENT sub (%inline;)* >
+
+<!ATTLIST sub
+  %attrs;
+  >
+
+<!--Use: sup marks a superscript character (printed above a
+    character's normal baseline). Can be used recursively and/or
+    intermixed with <sub>.
+    -->
+
+<!ELEMENT sup (%inline;)* >
+
+<!ATTLIST sup
+  %attrs;
+  >
+
+<!--Use: span is a generic container for use in inline settings
+    when no specific tag exists for a given situation. The class
+    attribute may describe the nature of the text it marks (e.g.,
+    a typographical error). May be used to mark a class of items
+    to which styles are to be applied. Compare with <div>, which
+    is used in a block settings.
+    -->
+
+<!ELEMENT span (%inline;)* >
+
+<!ATTLIST span
+  %attrs;
+  >
+
+<!--Use: bdo is used in special cases where the automatic actions
+    of the bi-directional algorithm would result in incorrect display.
+    -->
+
+<!ELEMENT bdo (%inline;)* >
+
+<!--jpritchett at rfd.org:  2006-07-07  Changed @lang to @xml:lang -->
+<!--Attuse: bdo
+
+    "lang" indicates the language of the content.
+
+    "dir" indicates the writing direction: 'ltr' is
+    left-to-right, 'rtl' is right-to-left.
+    -->
+
+<!ATTLIST bdo
+  %coreattrs;
+  xml:lang %LanguageCode; #IMPLIED
+  dir (ltr | rtl) #REQUIRED
+  >
+
+<!--=================== dtbook Inline Sentence and Word ===================-->
+
+<!--Use: sent marks a sentence.
+    -->
+
+<!ELEMENT sent (%inlines;)* >
+
+<!ATTLIST sent
+  %attrs;
+  >
+
+<!--Use: w marks a word.
+    -->
+
+<!ELEMENT w (%inlinew;)* >
+
+<!ATTLIST w
+  %attrs;
+  >
+
+<!--======== Inline Page Number, Footnote and Annotation Reference ========-->
+
+<!--MM: 2004-07-30 Revised description of page types for 'page' attribute on 
+        element pagenum.  Dropped recommendation to use page number as id. -->
+
+<!--Use: pagenum contains one page number as it appears from the print
+    document, usually inserted at the point within the file immediately
+    preceding the first item of content on a new page.
+    -->
+
+<!ELEMENT pagenum (#PCDATA) >
+
+<!--Attuse: pagenum
+
+    "page" allows three kinds of page numbering
+    schemes to be identified:
+    "front" (for roman-numeral pages at the start of a book), 
+    "normal" (for pages identified by arabic numerals),
+    or "special" (for all other kinds of pages)
+    For multi-page continuous content,
+    such as large <img> or <table>, put the sequence of <pagenum> on
+    the page where that content starts.
+    -->
+
+<!ATTLIST pagenum
+  %attrsrqd;
+  page (front | normal | special) 'normal'
+  >
+
+<!--Use: noteref marks one or more characters that reference a footnote
+    or endnote <note>. Contrast with <annoref>. <noteref> and <note>
+    are independently skippable.
+    -->
+
+<!ELEMENT noteref (#PCDATA) >
+
+<!--jpritchett at rfbd.org:  2006-07-07  Changed @idref type to %URI to clarify usage -->
+<!--jpritchett at rfbd.org:  2006-07-07  Modified comments to clarify @idref usage -->
+<!--jpritchett at rfbd.org:  2006-07-07  Corrected reference to RFC2046 in comment regarding @type -->
+
+<!--Attuse: noteref
+
+    "idref" is a URI pointing to the target note, either within
+    same document or in another document.  For example:
+    <noteref idref='#yyy'> refers to <note id='yyy'> within same document.
+    <noteref idref='foobar.xml#xxx'> refers to <note id='xxx'> in document foobar.xml
+
+    "type" provides advisory content MIME type of
+    the target, see [RFC2046].
+    -->
+
+<!ATTLIST noteref
+  %attrs;
+  idref %URI; #REQUIRED
+  type %ContentType; #IMPLIED
+  >
+
+<!--Use: annoref marks a text segment that references an <annotation>.
+    Each <annoref> is usually a word, phrase, or whole line that
+    is part of the surrounding text (identified in the original
+    print book by bolding, italics, etc.). It should not normally
+    be allowed to be turned off in a DTB application.
+    -->
+
+<!ELEMENT annoref (#PCDATA) >
+
+<!--jpritchett at rfbd.org:  2006-07-07  Changed @idref type to %URI to clarify usage -->
+<!--jpritchett at rfbd.org:  2006-07-07  Modified comments to clarify @idref usage -->
+<!--jpritchett at rfbd.org:  2006-07-07  Corrected reference to RFC2046 in comment regarding @type -->
+
+<!--Attuse: annoref
+
+    "idref" is a URI pointing to the target annotation, either within
+    same document or in another document.  For example:
+    <annoref idref='#yyy'> refers to <annotation id='yyy'> within same document.
+    <annoref idref='foobar.xml#xxx'> refers to <annotation id='xxx'> in document foobar.xml
+
+    "type" provides advisory content MIME
+    type of the targeted id, see [RFC2046].
+    -->
+
+<!ATTLIST annoref
+  %attrs;
+  idref %URI; #REQUIRED
+  type %ContentType; #IMPLIED
+  >
+
+<!--============================ Inline Quotes ============================-->
+
+<!--Use: q contains a short, inline quotation. Compare with
+    <blockquote>, which marks a longer quotation set off from the
+    surrounding text.
+    -->
+
+<!ELEMENT q (%inline;)* >
+
+<!--Attuse: q
+
+    "cite" may provide a URI reference.
+    -->
+
+<!ATTLIST q
+  %attrs;
+  cite %URI; #IMPLIED
+  >
+
+<!--=============================== Images ================================-->
+
+<!-- Image <img> comes from HTML. An <img> may be grouped
+       using <imggroup>, with <caption>, and special
+       usage instructions or description with <prodnote>. The <imggroup>
+       element may contain one or more <img> and any associated
+       <caption> and <prodnote>. Multiple <img> may share a single
+       caption, or multiple <caption> may apply if several captions
+       refer to a single <img>. Multiple <prodnote> may apply if
+       different versions are needed for different media.
+    -->
+
+<!ENTITY % Length "CDATA" >
+    <!-- measured in pixels, percent (nn%) -->
+
+<!ENTITY % MultiLength "CDATA" >
+    <!-- measured in integer pixels "n", percent "nn%" of display width,
+         "0*" indicating minimum appropriate width based on column
+         content, or "nn*" the relative proportional width (".5*" is
+         half the available width after any explicit widths have been
+         consumed). The lengths are separated by commas or whitespace. -->
+
+<!ENTITY % Pixels "CDATA" >
+    <!-- 0 for no <table> border, positive integer for <table> border width
+        in pixels. -->
+
+
+<!--Use: img marks a visual image. An <img> will always contain an alt and
+    generally contain a longdesc, a pointer to a related <prodnote>. The
+    <img> may be referenced by a <caption> or <prodnote>, using, for
+    example, the form <caption imgref="#yyy">the Caption</caption> for
+    the <img id="yyy">.
+    -->
+
+<!ELEMENT img EMPTY >
+
+<!--Attuse: img
+
+    "src" specifies by URI the location of the image file.
+
+    "alt" is used to supply a short description of the <img>.
+
+    "longdesc" generally contains a pointer to a related
+    <prodnote> that contains a detailed description of the <img>.
+
+    The attributes "height" and "width" provide visual sizing
+    information, measured in pixels.
+    -->
+
+<!ATTLIST img
+  %attrs;
+  src %URI; #REQUIRED
+  alt %Text; #REQUIRED
+  longdesc %URI; #IMPLIED
+  height %Length; #IMPLIED
+  width %Length; #IMPLIED
+  >
+
+<!--Use: imggroup provides a container for one or more <img> and associated
+    <caption>(s) and <prodnote>(s). A <prodnote> may contain a description
+    of the image. The content model allows:
+
+    1) multiple <img> if they share a caption, with the ids of
+    each <img> in the <caption imgref="id1 id2 ...">,
+
+    2) multiple <caption> if several captions refer to a single
+    <img id="xxx"> where each caption has the same
+    <caption imgref="xxx">,
+
+    3) multiple <prodnote> if different versions are needed for different
+    media (e.g., large print, braille, or print).  If several <prodnote>
+    refer to a single <img id="xxx">, each prodnote has the same <prodnote
+    imgref="xxx">.
+    -->
+
+<!ELEMENT imggroup (prodnote | img | caption)+ >
+
+<!ATTLIST imggroup
+  %attrs;
+  >
+
+<!--HB: 2004-03-25 30: hr: element dropped horizontal rule as purely visual. -->
+
+<!--============================= Paragraphs ==============================-->
+
+<!--Use: p contains a paragraph, which may contain subsidiary <list> or <dl>.
+    -->
+ 
+<!ELEMENT p (%inline; | list | dl)* >
+
+<!ATTLIST p
+  %attrs;
+  >
+
+<!--=========== Doctitle, Docauthor, Covertitle, and Headings  ============-->
+
+
+<!--Use: doctitle marks the full title of the book, including any
+    subtitles,  <frontmatter>. By convention <doctitle> should appear
+    Contrast with covertitle.
+    -->
+
+<!ELEMENT doctitle (%inline;)* >
+
+<!ATTLIST doctitle
+  %attrs;
+  >
+
+<!--Use: docauthor marks each author or editor of this work. Compare with
+    <author>, used to mark the author of another work, within <blockquote>
+    or <cite>.
+    -->
+
+<!ELEMENT docauthor (%inline;)* >
+
+<!ATTLIST docauthor
+  %attrs;
+  >
+
+<!--Use: covertitle is the short title of a book, often found on the
+    spine. It may be the same as the doctitle.
+    -->
+
+<!--HB: 2004-04-08 covertitle: element added -->
+
+<!ELEMENT covertitle (%inline;)* >
+
+<!ATTLIST covertitle
+  %attrs;
+  >
+
+
+<!--MM: 2004-09-15 Deleted element levelhd, replacing it with hd in content 
+        model of level. -->
+
+<!--Use: h1 contains the text of the heading for a <level1> structure.
+    -->
+
+<!ELEMENT h1 (%inline;)* >
+
+<!ATTLIST h1
+  %attrs;
+  >
+
+<!--Use: h2 contains the text of the heading for a <level2> structure.
+    -->
+
+<!ELEMENT h2 (%inline;)* >
+
+<!ATTLIST h2
+  %attrs;
+  >
+
+<!--Use: h3 contains the text of the heading for a <level3> structure.
+    -->
+
+<!ELEMENT h3 (%inline;)* >
+
+<!ATTLIST h3
+  %attrs;
+  >
+
+<!--Use: h4 contains the text of the heading for a <level4> structure.
+    -->
+
+<!ELEMENT h4 (%inline;)* >
+<!ATTLIST h4
+  %attrs;
+  >
+
+<!--Use: h5 contains the text of the heading for a <level5> structure.
+    -->
+
+<!ELEMENT h5 (%inline;)* >
+
+<!ATTLIST h5
+  %attrs;
+  >
+
+<!--Use: h6 contains the text of the heading for a <level6> structure.
+    -->
+
+<!ELEMENT h6 (%inline;)* >
+
+<!ATTLIST h6
+  %attrs;
+  >
+
+<!--HB: 2004-04-02 bridgehead: element added. -->
+<!--MM: 2004-09-15 bridgehead: changed content model to (%inline;)*, to match 
+        hd, and h1-h6. -->
+
+<!--Use: bridgehead is a free-floating heading that is not associated with the
+    hierarchical structure of a document. It may occur only subsidiary to one
+    of the hierarchic elements. <hd> and <h1> ... <h6> are
+    restricted to one occurrence per level or <level1> ... <level6>,
+    respectively. <bridgehead> has no such restriction, but should be used
+    only when it is clear that none of the structural headings is appropriate.
+    See also <hd>.
+    -->
+
+<!ELEMENT bridgehead (%inline;)* >
+
+<!ATTLIST bridgehead
+  %attrs;
+  >
+
+<!--Use: hd marks the text of a heading in <level>, <poem>, <list>, <linegroup>,
+         or <sidebar>. -->
+
+<!ELEMENT hd (%inline;)* >
+
+<!ATTLIST hd
+  %attrs;
+  >
+
+<!--========================== Preformatted Text ==========================-->
+
+<!-- HTML or XHTML preformatted text is omitted, as inappropriate for
+        narrated material. -->
+
+<!--========================== Block-like Quotes ==========================-->
+
+<!--Use: blockquote indicates a block of quoted content that is set
+    off from the surrounding text by paragraph breaks. Compare with
+    <q>, which marks short, inline quotations.
+    -->
+<!--HB: 2004-03-25 36i: blockquote allow pagenum. -->
+
+<!ELEMENT blockquote (pagenum | %block;)* >
+
+<!--Attuse: blockquote
+
+    "cite" permits inclusion of the
+    URI from which the <blockquote> came.
+    -->
+
+<!ATTLIST blockquote
+  %attrs;
+  cite %URI; #IMPLIED
+  >
+
+<!--================== Definition List, and Other Lists ===================-->
+
+<!--Use: dl contains a definition list, usually consisting of pairs of
+    terms <dt> and definitions <dd>. Any definition can contain another
+    definition list.
+    -->
+
+<!ELEMENT dl (dt | dd | pagenum)+ >
+
+<!ATTLIST dl
+ %attrs;
+  >
+
+<!--Use: dt marks a term in a definition list <dl> for which a
+    definition <dd> follows.
+    -->
+
+<!ELEMENT dt (%inline;)* >
+
+<!ATTLIST dt
+  %attrs;
+  >
+
+<!--Use: dd marks a definition of the preceding term <dt> within a
+    definition list <dl>. A definition without a preceding <dt> has
+    no semantic interpretation, but is visually presented aligned
+    with other <dd>.
+    -->
+
+<!ELEMENT dd (%flow;)* >
+
+<!ATTLIST dd
+  %attrs;
+  >
+
+<!--Use: list contains some form of list, ordered, unordered, or preformatted.
+    The list may have intermixed heading <hd> (generally only one,
+    possibly with <prodnote>) and an intermixture of list items <li>
+    and <pagenum>. If bullets and outline enumerations are part of
+    the preformatted print content, they are expected to prefix those list
+    items in content, rather than be implicitly generated. Note: XHTML
+    has explicitly distinguished list element types: ol for ordered,
+    and ul for unordered, but not pl for preformatted.
+    -->
+
+<!ELEMENT list (hd | prodnote | li | pagenum)+ >
+
+<!--HB: 2004-03-25 36d: list: added start attribute to indicate initial
+    ordinal of a numbered list. -->
+
+<!--HB: 2004-03-31 list: changed enum from 'U' to 'A' for uppercase, and
+    "X" to 'I' for uppercase Roman. --> 
+
+<!--HB: 2004-03-31 list: changed enum value choices from "U" to "A" for
+    uppercase, and "X" to "I" for uppercase Roman for compatibility
+    with xhtml. -->
+
+<!--HB: 2004-04-02 list: expanded discussion on enum attribute. -->
+
+<!--HB: 2004-04-27 list: added type "pl" to indicate that the list is 
+    preformatted so no bullets or enumerations should be added. -->
+
+<!--Attuse: list
+
+    "type" indicates whether the list items
+    <li> are ordered 'ol' or 
+             unordered 'ul' or
+             preformatted 'pl'.
+
+    "depth" indicates nesting depth of lists within list items <li>
+    of ancestor lists, starting at 1.
+
+    "enum" indicates the kind of enumeration:
+        '1'=integer,
+        'a'=lowercase,
+        'A'=uppercase,
+        'i'=lowercase Roman, or
+        'I'=uppercase Roman.
+
+    "start" value indicates the ordered list integer ordinal, impllcitly 1,
+    to denote the first ordered list item. Its value is determined for the
+    indicated enum type. A start value is useful when there is an injection
+    of a different element type, such as <pageno>.
+    -->
+
+<!--HB: 2004-04-22 list: removed bullet attribute, It is up to a style-sheet to
+    make any needed visual distinction for nested unordered lists, or if the
+    list type is "pl" preformatted the bullet form may be there. -->
+
+<!ATTLIST list
+  %attrs;
+  type (ol | ul | pl) #REQUIRED
+  depth CDATA #IMPLIED
+  enum (1 | a | A | i | I) #IMPLIED
+  start CDATA #IMPLIED
+  >
+
+<!--Use: li marks each list item in a <list>. <li> content may be
+    either inline or block and may include other nested
+    lists. Alternatively it may contain a sequence of list item
+    components, <lic>, that identify regularly occurring content,
+    such as the heading and page number of each entry in a
+    table of contents.
+    -->
+
+<!ELEMENT li (%flow; | lic)* >
+
+<!ATTLIST li
+  %attrs;
+  >
+
+<!--Use: lic ("list item component") allows ordered substructure
+    within a list item <li>. Used when a list item is made up of
+    two or more components, as in a table of contents entry.
+    The same number of <lic> should occur in each <li>. If not,
+    correspondence of <lic> in different <li> is in order of
+    occurrence for the current writing direction of the <li>.
+    -->
+
+<!ELEMENT lic (%inline;)* >
+
+<!--Attuse: lic
+
+    class attribute may be used to identify the particular
+    component of a list item <li>. For example, in a table of contents
+    class values might include "section", and "pagenumber".
+    -->
+
+<!ATTLIST lic
+  %attrs;
+  >
+
+<!--=============================== Tables ================================-->
+
+<!-- The XHTML <table> model is used, including the presentational
+        attributes that have little meaning in Digital Talking Books,
+        but may be useful for concurrent display in different media.
+        That model is derived from IETF HTML table standard, see [RFC1942].
+
+        Note: The XHTML <table> model has been enhanced from HTML to allow
+        a simple <table> of one or more rows <tr>.
+    -->
+
+<!ENTITY % Scope
+    "(row | col | rowgroup | colgroup)" >
+    <!-- Scope specifies a set of data cells for which the <th> provides
+        header information. -->
+
+<!ENTITY % TFrame
+    "(void | above | below | hsides | lhs | rhs | vsides | box | border)" >
+    <!-- TFrame identifies the sides that are visually framed. -->
+
+<!ENTITY % TRules
+    "(none | groups | rows | cols | all)" >
+    <!-- %TRules identifies where visual rulings appear.
+        If no Trules is present then assume:
+        'none' if border is absent or border='0' otherwise 'all'. -->
+
+
+<!ENTITY % cellhalign
+    "align      (left|center|right|justify|char) #IMPLIED
+     char       %Character;    #IMPLIED
+     charoff    %Length;       #IMPLIED" >
+    <!-- % cellhalign
+        cellhalign sets horizontal alignment of content in
+        a table cell.
+
+        char indicates a character expected in each table
+        cell of a column that text should align on. The default is
+        the decimal point for the current language.
+
+        charoff sets the alignment offset of the first character
+        to align on, as specified with char.
+
+        Inheritance order for horizontal alignment is <th>|<td>,
+        <tr>, <thead>|<tfoot>|<tbody>, <col>, <colgroup>, default. The
+        default value is from the user agent, and may be affected
+        by user preference. The recommended default alignment for
+        <th> is center, and for <td> is left.
+        -->
+
+
+<!ENTITY % cellvalign
+    "valign     (top|middle|bottom|baseline) #IMPLIED" >
+    <!-- % cellvalign
+        valign sets vertical alignment of content in a table cell.
+
+        Inheritance order for vertical alignment is <th>|<td>, <col>,
+        <colgroup>, <tr>, <thead>|<tfoot>|<tbody>, default. The
+        default value is from the user agent, and may be affected
+        by user preference. The recommended default is middle.
+       -->
+
+<!--Use: table contains cells of tabular data arranged in rows and
+    columns. A <table> may have a <caption>. It may have descriptions of
+    the columns in <col>s or groupings of several <col> in <colgroup>.
+    A simple <table> may be made up of just rows <tr>. A long table
+    crossing several pages of the print book should have separate
+    <pagenum> values for each of the pages containing that <table>
+    indicated on the page where it starts. Note the logical order of
+    optional <thead>, optional <tfoot>, then one or more of either
+    <tbody> or just rows <tr>. This order accommodates simple or large,
+    complex tables. The <thead> and <tfoot> information usually helps
+    identify content of the <tbody> rows, For a multiple-page print
+    <table> the <thead> and <tfoot> are repeated on each page, but
+    not redundantly tagged.
+    -->
+
+       
+
+<!ELEMENT table (caption?, (col* | colgroup*), thead?, tfoot?, (tbody+| tr+)) >
+
+<!--Attuse: table
+
+    "summary" value provides a textual summary.
+
+    The attributes: "width", "border", "frame", "rules", "cellspacing",
+    and "cellpadding" provide visual presentation guidance. See their
+    explanation in the comment following those parameter entity
+    declarations.
+    -->
+
+<!ATTLIST table
+  %attrs;
+  summary %Text; #IMPLIED
+  width %Length; #IMPLIED
+  border %Pixels; #IMPLIED
+  frame %TFrame; #IMPLIED
+  rules %TRules; #IMPLIED
+  cellspacing %Length; #IMPLIED
+  cellpadding %Length; #IMPLIED
+  >
+<!--HB: 2004-03-25 36f: caption: removed use for <img>. -->
+<!--MM: 2004-09-15: caption: changed content model to %flow;. -->
+
+<!--Use: caption describes a <table>, or <imggroup>. If used with
+    <table> it must follow immediately after the <table> start tag. If used
+    with <imggroup> it is not so constrained.
+    -->
+
+<!ELEMENT caption (%flow;)* >
+
+
+<!--Attuse: caption
+
+    "imgref" value (or space-separated
+    id values) identifies the id values of the <img>(s) to which the
+    caption applies. Any internal id reference is preceded by '#id'.
+    Note: imgref is an extension for dtbook.
+    -->
+
+<!ATTLIST caption
+  %attrs;
+  imgref IDREFS #IMPLIED
+  >
+
+
+<!--Use: thead marks header information in a <table>, consisting of
+    one or more rows <tr> of <th> cells. Use <thead> to duplicate
+    headers when breaking table across page boundaries, or for static
+    headers when <tbody> sections are rendered in scrolling panel.
+    -->
+
+<!ELEMENT thead (tr)+ >
+
+<!ATTLIST thead
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+
+<!--Use: tfoot marks footer information in a <table>, consisting of
+    one or more rows <tr>, usually of <th> cells. Use <tfoot> to
+    duplicate footers when breaking table across page boundaries,
+    or for static footers when <tbody> sections are rendered in
+    scrolling panel.
+    -->
+
+<!ELEMENT tfoot (tr)+ >
+
+<!ATTLIST tfoot
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+
+<!--Use: tbody marks a group of rows in the main body of a <table>. If
+    the <table> is divided into several sections, each consisting of a
+    number of rows, each section would be separately tagged with <tbody>.
+    The same <thead> and <tfoot> apply to every <tbody> section.
+    Use multiple <tbody> sections when rules are needed between groups
+    of table rows.
+    -->
+
+<!ELEMENT tbody (tr)+ >
+
+<!ATTLIST tbody
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!--Use: colgroup groups adjacent columns <col> that are semantically
+    related.
+    -->
+
+<!ELEMENT colgroup (col)* >
+
+<!--Attuse: colgroup
+
+    "span" causes the attributes of one
+    col element to apply to more than one column, extending in the
+    writing direction for the language. Span is ignored if
+    any <col> are present.
+
+    "width" specifies the width of the columns, e.g.
+
+        width='64'        width in screen pixels
+        width='0.5*'      relative width of 0.5
+
+    "width" may contain a space- or comma-separated list of widths
+    for each <col>, or percentages if values end in '%', or relative
+    'nn*' to indicate a fractional portion of the remaining
+    widths after more explicit forms have been specified for other
+    columns in the colgroup (presumably the sum encompasses all
+    the columns). '0*' indicates minimal acceptable width based
+    on column content.
+
+    The <col> in a <colgroup> may inherit attribute values
+    from it, or the closest enclosing ancestor element:
+    <thead>|<tfoot>|<tbody>. If none, then the values are up to the
+    user agent, possibly by user preference.
+    -->
+
+<!ATTLIST colgroup
+  %attrs;
+  span NMTOKEN '1'
+  width %MultiLength; #IMPLIED
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!--Use: col elements define the alignment properties for cells in
+    one or more columns.
+    -->
+
+<!ELEMENT col EMPTY >
+
+<!--Attuse: col
+    "span" indicates how many columns the <col>
+    extends, in the writing direction of the <table>. The
+    attribute values apply to <th> and <td> that start in the
+    column, even if they extend into the next column(s), by
+    span value more than 1, and that next <col> may have different
+    attribute values.
+
+    "width" may contain a space- or comma-separated list of widths
+    for each <col> of the span, or percentages if values end in '%',
+    or relative 'nn*' to indicate a fractional portion of the remaining
+    widths after more explicit forms have been specified for other
+    columns in the span (presumably the sum encompasses all
+    the columns of this span, and of other <colgroup>s). '0*' indicates
+    minimal acceptable width based on individual <col> content.
+
+    <col> may inherit attribute values from the most immediate
+    enclosing ancestor element: <colgroup>, <thead>|<tbody>|<tfoot>.
+    If none, it is up to the user agent, possibly by user preference.
+    -->
+
+<!ATTLIST col
+  %attrs;
+  span NMTOKEN '1'
+  width %MultiLength; #IMPLIED
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!--Use: tr marks one row of a <table> containing <th> or <td> cells.
+    -->
+
+<!ELEMENT tr (th | td)+ >
+
+<!--Attuse: tr
+
+    %cellvalign; values provide default vertical alignment
+    values for <th> and <td> in the row, overriding any from
+        <thead>|<tbody>|<tfoot>, <col>, <colgroup>
+    If none, it is up to the user agent, possibly by user preference.
+
+    %cellhalign; values provide default horizontal alignment from
+        <thead>|<tbody>|<tfoot>
+    If none, it is up to the user agent, possibly by user preference.
+
+    -->
+
+<!ATTLIST tr
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!--Use: th indicates a table cell containing header information.
+    -->
+
+<!ELEMENT th (%flownopagenum;)* >
+
+<!--Attuse: th
+
+    The uses of attributes other than %attrs; %cellvalign; and %cellhalign;
+    are shown below. See [HTML401STRICT] for details and examples.
+
+    "abbr" provides an abbreviated name for a <th> cell that can be used
+    when referring to that <th> cell. Its default value is the cell content.
+
+    "axis" is used to place cells into conceptual categories in order to
+    provide improved access to information.
+
+    "headers" provides the id value(s), used with <td> cells, to reference
+    one or more cells with <th id="xxx"> that contain headings that
+    collectively describe or qualify the content of the cell, for example
+    <td headers="id1 id2">.
+
+    "scope" identifies one of
+        (row | rowgroup | column | colgroup)
+    to which the header information applies.
+
+    "rowspan" indicates the total number of rows that the cell extends, by
+    default 1. All spanned cells share these attributes.
+
+    "colspan" indicates the total number of columns the cell extends,
+    by default 1, in the writing direction of the table. All spanned
+    cells share these attributes.
+    -->
+
+<!ATTLIST th
+  %attrs;
+  abbr %Text; #IMPLIED
+  axis CDATA #IMPLIED
+  headers IDREFS #IMPLIED
+  scope %Scope; #IMPLIED
+  rowspan NMTOKEN '1'
+  colspan NMTOKEN '1'
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!--Use: td indicates a table cell containing data.
+    -->
+
+<!ELEMENT td (%flownopagenum;)* >
+
+<!--Attuse: td
+
+    The uses of attributes other than %attrs; %cellhalign; and %cellvalign;
+    are shown below.  See [HTML401STRICT] for details and examples.
+
+    "abbr" provides an abbreviated name for a <th> cell that can be used
+    when referring to that <th> cell. Its default value is the cell content.
+
+    "axis" is used to place cells into conceptual categories in order to
+    provide improved access to information.
+
+    "headers" provides the id value(s), used with <td> cells, to reference
+    one or more cells with <th id="xxx"> that contain headings that
+    collectively describe or qualify the content of the cell, for example
+    <td headers="id1 id2">.
+
+    "scope" identifies one of
+        (row | rowgroup | column | colgroup)
+    to which the header information applies.
+
+    "rowspan" indicates the total number of rows that the cell extends, by
+    default 1. All spanned cells share these attributes.
+
+    "colspan" indicates the total number of columns the cell extends,
+    by default 1, in the writing direction of the table. All spanned
+    cells share these attributes.
+    -->
+
+<!ATTLIST td
+  %attrs;
+  abbr %Text; #IMPLIED
+  axis CDATA #IMPLIED
+  headers IDREFS #IMPLIED
+  scope %Scope; #IMPLIED
+  rowspan NMTOKEN '1'
+  colspan NMTOKEN '1'
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!-- End dtbook-2005-2.dtd -->
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/dtd/ncx-2005-1.dtd b/src/main/resources/com/adobe/epubcheck/schema/20/dtd/ncx-2005-1.dtd
new file mode 100644
index 0000000..b889c41
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/dtd/ncx-2005-1.dtd
@@ -0,0 +1,269 @@
+<!-- NCX 2005-1 DTD  2005-06-26
+file: ncx-2005-1.dtd                                 
+
+  Authors: Mark Hakkinen, George Kerscher, Tom McLaughlin, James Pritchett, and Michael Moodie
+  Change list:
+  2002-02-12 M. Moodie. Changed content model of navLabel element to eliminate ambiguity.
+  2002-02-27 M. Moodie. Grammatical changes suggested by editor.
+  2004-03-31 J. Pritchett.  Various changes per the 2004 change list:
+            - Changed internal version numbers from 1.1.0 to 1.2.0
+            - Made audio clipBegin/clipEnd mandatory (change #10)
+            - Dropped value attribute from navPoint (change #11)
+            - Replaced lang attribute with xml:lang (change #12)
+            - Added <pageList> and <pageTarget> elements (change #48)
+            - Dropped onFocus and onBlur attributes from navPoint and navTarget (change #49)
+            - Added <img> to content models of docTitle and docAuthor (change #50)
+            - Removed reference to pages in description of navList (change #52)
+            - Added <navInfo> element (change #53)
+            - Added default namespace attribute to description of <ncx> (change #L8)
+            - Removed pageRef and mapRef attributes
+  2004-04-05 J. Pritchett.  Changes after feedback from MM and MG to 2004-03-31 version
+            - Changed internal version numbers from 1.2.0 to 1.1.2 (per MM e-mail of 3/31)
+            - Changed system identifier to use z3986/2004 as path instead of z3986/v100 (per 3/31 con call)
+            - Added class attribute to both pageTarget and pageList (per MG e-mail of 4/1)
+            - Added comment text describing value attribute for pageTarget and navTarget (per MM e-mail of 3/31)
+            - Changed declaration of type attribute on pageTarget to enumerate allowed values 
+            - Added playOrder attribute to navPoint, navTarget, and pageTarget (per Lloyd's proposal)
+2004-04-05 T. McLaughlin. In description of smilCustomTest, added id and defaultState are to be copied. 
+Version update to 1.1.3.
+2004-05-14 T. McLaughlin. Reinstated override attribute to be copied also. Added bookStruct attribute 
+and enum list to smilCustomTest. Update to 1.1.4.
+Revised, 4/5/2004:  Changed version to 1.1.2 
+Revised, 4/5/2004:  Changed system identifier to use '2004' path 
+Revised, 4/5/2004:  TM, Changed version to 1.1.3 
+Revised, 5/14/2004:  TM, Changed version to 1.1.4 
+2004-07-07 M. Moodie Updated version to 1.2.0 everywhere but at top, where version was set to 1.1.5.
+2004-09-15 M. Moodie.  Changed uri to URI throughout.  Set version to 1.1.6.
+2004-09-16 M. Moodie.  Changed version to 1.2.0
+2005-06-26 M. Gylling. Changed pid, sid, ns uri, and filename for Z3986-2005
+            
+  Description:
+                                                  
+  NCX (Navigation Control for XML applications) is a generalized navigation definition DTD for application
+to Digital Talking Books, eBooks, and general web content models.                                                
+This DTD is an XML application that layers navigation functionality on top of SMIL 2.0  content.                                       
+  
+  The NCX defines a navigation path/model that may be applied upon existing publications,
+without modification of the existing publication source, so long as the navigation targets within
+the source publication can be directly referenced via a URI.                      
+             
+The following identifiers apply to this DTD:
+  "-//NISO//DTD ncx 2005-1//EN"
+  "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd"
+-->
+
+<!-- Basic Entities -->
+
+<!ENTITY % i18n 
+  "xml:lang    NMTOKEN    #IMPLIED
+  dir    (ltr|rtl)  #IMPLIED" >
+
+<!ENTITY % SMILtimeVal  "CDATA" >
+<!ENTITY % URI    "CDATA" >
+<!ENTITY % script  "CDATA" >
+
+<!-- ELEMENTS -->
+
+<!-- Top Level NCX Container. -->
+<!-- Revised, 3/31/2004:  Added pageList to content model -->
+<!ELEMENT ncx (head, docTitle, docAuthor*, navMap, pageList?, navList*)>
+<!-- Revised, 4/5/2004:  Changed version to 1.1.2 -->
+<!-- Revised 3/29/2004:  Added xmlns -->
+<!-- Revised, 4/5/2004:  TM, Changed version to 1.1.3 -->
+<!-- Revised, 5/14/2004:  TM, Changed version to 1.1.4 -->
+<!-- Revised, 7/7/2004:  MM, Changed version to 1.2.0 -->
+<!ATTLIST ncx 
+  version     CDATA     #FIXED "2005-1"
+  xmlns       %URI;     #FIXED "http://www.daisy.org/z3986/2005/ncx/"
+  %i18n;
+>
+
+<!-- Document Head - Contains all NCX metadata.  
+-->
+
+<!ELEMENT head (smilCustomTest | meta)+>
+
+<!-- 2004-04-05 TM - only id and defaultState are copied -->
+<!-- 2004-05-14 TM - revert to override copied too; added bookStruct attribute -->
+<!-- smilCustomTest - Duplicates customTest data found in SMIL files.  Each unique customTest 
+element that appears in one or more SMIL files must have its id, defaultState and override 
+attributes duplicated in a smilCustomTest element in the NCX.  The NCX thus gathers in one 
+place all customTest elements used in the SMIL files, for presentation to the user.
+-->
+<!ELEMENT smilCustomTest EMPTY>
+<!ATTLIST smilCustomTest
+id    ID    #REQUIRED
+defaultState  (true|false)   'false'
+override  (visible|hidden) 'hidden'
+bookStruct  (PAGE_NUMBER|NOTE|NOTE_REFERENCE|ANNOTATION|LINE_NUMBER|OPTIONAL_SIDEBAR|OPTIONAL_PRODUCER_NOTE)  #IMPLIED
+>
+
+<!-- Meta Element - metadata about this NCX -->
+<!ELEMENT meta EMPTY>
+<!ATTLIST meta
+  name    CDATA    #REQUIRED
+  content  CDATA    #REQUIRED
+  scheme  CDATA    #IMPLIED
+>
+
+<!-- DocTitle - the title of the document, required and must immediately follow head. 
+-->
+
+<!-- Revised, 3/31/2004:  Added img to content model -->
+<!ELEMENT docTitle (text, audio?, img?)>
+<!ATTLIST docTitle
+  id    ID    #IMPLIED
+  %i18n;
+>
+
+<!-- DocAuthor - the author of the document, immediately follows docTitle.
+-->
+
+<!-- Revised, 3/31/2004:  Added img to content model -->
+<!ELEMENT docAuthor (text, audio?, img?)>
+<!ATTLIST docAuthor
+  id    ID    #IMPLIED
+  %i18n;
+>
+
+<!-- Navigation Structure - container for all of the NCX objects that are part of the 
+hierarchical structure of the document.
+-->
+
+<!-- Revised, 3/31/2004:  Added navInfo to content model -->
+<!ELEMENT navMap (navInfo*, navLabel*, navPoint+)>
+<!ATTLIST navMap
+  id    ID    #IMPLIED
+>
+
+<!-- Navigation Point - contains description(s) of target, as well as a pointer to 
+entire content of target.
+Hierarchy is represented by nesting navPoints.  "class" attribute describes the kind 
+of structural unit this object represents (e.g., "chapter", "section").
+-->
+<!ELEMENT navPoint (navLabel+, content, navPoint*)>
+<!-- Revised, 3/29/2004:  Removed onFocus/onBlur -->
+<!-- Revised, 3/29/2004:  Removed value -->
+<!-- Revised, 3/31/2004:  Removed pageRef -->
+<!-- Revised, 4/5/2004:  Added playOrder -->
+<!ATTLIST navPoint
+  id    ID      #REQUIRED
+  class    CDATA    #IMPLIED
+  playOrder CDATA       #REQUIRED
+>
+
+<!-- Revised, 3/31/2004:  Added pageList element -->
+<!-- Page List -  Container for pagination information.
+  -->
+<!ELEMENT pageList (navInfo*, navLabel*, pageTarget+)>
+<!-- Revised, 4/5/2004:  Added class attribute -->
+<!ATTLIST pageList
+   id       ID          #IMPLIED
+   class    CDATA       #IMPLIED
+>
+
+<!-- Revised, 3/31/2004:  Added pageTarget element -->
+<!-- Revised, 4/5/2004:  Added description of value attribute to comment -->
+<!-- Page Target -  Container for 
+  text, audio, image, and content elements containing navigational 
+  information for pages.  The "value" attribute is a positive integer representing 
+the numeric value associated with a page. Combination of values of type and 
+value attributes must be unique, when value attribute is present. 
+-->
+<!ELEMENT pageTarget (navLabel+, content)>
+<!-- Revised, 4/5/2004:  Added class attribute -->
+<!-- Revised, 4/5/2004:  Changed declaration of type attribute to enumerate values -->
+<!-- Revised, 4/5/2004:  Added playOrder -->
+<!ATTLIST pageTarget
+   id       ID          #IMPLIED
+   value    CDATA       #IMPLIED
+   type     (front | normal | special)       #REQUIRED
+   class    CDATA       #IMPLIED
+   playOrder CDATA      #REQUIRED
+>
+
+<!-- Navigation List - container for distinct, flat sets of navigable elements, e.g.  
+notes, figures, tables, etc.  Essentially a flat version of navMap.  The "class" attribute 
+describes the type of object contained in this navList, using dtbook element names, e.g., note.
+-->
+
+<!-- Revised, 3/31/2004:  Added navInfo to content model -->
+<!ELEMENT navList   (navInfo*, navLabel+, navTarget+) >
+<!ATTLIST navList
+  id    ID    #IMPLIED
+  class    CDATA    #IMPLIED
+>
+
+<!-- Revised, 4/5/2004:  Added description of value attribute to comment -->
+<!-- Navigation Target - contains description(s) of target, as well as a pointer to 
+entire content of target.
+navTargets are the equivalent of navPoints for use in navLists.  "class" attribute 
+describes the kind of structure this target represents, using its dtbook element 
+name, e.g., note.  The "value" attribute is a positive integer representing the 
+numeric value associated with the navTarget.
+-->
+
+<!ELEMENT navTarget  (navLabel+, content) >
+<!-- Revised, 3/29/2004:  Removed onFocus/onBlur -->
+<!-- Revised, 3/31/2004:  Removed mapRef -->
+<!-- Revised, 4/5/2004:  Added playOrder -->
+<!ATTLIST navTarget
+  id    ID    #REQUIRED
+  class    CDATA    #IMPLIED
+  value    CDATA    #IMPLIED
+  playOrder CDATA       #REQUIRED
+>
+
+
+<!-- Revised, 3/31/2004:  Added navInfo element -->
+<!-- Navigation Information - Contains an informative comment
+  about a navMap, pageList, or navList in various media for presentation to the user.
+-->
+<!ELEMENT navInfo (((text, audio?) | audio), img?)>
+<!ATTLIST navInfo
+  %i18n; 
+>
+
+
+<!-- Navigation Label - Contains a description of a given <navMap>, <navPoint>, 
+<navList>, or <navTarget> in various media for presentation to the user. Can be 
+repeated so descriptions can be provided in multiple languages. -->
+<!ELEMENT navLabel (((text, audio?) | audio), img?)>
+<!ATTLIST navLabel
+  %i18n; 
+>
+
+
+<!-- Content Element - pointer into SMIL to beginning of navPoint. -->
+<!ELEMENT content EMPTY>
+<!ATTLIST content
+  id    ID    #IMPLIED
+  src    %URI;    #REQUIRED
+>
+
+<!-- Text Element - Contains text of docTitle, navPoint heading, navTarget (e.g., page number), 
+or label for navMap or navList. -->
+<!ELEMENT text (#PCDATA)>
+<!ATTLIST text
+  id    ID        #IMPLIED
+  class  CDATA      #IMPLIED
+>
+
+<!-- Audio Element - audio clip of navPoint heading. -->
+<!ELEMENT audio EMPTY>
+<!-- Revised, 3/29/2004:  clipBegin/clipEnd now REQUIRED -->
+<!ATTLIST audio
+  id    ID        #IMPLIED
+  class  CDATA      #IMPLIED
+  src    %URI;      #REQUIRED
+  clipBegin %SMILtimeVal;  #REQUIRED
+  clipEnd  %SMILtimeVal;  #REQUIRED
+>
+
+<!-- Image Element - image that may accompany heading. -->
+<!ELEMENT img EMPTY>
+<!ATTLIST img
+  id    ID      #IMPLIED
+  class  CDATA    #IMPLIED
+  src    %URI;    #REQUIRED
+>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/dtd/oeb12.dtdinc b/src/main/resources/com/adobe/epubcheck/schema/20/dtd/oeb12.dtdinc
new file mode 100644
index 0000000..71120a1
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/dtd/oeb12.dtdinc
@@ -0,0 +1,1136 @@
+<!--
+
+Title:
+
+     Mnemonic Character Entities For the Open eBook Publication
+     Structure Version 1.2
+
+
+Version:
+
+     1.2
+
+
+Revision:
+
+     20020930-x  (supercedes 20020424-x)
+
+
+Revision History Note:
+
+     This revision, 20020930-x, which supercedes the prior revision
+     20020424-x, updates: 1) an email address within this comment
+     prologue, and 2) the Unicode version number referenced in various
+     comments throughout this document. No changes whatsoever were
+     made to the parsed content of this DTD fragment.
+
+
+Previous Version:
+
+     1.0.1 (Revision of 22-November-2000, "Character Entities for
+            the Open eBook Publication Structure Version 1.0.1")
+
+
+Authors:
+
+     Version 1.0; 1.0.1
+
+          Gunter Hille <hille at abc.de>
+          Ben Trafford <ben at legendary.org>
+          Garret Wilson <garret at globalmentor.com>
+
+
+     This Version 1.2 updated and edited by:
+
+          Jon Noring <jon at noring.name>
+
+
+Usage:
+
+     <!ENTITY % OEBEntities
+              PUBLIC "+//ISBN 0-9673008-1-9//DTD OEB 1.2 Entities//EN"
+              "http://openebook.org/dtds/oeb-1.2/oeb12.ent">
+
+     %OEBEntities;
+
+
+Summary:
+
+     This DTD fragment exactly duplicates, with some reorganization,
+     correction, and reformatting of the descriptive text, the 253
+     character entity declarations in the XHTML 1.1 DTD. Refer to:
+
+          http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent
+          http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent
+          http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent
+
+
+Relation to OEBPS Version 1.0.1:
+
+     The 253 character entities declared herein include all 249 from
+     Version 1.0.1 plus four of the five pre-defined XML 1.0 character
+     entities of &, <, >, " (the fifth pre-defined XML
+     character entity, ', is one of the 249 character entities
+     already declared in Version 1.0.1.)
+
+     The five pre-defined XML 1.0 character entities are included for
+     completeness and interoperability as recommended by W3C, and to
+     follow XHTML practice. (Further information on the purpose and
+     usage of these five pre-defined XML character entities, and the
+     normative reference, is given in the Usage Note below.)
+
+
+Relation to Unicode 3.2.0 and ISO/IEC 10646:
+
+     The mnemonic character entities declared herein substitute for
+     numeric character references, the numeric values for the
+     associated characters specified by Unicode (in turn, the Unicode
+     Character Data Set conforms with the ISO/IEC 10646 character set
+     which XML 1.0 specifies.) The current version of Unicode is
+     3.2.0. General information on Unicode, including information on
+     the latest version, is found at
+
+          http://www.unicode.org/
+
+     In addition, Unicode has categorized the massive number of
+     characters in its Character Database using two different systems:
+     Character Blocks and Script Names. These two systems are used
+     herein for general categorization of the 253 character entities.
+     The text files listing the code points for these two systems are:
+
+          http://www.unicode.org/Public/UNIDATA/Blocks.txt
+          http://www.unicode.org/Public/UNIDATA/Scripts.txt
+
+
+Tutorial Note to Document Authors: Character Entity Usage
+
+     To insert the desired special character into the content of an
+     OEBPS Document or Package file (which are XML documents), prefix
+     the associated mnemonic character entity with the '&' character
+     and terminate with the ';' character.
+
+     Example: to insert the "em dash" character (which has the
+     mnemonic 'mdash'), use — .
+
+     If preferred, the character can instead be inserted using the
+     direct (Unicode) numerical character reference, the codes of
+     which are given herein (see the above note on Unicode.) So, for
+     the "em dash" character one can use, instead of —, either
+     the decimal — or the hexadecimal equivalent &#x2014; .
+
+     Importantly note that within the content (PCDATA) of all OEBPS
+     documents and package files, the special XML characters '&' and
+     '<', when intended to be used literally, MUST be represented with
+     the mnemonic character entities of & and < (or the numerical
+     character entity equivalents), respectively. In addition, it is
+     considered good practice to use the > (or numerical equivalent)
+     for the '>' symbol, although it is not necessary except in very
+     unusual and rare circumstances. The two other special XML character
+     entities, apostrophe (') and quote ("), are only
+     necessary within element attribute values to literally represent
+     these characters, and for similar non-content purposes.
+
+     (The normative reference on the five XML pre-defined mnemonic
+     character entities is given in Sections 2.4 and 4.6 of the XML
+     1.0 Specification, Second Edition:
+
+          http://www.w3.org/TR/2000/REC-xml-20001006
+
+     )
+
+
+     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+       Portions (C) International Organization for
+       Standardization 1986. Permission to copy in any
+       form is granted for use with conforming SGML
+       systems and applications as defined in ISO 8879,
+       provided this notice is included in all copies.
+     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+-->
+
+<!--
+
+     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+       XML 1.0 Pre-Defined Character Entities
+     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+       Drawn From Unicode 3.2.0 Character Sets:
+
+             Block Name(s):  Basic Latin              (U+0000 to U+007F)
+            Script Name(s):  (none)
+
+-->
+
+
+<!ENTITY quot       """ ><!-- quotation mark
+                                  APL quote
+                                  ==================== U+0022 ISOnum -->
+
+<!ENTITY amp    "&#38;" ><!-- ampersand
+                                  ==================== U+0026 ISOnum -->
+
+<!ENTITY apos       "'" ><!-- apostrophe mark
+                                  ==================== U+0027 ISOnum -->
+
+<!ENTITY lt     "&#60;" ><!-- less-than sign
+                                  ==================== U+003C ISOnum -->
+
+<!ENTITY gt         ">" ><!-- greater-than sign
+                                  ==================== U+003E ISOnum -->
+
+
+<!--
+
+     +-+-+-+-+-+-+-+-+-+-+-+-+
+       Extended Latin Script
+     +-+-+-+-+-+-+-+-+-+-+-+-+
+
+       Drawn From Unicode 3.2.0 Character Sets:
+
+             Block Name(s):  Latin-1 Supplement       (U+0080 to U+00FF)
+                             Latin Extended-A         (U+0100 to U+017F)
+                             Latin Extended-B         (U+0180 to U+024F)
+            Script Name(s):  Latin
+
+-->
+
+
+<!ENTITY ordf      "ª" ><!-- feminine ordinal indicator
+                                  ==================== U+00AA ISOnum -->
+
+<!ENTITY ordm      "º" ><!-- masculine ordinal indicator
+                                  ==================== U+00BA ISOnum -->
+
+<!ENTITY Agrave    "À" ><!-- Latin capital letter A with grave
+                                  Latin capital letter A grave
+                                  =================== U+00C0 ISOlat1 -->
+
+<!ENTITY Aacute    "Á" ><!-- Latin capital letter A with acute
+                                  =================== U+00C1 ISOlat1 -->
+
+<!ENTITY Acirc     "Â" ><!-- Latin capital letter A with circumflex
+                                  =================== U+00C2 ISOlat1 -->
+
+<!ENTITY Atilde    "Ã" ><!-- Latin capital letter A with tilde
+                                  =================== U+00C3 ISOlat1 -->
+
+<!ENTITY Auml      "Ä" ><!-- Latin capital letter A with diaeresis
+                                  =================== U+00C4 ISOlat1 -->
+
+<!ENTITY Aring     "Å" ><!-- Latin capital letter A with ring above
+                                  Latin capital letter A ring
+                                  =================== U+00C5 ISOlat1 -->
+
+<!ENTITY AElig     "Æ" ><!-- Latin capital letter AE
+                                  Latin capital ligature AE
+                                  =================== U+00C6 ISOlat1 -->
+
+<!ENTITY Ccedil    "Ç" ><!-- Latin capital letter C with cedilla
+                                  =================== U+00C7 ISOlat1 -->
+
+<!ENTITY Egrave    "È" ><!-- Latin capital letter E with grave
+                                  =================== U+00C8 ISOlat1 -->
+
+<!ENTITY Eacute    "É" ><!-- Latin capital letter E with acute
+                                  =================== U+00C9 ISOlat1 -->
+
+<!ENTITY Ecirc     "Ê" ><!-- Latin capital letter E with circumflex
+                                  =================== U+00CA ISOlat1 -->
+
+<!ENTITY Euml      "Ë" ><!-- Latin capital letter E with diaeresis
+                                  =================== U+00CB ISOlat1 -->
+
+<!ENTITY Igrave    "Ì" ><!-- Latin capital letter I with grave
+                                  =================== U+00CC ISOlat1 -->
+
+<!ENTITY Iacute    "Í" ><!-- Latin capital letter I with acute
+                                  =================== U+00CD ISOlat1 -->
+
+<!ENTITY Icirc     "Î" ><!-- Latin capital letter I with circumflex
+                                  =================== U+00CE ISOlat1 -->
+
+<!ENTITY Iuml      "Ï" ><!-- Latin capital letter I with diaeresis
+                                  =================== U+00CF ISOlat1 -->
+
+<!ENTITY ETH       "Ð" ><!-- Latin capital letter ETH
+                                  =================== U+00D0 ISOlat1 -->
+
+<!ENTITY Ntilde    "Ñ" ><!-- Latin capital letter N with tilde
+                                  =================== U+00D1 ISOlat1 -->
+
+<!ENTITY Ograve    "Ò" ><!-- Latin capital letter O with grave
+                                  =================== U+00D2 ISOlat1 -->
+
+<!ENTITY Oacute    "Ó" ><!-- Latin capital letter O with acute
+                                  =================== U+00D3 ISOlat1 -->
+
+<!ENTITY Ocirc     "Ô" ><!-- Latin capital letter O with circumflex
+                                  =================== U+00D4 ISOlat1 -->
+
+<!ENTITY Otilde    "Õ" ><!-- Latin capital letter O with tilde
+                                  =================== U+00D5 ISOlat1 -->
+
+<!ENTITY Ouml      "Ö" ><!-- Latin capital letter O with diaeresis
+                                  =================== U+00D6 ISOlat1 -->
+
+<!ENTITY Oslash    "Ø" ><!-- Latin capital letter O with stroke
+                                  Latin capital letter O slash
+                                  =================== U+00D8 ISOlat1 -->
+
+<!ENTITY Ugrave    "Ù" ><!-- Latin capital letter U with grave
+                                  =================== U+00D9 ISOlat1 -->
+
+<!ENTITY Uacute    "Ú" ><!-- Latin capital letter U with acute
+                                  =================== U+00DA ISOlat1 -->
+
+<!ENTITY Ucirc     "Û" ><!-- Latin capital letter U with circumflex
+                                  =================== U+00DB ISOlat1 -->
+
+<!ENTITY Uuml      "Ü" ><!-- Latin capital letter U with diaeresis
+                                  =================== U+00DC ISOlat1 -->
+
+<!ENTITY Yacute    "Ý" ><!-- Latin capital letter Y with acute
+                                  =================== U+00DD ISOlat1 -->
+
+<!ENTITY THORN     "Þ" ><!-- Latin capital letter THORN
+                                  =================== U+00DE ISOlat1 -->
+
+<!ENTITY szlig     "ß" ><!-- Latin small letter sharp s
+                                  ess-zed
+                                  =================== U+00DF ISOlat1 -->
+
+<!ENTITY agrave    "à" ><!-- Latin small letter a with grave
+                                  Latin small letter a grave
+                                  =================== U+00E0 ISOlat1 -->
+
+<!ENTITY aacute    "á" ><!-- Latin small letter a with acute
+                                  =================== U+00E1 ISOlat1 -->
+
+<!ENTITY acirc     "â" ><!-- Latin small letter a with circumflex
+                                  =================== U+00E2 ISOlat1 -->
+
+<!ENTITY atilde    "ã" ><!-- Latin small letter a with tilde
+                                  =================== U+00E3 ISOlat1 -->
+
+<!ENTITY auml      "ä" ><!-- Latin small letter a with diaeresis
+                                  =================== U+00E4 ISOlat1 -->
+
+<!ENTITY aring     "å" ><!-- Latin small letter a with ring above
+                                  Latin small letter a ring
+                                  =================== U+00E5 ISOlat1 -->
+
+<!ENTITY aelig     "æ" ><!-- Latin small letter ae
+                                  Latin small ligature ae
+                                  =================== U+00E6 ISOlat1 -->
+
+<!ENTITY ccedil    "ç" ><!-- Latin small letter c with cedilla
+                                  =================== U+00E7 ISOlat1 -->
+
+<!ENTITY egrave    "è" ><!-- Latin small letter e with grave
+                                  =================== U+00E8 ISOlat1 -->
+
+<!ENTITY eacute    "é" ><!-- Latin small letter e with acute
+                                  =================== U+00E9 ISOlat1 -->
+
+<!ENTITY ecirc     "ê" ><!-- Latin small letter e with circumflex
+                                  =================== U+00EA ISOlat1 -->
+
+<!ENTITY euml      "ë" ><!-- Latin small letter e with diaeresis
+                                  =================== U+00EB ISOlat1 -->
+
+<!ENTITY igrave    "ì" ><!-- Latin small letter i with grave
+                                  =================== U+00EC ISOlat1 -->
+
+<!ENTITY iacute    "í" ><!-- Latin small letter i with acute
+                                  =================== U+00ED ISOlat1 -->
+
+<!ENTITY icirc     "î" ><!-- Latin small letter i with circumflex
+                                  =================== U+00EE ISOlat1 -->
+
+<!ENTITY iuml      "ï" ><!-- Latin small letter i with diaeresis
+                                  =================== U+00EF ISOlat1 -->
+
+<!ENTITY eth       "ð" ><!-- Latin small letter eth
+                                  =================== U+00F0 ISOlat1 -->
+
+<!ENTITY ntilde    "ñ" ><!-- Latin small letter n with tilde
+                                  =================== U+00F1 ISOlat1 -->
+
+<!ENTITY ograve    "ò" ><!-- Latin small letter o with grave
+                                  =================== U+00F2 ISOlat1 -->
+
+<!ENTITY oacute    "ó" ><!-- Latin small letter o with acute
+                                  =================== U+00F3 ISOlat1 -->
+
+<!ENTITY ocirc     "ô" ><!-- Latin small letter o with circumflex
+                                  =================== U+00F4 ISOlat1 -->
+
+<!ENTITY otilde    "õ" ><!-- Latin small letter o with tilde
+                                  =================== U+00F5 ISOlat1 -->
+
+<!ENTITY ouml      "ö" ><!-- Latin small letter o with diaeresis
+                                  =================== U+00F6 ISOlat1 -->
+
+<!ENTITY oslash    "ø" ><!-- Latin small letter o with stroke
+                                  Latin small letter o slash
+                                  =================== U+00F8 ISOlat1 -->
+
+<!ENTITY ugrave    "ù" ><!-- Latin small letter u with grave
+                                  =================== U+00F9 ISOlat1 -->
+
+<!ENTITY uacute    "ú" ><!-- Latin small letter u with acute
+                                  =================== U+00FA ISOlat1 -->
+
+<!ENTITY ucirc     "û" ><!-- Latin small letter u with circumflex
+                                  =================== U+00FB ISOlat1 -->
+
+<!ENTITY uuml      "ü" ><!-- Latin small letter u with diaeresis
+                                  =================== U+00FC ISOlat1 -->
+
+<!ENTITY yacute    "ý" ><!-- Latin small letter y with acute
+                                  =================== U+00FD ISOlat1 -->
+
+<!ENTITY thorn     "þ" ><!-- Latin small letter thorn with
+                                  =================== U+00FE ISOlat1 -->
+
+<!ENTITY yuml      "ÿ" ><!-- Latin small letter y with diaeresis
+                                  =================== U+00FF ISOlat1 -->
+
+<!ENTITY OElig     "Œ" ><!-- Latin capital ligature OE
+                                  =================== U+0152 ISOlat2 -->
+
+<!ENTITY oelig     "œ" ><!-- Latin small ligature oe
+                                  =================== U+0153 ISOlat2 -->
+
+<!ENTITY Scaron    "Š" ><!-- Latin capital letter S with caron
+                                  =================== U+0160 ISOlat2 -->
+
+<!ENTITY scaron    "š" ><!-- Latin small letter s with caron
+                                  =================== U+0161 ISOlat2 -->
+
+<!ENTITY Yuml      "Ÿ" ><!-- Latin capital letter Y with diaeresis
+                                  =================== U+0178 ISOlat2 -->
+
+<!ENTITY fnof      "ƒ" ><!-- Latin small f with hook
+                                  function
+                                  florin
+                                  =================== U+0192 ISOtech -->
+
+
+<!--
+
+     +-+-+-+-+-+-+-+
+       Greek Script
+     +-+-+-+-+-+-+-+
+
+       Drawn From Unicode 3.2.0 Character Sets:
+
+             Block Name(s):  Greek                    (U+0370 to U+03FF)
+            Script Name(s):  Greek
+
+-->
+
+
+<!ENTITY Alpha     "Α" ><!-- Greek capital letter alpha
+                                  =========================== U+0391 -->
+
+<!ENTITY Beta      "Β" ><!-- Greek capital letter beta
+                                  =========================== U+0392 -->
+
+<!ENTITY Gamma     "Γ" ><!-- Greek capital letter gamma
+                                  =================== U+0393 ISOgrk3 -->
+
+<!ENTITY Delta     "Δ" ><!-- Greek capital letter delta
+                                  =================== U+0394 ISOgrk3 -->
+
+<!ENTITY Epsilon   "Ε" ><!-- Greek capital letter epsilon
+                                  =========================== U+0395 -->
+
+<!ENTITY Zeta      "Ζ" ><!-- Greek capital letter zeta
+                                  =========================== U+0396 -->
+
+<!ENTITY Eta       "Η" ><!-- Greek capital letter eta
+                                  =========================== U+0397 -->
+
+<!ENTITY Theta     "Θ" ><!-- Greek capital letter theta
+                                  =================== U+0398 ISOgrk3 -->
+
+<!ENTITY Iota      "Ι" ><!-- Greek capital letter iota
+                                  =========================== U+0399 -->
+
+<!ENTITY Kappa     "Κ" ><!-- Greek capital letter kappa
+                                  =========================== U+039A -->
+
+<!ENTITY Lambda    "Λ" ><!-- Greek capital letter lambda
+                                  =================== U+039B ISOgrk3 -->
+
+<!ENTITY Mu        "Μ" ><!-- Greek capital letter mu
+                                  =========================== U+039C -->
+
+<!ENTITY Nu        "Ν" ><!-- Greek capital letter nu
+                                  =========================== U+039D -->
+
+<!ENTITY Xi        "Ξ" ><!-- Greek capital letter xi
+                                  =================== U+039E ISOgrk3 -->
+
+<!ENTITY Omicron   "Ο" ><!-- Greek capital letter omicron
+                                  =========================== U+039F -->
+
+<!ENTITY Pi        "Π" ><!-- Greek capital letter pi
+                                  =================== U+03A0 ISOgrk3 -->
+
+<!ENTITY Rho       "Ρ" ><!-- Greek capital letter rho
+                                  =========================== U+03A1 -->
+
+<!ENTITY Sigma     "Σ" ><!-- Greek capital letter sigma
+                                  =================== U+03A3 ISOgrk3 -->
+
+<!ENTITY Tau       "Τ" ><!-- Greek capital letter tau
+                                  =========================== U+03A4 -->
+
+<!ENTITY Upsilon   "Υ" ><!-- Greek capital letter upsilon
+                                  =================== U+03A5 ISOgrk3 -->
+
+<!ENTITY Phi       "Φ" ><!-- Greek capital letter phi
+                                  =================== U+03A6 ISOgrk3 -->
+
+<!ENTITY Chi       "Χ" ><!-- Greek capital letter chi
+                                  =========================== U+03A7 -->
+
+<!ENTITY Psi       "Ψ" ><!-- Greek capital letter psi
+                                  =================== U+03A8 ISOgrk3 -->
+
+<!ENTITY Omega     "Ω" ><!-- Greek capital letter omega
+                                  =================== U+03A9 ISOgrk3 -->
+
+<!ENTITY alpha     "α" ><!-- Greek small letter alpha
+                                  =================== U+03B1 ISOgrk3 -->
+
+<!ENTITY beta      "β" ><!-- Greek small letter beta
+                                  =================== U+03B2 ISOgrk3 -->
+
+<!ENTITY gamma     "γ" ><!-- Greek small letter gamma
+                                  =================== U+03B3 ISOgrk3 -->
+
+<!ENTITY delta     "δ" ><!-- Greek small letter delta
+                                  =================== U+03B4 ISOgrk3 -->
+
+<!ENTITY epsilon   "ε" ><!-- Greek small letter epsilon
+                                  =================== U+03B5 ISOgrk3 -->
+
+<!ENTITY zeta      "ζ" ><!-- Greek small letter zeta
+                                  =================== U+03B6 ISOgrk3 -->
+
+<!ENTITY eta       "η" ><!-- Greek small letter eta
+                                  =================== U+03B7 ISOgrk3 -->
+
+<!ENTITY theta     "θ" ><!-- Greek small letter theta
+                                  =================== U+03B8 ISOgrk3 -->
+
+<!ENTITY iota      "ι" ><!-- Greek small letter iota
+                                  =================== U+03B9 ISOgrk3 -->
+
+<!ENTITY kappa     "κ" ><!-- Greek small letter kappa
+                                  =================== U+03BA ISOgrk3 -->
+
+<!ENTITY lambda    "λ" ><!-- Greek small letter lambda
+                                  =================== U+03BB ISOgrk3 -->
+
+<!ENTITY mu        "μ" ><!-- Greek small letter mu
+                                  =================== U+03BC ISOgrk3 -->
+
+<!ENTITY nu        "ν" ><!-- Greek small letter nu
+                                  =================== U+03BD ISOgrk3 -->
+
+<!ENTITY xi        "ξ" ><!-- Greek small letter xi
+                                  =================== U+03BE ISOgrk3 -->
+
+<!ENTITY omicron   "ο" ><!-- Greek small letter omicron
+                                  ======================= U+03BF NEW -->
+
+<!ENTITY pi        "π" ><!-- Greek small letter pi
+                                  =================== U+03C0 ISOgrk3 -->
+
+<!ENTITY rho       "ρ" ><!-- Greek small letter rho
+                                  =================== U+03C1 ISOgrk3 -->
+
+<!ENTITY sigmaf    "ς" ><!-- Greek small letter final sigma
+                                  =================== U+03C2 ISOgrk3 -->
+
+<!ENTITY sigma     "σ" ><!-- Greek small letter sigma
+                                  =================== U+03C3 ISOgrk3 -->
+
+<!ENTITY tau       "τ" ><!-- Greek small letter tau
+                                  =================== U+03C4 ISOgrk3 -->
+
+<!ENTITY upsilon   "υ" ><!-- Greek small letter upsilon
+                                  =================== U+03C5 ISOgrk3 -->
+
+<!ENTITY phi       "φ" ><!-- Greek small letter phi
+                                  =================== U+03C6 ISOgrk3 -->
+
+<!ENTITY chi       "χ" ><!-- Greek small letter chi
+                                  =================== U+03C7 ISOgrk3 -->
+
+<!ENTITY psi       "ψ" ><!-- Greek small letter psi
+                                  =================== U+03C8 ISOgrk3 -->
+
+<!ENTITY omega     "ω" ><!-- Greek small letter omega
+                                  =================== U+03C9 ISOgrk3 -->
+
+<!ENTITY thetasym  "ϑ" ><!-- Greek small letter theta symbol
+                                  ======================= U+03D1 NEW -->
+
+<!ENTITY upsih     "ϒ" ><!-- Greek upsilon with hook symbol
+                                  ======================= U+03D2 NEW -->
+
+<!ENTITY piv       "ϖ" ><!-- Greek pi symbol
+                                  =================== U+03D6 ISOgrk3 -->
+
+
+<!--
+
+     +-+-+-+-+-+-+-+-+-+-+-+
+       General Punctuation
+     +-+-+-+-+-+-+-+-+-+-+-+
+
+       Drawn From Unicode 3.2.0 Character Sets:
+
+             Block Name(s):  General Punctuation      (U+2000 to U+206F)
+            Script Name(s):  (none)
+
+-->
+
+
+<!ENTITY ensp     " " ><!-- en space
+                                  ==================== U+2002 ISOpub -->
+
+<!ENTITY emsp     " " ><!-- em space
+                                  ==================== U+2003 ISOpub -->
+
+<!ENTITY thinsp   " " ><!-- thin space
+                                  ==================== U+2009 ISOpub -->
+
+<!ENTITY zwnj     "‌" ><!-- zero width non-joiner
+                                  ============== U+200C NEW RFC 2070 -->
+
+<!ENTITY zwj      "‍" ><!-- zero width joiner
+                                  ============== U+200D NEW RFC 2070 -->
+
+<!ENTITY lrm      "‎" ><!-- left-to-right mark
+                                  ============== U+200E NEW RFC 2070 -->
+
+<!ENTITY rlm      "‏" ><!-- right-to-left mark
+                                  ============== U+200F NEW RFC 2070 -->
+
+<!ENTITY ndash    "–" ><!-- en dash
+                                  ==================== U+2013 ISOpub -->
+
+<!ENTITY mdash    "—" ><!-- em dash
+                                  ==================== U+2014 ISOpub -->
+
+<!ENTITY lsquo    "‘" ><!-- left single quotation mark
+                                  ==================== U+2018 ISOnum -->
+
+<!ENTITY rsquo    "’" ><!-- right single quotation mark
+                                  ==================== U+2019 ISOnum -->
+
+<!ENTITY sbquo    "‚" ><!-- single low-9 quotation mark
+                                  ======================= U+201A NEW -->
+
+<!ENTITY ldquo    "“" ><!-- left double quotation mark
+                                  ==================== U+201C ISOnum -->
+
+<!ENTITY rdquo    "”" ><!-- right double quotation mark
+                                  ==================== U+201D ISOnum -->
+
+<!ENTITY bdquo    "„" ><!-- double low-9 quotation mark
+                                  ======================= U+201E NEW -->
+
+<!ENTITY dagger   "†" ><!-- dagger
+                                  ==================== U+2020 ISOpub -->
+
+<!ENTITY Dagger   "‡" ><!-- double dagger
+                                  ==================== U+2021 ISOpub -->
+
+<!ENTITY bull     "•" ><!-- bullet
+                                  black small circle
+                                  ==================== U+2022 ISOpub -->
+                             <!-- bullet is NOT the same as U+2219,
+                                 'bullet operator' -->
+
+<!ENTITY hellip   "…" ><!-- horizontal ellipsis
+                                  three dot leader
+                                  ==================== U+2026 ISOpub -->
+
+<!ENTITY permil   "‰" ><!-- per mille sign
+                                  =================== U+2030 ISOtech -->
+
+<!ENTITY prime    "′" ><!-- prime
+                                  minutes
+                                  feet
+                                  =================== U+2032 ISOtech -->
+
+<!ENTITY Prime    "″" ><!-- double prime
+                                  seconds
+                                  inches
+                                  =================== U+2033 ISOtech -->
+
+<!ENTITY lsaquo   "‹" ><!-- single left-pointing angle quotation
+                                       mark
+                                  ============== U+2039 ISO proposed -->
+
+<!ENTITY rsaquo   "›" ><!-- single right-pointing angle quotation
+                                  ============== U+203A ISO proposed -->
+
+<!ENTITY oline    "‾" ><!-- overline
+                                  spacing overscore
+                                  ======================= U+203E NEW -->
+
+<!ENTITY frasl    "⁄" ><!-- fraction slash
+                                  ======================= U+2044 NEW -->
+
+
+<!--
+
+     +-+-+-+-+-+-+-+-+-+-+
+       Spacing Modifiers
+     +-+-+-+-+-+-+-+-+-+-+
+
+       Drawn From Unicode 3.2.0 Character Sets:
+
+             Block Name(s):  Spacing Modifier Letters (U+0280 to U+02FF)
+            Script Name(s):  (none)
+
+       Note: The Spacing Modifier Letters are an unusual class of
+             characters. They are an assorted collection of small signs
+             used to indicate modifications of the preceding or
+             following character, and sometimes to be an independent
+             character. They differ from diacritical marks in that they
+             are treated as free-standing, independent characters, which
+             form part of the word and do not break up the word. They
+             have the "letter" property. Most of the characters are
+             phonetic modifiers. For further information, refer to
+             Section 7.8 of the Unicode 3.2 manual, an online version is
+             at http://www.unicode.org/unicode/uni2book/ch07.pdf .
+
+-->
+
+
+<!ENTITY circ      "ˆ" ><!-- modifier letter circumflex accent
+                                  ==================== U+02C6 ISOpub -->
+
+<!ENTITY tilde     "˜" ><!-- small tilde
+                                  ==================== U+02DC ISOdia -->
+
+
+<!--
+
+     +-+-+-+-+-+-+-+-+-+
+       Various Symbols
+     +-+-+-+-+-+-+-+-+-+
+
+       Drawn From Unicode 3.2.0 Character Sets:
+
+             Block Name(s):  Latin-1 Supplement       (U+0080 to U+00FF)
+                             Currency Symbols         (U+20A0 to U+20CF)
+                             Letterlike Symbols       (U+2100 to U+214F)
+                             Arrows                   (U+2190 to U+21FF)
+                             Mathematical Operators   (U+2200 to U+22FF)
+                             Miscellaneous Technical  (U+2300 to U+23FF)
+                             Geometric Shapes         (U+25A0 to U+25FF)
+                             Miscellaneous Symbols    (U+2600 to U+26FF)
+            Script Name(s):  (none, except Greek for "micro", U+00B5)
+
+-->
+
+
+<!ENTITY nbsp      " " ><!-- no-break space
+                                  non-breaking space
+                                  ==================== U+00A0 ISOnum -->
+
+<!ENTITY iexcl     "¡" ><!-- inverted exclamation mark
+                                  ==================== U+00A1 ISOnum -->
+
+<!ENTITY cent      "¢" ><!-- cent sign
+                                  ==================== U+00A2 ISOnum -->
+
+<!ENTITY pound     "£" ><!-- pound sign
+                                  ==================== U+00A3 ISOnum -->
+
+<!ENTITY curren    "¤" ><!-- currency sign
+                                  ==================== U+00A4 ISOnum -->
+
+<!ENTITY yen       "¥" ><!-- yen sign
+                                  yuan sign
+                                  ==================== U+00A5 ISOnum -->
+
+<!ENTITY brvbar    "¦" ><!-- broken bar
+                                  broken vertical bar
+                                  ==================== U+00A6 ISOnum -->
+
+<!ENTITY sect      "§" ><!-- section sign
+                                  ==================== U+00A7 ISOnum -->
+
+<!ENTITY uml       "¨" ><!-- diaeresis
+                                  spacing diaeresis
+                                  ==================== U+00A8 ISOdia -->
+
+<!ENTITY copy      "©" ><!-- copyright sign
+                                  ==================== U+00A9 ISOnum -->
+
+<!ENTITY laquo     "«" ><!-- left-pointing double angle quotation
+                                       mark
+                                  left pointing guillemet
+                                  ==================== U+00AB ISOnum -->
+
+<!ENTITY not       "¬" ><!-- not sign
+                                  ==================== U+00AC ISOnum -->
+
+<!ENTITY shy       "­" ><!-- soft hyphen
+                                  discretionary hyphen
+                                  ==================== U+00AD ISOnum -->
+
+<!ENTITY reg       "®" ><!-- registered sign
+                                  registered trade mark sign
+                                  ==================== U+00AE ISOnum -->
+
+<!ENTITY macr      "¯" ><!-- macron
+                                  spacing macron
+                                  overline
+                                  APL overbar
+                                  ==================== U+00AF ISOdia -->
+
+<!ENTITY deg       "°" ><!-- degree sign
+                                  ==================== U+00B0 ISOnum -->
+
+<!ENTITY plusmn    "±" ><!-- plus-minus sign
+                                  plus-or-minus sign
+                                  ==================== U+00B1 ISOnum -->
+
+<!ENTITY sup2      "²" ><!-- superscript two
+                                  superscript digit two
+                                  squared
+                                  ==================== U+00B2 ISOnum -->
+
+<!ENTITY sup3      "³" ><!-- superscript three
+                                  superscript digit three
+                                  cubed
+                                  ==================== U+00B3 ISOnum -->
+
+<!ENTITY acute     "´" ><!-- acute accent
+                                  spacing acute
+                                  ==================== U+00B4 ISOdia -->
+
+<!ENTITY micro     "µ" ><!-- micro sign
+                                  ==================== U+00B5 ISOnum -->
+
+<!ENTITY para      "¶" ><!-- pilcrow sign
+                                  paragraph sign
+                                  ==================== U+00B6 ISOnum -->
+
+<!ENTITY middot    "·" ><!-- middle dot
+                                  Georgian comma
+                                  Greek middle dot
+                                  ==================== U+00B7 ISOnum -->
+
+<!ENTITY cedil     "¸" ><!-- cedilla
+                                  spacing cedilla
+                                  ==================== U+00B8 ISOdia -->
+
+<!ENTITY sup1      "¹" ><!-- superscript one
+                                  superscript digit one
+                                  ==================== U+00B9 ISOnum -->
+
+<!ENTITY raquo     "»" ><!-- right-pointing double angle quotation
+                                       mark
+                                  right pointing guillemet
+                                  ==================== U+00BB ISOnum -->
+
+<!ENTITY frac14    "¼" ><!-- vulgar fraction one quarter
+                                  fraction one quarter
+                                  ==================== U+00BC ISOnum -->
+
+<!ENTITY frac12    "½" ><!-- vulgar fraction one half
+                                  fraction one half
+                                  ==================== U+00BD ISOnum -->
+
+<!ENTITY frac34    "¾" ><!-- vulgar fraction three quarters
+                                  fraction three quarters
+                                  ==================== U+00BE ISOnum -->
+
+<!ENTITY iquest    "¿" ><!-- inverted question mark
+                                  turned question mark
+                                  ==================== U+00BF ISOnum -->
+
+<!ENTITY times     "×" ><!-- multiplication sign
+                                  ==================== U+00D7 ISOnum -->
+
+<!ENTITY divide    "÷" ><!-- division sign
+                                  ==================== U+00F7 ISOnum -->
+
+<!ENTITY euro     "€" ><!-- euro sign
+                                  ======================= U+20AC NEW -->
+
+<!ENTITY image    "ℑ" ><!-- blackletter capital I
+                                  imaginary part
+                                  =================== U+2111 ISOamso -->
+
+<!ENTITY weierp   "℘" ><!-- script capital P
+                                  power set
+                                  Weierstrass p
+                                  =================== U+2118 ISOamso -->
+
+<!ENTITY real     "ℜ" ><!-- blackletter capital R
+                                  real part symbol
+                                  =================== U+211C ISOamso -->
+
+<!ENTITY trade    "™" ><!-- trade mark sign
+                                  ==================== U+2122 ISOnum -->
+
+<!ENTITY alefsym  "ℵ" ><!-- alef symbol
+                                  first transfinite cardinal
+                                  ======================= U+2135 NEW -->
+                             <!-- alef symbol is NOT the same as
+                                  U+05D0, 'Hebrew letter alef',
+                                  although the same glyph could be
+                                  used to represent both -->
+
+<!ENTITY larr     "←" ><!-- leftwards arrow
+                                  ==================== U+2190 ISOnum -->
+
+<!ENTITY uarr     "↑" ><!-- upwards arrow
+                                  ==================== U+2191 ISOnum -->
+
+<!ENTITY rarr     "→" ><!-- rightwards arrow
+                                  ==================== U+2192 ISOnum -->
+
+<!ENTITY darr     "↓" ><!-- downwards arrow
+                                  ==================== U+2193 ISOnum -->
+
+<!ENTITY harr     "↔" ><!-- left right arrow
+                                  =================== U+2194 ISOamsa -->
+
+<!ENTITY crarr    "↵" ><!-- downwards arrow with corner leftwards
+                                  carriage return
+                                  ======================= U+21B5 NEW -->
+
+<!ENTITY lArr     "⇐" ><!-- leftwards double arrow
+                                  =================== U+21D0 ISOtech -->
+                             <!-- Unicode does not say that lArr is
+                                  the same as the 'is implied by'
+                                  arrow, but also does not have any
+                                  other character for that function.
+                                  As ISOtech suggests, lArr can be
+                                  used for 'is implied by'. -->
+
+<!ENTITY uArr     "⇑" ><!-- upwards double arrow
+                                  =================== U+21D1 ISOamsa -->
+
+<!ENTITY rArr     "⇒" ><!-- rightwards double arrow
+                                  =================== U+21D2 ISOtech -->
+                             <!-- Unicode does not say that rArr is
+                                  the same as the 'implies' arrow,
+                                  but also does not have any other
+                                  character for that function. As
+                                  ISOtech suggests, rArr can be used
+                                  for 'implies'. -->
+
+<!ENTITY dArr     "⇓" ><!-- downwards double arrow
+                                  =================== U+21D3 ISOamsa -->
+
+<!ENTITY hArr     "⇔" ><!-- left right double arrow
+                                  =================== U+21D4 ISOamsa -->
+
+<!ENTITY forall   "∀" ><!-- for all
+                                  =================== U+2200 ISOtech -->
+
+<!ENTITY part     "∂" ><!-- partial differential
+                                  =================== U+2202 ISOtech -->
+
+<!ENTITY exist    "∃" ><!-- there exists
+                                  =================== U+2203 ISOtech -->
+
+<!ENTITY empty    "∅" ><!-- empty set
+                                  null set
+                                  diameter
+                                  =================== U+2205 ISOamso -->
+
+<!ENTITY nabla    "∇" ><!-- nabla
+                                  backward difference
+                                  =================== U+2207 ISOtech -->
+
+<!ENTITY isin     "∈" ><!-- element of
+                                  =================== U+2208 ISOtech -->
+
+<!ENTITY notin    "∉" ><!-- not an element of
+                                  =================== U+2209 ISOtech -->
+
+<!ENTITY ni       "∋" ><!-- contains as member
+                                  =================== U+220B ISOtech -->
+
+<!ENTITY prod     "∏" ><!-- n-ary product
+                                  product sign
+                                  =================== U+220F ISOamsb -->
+                             <!-- prod is NOT the same character as
+                                  U+03A0, 'Greek capital letter pi',
+                                  although the same glyph could be
+                                  used to represent both -->
+
+<!ENTITY sum      "∑" ><!-- n-ary summation
+                                  =================== U+2211 ISOamsb -->
+                             <!-- sum is NOT the same character as
+                                  U+03A3, 'Greek capital letter sigma',
+                                  although the same glyph could be
+                                  used to represent both -->
+
+<!ENTITY minus    "−" ><!-- minus sign
+                                  =================== U+2212 ISOtech -->
+
+<!ENTITY lowast   "∗" ><!-- asterisk operator
+                                  =================== U+2217 ISOtech -->
+
+<!ENTITY radic    "√" ><!-- square root
+                                  radical sign
+                                  =================== U+221A ISOtech -->
+
+<!ENTITY prop     "∝" ><!-- proportional to
+                                  =================== U+221D ISOtech -->
+
+<!ENTITY infin    "∞" ><!-- infinity
+                                  =================== U+221E ISOtech -->
+
+<!ENTITY ang      "∠" ><!-- angle
+                                  =================== U+2220 ISOamso -->
+
+<!ENTITY and      "∧" ><!-- logical and
+                                  wedge
+                                  =================== U+2227 ISOtech -->
+
+<!ENTITY or       "∨" ><!-- logical or
+                                  vee
+                                  =================== U+2228 ISOtech -->
+
+<!ENTITY cap      "∩" ><!-- intersection
+                                  cap
+                                  =================== U+2229 ISOtech -->
+
+<!ENTITY cup      "∪" ><!-- union
+                                  cup
+                                  =================== U+222A ISOtech -->
+
+<!ENTITY int      "∫" ><!-- integral
+                                  =================== U+222B ISOtech -->
+
+<!ENTITY there4   "∴" ><!-- therefore
+                                  =================== U+2234 ISOtech -->
+
+<!ENTITY sim      "∼" ><!-- tilde operator
+                                  varies with
+                                  similar to
+                                  =================== U+223C ISOtech -->
+                             <!-- tilde operator is NOT the same
+                                  character as U+007E, 'tilde',
+                                  although the same glyph could be
+                                  used to represent both -->
+
+<!ENTITY cong     "≅" ><!-- approximately equal to
+                                  =================== U+2245 ISOtech -->
+
+<!ENTITY asymp    "≈" ><!-- almost equal to
+                                  asymptotic to
+                                  =================== U+2248 ISOamsr -->
+
+<!ENTITY ne       "≠" ><!-- not equal to
+                                  =================== U+2260 ISOtech -->
+
+<!ENTITY equiv    "≡" ><!-- identical to
+                                  =================== U+2261 ISOtech -->
+
+<!ENTITY le       "≤" ><!-- less-than or equal to
+                                  =================== U+2264 ISOtech -->
+
+<!ENTITY ge       "≥" ><!-- greater-than or equal to
+                                  =================== U+2265 ISOtech -->
+
+<!ENTITY sub      "⊂" ><!-- subset of
+                                  =================== U+2282 ISOtech -->
+
+<!ENTITY sup      "⊃" ><!-- superset of
+                                  =================== U+2283 ISOtech -->
+
+<!ENTITY nsub     "⊄" ><!-- not a subset of
+                                  =================== U+2284 ISOamsn -->
+
+<!ENTITY sube     "⊆" ><!-- subset of or equal to
+                                  =================== U+2286 ISOtech -->
+
+<!ENTITY supe     "⊇" ><!-- superset of or equal to
+                                  =================== U+2287 ISOtech -->
+
+<!ENTITY oplus    "⊕" ><!-- circled plus
+                                  direct sum
+                                  =================== U+2295 ISOamsb -->
+
+<!ENTITY otimes   "⊗" ><!-- circled times
+                                  vector product
+                                  =================== U+2297 ISOamsb -->
+
+<!ENTITY perp     "⊥" ><!-- up tack
+                                  orthogonal to
+                                  perpendicular
+                                  =================== U+22A5 ISOtech -->
+
+<!ENTITY sdot     "⋅" ><!-- dot operator
+                                  =================== U+22C5 ISOamsb -->
+                             <!-- dot operator is NOT the same
+                                  character as U+00B7, 'middle dot' -->
+
+<!ENTITY lceil    "⌈" ><!-- left ceiling
+                                  APL upstile
+                                  =================== U+2308 ISOamsc -->
+
+<!ENTITY rceil    "⌉" ><!-- right ceiling
+                                  =================== U+2309 ISOamsc -->
+
+<!ENTITY lfloor   "⌊" ><!-- left floor
+                                  APL downstile
+                                  =================== U+230A ISOamsc -->
+
+<!ENTITY rfloor   "⌋" ><!-- right floor
+                                  =================== U+230B ISOamsc -->
+
+<!ENTITY lang     "〈" ><!-- left-pointing angle bracket
+                                  bra
+                                  =================== U+2329 ISOtech -->
+                             <!-- lang is NOT the same character as
+                                  U+003C, 'less than', or U+2039,
+                                 'single left-pointing angle quotation
+                                  mark' -->
+
+<!ENTITY rang     "〉" ><!-- right-pointing angle bracket
+                                  ket
+                                  =================== U+232A ISOtech -->
+                             <!-- rang is NOT the same character as
+                                  U+003E, 'greater than', or U+203A,
+                                 'single right-pointing angle quotation
+                                  mark' -->
+
+<!ENTITY loz      "◊" ><!-- lozenge
+                                  ==================== U+25CA ISOpub -->
+
+<!ENTITY spades   "♠" ><!-- black spade suit
+                                  ==================== U+2660 ISOpub -->
+
+<!ENTITY clubs    "♣" ><!-- black club suit
+                                  shamrock
+                                  ==================== U+2663 ISOpub -->
+
+<!ENTITY hearts   "♥" ><!-- black heart suit
+                                  valentine
+                                  ==================== U+2665 ISOpub -->
+
+<!ENTITY diams    "♦" ><!-- black diamond suit
+                                  ==================== U+2666 ISOpub -->
+
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/dtd/oebpkg12.dtd b/src/main/resources/com/adobe/epubcheck/schema/20/dtd/oebpkg12.dtd
new file mode 100644
index 0000000..41c748c
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/dtd/oebpkg12.dtd
@@ -0,0 +1,388 @@
+
+<!--
+
+Title:
+
+     The Package Document Type Definition (DTD) for the Open
+     eBook Publication Structure Version 1.2
+
+
+Version:
+
+     1.2
+
+
+Revision:
+
+     20020930-x  (supercedes 20020605-x)
+
+
+Revision History Note:
+
+     This revision, 20020930-x, which supercedes the prior revision
+     20020605-x, solely updates the email addresses within this
+     comment prologue. No changes whatsover were made to the parsed
+     content of this DTD.
+
+
+Previous Released Version:
+
+     1.0.1 (Revision of 01-February-2001, "Document Type
+            Definition for the Open eBook package version
+            1.0.1")
+
+
+Authors:
+
+     Version 1.0; 1.0.1
+
+          Steve DeRose <sjd at stg.brown.edu>
+          Gunter Hille <hille at abc.de>
+          Ben Trafford <ben at legendary.org>
+          Garret Wilson <garret at globalmentor.com>
+
+     This Version 1.2 updated and edited by:
+
+          Jon Noring <jon at noring.name>
+          Benjamin Jung <benjamin.jung at deepx.com>
+
+
+Usage:
+
+     <?xml version="1.0"?>
+     <!DOCTYPE package
+               PUBLIC "+//ISBN 0-9673008-1-9//DTD OEB 1.2 Package//EN"
+               "http://openebook.org/dtds/oeb-1.2/oebpkg12.dtd">
+     <package unique-identifier="foo">
+          metadata
+          manifest
+          spine
+          tours
+          guide
+     </package>
+
+
+Summary Description:
+
+     This is the Package Document Type Definition (DTD) for
+     the Open eBook Publication Structure version 1.2.
+
+     Changes to this DTD from version 1.0.1 include:
+
+          a. Upgrading the <dc-metadata> content model to
+             fully conform with the OEBPS 1.2 specification
+             requirements. Specifically, <dc:Language> is
+             now required, while in OEBPS 1.0.1 it was
+             optional.
+
+          b. Updating the mnemonic character entity
+             declaration to refer to version 1.2.
+
+          c. Updating the xmlns:dc namespace to refer to
+             version 1.1 of the Dublin Core Metadata
+             Initiative.
+
+          d. Editing and updating the various non-parsed
+             comments.
+
+          e. Revising the layout (e.g., white space
+             alteration) to aid in readability.
+
+-->
+
+
+<!-- *************************************************** -->
+
+<!-- XHTML MNEMONIC CHARACTER ENTITIES ................. -->
+
+<!ENTITY % OEBEntities
+     PUBLIC "+//ISBN 0-9673008-1-9//DTD OEB 1.2 Entities//EN"
+     "http://openebook.org/dtds/oeb-1.2/oeb12.ent">
+
+%OEBEntities;
+
+<!-- *************************************************** -->
+
+<!-- DATATYPE ENTITIES ................................. -->
+
+<!-- Uniform Resource Identifier (URI), per [RFC2396] -->
+
+<!ENTITY % URI "CDATA">
+
+<!-- Language code, per [RFC3066] -->
+
+<!ENTITY % LanguageCode "NMTOKEN">
+
+<!-- *************************************************** -->
+
+<!-- NAMESPACE ENTITIES ................................ -->
+
+<!ENTITY % dc.xmlns
+     "'http://purl.org/dc/elements/1.1/'">
+
+<!ENTITY % oebpk.xmlns
+     "'http://openebook.org/namespaces/oeb-package/1.0/'">
+
+<!-- *************************************************** -->
+
+<!-- ELEMENT ENTITIES .................................. -->
+
+<!-- The entity 'DCMetadataOpt' includes the 12 optional
+     <dc:Xxx> children elements of <dc-metadata>. It will
+     be used in the <dc-metadata> content model. -->
+
+<!ENTITY % DCMetadataOpt
+     "dc:Contributor |
+      dc:Coverage    |
+      dc:Creator     |
+      dc:Date        |
+      dc:Description |
+      dc:Format      |
+      dc:Publisher   |
+      dc:Relation    |
+      dc:Rights      |
+      dc:Source      |
+      dc:Subject     |
+      dc:Type        ">
+
+<!-- *************************************************** -->
+
+<!-- ATTRIBUTE ENTITIES ................................ -->
+
+<!ENTITY % CoreAttributes
+     "id                 ID              #IMPLIED">
+
+<!ENTITY % InternationalAttributes
+     "xml:lang           %LanguageCode;  #IMPLIED">
+
+<!ENTITY % CommonAttributes
+     "%CoreAttributes;
+      %InternationalAttributes;">
+
+<!-- 'DCNamespaceAttribute' is an attribute entity declaring
+     the Dublin Core namespace. Used on each <dc:Xxx> element
+     to accommodate XML parsers which unnecessarily require
+     this. -->
+
+<!ENTITY % DCNamespaceAttribute
+     "xmlns:dc           %URI;           #FIXED %dc.xmlns;">
+
+<!-- *************************************************** -->
+
+<!-- ELEMENTS AND ATTRIBUTES ........................... -->
+
+<!-- <package> must have as children elements, in this order:
+     <metadata>, <manifest>, and <spine>, and optionally may
+     include <tours> and/or <guide>. The 'unique-identifier'
+     attribute is required for <package> (see comment for
+     <dc:Identifier>.) -->
+
+<!ELEMENT package (metadata, manifest, spine, tours?, guide?)>
+<!ATTLIST package
+      %CommonAttributes;
+      unique-identifier  IDREF           #REQUIRED
+      xmlns              %URI;           #FIXED %oebpk.xmlns;>
+
+<!-- <metadata> must contain one <dc-metadata>, and
+     optionally contain one <x-metadata>. There are no
+     attributes for <metadata>. -->
+
+<!ELEMENT metadata (dc-metadata, x-metadata?)>
+
+<!-- <dc-metadata> must contain at least one <dc:Title>,
+     one <dc:Identifier>, and one <dc:Language>, and may
+     contain one or more of each of the other twelve
+     optional <dc:XXX> elements, all in any order. -->
+
+<!ELEMENT dc-metadata
+( (%DCMetadataOpt;)*,
+  ( (dc:Title, (%DCMetadataOpt; | dc:Title)*,
+      ( (dc:Identifier, (%DCMetadataOpt; | dc:Title | dc:Identifier)*,
+         dc:Language) |
+        (dc:Language, (%DCMetadataOpt; | dc:Title | dc:Language)*,
+         dc:Identifier) ) ) |
+    (dc:Identifier, (%DCMetadataOpt; | dc:Identifier)*,
+      ( (dc:Title, (%DCMetadataOpt; | dc:Identifier | dc:Title)*,
+         dc:Language) |
+        (dc:Language, (%DCMetadataOpt; | dc:Identifier | dc:Language)*,
+         dc:Title) ) ) |
+    (dc:Language, (%DCMetadataOpt; | dc:Language)*,
+      ( (dc:Identifier, (%DCMetadataOpt; | dc:Language | dc:Identifier)*,
+         dc:Title) |
+        (dc:Title, (%DCMetadataOpt; | dc:Language | dc:Title)*,
+         dc:Identifier) ) ) ),
+  (%DCMetadataOpt; | dc:Title | dc:Identifier | dc:Language)* )>
+<!ATTLIST dc-metadata
+      %CommonAttributes;
+      %DCNamespaceAttribute;
+      xmlns:oebpackage   %URI;           #FIXED %oebpk.xmlns;>
+
+<!-- Required elements for <dc-metadata>. -->
+
+<!ELEMENT dc:Title (#PCDATA)>
+<!ATTLIST dc:Title
+      %CommonAttributes;
+      %DCNamespaceAttribute;>
+
+<!-- One <dc:Identifier> must specify an 'id' identical to
+     the value of the required <package> 'unique-identifier'
+     attribute. -->
+
+<!ELEMENT dc:Identifier (#PCDATA)>
+<!ATTLIST dc:Identifier
+      %CommonAttributes;
+      %DCNamespaceAttribute;
+      scheme             NMTOKEN         #IMPLIED>
+
+<!ELEMENT dc:Language (#PCDATA)>
+<!ATTLIST dc:Language
+      %CommonAttributes;
+      %DCNamespaceAttribute;>
+
+<!-- Optional elements for <dc-metadata>. -->
+
+<!ELEMENT dc:Contributor (#PCDATA)>
+<!ATTLIST dc:Contributor
+      %CommonAttributes;
+      %DCNamespaceAttribute;
+      file-as            CDATA           #IMPLIED
+      role               NMTOKEN         #IMPLIED>
+
+<!ELEMENT dc:Coverage (#PCDATA)>
+<!ATTLIST dc:Coverage
+      %CommonAttributes;
+      %DCNamespaceAttribute;>
+
+<!ELEMENT dc:Creator (#PCDATA)>
+<!ATTLIST dc:Creator
+      %CommonAttributes;
+      %DCNamespaceAttribute;
+      file-as            CDATA           #IMPLIED
+      role               NMTOKEN         #IMPLIED>
+
+<!ELEMENT dc:Date (#PCDATA)>
+<!ATTLIST dc:Date
+      %CommonAttributes;
+      %DCNamespaceAttribute;
+      event              NMTOKEN         #IMPLIED>
+
+<!ELEMENT dc:Description (#PCDATA)>
+<!ATTLIST dc:Description
+      %CommonAttributes;
+      %DCNamespaceAttribute;>
+
+<!ELEMENT dc:Format (#PCDATA)>
+<!ATTLIST dc:Format
+      %CommonAttributes;
+      %DCNamespaceAttribute;>
+
+<!ELEMENT dc:Publisher (#PCDATA)>
+<!ATTLIST dc:Publisher
+      %CommonAttributes;
+      %DCNamespaceAttribute;>
+
+<!ELEMENT dc:Relation (#PCDATA)>
+<!ATTLIST dc:Relation
+      %CommonAttributes;
+      %DCNamespaceAttribute;>
+
+<!ELEMENT dc:Rights (#PCDATA)>
+<!ATTLIST dc:Rights
+      %CommonAttributes;
+      %DCNamespaceAttribute;>
+
+<!ELEMENT dc:Source (#PCDATA)>
+<!ATTLIST dc:Source
+      %CommonAttributes;
+      %DCNamespaceAttribute;>
+
+<!ELEMENT dc:Subject (#PCDATA)>
+<!ATTLIST dc:Subject
+      %CommonAttributes;
+      %DCNamespaceAttribute;>
+
+<!ELEMENT dc:Type (#PCDATA)>
+<!ATTLIST dc:Type
+      %CommonAttributes;
+      %DCNamespaceAttribute;>
+
+<!-- <x-metadata> must contain at least one <meta>. -->
+
+<!ELEMENT x-metadata (meta+)>
+<!ATTLIST x-metadata %CommonAttributes;>
+
+<!-- Note that 'content' and 'name' are required attributes
+     for <meta>. -->
+
+<!ELEMENT meta EMPTY>
+<!ATTLIST meta
+      %CommonAttributes;
+      content            CDATA           #REQUIRED
+      name               NMTOKEN         #REQUIRED
+      scheme             CDATA           #IMPLIED>
+
+<!-- <manifest> must contain at least one <item>. -->
+
+<!ELEMENT manifest (item+)>
+<!ATTLIST manifest %CommonAttributes;>
+
+<!-- Note that 'href', 'id' and 'media-type' are required
+     attributes for <item>. -->
+
+<!ELEMENT item EMPTY>
+<!ATTLIST item
+      %InternationalAttributes;
+      fallback           IDREF           #IMPLIED
+      href               %URI;           #REQUIRED
+      id                 ID              #REQUIRED
+      media-type         CDATA           #REQUIRED>
+
+<!-- <spine> must contain at least one <itemref>. -->
+
+<!ELEMENT spine (itemref+)>
+<!ATTLIST spine %CommonAttributes;>
+
+<!-- Note that 'idref' is a required attribute for
+     <itemref>. -->
+
+<!ELEMENT itemref EMPTY>
+<!ATTLIST itemref
+      %CommonAttributes;
+      idref              IDREF           #REQUIRED>
+
+<!-- <tours> must contain at least one <tour>. -->
+
+<!ELEMENT tours (tour+)>
+<!ATTLIST tours %CommonAttributes;>
+
+<!-- <tour> must contain at least one <site>. Note that
+     'title' is a required attribute for <tour>. -->
+
+<!ELEMENT tour (site+)>
+<!ATTLIST tour
+      %CommonAttributes;
+      title              CDATA           #REQUIRED>
+
+<!-- Note that 'href' and 'title' are required attributes
+     for <site>. -->
+
+<!ELEMENT site EMPTY>
+<!ATTLIST site
+      %CommonAttributes;
+      href               %URI;           #REQUIRED
+      title              CDATA           #REQUIRED>
+
+<!-- <guide> must contain at least one <reference>. -->
+
+<!ELEMENT guide (reference+)>
+<!ATTLIST guide %CommonAttributes;>
+
+<!-- Note that 'href', 'title' and 'type' are required
+     attributes for <reference>. -->
+
+<!ELEMENT reference EMPTY>
+<!ATTLIST reference
+      %CommonAttributes;
+      href               %URI;           #REQUIRED
+      title              CDATA           #REQUIRED
+      type               NMTOKEN         #REQUIRED>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/dtd/opf20.dtd b/src/main/resources/com/adobe/epubcheck/schema/20/dtd/opf20.dtd
new file mode 100644
index 0000000..82689b1
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/dtd/opf20.dtd
@@ -0,0 +1,296 @@
+<!-- copy of 1.2 DTD for now -->
+
+<!-- XHTML MNEMONIC CHARACTER ENTITIES ................. -->
+
+<!ENTITY % OEBEntities
+     PUBLIC "+//ISBN 0-9673008-1-9//DTD OEB 1.2 Entities//EN"
+     "http://openebook.org/dtds/oeb-1.2/oeb12.ent">
+
+%OEBEntities;
+
+<!-- *************************************************** -->
+
+<!-- DATATYPE ENTITIES ................................. -->
+
+<!-- Uniform Resource Identifier (URI), per [RFC2396] -->
+
+<!ENTITY % URI "CDATA">
+
+<!-- Language code, per [RFC3066] -->
+
+<!ENTITY % LanguageCode "NMTOKEN">
+
+<!-- *************************************************** -->
+
+<!-- NAMESPACE ENTITIES ................................ -->
+
+<!ENTITY % dc.xmlns
+     "'http://purl.org/dc/elements/1.1/'">
+
+<!ENTITY % oebpk.xmlns
+     "'http://openebook.org/namespaces/oeb-package/1.0/'">
+
+<!-- *************************************************** -->
+
+<!-- ELEMENT ENTITIES .................................. -->
+
+<!-- The entity 'DCMetadataOpt' includes the 12 optional
+     <dc:Xxx> children elements of <dc-metadata>. It will
+     be used in the <dc-metadata> content model. -->
+
+<!ENTITY % DCMetadataOpt
+     "dc:Contributor |
+      dc:Coverage    |
+      dc:Creator     |
+      dc:Date        |
+      dc:Description |
+      dc:Format      |
+      dc:Publisher   |
+      dc:Relation    |
+      dc:Rights      |
+      dc:Source      |
+      dc:Subject     |
+      dc:Type        ">
+
+<!-- *************************************************** -->
+
+<!-- ATTRIBUTE ENTITIES ................................ -->
+
+<!ENTITY % CoreAttributes
+     "id                 ID              #IMPLIED">
+
+<!ENTITY % InternationalAttributes
+     "xml:lang           %LanguageCode;  #IMPLIED">
+
+<!ENTITY % CommonAttributes
+     "%CoreAttributes;
+      %InternationalAttributes;">
+
+<!-- 'DCNamespaceAttribute' is an attribute entity declaring
+     the Dublin Core namespace. Used on each <dc:Xxx> element
+     to accommodate XML parsers which unnecessarily require
+     this. -->
+
+<!ENTITY % DCNamespaceAttribute
+     "xmlns:dc           %URI;           #FIXED %dc.xmlns;">
+
+<!-- *************************************************** -->
+
+<!-- ELEMENTS AND ATTRIBUTES ........................... -->
+
+<!-- <package> must have as children elements, in this order:
+     <metadata>, <manifest>, and <spine>, and optionally may
+     include <tours> and/or <guide>. The 'unique-identifier'
+     attribute is required for <package> (see comment for
+     <dc:Identifier>.) -->
+
+<!ELEMENT package (metadata, manifest, spine, tours?, guide?)>
+<!ATTLIST package
+      %CommonAttributes;
+      unique-identifier  IDREF           #REQUIRED
+      xmlns              %URI;           #FIXED %oebpk.xmlns;>
+
+<!-- <metadata> must contain one <dc-metadata>, and
+     optionally contain one <x-metadata>. There are no
+     attributes for <metadata>. -->
+
+<!ELEMENT metadata (dc-metadata, x-metadata?)>
+
+<!-- <dc-metadata> must contain at least one <dc:Title>,
+     one <dc:Identifier>, and one <dc:Language>, and may
+     contain one or more of each of the other twelve
+     optional <dc:XXX> elements, all in any order. -->
+
+<!ELEMENT dc-metadata
+( (%DCMetadataOpt;)*,
+  ( (dc:Title, (%DCMetadataOpt; | dc:Title)*,
+      ( (dc:Identifier, (%DCMetadataOpt; | dc:Title | dc:Identifier)*,
+         dc:Language) |
+        (dc:Language, (%DCMetadataOpt; | dc:Title | dc:Language)*,
+         dc:Identifier) ) ) |
+    (dc:Identifier, (%DCMetadataOpt; | dc:Identifier)*,
+      ( (dc:Title, (%DCMetadataOpt; | dc:Identifier | dc:Title)*,
+         dc:Language) |
+        (dc:Language, (%DCMetadataOpt; | dc:Identifier | dc:Language)*,
+         dc:Title) ) ) |
+    (dc:Language, (%DCMetadataOpt; | dc:Language)*,
+      ( (dc:Identifier, (%DCMetadataOpt; | dc:Language | dc:Identifier)*,
+         dc:Title) |
+        (dc:Title, (%DCMetadataOpt; | dc:Language | dc:Title)*,
+         dc:Identifier) ) ) ),
+  (%DCMetadataOpt; | dc:Title | dc:Identifier | dc:Language)* )>
+<!ATTLIST dc-metadata
+      %CommonAttributes;
+      %DCNamespaceAttribute;
+      xmlns:oebpackage   %URI;           #FIXED %oebpk.xmlns;>
+
+<!-- Required elements for <dc-metadata>. -->
+
+<!ELEMENT dc:Title (#PCDATA)>
+<!ATTLIST dc:Title
+      %CommonAttributes;
+      %DCNamespaceAttribute;>
+
+<!-- One <dc:Identifier> must specify an 'id' identical to
+     the value of the required <package> 'unique-identifier'
+     attribute. -->
+
+<!ELEMENT dc:Identifier (#PCDATA)>
+<!ATTLIST dc:Identifier
+      %CommonAttributes;
+      %DCNamespaceAttribute;
+      scheme             NMTOKEN         #IMPLIED>
+
+<!ELEMENT dc:Language (#PCDATA)>
+<!ATTLIST dc:Language
+      %CommonAttributes;
+      %DCNamespaceAttribute;>
+
+<!-- Optional elements for <dc-metadata>. -->
+
+<!ELEMENT dc:Contributor (#PCDATA)>
+<!ATTLIST dc:Contributor
+      %CommonAttributes;
+      %DCNamespaceAttribute;
+      file-as            CDATA           #IMPLIED
+      role               NMTOKEN         #IMPLIED>
+
+<!ELEMENT dc:Coverage (#PCDATA)>
+<!ATTLIST dc:Coverage
+      %CommonAttributes;
+      %DCNamespaceAttribute;>
+
+<!ELEMENT dc:Creator (#PCDATA)>
+<!ATTLIST dc:Creator
+      %CommonAttributes;
+      %DCNamespaceAttribute;
+      file-as            CDATA           #IMPLIED
+      role               NMTOKEN         #IMPLIED>
+
+<!ELEMENT dc:Date (#PCDATA)>
+<!ATTLIST dc:Date
+      %CommonAttributes;
+      %DCNamespaceAttribute;
+      event              NMTOKEN         #IMPLIED>
+
+<!ELEMENT dc:Description (#PCDATA)>
+<!ATTLIST dc:Description
+      %CommonAttributes;
+      %DCNamespaceAttribute;>
+
+<!ELEMENT dc:Format (#PCDATA)>
+<!ATTLIST dc:Format
+      %CommonAttributes;
+      %DCNamespaceAttribute;>
+
+<!ELEMENT dc:Publisher (#PCDATA)>
+<!ATTLIST dc:Publisher
+      %CommonAttributes;
+      %DCNamespaceAttribute;>
+
+<!ELEMENT dc:Relation (#PCDATA)>
+<!ATTLIST dc:Relation
+      %CommonAttributes;
+      %DCNamespaceAttribute;>
+
+<!ELEMENT dc:Rights (#PCDATA)>
+<!ATTLIST dc:Rights
+      %CommonAttributes;
+      %DCNamespaceAttribute;>
+
+<!ELEMENT dc:Source (#PCDATA)>
+<!ATTLIST dc:Source
+      %CommonAttributes;
+      %DCNamespaceAttribute;>
+
+<!ELEMENT dc:Subject (#PCDATA)>
+<!ATTLIST dc:Subject
+      %CommonAttributes;
+      %DCNamespaceAttribute;>
+
+<!ELEMENT dc:Type (#PCDATA)>
+<!ATTLIST dc:Type
+      %CommonAttributes;
+      %DCNamespaceAttribute;>
+
+<!-- <x-metadata> must contain at least one <meta>. -->
+
+<!ELEMENT x-metadata (meta+)>
+<!ATTLIST x-metadata %CommonAttributes;>
+
+<!-- Note that 'content' and 'name' are required attributes
+     for <meta>. -->
+
+<!ELEMENT meta EMPTY>
+<!ATTLIST meta
+      %CommonAttributes;
+      content            CDATA           #REQUIRED
+      name               NMTOKEN         #REQUIRED
+      scheme             CDATA           #IMPLIED>
+
+<!-- <manifest> must contain at least one <item>. -->
+
+<!ELEMENT manifest (item+)>
+<!ATTLIST manifest %CommonAttributes;>
+
+<!-- Note that 'href', 'id' and 'media-type' are required
+     attributes for <item>. -->
+
+<!ELEMENT item EMPTY>
+<!ATTLIST item
+      %InternationalAttributes;
+      fallback           IDREF           #IMPLIED
+      href               %URI;           #REQUIRED
+      id                 ID              #REQUIRED
+      media-type         CDATA           #REQUIRED>
+
+<!-- <spine> must contain at least one <itemref>. -->
+
+<!ELEMENT spine (itemref+)>
+<!ATTLIST spine %CommonAttributes;>
+
+<!-- Note that 'idref' is a required attribute for
+     <itemref>. -->
+
+<!ELEMENT itemref EMPTY>
+<!ATTLIST itemref
+      %CommonAttributes;
+      idref              IDREF           #REQUIRED>
+
+<!-- <tours> must contain at least one <tour>. -->
+
+<!ELEMENT tours (tour+)>
+<!ATTLIST tours %CommonAttributes;>
+
+<!-- <tour> must contain at least one <site>. Note that
+     'title' is a required attribute for <tour>. -->
+
+<!ELEMENT tour (site+)>
+<!ATTLIST tour
+      %CommonAttributes;
+      title              CDATA           #REQUIRED>
+
+<!-- Note that 'href' and 'title' are required attributes
+     for <site>. -->
+
+<!ELEMENT site EMPTY>
+<!ATTLIST site
+      %CommonAttributes;
+      href               %URI;           #REQUIRED
+      title              CDATA           #REQUIRED>
+
+<!-- <guide> must contain at least one <reference>. -->
+
+<!ELEMENT guide (reference+)>
+<!ATTLIST guide %CommonAttributes;>
+
+<!-- Note that 'href', 'title' and 'type' are required
+     attributes for <reference>. -->
+
+<!ELEMENT reference EMPTY>
+<!ATTLIST reference
+      %CommonAttributes;
+      href               %URI;           #REQUIRED
+      title              CDATA           #REQUIRED
+      type               NMTOKEN         #REQUIRED>
+
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/dtd/svg11.dtd b/src/main/resources/com/adobe/epubcheck/schema/20/dtd/svg11.dtd
new file mode 100644
index 0000000..8f5bad2
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/dtd/svg11.dtd
@@ -0,0 +1,5790 @@
+<!-- ....................................................................... -->
+<!-- SVG 1.1 DTD ........................................................... -->
+<!-- file: svg11.dtd
+-->
+
+<!-- SVG 1.1 DTD
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+
+     The Scalable Vector Graphics (SVG)
+     Copyright 2001, 2002 World Wide Web Consortium
+        (Massachusetts Institute of Technology, Institut National de
+         Recherche en Informatique et en Automatique, Keio University).
+         All Rights Reserved.
+
+     Permission to use, copy, modify and distribute the SVG DTD and its
+     accompanying documentation for any purpose and without fee is hereby
+     granted in perpetuity, provided that the above copyright notice and
+     this paragraph appear in all copies.  The copyright holders make no
+     representation about the suitability of the DTD for any purpose.
+
+     It is provided "as is" without expressed or implied warranty.
+
+        Author:   Jun Fujisawa <fujisawa.jun at canon.co.jp>
+        Revision: $Id: svg11.dtd,v 1.2 2002/04/20 18:07:43 fujisawa Exp $
+
+-->
+<!-- This is the driver file for version 1.1 of the SVG DTD.
+
+     This DTD is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//DTD SVG 1.1//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"
+-->
+<!ENTITY % SVG.version "-//W3C//DTD SVG 1.1//EN" >
+
+<!-- Use this URI to identify the default namespace:
+
+        "http://www.w3.org/2000/svg"
+
+     See the Qualified Names module for information
+     on the use of namespace prefixes in the DTD.
+-->
+<!ENTITY % NS.prefixed "IGNORE" >
+<!ENTITY % SVG.prefix "" >
+
+<!-- reserved for future use with document profiles -->
+<!ENTITY % SVG.profile "" >
+
+<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+
+<!-- Pre-Framework Redeclaration Placeholder ..................... -->
+<!ENTITY % svg-prefw-redecl.module "IGNORE" >
+<![%svg-prefw-redecl.module;[
+%svg-prefw-redecl.mod;]]>
+
+<!-- Document Model Module ....................................... -->
+<!ENTITY % svg-model.mod
+    PUBLIC "-//W3C//ENTITIES SVG 1.1 Document Model//EN"
+           "svg11-model.mod" >
+
+<!-- Attribute Collection Module ................................. -->
+<!ENTITY % svg-attribs.mod
+    PUBLIC "-//W3C//ENTITIES SVG 1.1 Attribute Collection//EN"
+           "svg11-attribs.mod" >
+
+<!-- Modular Framework Module .................................... -->
+<!ENTITY % svg-framework.module "INCLUDE" >
+<![%svg-framework.module;[
+<!ENTITY % svg-framework.mod
+    PUBLIC "-//W3C//ENTITIES SVG 1.1 Modular Framework//EN"
+           "svg-framework.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Modular Framework Module ...................................... -->
+<!-- file: svg-framework.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-framework.mod,v 1.2 2002/04/20 18:07:43 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ENTITIES SVG 1.1 Modular Framework//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-framework.mod"
+
+     ....................................................................... -->
+
+<!-- Modular Framework
+
+     This module instantiates the modules needed o support the SVG
+     modularization model, including:
+
+        + Datatypes
+        + Qualified Name
+        + Document Model
+        + Attribute Collection
+-->
+
+<!ENTITY % svg-datatypes.module "INCLUDE" >
+<![%svg-datatypes.module;[
+<!ENTITY % svg-datatypes.mod
+    PUBLIC "-//W3C//ENTITIES SVG 1.1 Datatypes//EN"
+           "svg-datatypes.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Datatypes Module .............................................. -->
+<!-- file: svg-datatypes.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-datatypes.mod,v 1.2 2002/04/20 18:07:42 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ENTITIES SVG 1.1 Datatypes//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-datatypes.mod"
+
+     ....................................................................... -->
+
+<!-- Datatypes
+
+     This module declares common data types for properties and attributes.
+-->
+
+<!-- feature specification -->
+<!ENTITY % Boolean.datatype "( false | true )" >
+
+<!-- 'clip-rule' or 'fill-rule' property/attribute value -->
+<!ENTITY % ClipFillRule.datatype "( nonzero | evenodd | inherit )" >
+
+<!-- media type, as per [RFC2045] -->
+<!ENTITY % ContentType.datatype "CDATA" >
+
+<!-- a <coordinate> -->
+<!ENTITY % Coordinate.datatype "CDATA" >
+
+<!-- a list of <coordinate>s -->
+<!ENTITY % Coordinates.datatype "CDATA" >
+
+<!-- a <color> value -->
+<!ENTITY % Color.datatype "CDATA" >
+
+<!-- a <integer> -->
+<!ENTITY % Integer.datatype "CDATA" >
+
+<!-- a language code, as per [RFC3066] -->
+<!ENTITY % LanguageCode.datatype "NMTOKEN" >
+
+<!-- comma-separated list of language codes, as per [RFC3066] -->
+<!ENTITY % LanguageCodes.datatype "CDATA" >
+
+<!-- a <length> -->
+<!ENTITY % Length.datatype "CDATA" >
+
+<!-- a list of <length>s -->
+<!ENTITY % Lengths.datatype "CDATA" >
+
+<!-- a <number> -->
+<!ENTITY % Number.datatype "CDATA" >
+
+<!-- a list of <number>s -->
+<!ENTITY % Numbers.datatype "CDATA" >
+
+<!-- opacity value (e.g., <number>) -->
+<!ENTITY % OpacityValue.datatype "CDATA" >
+
+<!-- a path data specification -->
+<!ENTITY % PathData.datatype "CDATA" >
+
+<!-- 'preserveAspectRatio' attribute specification -->
+<!ENTITY % PreserveAspectRatioSpec.datatype "CDATA" >
+
+<!-- script expression -->
+<!ENTITY % Script.datatype "CDATA" >
+
+<!-- An SVG color value (RGB plus optional ICC) -->
+<!ENTITY % SVGColor.datatype "CDATA" >
+
+<!-- arbitrary text string -->
+<!ENTITY % Text.datatype "CDATA" >
+
+<!-- list of transforms -->
+<!ENTITY % TransformList.datatype "CDATA" >
+
+<!-- a Uniform Resource Identifier, see [URI] -->
+<!ENTITY % URI.datatype "CDATA" >
+
+<!-- 'viewBox' attribute specification -->
+<!ENTITY % ViewBoxSpec.datatype "CDATA" >
+
+<!-- end of svg-datatypes.mod -->
+]]>
+
+<!ENTITY % svg-qname.module "INCLUDE" >
+<![%svg-qname.module;[
+<!ENTITY % svg-qname.mod
+    PUBLIC "-//W3C//ENTITIES SVG 1.1 Qualified Name//EN"
+           "svg-qname.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Qualified Name Module ......................................... -->
+<!-- file: svg-qname.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-qname.mod,v 1.3 2002/11/03 15:54:14 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ENTITIES SVG 1.1 Qualified Name//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-qname.mod"
+
+     ....................................................................... -->
+
+<!-- Qualified Name
+
+     This module is contained in two parts, labeled Section 'A' and 'B':
+
+        Section A declares parameter entities to support namespace-
+        qualified names, namespace declarations, and name prefixing
+        for SVG and extensions.
+
+        Section B declares parameter entities used to provide
+        namespace-qualified names for all SVG element types:
+-->
+
+<!-- Section A: SVG XML Namespace Framework :::::::::::::::::::::: -->
+
+<!-- 1. Declare a %SVG.prefixed; conditional section keyword, used
+        to activate namespace prefixing. The default value should
+        inherit '%NS.prefixed;' from the DTD driver, so that unless
+        overridden, the default behaviour follows the overall DTD
+        prefixing scheme.
+-->
+<!ENTITY % NS.prefixed "IGNORE" >
+<!ENTITY % SVG.prefixed "%NS.prefixed;" >
+
+<!-- 2. Declare a parameter entity (eg., %SVG.xmlns;) containing
+        the URI reference used to identify the SVG namespace:
+-->
+<!ENTITY % SVG.xmlns "http://www.w3.org/2000/svg" >
+<!ENTITY % XLINK.xmlns "http://www.w3.org/1999/xlink" >
+
+<!-- 3. Declare parameter entities (eg., %SVG.prefix;) containing
+        the default namespace prefix string(s) to use when prefixing
+        is enabled. This may be overridden in the DTD driver or the
+        internal subset of an document instance. If no default prefix
+        is desired, this may be declared as an empty string.
+-->
+<!ENTITY % SVG.prefix "" >
+<!ENTITY % XLINK.prefix "xlink" >
+
+<!-- 4. Declare parameter entities (eg., %SVG.pfx;) containing the
+        colonized prefix(es) (eg., '%SVG.prefix;:') used when
+        prefixing is active, an empty string when it is not.
+-->
+<![%SVG.prefixed;[
+<!ENTITY % SVG.pfx "%SVG.prefix;:" >
+]]>
+<!ENTITY % SVG.pfx "" >
+<!ENTITY % XLINK.pfx "%XLINK.prefix;:" >
+
+<!-- 5. The parameter entity %SVG.xmlns.extra.attrib; may be
+        redeclared to contain any non-SVG namespace declaration
+        attributes for namespaces embedded in SVG. The default
+        is an empty string.
+-->
+<!ENTITY % SVG.xmlns.extra.attrib "" >
+
+<!-- Declare a parameter entity XLINK.xmlns.attrib containing
+     the XML Namespace declarations for XLink.
+-->
+<!ENTITY % XLINK.xmlns.attrib
+     "xmlns:%XLINK.prefix; %URI.datatype; #FIXED '%XLINK.xmlns;'"
+>
+
+<!-- Declare a parameter entity %NS.decl.attrib; containing
+     all XML Namespace declarations used in the DTD, plus the
+     xmlns declaration for SVG, its form dependent on whether
+     prefixing is active.
+-->
+<![%SVG.prefixed;[
+<!ENTITY % NS.decl.attrib
+    "xmlns:%SVG.prefix; %URI.datatype; #FIXED '%SVG.xmlns;'
+     %XLINK.xmlns.attrib;
+     %SVG.xmlns.extra.attrib;"
+>
+]]>
+<!ENTITY % NS.decl.attrib
+    "%XLINK.xmlns.attrib;
+     %SVG.xmlns.extra.attrib;"
+>
+
+<!-- Declare a parameter entity %SVG.xmlns.attrib; containing
+     all XML namespace declaration attributes used by SVG,
+     including a default xmlns attribute when prefixing is
+     inactive.
+-->
+<![%SVG.prefixed;[
+<!ENTITY % SVG.xmlns.attrib
+     "%NS.decl.attrib;"
+>
+]]>
+<!ENTITY % SVG.xmlns.attrib
+     "xmlns %URI.datatype; #FIXED '%SVG.xmlns;'
+      %XLINK.xmlns.attrib;"
+>
+
+<!-- Section B: SVG Qualified Names :::::::::::::::::::::::::::::: -->
+
+<!-- 6. This section declares parameter entities used to provide
+        namespace-qualified names for all SVG element types.
+-->
+
+<!-- module: svg-structure.mod ......................... -->
+
+<!ENTITY % SVG.svg.qname "%SVG.pfx;svg" >
+<!ENTITY % SVG.g.qname "%SVG.pfx;g" >
+<!ENTITY % SVG.defs.qname "%SVG.pfx;defs" >
+<!ENTITY % SVG.desc.qname "%SVG.pfx;desc" >
+<!ENTITY % SVG.title.qname "%SVG.pfx;title" >
+<!ENTITY % SVG.metadata.qname "%SVG.pfx;metadata" >
+<!ENTITY % SVG.symbol.qname "%SVG.pfx;symbol" >
+<!ENTITY % SVG.use.qname "%SVG.pfx;use" >
+
+<!-- module: svg-conditional.mod ....................... -->
+
+<!ENTITY % SVG.switch.qname "%SVG.pfx;switch" >
+
+<!-- module: svg-image.mod ............................. -->
+
+<!ENTITY % SVG.image.qname "%SVG.pfx;image" >
+
+<!-- module: svg-style.mod ............................. -->
+
+<!ENTITY % SVG.style.qname "%SVG.pfx;style" >
+
+<!-- module: svg-shape.mod ............................. -->
+
+<!ENTITY % SVG.path.qname "%SVG.pfx;path" >
+<!ENTITY % SVG.rect.qname "%SVG.pfx;rect" >
+<!ENTITY % SVG.circle.qname "%SVG.pfx;circle" >
+<!ENTITY % SVG.line.qname "%SVG.pfx;line" >
+<!ENTITY % SVG.ellipse.qname "%SVG.pfx;ellipse" >
+<!ENTITY % SVG.polyline.qname "%SVG.pfx;polyline" >
+<!ENTITY % SVG.polygon.qname "%SVG.pfx;polygon" >
+
+<!-- module: svg-text.mod .............................. -->
+
+<!ENTITY % SVG.text.qname "%SVG.pfx;text" >
+<!ENTITY % SVG.tspan.qname "%SVG.pfx;tspan" >
+<!ENTITY % SVG.tref.qname "%SVG.pfx;tref" >
+<!ENTITY % SVG.textPath.qname "%SVG.pfx;textPath" >
+<!ENTITY % SVG.altGlyph.qname "%SVG.pfx;altGlyph" >
+<!ENTITY % SVG.altGlyphDef.qname "%SVG.pfx;altGlyphDef" >
+<!ENTITY % SVG.altGlyphItem.qname "%SVG.pfx;altGlyphItem" >
+<!ENTITY % SVG.glyphRef.qname "%SVG.pfx;glyphRef" >
+
+<!-- module: svg-marker.mod ............................ -->
+
+<!ENTITY % SVG.marker.qname "%SVG.pfx;marker" >
+
+<!-- module: svg-profile.mod ........................... -->
+
+<!ENTITY % SVG.color-profile.qname "%SVG.pfx;color-profile" >
+
+<!-- module: svg-gradient.mod .......................... -->
+
+<!ENTITY % SVG.linearGradient.qname "%SVG.pfx;linearGradient" >
+<!ENTITY % SVG.radialGradient.qname "%SVG.pfx;radialGradient" >
+<!ENTITY % SVG.stop.qname "%SVG.pfx;stop" >
+
+<!-- module: svg-pattern.mod ........................... -->
+
+<!ENTITY % SVG.pattern.qname "%SVG.pfx;pattern" >
+
+<!-- module: svg-clip.mod .............................. -->
+
+<!ENTITY % SVG.clipPath.qname "%SVG.pfx;clipPath" >
+
+<!-- module: svg-mask.mod .............................. -->
+
+<!ENTITY % SVG.mask.qname "%SVG.pfx;mask" >
+
+<!-- module: svg-filter.mod ............................ -->
+
+<!ENTITY % SVG.filter.qname "%SVG.pfx;filter" >
+<!ENTITY % SVG.feBlend.qname "%SVG.pfx;feBlend" >
+<!ENTITY % SVG.feColorMatrix.qname "%SVG.pfx;feColorMatrix" >
+<!ENTITY % SVG.feComponentTransfer.qname "%SVG.pfx;feComponentTransfer" >
+<!ENTITY % SVG.feComposite.qname "%SVG.pfx;feComposite" >
+<!ENTITY % SVG.feConvolveMatrix.qname "%SVG.pfx;feConvolveMatrix" >
+<!ENTITY % SVG.feDiffuseLighting.qname "%SVG.pfx;feDiffuseLighting" >
+<!ENTITY % SVG.feDisplacementMap.qname "%SVG.pfx;feDisplacementMap" >
+<!ENTITY % SVG.feFlood.qname "%SVG.pfx;feFlood" >
+<!ENTITY % SVG.feGaussianBlur.qname "%SVG.pfx;feGaussianBlur" >
+<!ENTITY % SVG.feImage.qname "%SVG.pfx;feImage" >
+<!ENTITY % SVG.feMerge.qname "%SVG.pfx;feMerge" >
+<!ENTITY % SVG.feMergeNode.qname "%SVG.pfx;feMergeNode" >
+<!ENTITY % SVG.feMorphology.qname "%SVG.pfx;feMorphology" >
+<!ENTITY % SVG.feOffset.qname "%SVG.pfx;feOffset" >
+<!ENTITY % SVG.feSpecularLighting.qname "%SVG.pfx;feSpecularLighting" >
+<!ENTITY % SVG.feTile.qname "%SVG.pfx;feTile" >
+<!ENTITY % SVG.feTurbulence.qname "%SVG.pfx;feTurbulence" >
+<!ENTITY % SVG.feDistantLight.qname "%SVG.pfx;feDistantLight" >
+<!ENTITY % SVG.fePointLight.qname "%SVG.pfx;fePointLight" >
+<!ENTITY % SVG.feSpotLight.qname "%SVG.pfx;feSpotLight" >
+<!ENTITY % SVG.feFuncR.qname "%SVG.pfx;feFuncR" >
+<!ENTITY % SVG.feFuncG.qname "%SVG.pfx;feFuncG" >
+<!ENTITY % SVG.feFuncB.qname "%SVG.pfx;feFuncB" >
+<!ENTITY % SVG.feFuncA.qname "%SVG.pfx;feFuncA" >
+
+<!-- module: svg-cursor.mod ............................ -->
+
+<!ENTITY % SVG.cursor.qname "%SVG.pfx;cursor" >
+
+<!-- module: svg-hyperlink.mod ......................... -->
+
+<!ENTITY % SVG.a.qname "%SVG.pfx;a" >
+
+<!-- module: svg-view.mod .............................. -->
+
+<!ENTITY % SVG.view.qname "%SVG.pfx;view" >
+
+<!-- module: svg-script.mod ............................ -->
+
+<!ENTITY % SVG.script.qname "%SVG.pfx;script" >
+
+<!-- module: svg-animation.mod ......................... -->
+
+<!ENTITY % SVG.animate.qname "%SVG.pfx;animate" >
+<!ENTITY % SVG.set.qname "%SVG.pfx;set" >
+<!ENTITY % SVG.animateMotion.qname "%SVG.pfx;animateMotion" >
+<!ENTITY % SVG.animateColor.qname "%SVG.pfx;animateColor" >
+<!ENTITY % SVG.animateTransform.qname "%SVG.pfx;animateTransform" >
+<!ENTITY % SVG.mpath.qname "%SVG.pfx;mpath" >
+
+<!-- module: svg-font.mod .............................. -->
+
+<!ENTITY % SVG.font.qname "%SVG.pfx;font" >
+<!ENTITY % SVG.font-face.qname "%SVG.pfx;font-face" >
+<!ENTITY % SVG.glyph.qname "%SVG.pfx;glyph" >
+<!ENTITY % SVG.missing-glyph.qname "%SVG.pfx;missing-glyph" >
+<!ENTITY % SVG.hkern.qname "%SVG.pfx;hkern" >
+<!ENTITY % SVG.vkern.qname "%SVG.pfx;vkern" >
+<!ENTITY % SVG.font-face-src.qname "%SVG.pfx;font-face-src" >
+<!ENTITY % SVG.font-face-uri.qname "%SVG.pfx;font-face-uri" >
+<!ENTITY % SVG.font-face-format.qname "%SVG.pfx;font-face-format" >
+<!ENTITY % SVG.font-face-name.qname "%SVG.pfx;font-face-name" >
+<!ENTITY % SVG.definition-src.qname "%SVG.pfx;definition-src" >
+
+<!-- module: svg-extensibility.mod ..................... -->
+
+<!ENTITY % SVG.foreignObject.qname "%SVG.pfx;foreignObject" >
+
+<!-- end of svg-qname.mod -->
+]]>
+
+<!ENTITY % svg-model.module "INCLUDE" >
+<![%svg-model.module;[
+<!-- instantiate the Document Model declared in the DTD driver -->
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Document Model Module ......................................... -->
+<!-- file: svg11-model.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg11-model.mod,v 1.3 2002/11/14 15:11:03 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ENTITIES SVG 1.1 Document Model//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-model.mod"
+
+     ....................................................................... -->
+
+<!-- SVG 1.1 Document Model
+
+     This module describes the groupings of elements that make up
+     common content models for SVG elements.
+-->
+
+<!-- module: svg-structure.mod ......................... -->
+
+<!ENTITY % SVG.Description.extra.class "" >
+<!ENTITY % SVG.Description.class
+    "%SVG.desc.qname; | %SVG.title.qname; | %SVG.metadata.qname;
+     %SVG.Description.extra.class;"
+>
+
+<!ENTITY % SVG.Use.extra.class "" >
+<!ENTITY % SVG.Use.class
+    "| %SVG.use.qname; %SVG.Use.extra.class;"
+>
+
+<!ENTITY % SVG.Structure.extra.class "" >
+<!ENTITY % SVG.Structure.class
+    "| %SVG.svg.qname; | %SVG.g.qname; | %SVG.defs.qname; | %SVG.symbol.qname;
+       %SVG.Use.class; %SVG.Structure.extra.class;"
+>
+
+<!-- module: svg-conditional.mod ....................... -->
+
+<!ENTITY % SVG.Conditional.extra.class "" >
+<!ENTITY % SVG.Conditional.class
+    "| %SVG.switch.qname; %SVG.Conditional.extra.class;"
+>
+
+<!-- module: svg-image.mod ............................. -->
+
+<!ENTITY % SVG.Image.extra.class "" >
+<!ENTITY % SVG.Image.class
+    "| %SVG.image.qname; %SVG.Image.extra.class;"
+>
+
+<!-- module: svg-style.mod ............................. -->
+
+<!ENTITY % SVG.Style.extra.class "" >
+<!ENTITY % SVG.Style.class
+    "| %SVG.style.qname; %SVG.Style.extra.class;"
+>
+
+<!-- module: svg-shape.mod ............................. -->
+
+<!ENTITY % SVG.Shape.extra.class "" >
+<!ENTITY % SVG.Shape.class
+    "| %SVG.path.qname; | %SVG.rect.qname; | %SVG.circle.qname;
+     | %SVG.line.qname; | %SVG.ellipse.qname; | %SVG.polyline.qname;
+     | %SVG.polygon.qname; %SVG.Shape.extra.class;"
+>
+
+<!-- module: svg-text.mod .............................. -->
+
+<!ENTITY % SVG.Text.extra.class "" >
+<!ENTITY % SVG.Text.class
+    "| %SVG.text.qname; | %SVG.altGlyphDef.qname; %SVG.Text.extra.class;"
+>
+
+<!ENTITY % SVG.TextContent.extra.class "" >
+<!ENTITY % SVG.TextContent.class
+    "| %SVG.tspan.qname; | %SVG.tref.qname; | %SVG.textPath.qname;
+     | %SVG.altGlyph.qname; %SVG.TextContent.extra.class;"
+>
+
+<!-- module: svg-marker.mod ............................ -->
+
+<!ENTITY % SVG.Marker.extra.class "" >
+<!ENTITY % SVG.Marker.class
+    "| %SVG.marker.qname; %SVG.Marker.extra.class;"
+>
+
+<!-- module: svg-profile.mod ........................... -->
+
+<!ENTITY % SVG.ColorProfile.extra.class "" >
+<!ENTITY % SVG.ColorProfile.class
+    "| %SVG.color-profile.qname; %SVG.ColorProfile.extra.class;"
+>
+
+<!-- module: svg-gradient.mod .......................... -->
+
+<!ENTITY % SVG.Gradient.extra.class "" >
+<!ENTITY % SVG.Gradient.class
+    "| %SVG.linearGradient.qname; | %SVG.radialGradient.qname;
+       %SVG.Gradient.extra.class;"
+>
+
+<!-- module: svg-pattern.mod ........................... -->
+
+<!ENTITY % SVG.Pattern.extra.class "" >
+<!ENTITY % SVG.Pattern.class
+    "| %SVG.pattern.qname; %SVG.Pattern.extra.class;"
+>
+
+<!-- module: svg-clip.mod .............................. -->
+
+<!ENTITY % SVG.Clip.extra.class "" >
+<!ENTITY % SVG.Clip.class
+    "| %SVG.clipPath.qname; %SVG.Clip.extra.class;"
+>
+
+<!-- module: svg-mask.mod .............................. -->
+
+<!ENTITY % SVG.Mask.extra.class "" >
+<!ENTITY % SVG.Mask.class
+    "| %SVG.mask.qname; %SVG.Mask.extra.class;"
+>
+
+<!-- module: svg-filter.mod ............................ -->
+
+<!ENTITY % SVG.Filter.extra.class "" >
+<!ENTITY % SVG.Filter.class
+    "| %SVG.filter.qname; %SVG.Filter.extra.class;"
+>
+
+<!ENTITY % SVG.FilterPrimitive.extra.class "" >
+<!ENTITY % SVG.FilterPrimitive.class
+    "| %SVG.feBlend.qname; | %SVG.feColorMatrix.qname;
+     | %SVG.feComponentTransfer.qname; | %SVG.feComposite.qname;
+     | %SVG.feConvolveMatrix.qname; | %SVG.feDiffuseLighting.qname;
+     | %SVG.feDisplacementMap.qname; | %SVG.feFlood.qname;
+     | %SVG.feGaussianBlur.qname; | %SVG.feImage.qname; | %SVG.feMerge.qname;
+     | %SVG.feMorphology.qname; | %SVG.feOffset.qname;
+     | %SVG.feSpecularLighting.qname; | %SVG.feTile.qname;
+     | %SVG.feTurbulence.qname; %SVG.FilterPrimitive.extra.class;"
+>
+
+<!-- module: svg-cursor.mod ............................ -->
+
+<!ENTITY % SVG.Cursor.extra.class "" >
+<!ENTITY % SVG.Cursor.class
+    "| %SVG.cursor.qname; %SVG.Cursor.extra.class;"
+>
+
+<!-- module: svg-hyperlink.mod ......................... -->
+
+<!ENTITY % SVG.Hyperlink.extra.class "" >
+<!ENTITY % SVG.Hyperlink.class
+    "| %SVG.a.qname; %SVG.Hyperlink.extra.class;"
+>
+
+<!-- module: svg-view.mod .............................. -->
+
+<!ENTITY % SVG.View.extra.class "" >
+<!ENTITY % SVG.View.class
+    "| %SVG.view.qname; %SVG.View.extra.class;"
+>
+
+<!-- module: svg-script.mod ............................ -->
+
+<!ENTITY % SVG.Script.extra.class "" >
+<!ENTITY % SVG.Script.class
+    "| %SVG.script.qname; %SVG.Script.extra.class;"
+>
+
+<!-- module: svg-animation.mod ......................... -->
+
+<!ENTITY % SVG.Animation.extra.class "" >
+<!ENTITY % SVG.Animation.class
+    "%SVG.animate.qname; | %SVG.set.qname; | %SVG.animateMotion.qname; |
+     %SVG.animateColor.qname; | %SVG.animateTransform.qname;
+     %SVG.Animation.extra.class;"
+>
+
+<!-- module: svg-font.mod .............................. -->
+
+<!ENTITY % SVG.Font.extra.class "" >
+<!ENTITY % SVG.Font.class
+    "| %SVG.font.qname; | %SVG.font-face.qname; %SVG.Font.extra.class;"
+>
+
+<!-- module: svg-extensibility.mod ..................... -->
+
+<!ENTITY % SVG.Extensibility.extra.class "" >
+<!ENTITY % SVG.Extensibility.class
+    "| %SVG.foreignObject.qname; %SVG.Extensibility.extra.class;"
+>
+
+<!-- end of svg11-model.mod -->
+]]>
+
+<!ENTITY % svg-attribs.module "INCLUDE" >
+<![%svg-attribs.module;[
+<!-- instantiate the Attribute Collection declared in the DTD driver -->
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Attribute Collection Module ................................... -->
+<!-- file: svg11-attribs.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg11-attribs.mod,v 1.4 2002/11/14 15:11:03 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ENTITIES SVG 1.1 Attribute Collection//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-attribs.mod"
+
+     ....................................................................... -->
+
+<!-- SVG 1.1 Attribute Collection
+
+     This module defines the set of common attributes that can be present
+     on many SVG elements.
+-->
+
+<!-- module: svg-conditional.mod ....................... -->
+
+<!ENTITY % ExtensionList.datatype "CDATA" >
+<!ENTITY % FeatureList.datatype "CDATA" >
+
+<!ENTITY % SVG.Conditional.extra.attrib "" >
+<!ENTITY % SVG.Conditional.attrib
+    "requiredFeatures %FeatureList.datatype; #IMPLIED
+     requiredExtensions %ExtensionList.datatype; #IMPLIED
+     systemLanguage %LanguageCodes.datatype; #IMPLIED
+     %SVG.Conditional.extra.attrib;"
+>
+
+<!-- module: svg-style.mod ............................. -->
+
+<!ENTITY % ClassList.datatype "CDATA" >
+<!ENTITY % StyleSheet.datatype "CDATA" >
+
+<!ENTITY % SVG.Style.extra.attrib "" >
+<!ENTITY % SVG.Style.attrib
+    "style %StyleSheet.datatype; #IMPLIED
+     class %ClassList.datatype; #IMPLIED
+     %SVG.Style.extra.attrib;"
+>
+
+<!-- module: svg-text.mod .............................. -->
+
+<!ENTITY % BaselineShiftValue.datatype "CDATA" >
+<!ENTITY % FontFamilyValue.datatype "CDATA" >
+<!ENTITY % FontSizeValue.datatype "CDATA" >
+<!ENTITY % FontSizeAdjustValue.datatype "CDATA" >
+<!ENTITY % GlyphOrientationHorizontalValue.datatype "CDATA" >
+<!ENTITY % GlyphOrientationVerticalValue.datatype "CDATA" >
+<!ENTITY % KerningValue.datatype "CDATA" >
+<!ENTITY % SpacingValue.datatype "CDATA" >
+<!ENTITY % TextDecorationValue.datatype "CDATA" >
+
+<!ENTITY % SVG.Text.extra.attrib "" >
+<!ENTITY % SVG.Text.attrib
+    "writing-mode ( lr-tb | rl-tb | tb-rl | lr | rl | tb | inherit ) #IMPLIED
+     %SVG.Text.extra.attrib;"
+>
+
+<!ENTITY % SVG.TextContent.extra.attrib "" >
+<!ENTITY % SVG.TextContent.attrib
+    "alignment-baseline ( auto | baseline | before-edge | text-before-edge |
+                          middle | central | after-edge | text-after-edge |
+                          ideographic | alphabetic | hanging | mathematical |
+                          inherit ) #IMPLIED
+     baseline-shift %BaselineShiftValue.datatype; #IMPLIED
+     direction ( ltr | rtl | inherit ) #IMPLIED
+     dominant-baseline ( auto | use-script | no-change | reset-size |
+                         ideographic | alphabetic | hanging | mathematical |
+                         central | middle | text-after-edge | text-before-edge |
+                         inherit ) #IMPLIED
+     glyph-orientation-horizontal %GlyphOrientationHorizontalValue.datatype;
+                                  #IMPLIED
+     glyph-orientation-vertical %GlyphOrientationVerticalValue.datatype;
+                                #IMPLIED
+     kerning %KerningValue.datatype; #IMPLIED
+     letter-spacing %SpacingValue.datatype; #IMPLIED
+     text-anchor ( start | middle | end | inherit ) #IMPLIED
+     text-decoration %TextDecorationValue.datatype; #IMPLIED
+     unicode-bidi ( normal | embed | bidi-override | inherit ) #IMPLIED
+     word-spacing %SpacingValue.datatype; #IMPLIED
+     %SVG.TextContent.extra.attrib;"
+>
+
+<!ENTITY % SVG.Font.extra.attrib "" >
+<!ENTITY % SVG.Font.attrib
+    "font-family %FontFamilyValue.datatype; #IMPLIED
+     font-size %FontSizeValue.datatype; #IMPLIED
+     font-size-adjust %FontSizeAdjustValue.datatype; #IMPLIED
+     font-stretch ( normal | wider | narrower | ultra-condensed |
+                    extra-condensed | condensed | semi-condensed |
+                    semi-expanded | expanded | extra-expanded |
+                    ultra-expanded | inherit ) #IMPLIED
+     font-style ( normal | italic | oblique | inherit ) #IMPLIED
+     font-variant ( normal | small-caps | inherit ) #IMPLIED
+     font-weight ( normal | bold | bolder | lighter | 100 | 200 | 300 | 400 |
+                   500 | 600 | 700 | 800 | 900 | inherit ) #IMPLIED
+     %SVG.Font.extra.attrib;"
+>
+
+<!-- module: svg-marker.mod ............................ -->
+
+<!ENTITY % MarkerValue.datatype "CDATA" >
+
+<!ENTITY % SVG.Marker.extra.attrib "" >
+<!ENTITY % SVG.Marker.attrib
+    "marker-start %MarkerValue.datatype; #IMPLIED
+     marker-mid %MarkerValue.datatype; #IMPLIED
+     marker-end %MarkerValue.datatype; #IMPLIED
+     %SVG.Marker.extra.attrib;"
+>
+
+<!-- module: svg-profile.mod ........................... -->
+
+<!ENTITY % SVG.ColorProfile.extra.attrib "" >
+<!ENTITY % SVG.ColorProfile.attrib
+    "color-profile CDATA #IMPLIED
+     %SVG.ColorProfile.extra.attrib;"
+>
+
+<!-- module: svg-gradient.mod .......................... -->
+
+<!ENTITY % NumberOrPercentage.datatype "CDATA" >
+
+<!ENTITY % SVG.Gradient.extra.attrib "" >
+<!ENTITY % SVG.Gradient.attrib
+    "stop-color %SVGColor.datatype; #IMPLIED
+     stop-opacity %OpacityValue.datatype; #IMPLIED
+     %SVG.Gradient.extra.attrib;"
+>
+
+<!-- module: svg-clip.mod .............................. -->
+
+<!ENTITY % ClipPathValue.datatype "CDATA" >
+
+<!ENTITY % SVG.Clip.extra.attrib "" >
+<!ENTITY % SVG.Clip.attrib
+    "clip-path %ClipPathValue.datatype; #IMPLIED
+     clip-rule %ClipFillRule.datatype; #IMPLIED
+     %SVG.Clip.extra.attrib;"
+>
+
+<!-- module: svg-mask.mod .............................. -->
+
+<!ENTITY % MaskValue.datatype "CDATA" >
+
+<!ENTITY % SVG.Mask.extra.attrib "" >
+<!ENTITY % SVG.Mask.attrib
+    "mask %MaskValue.datatype; #IMPLIED
+     %SVG.Mask.extra.attrib;"
+>
+
+<!-- module: svg-filter.mod ............................ -->
+
+<!ENTITY % FilterValue.datatype "CDATA" >
+<!ENTITY % NumberOptionalNumber.datatype "CDATA" >
+
+<!ENTITY % SVG.Filter.extra.attrib "" >
+<!ENTITY % SVG.Filter.attrib
+    "filter %FilterValue.datatype; #IMPLIED
+     %SVG.Filter.extra.attrib;"
+>
+
+<!ENTITY % SVG.FilterColor.extra.attrib "" >
+<!ENTITY % SVG.FilterColor.attrib
+    "color-interpolation-filters ( auto | sRGB | linearRGB | inherit )
+                                   #IMPLIED
+     %SVG.FilterColor.extra.attrib;"
+>
+
+<!-- module: svg-cursor.mod ............................ -->
+
+<!ENTITY % CursorValue.datatype "CDATA" >
+
+<!ENTITY % SVG.Cursor.extra.attrib "" >
+<!ENTITY % SVG.Cursor.attrib
+    "cursor %CursorValue.datatype; #IMPLIED
+     %SVG.Cursor.extra.attrib;"
+>
+
+<!-- end of svg11-attribs.mod -->
+]]>
+
+<!-- end of svg-framework.mod -->
+]]>
+
+<!-- Post-Framework Redeclaration Placeholder .................... -->
+<!ENTITY % svg-postfw-redecl.module "IGNORE" >
+<![%svg-postfw-redecl.module;[
+%svg-postfw-redecl.mod;]]>
+
+<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+
+<!-- Core Attribute Module ....................................... -->
+<!ENTITY % svg-core-attrib.module "INCLUDE" >
+<![%svg-core-attrib.module;[
+<!ENTITY % svg-core-attrib.mod
+    PUBLIC "-//W3C//ENTITIES SVG 1.1 Core Attribute//EN"
+           "svg-core-attrib.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Core Attribute Module ......................................... -->
+<!-- file: svg-core-attrib.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-core-attrib.mod,v 1.3 2002/04/28 13:50:23 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ENTITIES SVG 1.1 Core Attribute//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-core-attrib.mod"
+
+     ....................................................................... -->
+
+<!-- Core Attribute
+
+        id, xml:base, xml:lang, xml:space
+
+     This module defines the core set of attributes that can be present on
+     any element.
+-->
+
+<!ENTITY % SVG.id.attrib
+    "id ID #IMPLIED"
+>
+
+<!ENTITY % SVG.base.attrib
+    "xml:base %URI.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.lang.attrib
+    "xml:lang %LanguageCode.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.space.attrib
+    "xml:space ( default | preserve ) #IMPLIED"
+>
+
+<!ENTITY % SVG.Core.extra.attrib "" >
+
+<!ENTITY % SVG.Core.attrib
+    "%SVG.id.attrib;
+     %SVG.base.attrib;
+     %SVG.lang.attrib;
+     %SVG.space.attrib;
+     %SVG.Core.extra.attrib;"
+>
+
+<!-- end of svg-core-attrib.mod -->
+]]>
+
+<!-- Container Attribute Module .................................. -->
+<!ENTITY % svg-container-attrib.module "INCLUDE" >
+<![%svg-container-attrib.module;[
+<!ENTITY % svg-container-attrib.mod
+    PUBLIC "-//W3C//ENTITIES SVG 1.1 Container Attribute//EN"
+           "svg-container-attrib.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Container Attribute Module .................................... -->
+<!-- file: svg-container-attrib.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-container-attrib.mod,v 1.2 2002/04/20 18:07:42 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ENTITIES SVG 1.1 Container Attribute//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-container-attrib.mod"
+
+     ....................................................................... -->
+
+<!-- Container Attribute
+
+        enable-background
+
+     This module defines the Container attribute set.
+-->
+
+<!-- 'enable-background' property/attribute value (e.g., 'new', 'accumulate') -->
+<!ENTITY % EnableBackgroundValue.datatype "CDATA" >
+
+<!ENTITY % SVG.enable-background.attrib
+    "enable-background %EnableBackgroundValue.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.Container.extra.attrib "" >
+
+<!ENTITY % SVG.Container.attrib
+    "%SVG.enable-background.attrib;
+     %SVG.Container.extra.attrib;"
+>
+
+<!-- end of svg-container-attrib.mod -->
+]]>
+
+<!-- Viewport Attribute Module ................................... -->
+<!ENTITY % svg-viewport-attrib.module "INCLUDE" >
+<![%svg-viewport-attrib.module;[
+<!ENTITY % svg-viewport-attrib.mod
+    PUBLIC "-//W3C//ENTITIES SVG 1.1 Viewport Attribute//EN"
+           "svg-viewport-attrib.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Viewport Attribute Module ..................................... -->
+<!-- file: svg-viewport-attrib.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-viewport-attrib.mod,v 1.2 2002/04/20 18:07:43 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ENTITIES SVG 1.1 Viewport Attribute//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-viewport-attrib.mod"
+
+     ....................................................................... -->
+
+<!-- Viewport Attribute
+
+        clip, overflow
+
+     This module defines the Viewport attribute set.
+-->
+
+<!-- 'clip' property/attribute value (e.g., 'auto', rect(...)) -->
+<!ENTITY % ClipValue.datatype "CDATA" >
+
+<!ENTITY % SVG.clip.attrib
+    "clip %ClipValue.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.overflow.attrib
+    "overflow ( visible | hidden | scroll | auto | inherit ) #IMPLIED"
+>
+
+<!ENTITY % SVG.Viewport.extra.attrib "" >
+
+<!ENTITY % SVG.Viewport.attrib
+    "%SVG.clip.attrib;
+     %SVG.overflow.attrib;
+     %SVG.Viewport.extra.attrib;"
+>
+
+<!-- end of svg-viewport-attrib.mod -->
+]]>
+
+<!-- Paint Attribute Module ...................................... -->
+<!ENTITY % svg-paint-attrib.module "INCLUDE" >
+<![%svg-paint-attrib.module;[
+<!ENTITY % svg-paint-attrib.mod
+    PUBLIC "-//W3C//ENTITIES SVG 1.1 Paint Attribute//EN"
+           "svg-paint-attrib.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Paint Attribute Module ........................................ -->
+<!-- file: svg-paint-attrib.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-paint-attrib.mod,v 1.2 2002/04/20 18:07:43 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ENTITIES SVG 1.1 Paint Attribute//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-paint-attrib.mod"
+
+     ....................................................................... -->
+
+<!-- Paint Attribute
+
+        fill, fill-rule, stroke, stroke-dasharray, stroke-dashoffset,
+        stroke-linecap, stroke-linejoin, stroke-miterlimit, stroke-width, color,
+        color-interpolation, color-rendering
+
+     This module defines the Paint and Color attribute sets.
+-->
+
+<!-- a 'fill' or 'stroke' property/attribute value: <paint> -->
+<!ENTITY % Paint.datatype "CDATA" >
+
+<!-- 'stroke-dasharray' property/attribute value (e.g., 'none', list of <number>s) -->
+<!ENTITY % StrokeDashArrayValue.datatype "CDATA" >
+
+<!-- 'stroke-dashoffset' property/attribute value (e.g., 'none', <legnth>) -->
+<!ENTITY % StrokeDashOffsetValue.datatype "CDATA" >
+
+<!-- 'stroke-miterlimit' property/attribute value (e.g., <number>) -->
+<!ENTITY % StrokeMiterLimitValue.datatype "CDATA" >
+
+<!-- 'stroke-width' property/attribute value (e.g., <length>) -->
+<!ENTITY % StrokeWidthValue.datatype "CDATA" >
+
+<!ENTITY % SVG.fill.attrib
+    "fill %Paint.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.fill-rule.attrib
+    "fill-rule %ClipFillRule.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.stroke.attrib
+    "stroke %Paint.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.stroke-dasharray.attrib
+    "stroke-dasharray %StrokeDashArrayValue.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.stroke-dashoffset.attrib
+    "stroke-dashoffset %StrokeDashOffsetValue.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.stroke-linecap.attrib
+    "stroke-linecap ( butt | round | square | inherit ) #IMPLIED"
+>
+
+<!ENTITY % SVG.stroke-linejoin.attrib
+    "stroke-linejoin ( miter | round | bevel | inherit ) #IMPLIED"
+>
+
+<!ENTITY % SVG.stroke-miterlimit.attrib
+    "stroke-miterlimit %StrokeMiterLimitValue.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.stroke-width.attrib
+    "stroke-width %StrokeWidthValue.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.Paint.extra.attrib "" >
+
+<!ENTITY % SVG.Paint.attrib
+    "%SVG.fill.attrib;
+     %SVG.fill-rule.attrib;
+     %SVG.stroke.attrib;
+     %SVG.stroke-dasharray.attrib;
+     %SVG.stroke-dashoffset.attrib;
+     %SVG.stroke-linecap.attrib;
+     %SVG.stroke-linejoin.attrib;
+     %SVG.stroke-miterlimit.attrib;
+     %SVG.stroke-width.attrib;
+     %SVG.Paint.extra.attrib;"
+>
+
+<!ENTITY % SVG.color.attrib
+    "color %Color.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.color-interpolation.attrib
+    "color-interpolation ( auto | sRGB | linearRGB | inherit ) #IMPLIED"
+>
+
+<!ENTITY % SVG.color-rendering.attrib
+    "color-rendering ( auto | optimizeSpeed | optimizeQuality | inherit )
+                       #IMPLIED"
+>
+
+<!ENTITY % SVG.Color.extra.attrib "" >
+
+<!ENTITY % SVG.Color.attrib
+    "%SVG.color.attrib;
+     %SVG.color-interpolation.attrib;
+     %SVG.color-rendering.attrib;
+     %SVG.Color.extra.attrib;"
+>
+
+<!-- end of svg-paint-attrib.mod -->
+]]>
+
+<!-- Paint Opacity Attribute Module .............................. -->
+<!ENTITY % svg-opacity-attrib.module "INCLUDE" >
+<![%svg-opacity-attrib.module;[
+<!ENTITY % svg-opacity-attrib.mod
+    PUBLIC "-//W3C//ENTITIES SVG 1.1 Paint Opacity Attribute//EN"
+           "svg-opacity-attrib.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Paint Opacity Attribute Module ................................ -->
+<!-- file: svg-opacity-attrib.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-opacity-attrib.mod,v 1.2 2002/04/20 18:07:43 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ENTITIES SVG 1.1 Paint Opacity Attribute//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-opacity-attrib.mod"
+
+     ....................................................................... -->
+
+<!-- Paint Opacity Attribute
+
+        opacity, fill-opacity, stroke-opacity
+
+     This module defines the Opacity attribute set.
+-->
+
+<!ENTITY % SVG.opacity.attrib
+    "opacity %OpacityValue.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.fill-opacity.attrib
+    "fill-opacity %OpacityValue.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.stroke-opacity.attrib
+    "stroke-opacity %OpacityValue.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.Opacity.extra.attrib "" >
+
+<!ENTITY % SVG.Opacity.attrib
+    "%SVG.opacity.attrib;
+     %SVG.fill-opacity.attrib;
+     %SVG.stroke-opacity.attrib;
+     %SVG.Opacity.extra.attrib;"
+>
+
+<!-- end of svg-opacity-attrib.mod -->
+]]>
+
+<!-- Graphics Attribute Module ................................... -->
+<!ENTITY % svg-graphics-attrib.module "INCLUDE" >
+<![%svg-graphics-attrib.module;[
+<!ENTITY % svg-graphics-attrib.mod
+    PUBLIC "-//W3C//ENTITIES SVG 1.1 Graphics Attribute//EN"
+           "svg-graphics-attrib.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Graphics Attribute Module ..................................... -->
+<!-- file: svg-graphics-attrib.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-graphics-attrib.mod,v 1.2 2002/04/20 18:07:43 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ENTITIES SVG 1.1 Graphics Attribute//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-graphics-attrib.mod"
+
+     ....................................................................... -->
+
+<!-- Graphics Attribute
+
+        display, image-rendering, pointer-events, shape-rendering,
+        text-rendering, visibility
+
+     This module defines the Graphics attribute set.
+-->
+
+<!ENTITY % SVG.display.attrib
+    "display ( inline | block | list-item | run-in | compact | marker |
+               table | inline-table | table-row-group | table-header-group |
+               table-footer-group | table-row | table-column-group |
+               table-column | table-cell | table-caption | none | inherit )
+               #IMPLIED"
+>
+
+<!ENTITY % SVG.image-rendering.attrib
+    "image-rendering ( auto | optimizeSpeed | optimizeQuality | inherit )
+                       #IMPLIED"
+>
+
+<!ENTITY % SVG.pointer-events.attrib
+    "pointer-events ( visiblePainted | visibleFill | visibleStroke | visible |
+                      painted | fill | stroke | all | none | inherit )
+                      #IMPLIED"
+>
+
+<!ENTITY % SVG.shape-rendering.attrib
+    "shape-rendering ( auto | optimizeSpeed | crispEdges | geometricPrecision |
+                       inherit ) #IMPLIED"
+>
+
+<!ENTITY % SVG.text-rendering.attrib
+    "text-rendering ( auto | optimizeSpeed | optimizeLegibility |
+                      geometricPrecision | inherit ) #IMPLIED"
+>
+
+<!ENTITY % SVG.visibility.attrib
+    "visibility ( visible | hidden | inherit ) #IMPLIED"
+>
+
+<!ENTITY % SVG.Graphics.extra.attrib "" >
+
+<!ENTITY % SVG.Graphics.attrib
+    "%SVG.display.attrib;
+     %SVG.image-rendering.attrib;
+     %SVG.pointer-events.attrib;
+     %SVG.shape-rendering.attrib;
+     %SVG.text-rendering.attrib;
+     %SVG.visibility.attrib;
+     %SVG.Graphics.extra.attrib;"
+>
+
+<!-- end of svg-graphics-attrib.mod -->
+]]>
+
+<!-- Document Events Attribute Module ............................ -->
+<!ENTITY % svg-docevents-attrib.module "INCLUDE" >
+<![%svg-docevents-attrib.module;[
+<!ENTITY % svg-docevents-attrib.mod
+    PUBLIC "-//W3C//ENTITIES SVG 1.1 Document Events Attribute//EN"
+           "svg-docevents-attrib.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Document Events Attribute Module .............................. -->
+<!-- file: svg-docevents-attrib.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-docevents-attrib.mod,v 1.2 2002/04/20 18:07:42 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ENTITIES SVG 1.1 Document Events Attribute//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-docevents-attrib.mod"
+
+     ....................................................................... -->
+
+<!-- Document Events Attribute
+
+        onunload, onabort, onerror, onresize, onscroll, onzoom
+
+     This module defines the DocumentEvents attribute set.
+-->
+
+<!ENTITY % SVG.onunload.attrib
+    "onunload %Script.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.onabort.attrib
+    "onabort %Script.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.onerror.attrib
+    "onerror %Script.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.onresize.attrib
+    "onresize %Script.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.onscroll.attrib
+    "onscroll %Script.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.onzoom.attrib
+    "onzoom %Script.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.DocumentEvents.extra.attrib "" >
+
+<!ENTITY % SVG.DocumentEvents.attrib
+    "%SVG.onunload.attrib;
+     %SVG.onabort.attrib;
+     %SVG.onerror.attrib;
+     %SVG.onresize.attrib;
+     %SVG.onscroll.attrib;
+     %SVG.onzoom.attrib;
+     %SVG.DocumentEvents.extra.attrib;"
+>
+
+<!-- end of svg-docevents-attrib.mod -->
+]]>
+
+<!-- Graphical Element Events Attribute Module ................... -->
+<!ENTITY % svg-graphevents-attrib.module "INCLUDE" >
+<![%svg-graphevents-attrib.module;[
+<!ENTITY % svg-graphevents-attrib.mod
+    PUBLIC "-//W3C//ENTITIES SVG 1.1 Graphical Element Events Attribute//EN"
+           "svg-graphevents-attrib.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Graphical Element Events Attribute Module ..................... -->
+<!-- file: svg-graphevents-attrib.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-graphevents-attrib.mod,v 1.2 2002/04/20 18:07:43 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ENTITIES SVG 1.1 Graphical Element Events Attribute//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-graphevents-attrib.mod"
+
+     ....................................................................... -->
+
+<!-- Graphical Element Events Attribute
+
+        onfocusin, onfocusout, onactivate, onclick, onmousedown, onmouseup,
+        onmouseover, onmousemove, onmouseout, onload
+
+     This module defines the GraphicalEvents attribute set.
+-->
+
+<!ENTITY % SVG.onfocusin.attrib
+    "onfocusin %Script.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.onfocusout.attrib
+    "onfocusout %Script.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.onactivate.attrib
+    "onactivate %Script.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.onclick.attrib
+    "onclick %Script.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.onmousedown.attrib
+    "onmousedown %Script.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.onmouseup.attrib
+    "onmouseup %Script.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.onmouseover.attrib
+    "onmouseover %Script.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.onmousemove.attrib
+    "onmousemove %Script.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.onmouseout.attrib
+    "onmouseout %Script.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.onload.attrib
+    "onload %Script.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.GraphicalEvents.extra.attrib "" >
+
+<!ENTITY % SVG.GraphicalEvents.attrib
+    "%SVG.onfocusin.attrib;
+     %SVG.onfocusout.attrib;
+     %SVG.onactivate.attrib;
+     %SVG.onclick.attrib;
+     %SVG.onmousedown.attrib;
+     %SVG.onmouseup.attrib;
+     %SVG.onmouseover.attrib;
+     %SVG.onmousemove.attrib;
+     %SVG.onmouseout.attrib;
+     %SVG.onload.attrib;
+     %SVG.GraphicalEvents.extra.attrib;"
+>
+
+<!-- end of svg-graphevents-attrib.mod -->
+]]>
+
+<!-- Animation Events Attribute Module ........................... -->
+<!ENTITY % svg-animevents-attrib.module "INCLUDE" >
+<![%svg-animevents-attrib.module;[
+<!ENTITY % svg-animevents-attrib.mod
+    PUBLIC "-//W3C//ENTITIES SVG 1.1 Animation Events Attribute//EN"
+           "svg-animevents-attrib.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Animation Events Attribute Module ............................. -->
+<!-- file: svg-animevents-attrib.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-animevents-attrib.mod,v 1.3 2002/04/28 13:50:23 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ENTITIES SVG 1.1 Animation Events Attribute//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-animevents-attrib.mod"
+
+     ....................................................................... -->
+
+<!-- Animation Events Attribute
+
+        onbegin, onend, onrepeat, onload
+
+     This module defines the AnimationEvents attribute set.
+-->
+
+<!ENTITY % SVG.onbegin.attrib
+    "onbegin %Script.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.onend.attrib
+    "onend %Script.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.onrepeat.attrib
+    "onrepeat %Script.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.onload.attrib
+    "onload %Script.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.AnimationEvents.extra.attrib "" >
+
+<!ENTITY % SVG.AnimationEvents.attrib
+    "%SVG.onbegin.attrib;
+     %SVG.onend.attrib;
+     %SVG.onrepeat.attrib;
+     %SVG.onload.attrib;
+     %SVG.AnimationEvents.extra.attrib;"
+>
+
+<!-- end of svg-animevents-attrib.mod -->
+]]>
+
+<!-- XLink Attribute Module ...................................... -->
+<!ENTITY % svg-xlink-attrib.module "INCLUDE" >
+<![%svg-xlink-attrib.module;[
+<!ENTITY % svg-xlink-attrib.mod
+    PUBLIC "-//W3C//ENTITIES SVG 1.1 XLink Attribute//EN"
+           "svg-xlink-attrib.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 XLink Attribute Module ........................................ -->
+<!-- file: svg-xlink-attrib.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-xlink-attrib.mod,v 1.2 2002/04/20 18:07:43 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ENTITIES SVG 1.1 XLink Attribute//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-xlink-attrib.mod"
+
+     ....................................................................... -->
+
+<!-- XLink Attribute
+
+       type, href, role, arcrole, title, show, actuate
+
+     This module defines the XLink, XLinkRequired, XLinkEmbed, and
+     XLinkReplace attribute set.
+-->
+
+<!ENTITY % SVG.XLink.extra.attrib "" >
+
+<!ENTITY % SVG.XLink.attrib
+    "%XLINK.xmlns.attrib;
+     %XLINK.pfx;type ( simple ) #FIXED 'simple'
+     %XLINK.pfx;href %URI.datatype; #IMPLIED
+     %XLINK.pfx;role %URI.datatype; #IMPLIED
+     %XLINK.pfx;arcrole %URI.datatype; #IMPLIED
+     %XLINK.pfx;title CDATA #IMPLIED
+     %XLINK.pfx;show ( other ) 'other'
+     %XLINK.pfx;actuate ( onLoad ) #FIXED 'onLoad'
+     %SVG.XLink.extra.attrib;"
+>
+
+<!ENTITY % SVG.XLinkRequired.extra.attrib "" >
+
+<!ENTITY % SVG.XLinkRequired.attrib
+    "%XLINK.xmlns.attrib;
+     %XLINK.pfx;type ( simple ) #FIXED 'simple'
+     %XLINK.pfx;href %URI.datatype; #REQUIRED
+     %XLINK.pfx;role %URI.datatype; #IMPLIED
+     %XLINK.pfx;arcrole %URI.datatype; #IMPLIED
+     %XLINK.pfx;title CDATA #IMPLIED
+     %XLINK.pfx;show ( other ) 'other'
+     %XLINK.pfx;actuate ( onLoad ) #FIXED 'onLoad'
+     %SVG.XLinkRequired.extra.attrib;"
+>
+
+<!ENTITY % SVG.XLinkEmbed.extra.attrib "" >
+
+<!ENTITY % SVG.XLinkEmbed.attrib
+    "%XLINK.xmlns.attrib;
+     %XLINK.pfx;type ( simple ) #FIXED 'simple'
+     %XLINK.pfx;href %URI.datatype; #REQUIRED
+     %XLINK.pfx;role %URI.datatype; #IMPLIED
+     %XLINK.pfx;arcrole %URI.datatype; #IMPLIED
+     %XLINK.pfx;title CDATA #IMPLIED
+     %XLINK.pfx;show ( embed ) 'embed'
+     %XLINK.pfx;actuate ( onLoad ) #FIXED 'onLoad'
+     %SVG.XLinkEmbed.extra.attrib;"
+>
+
+<!ENTITY % SVG.XLinkReplace.extra.attrib "" >
+
+<!ENTITY % SVG.XLinkReplace.attrib
+    "%XLINK.xmlns.attrib;
+     %XLINK.pfx;type ( simple ) #FIXED 'simple'
+     %XLINK.pfx;href %URI.datatype; #REQUIRED
+     %XLINK.pfx;role %URI.datatype; #IMPLIED
+     %XLINK.pfx;arcrole %URI.datatype; #IMPLIED
+     %XLINK.pfx;title CDATA #IMPLIED
+     %XLINK.pfx;show ( new | replace ) 'replace'
+     %XLINK.pfx;actuate ( onRequest ) #FIXED 'onRequest'
+     %SVG.XLinkReplace.extra.attrib;"
+>
+
+<!-- end of svg-xlink-attrib.mod -->
+]]>
+
+<!-- External Resources Attribute Module ......................... -->
+<!ENTITY % svg-extresources-attrib.module "INCLUDE" >
+<![%svg-extresources-attrib.module;[
+<!ENTITY % svg-extresources-attrib.mod
+    PUBLIC "-//W3C//ENTITIES SVG 1.1 External Resources Attribute//EN"
+           "svg-extresources-attrib.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 External Resources Attribute Module ........................... -->
+<!-- file: svg-extresources-attrib.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-extresources-attrib.mod,v 1.2 2002/04/20 18:07:42 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ENTITIES SVG 1.1 External Resources Attribute//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-extresources-attrib.mod"
+
+     ....................................................................... -->
+
+<!-- External Resources Attribute
+
+        externalResourcesRequired
+
+     This module defines the External attribute set.
+-->
+
+<!ENTITY % SVG.externalResourcesRequired.attrib
+    "externalResourcesRequired %Boolean.datatype; #IMPLIED"
+>
+
+<!ENTITY % SVG.External.extra.attrib "" >
+
+<!ENTITY % SVG.External.attrib
+    "%SVG.externalResourcesRequired.attrib;
+     %SVG.External.extra.attrib;"
+>
+
+<!-- end of svg-extresources-attrib.mod -->
+]]>
+
+<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+
+<!-- Structure Module ............................................ -->
+<!ENTITY % svg-structure.module "INCLUDE" >
+<![%svg-structure.module;[
+<!ENTITY % svg-structure.mod
+    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Structure//EN"
+           "svg-structure.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Structure Module .............................................. -->
+<!-- file: svg-structure.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-structure.mod,v 1.5 2002/11/14 15:11:03 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ELEMENTS SVG 1.1 Structure//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-structure.mod"
+
+     ....................................................................... -->
+
+<!-- Structure
+
+        svg, g, defs, desc, title, metadata, symbol, use
+
+     This module declares the major structural elements and their attributes.
+-->
+
+<!-- Qualified Names (Default) ......................... -->
+
+<!ENTITY % SVG.svg.qname "svg" >
+<!ENTITY % SVG.g.qname "g" >
+<!ENTITY % SVG.defs.qname "defs" >
+<!ENTITY % SVG.desc.qname "desc" >
+<!ENTITY % SVG.title.qname "title" >
+<!ENTITY % SVG.metadata.qname "metadata" >
+<!ENTITY % SVG.symbol.qname "symbol" >
+<!ENTITY % SVG.use.qname "use" >
+
+<!-- Attribute Collections (Default) ................... -->
+
+<!ENTITY % SVG.Core.attrib "" >
+<!ENTITY % SVG.Container.attrib "" >
+<!ENTITY % SVG.Conditional.attrib "" >
+<!ENTITY % SVG.Style.attrib "" >
+<!ENTITY % SVG.Viewport.attrib "" >
+<!ENTITY % SVG.Text.attrib "" >
+<!ENTITY % SVG.TextContent.attrib "" >
+<!ENTITY % SVG.Font.attrib "" >
+<!ENTITY % SVG.Paint.attrib "" >
+<!ENTITY % SVG.Color.attrib "" >
+<!ENTITY % SVG.Opacity.attrib "" >
+<!ENTITY % SVG.Graphics.attrib "" >
+<!ENTITY % SVG.Marker.attrib "" >
+<!ENTITY % SVG.ColorProfile.attrib "" >
+<!ENTITY % SVG.Gradient.attrib "" >
+<!ENTITY % SVG.Clip.attrib "" >
+<!ENTITY % SVG.Mask.attrib "" >
+<!ENTITY % SVG.Filter.attrib "" >
+<!ENTITY % SVG.FilterColor.attrib "" >
+<!ENTITY % SVG.DocumentEvents.attrib "" >
+<!ENTITY % SVG.GraphicalEvents.attrib "" >
+<!ENTITY % SVG.Cursor.attrib "" >
+<!ENTITY % SVG.XLinkEmbed.attrib "" >
+<!ENTITY % SVG.External.attrib "" >
+
+<!-- SVG.Description.class ............................. -->
+
+<!ENTITY % SVG.Description.extra.class "" >
+
+<!ENTITY % SVG.Description.class
+    "%SVG.desc.qname; | %SVG.title.qname; | %SVG.metadata.qname;
+     %SVG.Description.extra.class;"
+>
+
+<!-- SVG.Use.class ..................................... -->
+
+<!ENTITY % SVG.Use.extra.class "" >
+
+<!ENTITY % SVG.Use.class
+    "| %SVG.use.qname; %SVG.Use.extra.class;"
+>
+
+<!-- SVG.Structure.class ............................... -->
+
+<!ENTITY % SVG.Structure.extra.class "" >
+
+<!ENTITY % SVG.Structure.class
+    "| %SVG.svg.qname; | %SVG.g.qname; | %SVG.defs.qname; | %SVG.symbol.qname;
+       %SVG.Use.class; %SVG.Structure.extra.class;"
+>
+
+<!-- SVG.Presentation.attrib ........................... -->
+
+<!ENTITY % SVG.Presentation.extra.attrib "" >
+
+<!ENTITY % SVG.Presentation.attrib
+    "%SVG.Container.attrib;
+     %SVG.Viewport.attrib;
+     %SVG.Text.attrib;
+     %SVG.TextContent.attrib;
+     %SVG.Font.attrib;
+     %SVG.Paint.attrib;
+     %SVG.Color.attrib;
+     %SVG.Opacity.attrib;
+     %SVG.Graphics.attrib;
+     %SVG.Marker.attrib;
+     %SVG.ColorProfile.attrib;
+     %SVG.Gradient.attrib;
+     %SVG.Clip.attrib;
+     %SVG.Mask.attrib;
+     %SVG.Filter.attrib;
+     %SVG.FilterColor.attrib;
+     %SVG.Cursor.attrib;
+     flood-color %SVGColor.datatype; #IMPLIED
+     flood-opacity %OpacityValue.datatype; #IMPLIED
+     lighting-color %SVGColor.datatype; #IMPLIED
+     %SVG.Presentation.extra.attrib;"
+>
+
+<!-- svg: SVG Document Element ......................... -->
+
+<!ENTITY % SVG.svg.extra.content "" >
+
+<!ENTITY % SVG.svg.element "INCLUDE" >
+<![%SVG.svg.element;[
+<!ENTITY % SVG.svg.content
+    "( %SVG.Description.class; | %SVG.Animation.class; %SVG.Structure.class;
+       %SVG.Conditional.class; %SVG.Image.class; %SVG.Style.class;
+       %SVG.Shape.class; %SVG.Text.class; %SVG.Marker.class;
+       %SVG.ColorProfile.class; %SVG.Gradient.class; %SVG.Pattern.class;
+       %SVG.Clip.class; %SVG.Mask.class; %SVG.Filter.class; %SVG.Cursor.class;
+       %SVG.Hyperlink.class; %SVG.View.class; %SVG.Script.class;
+       %SVG.Font.class; %SVG.svg.extra.content; )*"
+>
+<!ELEMENT %SVG.svg.qname; %SVG.svg.content; >
+<!-- end of SVG.svg.element -->]]>
+
+<!ENTITY % SVG.svg.attlist "INCLUDE" >
+<![%SVG.svg.attlist;[
+<!ATTLIST %SVG.svg.qname;
+    %SVG.xmlns.attrib;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.Style.attrib;
+    %SVG.Presentation.attrib;
+    %SVG.DocumentEvents.attrib;
+    %SVG.GraphicalEvents.attrib;
+    %SVG.External.attrib;
+    x %Coordinate.datatype; #IMPLIED
+    y %Coordinate.datatype; #IMPLIED
+    width %Length.datatype; #IMPLIED
+    height %Length.datatype; #IMPLIED
+    viewBox %ViewBoxSpec.datatype; #IMPLIED
+    preserveAspectRatio %PreserveAspectRatioSpec.datatype; 'xMidYMid meet'
+    zoomAndPan ( disable | magnify ) 'magnify'
+    version %Number.datatype; #FIXED '1.1'
+    baseProfile %Text.datatype; #IMPLIED
+    contentScriptType %ContentType.datatype; 'text/ecmascript'
+    contentStyleType %ContentType.datatype; 'text/css'
+>
+<!-- end of SVG.svg.attlist -->]]>
+
+<!-- g: Group Element .................................. -->
+
+<!ENTITY % SVG.g.extra.content "" >
+
+<!ENTITY % SVG.g.element "INCLUDE" >
+<![%SVG.g.element;[
+<!ENTITY % SVG.g.content
+    "( %SVG.Description.class; | %SVG.Animation.class; %SVG.Structure.class;
+       %SVG.Conditional.class; %SVG.Image.class; %SVG.Style.class;
+       %SVG.Shape.class; %SVG.Text.class; %SVG.Marker.class;
+       %SVG.ColorProfile.class; %SVG.Gradient.class; %SVG.Pattern.class;
+       %SVG.Clip.class; %SVG.Mask.class; %SVG.Filter.class; %SVG.Cursor.class;
+       %SVG.Hyperlink.class; %SVG.View.class; %SVG.Script.class;
+       %SVG.Font.class; %SVG.g.extra.content; )*"
+>
+<!ELEMENT %SVG.g.qname; %SVG.g.content; >
+<!-- end of SVG.g.element -->]]>
+
+<!ENTITY % SVG.g.attlist "INCLUDE" >
+<![%SVG.g.attlist;[
+<!ATTLIST %SVG.g.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.Style.attrib;
+    %SVG.Presentation.attrib;
+    %SVG.GraphicalEvents.attrib;
+    %SVG.External.attrib;
+    transform %TransformList.datatype; #IMPLIED
+>
+<!-- end of SVG.g.attlist -->]]>
+
+<!-- defs: Definisions Element ......................... -->
+
+<!ENTITY % SVG.defs.extra.content "" >
+
+<!ENTITY % SVG.defs.element "INCLUDE" >
+<![%SVG.defs.element;[
+<!ENTITY % SVG.defs.content
+    "( %SVG.Description.class; | %SVG.Animation.class; %SVG.Structure.class;
+       %SVG.Conditional.class; %SVG.Image.class; %SVG.Style.class;
+       %SVG.Shape.class; %SVG.Text.class; %SVG.Marker.class;
+       %SVG.ColorProfile.class; %SVG.Gradient.class; %SVG.Pattern.class;
+       %SVG.Clip.class; %SVG.Mask.class; %SVG.Filter.class; %SVG.Cursor.class;
+       %SVG.Hyperlink.class; %SVG.View.class; %SVG.Script.class;
+       %SVG.Font.class; %SVG.defs.extra.content; )*"
+>
+<!ELEMENT %SVG.defs.qname; %SVG.defs.content; >
+<!-- end of SVG.defs.element -->]]>
+
+<!ENTITY % SVG.defs.attlist "INCLUDE" >
+<![%SVG.defs.attlist;[
+<!ATTLIST %SVG.defs.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.Style.attrib;
+    %SVG.Presentation.attrib;
+    %SVG.GraphicalEvents.attrib;
+    %SVG.External.attrib;
+    transform %TransformList.datatype; #IMPLIED
+>
+<!-- end of SVG.defs.attlist -->]]>
+
+<!-- desc: Description Element ......................... -->
+
+<!ENTITY % SVG.desc.extra.content "" >
+
+<!ENTITY % SVG.desc.element "INCLUDE" >
+<![%SVG.desc.element;[
+<!ENTITY % SVG.desc.content
+    "( #PCDATA %SVG.desc.extra.content; )*"
+>
+<!ELEMENT %SVG.desc.qname; %SVG.desc.content; >
+<!-- end of SVG.desc.element -->]]>
+
+<!ENTITY % SVG.desc.attlist "INCLUDE" >
+<![%SVG.desc.attlist;[
+<!ATTLIST %SVG.desc.qname;
+    %SVG.Core.attrib;
+    %SVG.Style.attrib;
+>
+<!-- end of SVG.desc.attlist -->]]>
+
+<!-- title: Title Element .............................. -->
+
+<!ENTITY % SVG.title.extra.content "" >
+
+<!ENTITY % SVG.title.element "INCLUDE" >
+<![%SVG.title.element;[
+<!ENTITY % SVG.title.content
+    "( #PCDATA %SVG.title.extra.content; )*"
+>
+<!ELEMENT %SVG.title.qname; %SVG.title.content; >
+<!-- end of SVG.title.element -->]]>
+
+<!ENTITY % SVG.title.attlist "INCLUDE" >
+<![%SVG.title.attlist;[
+<!ATTLIST %SVG.title.qname;
+    %SVG.Core.attrib;
+    %SVG.Style.attrib;
+>
+<!-- end of SVG.title.attlist -->]]>
+
+<!-- metadata: Metadata Element ........................ -->
+
+<!ENTITY % SVG.metadata.extra.content "" >
+
+<!ENTITY % SVG.metadata.element "INCLUDE" >
+<![%SVG.metadata.element;[
+<!ENTITY % SVG.metadata.content
+    "( #PCDATA %SVG.metadata.extra.content; )*"
+>
+<!ELEMENT %SVG.metadata.qname; %SVG.metadata.content; >
+<!-- end of SVG.metadata.element -->]]>
+
+<!ENTITY % SVG.metadata.attlist "INCLUDE" >
+<![%SVG.metadata.attlist;[
+<!ATTLIST %SVG.metadata.qname;
+    %SVG.Core.attrib;
+>
+<!-- end of SVG.metadata.attlist -->]]>
+
+<!-- symbol: Symbol Element ............................ -->
+
+<!ENTITY % SVG.symbol.extra.content "" >
+
+<!ENTITY % SVG.symbol.element "INCLUDE" >
+<![%SVG.symbol.element;[
+<!ENTITY % SVG.symbol.content
+    "( %SVG.Description.class; | %SVG.Animation.class; %SVG.Structure.class;
+       %SVG.Conditional.class; %SVG.Image.class; %SVG.Style.class;
+       %SVG.Shape.class; %SVG.Text.class; %SVG.Marker.class;
+       %SVG.ColorProfile.class; %SVG.Gradient.class; %SVG.Pattern.class;
+       %SVG.Clip.class; %SVG.Mask.class; %SVG.Filter.class; %SVG.Cursor.class;
+       %SVG.Hyperlink.class; %SVG.View.class; %SVG.Script.class;
+       %SVG.Font.class; %SVG.symbol.extra.content; )*"
+>
+<!ELEMENT %SVG.symbol.qname; %SVG.symbol.content; >
+<!-- end of SVG.symbol.element -->]]>
+
+<!ENTITY % SVG.symbol.attlist "INCLUDE" >
+<![%SVG.symbol.attlist;[
+<!ATTLIST %SVG.symbol.qname;
+    %SVG.Core.attrib;
+    %SVG.Style.attrib;
+    %SVG.Presentation.attrib;
+    %SVG.GraphicalEvents.attrib;
+    %SVG.External.attrib;
+    viewBox %ViewBoxSpec.datatype; #IMPLIED
+    preserveAspectRatio %PreserveAspectRatioSpec.datatype; 'xMidYMid meet'
+>
+<!-- end of SVG.symbol.attlist -->]]>
+
+<!-- use: Use Element .................................. -->
+
+<!ENTITY % SVG.use.extra.content "" >
+
+<!ENTITY % SVG.use.element "INCLUDE" >
+<![%SVG.use.element;[
+<!ENTITY % SVG.use.content
+    "(( %SVG.Description.class; )*, ( %SVG.Animation.class;
+        %SVG.use.extra.content; )*)"
+>
+<!ELEMENT %SVG.use.qname; %SVG.use.content; >
+<!-- end of SVG.use.element -->]]>
+
+<!ENTITY % SVG.use.attlist "INCLUDE" >
+<![%SVG.use.attlist;[
+<!ATTLIST %SVG.use.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.Style.attrib;
+    %SVG.Presentation.attrib;
+    %SVG.GraphicalEvents.attrib;
+    %SVG.XLinkEmbed.attrib;
+    %SVG.External.attrib;
+    x %Coordinate.datatype; #IMPLIED
+    y %Coordinate.datatype; #IMPLIED
+    width %Length.datatype; #IMPLIED
+    height %Length.datatype; #IMPLIED
+    transform %TransformList.datatype; #IMPLIED
+>
+<!-- end of SVG.use.attlist -->]]>
+
+<!-- end of svg-structure.mod -->
+]]>
+
+<!-- Conditional Processing Module ............................... -->
+<!ENTITY % svg-conditional.module "INCLUDE" >
+<![%svg-conditional.module;[
+<!ENTITY % svg-conditional.mod
+    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Conditional Processing//EN"
+           "svg-conditional.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Conditional Processing Module ................................. -->
+<!-- file: svg-conditional.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-conditional.mod,v 1.4 2002/11/14 15:11:02 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ELEMENTS SVG 1.1 Conditional Processing//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-conditional.mod"
+
+     ....................................................................... -->
+
+<!-- Conditional Processing
+
+        switch
+
+     This module declares markup to provide support for conditional processing.
+-->
+
+<!-- extension list specification -->
+<!ENTITY % ExtensionList.datatype "CDATA" >
+
+<!-- feature list specification -->
+<!ENTITY % FeatureList.datatype "CDATA" >
+
+<!-- Qualified Names (Default) ......................... -->
+
+<!ENTITY % SVG.switch.qname "switch" >
+
+<!-- Attribute Collections (Default) ................... -->
+
+<!ENTITY % SVG.Core.attrib "" >
+<!ENTITY % SVG.Container.attrib "" >
+<!ENTITY % SVG.Style.attrib "" >
+<!ENTITY % SVG.Viewport.attrib "" >
+<!ENTITY % SVG.Text.attrib "" >
+<!ENTITY % SVG.TextContent.attrib "" >
+<!ENTITY % SVG.Font.attrib "" >
+<!ENTITY % SVG.Paint.attrib "" >
+<!ENTITY % SVG.Color.attrib "" >
+<!ENTITY % SVG.Opacity.attrib "" >
+<!ENTITY % SVG.Graphics.attrib "" >
+<!ENTITY % SVG.Marker.attrib "" >
+<!ENTITY % SVG.ColorProfile.attrib "" >
+<!ENTITY % SVG.Gradient.attrib "" >
+<!ENTITY % SVG.Clip.attrib "" >
+<!ENTITY % SVG.Mask.attrib "" >
+<!ENTITY % SVG.Filter.attrib "" >
+<!ENTITY % SVG.FilterColor.attrib "" >
+<!ENTITY % SVG.GraphicalEvents.attrib "" >
+<!ENTITY % SVG.Cursor.attrib "" >
+<!ENTITY % SVG.External.attrib "" >
+
+<!-- SVG.Conditional.class ............................. -->
+
+<!ENTITY % SVG.Conditional.extra.class "" >
+
+<!ENTITY % SVG.Conditional.class
+    "| %SVG.switch.qname; %SVG.Conditional.extra.class;"
+>
+
+<!-- SVG.Conditional.attrib ............................ -->
+
+<!ENTITY % SVG.Conditional.extra.attrib "" >
+
+<!ENTITY % SVG.Conditional.attrib
+    "requiredFeatures %FeatureList.datatype; #IMPLIED
+     requiredExtensions %ExtensionList.datatype; #IMPLIED
+     systemLanguage %LanguageCodes.datatype; #IMPLIED
+     %SVG.Conditional.extra.attrib;"
+>
+
+<!-- SVG.Presentation.attrib ........................... -->
+
+<!ENTITY % SVG.Presentation.extra.attrib "" >
+
+<!ENTITY % SVG.Presentation.attrib
+    "%SVG.Container.attrib;
+     %SVG.Viewport.attrib;
+     %SVG.Text.attrib;
+     %SVG.TextContent.attrib;
+     %SVG.Font.attrib;
+     %SVG.Paint.attrib;
+     %SVG.Color.attrib;
+     %SVG.Opacity.attrib;
+     %SVG.Graphics.attrib;
+     %SVG.Marker.attrib;
+     %SVG.ColorProfile.attrib;
+     %SVG.Gradient.attrib;
+     %SVG.Clip.attrib;
+     %SVG.Mask.attrib;
+     %SVG.Filter.attrib;
+     %SVG.FilterColor.attrib;
+     %SVG.Cursor.attrib;
+     flood-color %SVGColor.datatype; #IMPLIED
+     flood-opacity %OpacityValue.datatype; #IMPLIED
+     lighting-color %SVGColor.datatype; #IMPLIED
+     %SVG.Presentation.extra.attrib;"
+>
+
+<!-- switch: Switch Element ............................ -->
+
+<!ENTITY % SVG.switch.extra.content "" >
+
+<!ENTITY % SVG.switch.element "INCLUDE" >
+<![%SVG.switch.element;[
+<!ENTITY % SVG.switch.content
+    "(( %SVG.Description.class; )*, ( %SVG.svg.qname; | %SVG.g.qname;
+      | %SVG.use.qname; | %SVG.text.qname; | %SVG.Animation.class;
+        %SVG.Conditional.class; %SVG.Image.class; %SVG.Shape.class;
+        %SVG.Hyperlink.class; %SVG.Extensibility.class;
+        %SVG.switch.extra.content; )*)"
+>
+<!ELEMENT %SVG.switch.qname; %SVG.switch.content; >
+<!-- end of SVG.switch.element -->]]>
+
+<!ENTITY % SVG.switch.attlist "INCLUDE" >
+<![%SVG.switch.attlist;[
+<!ATTLIST %SVG.switch.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.Style.attrib;
+    %SVG.Presentation.attrib;
+    %SVG.GraphicalEvents.attrib;
+    %SVG.External.attrib;
+    transform %TransformList.datatype; #IMPLIED
+>
+<!-- end of SVG.switch.attlist -->]]>
+
+<!-- end of svg-conditional.mod -->
+]]>
+
+<!-- Image Module ................................................ -->
+<!ENTITY % svg-image.module "INCLUDE" >
+<![%svg-image.module;[
+<!ENTITY % svg-image.mod
+    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Image//EN"
+           "svg-image.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Image Module .................................................. -->
+<!-- file: svg-image.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-image.mod,v 1.4 2002/11/14 15:11:03 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ELEMENTS SVG 1.1 Image//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-image.mod"
+
+     ....................................................................... -->
+
+<!-- Image
+
+        image
+
+     This module declares markup to provide support for image.
+-->
+
+<!-- Qualified Names (Default) ......................... -->
+
+<!ENTITY % SVG.image.qname "image" >
+
+<!-- Attribute Collections (Default) ................... -->
+
+<!ENTITY % SVG.Core.attrib "" >
+<!ENTITY % SVG.Conditional.attrib "" >
+<!ENTITY % SVG.Style.attrib "" >
+<!ENTITY % SVG.Viewport.attrib "" >
+<!ENTITY % SVG.Color.attrib "" >
+<!ENTITY % SVG.Opacity.attrib "" >
+<!ENTITY % SVG.Graphics.attrib "" >
+<!ENTITY % SVG.ColorProfile.attrib "" >
+<!ENTITY % SVG.Clip.attrib "" >
+<!ENTITY % SVG.Mask.attrib "" >
+<!ENTITY % SVG.Filter.attrib "" >
+<!ENTITY % SVG.GraphicalEvents.attrib "" >
+<!ENTITY % SVG.Cursor.attrib "" >
+<!ENTITY % SVG.XLinkEmbed.attrib "" >
+<!ENTITY % SVG.External.attrib "" >
+
+<!-- SVG.Image.class ................................... -->
+
+<!ENTITY % SVG.Image.extra.class "" >
+
+<!ENTITY % SVG.Image.class
+    "| %SVG.image.qname; %SVG.Image.extra.class;"
+>
+
+<!-- image: Image Element .............................. -->
+
+<!ENTITY % SVG.image.extra.content "" >
+
+<!ENTITY % SVG.image.element "INCLUDE" >
+<![%SVG.image.element;[
+<!ENTITY % SVG.image.content
+    "(( %SVG.Description.class; )*, ( %SVG.Animation.class;
+        %SVG.image.extra.content; )*)"
+>
+<!ELEMENT %SVG.image.qname; %SVG.image.content; >
+<!-- end of SVG.image.element -->]]>
+
+<!ENTITY % SVG.image.attlist "INCLUDE" >
+<![%SVG.image.attlist;[
+<!ATTLIST %SVG.image.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.Style.attrib;
+    %SVG.Viewport.attrib;
+    %SVG.Color.attrib;
+    %SVG.Opacity.attrib;
+    %SVG.Graphics.attrib;
+    %SVG.ColorProfile.attrib;
+    %SVG.Clip.attrib;
+    %SVG.Mask.attrib;
+    %SVG.Filter.attrib;
+    %SVG.GraphicalEvents.attrib;
+    %SVG.Cursor.attrib;
+    %SVG.XLinkEmbed.attrib;
+    %SVG.External.attrib;
+    x %Coordinate.datatype; #IMPLIED
+    y %Coordinate.datatype; #IMPLIED
+    width %Length.datatype; #REQUIRED
+    height %Length.datatype; #REQUIRED
+    preserveAspectRatio %PreserveAspectRatioSpec.datatype; 'xMidYMid meet'
+    transform %TransformList.datatype; #IMPLIED
+>
+<!-- end of SVG.image.attlist -->]]>
+
+<!-- end of svg-image.mod -->
+]]>
+
+<!-- Style Module ................................................ -->
+<!ENTITY % svg-style.module "INCLUDE" >
+<![%svg-style.module;[
+<!ENTITY % svg-style.mod
+    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Style//EN"
+           "svg-style.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Style Module .................................................. -->
+<!-- file: svg-style.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-style.mod,v 1.3 2002/10/24 17:40:16 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ELEMENTS SVG 1.1 Style//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-style.mod"
+
+     ....................................................................... -->
+
+<!-- Style
+
+        style
+
+     This module declares markup to provide support for stylesheet.
+-->
+
+<!-- list of classes -->
+<!ENTITY % ClassList.datatype "CDATA" >
+
+<!-- comma-separated list of media descriptors. -->
+<!ENTITY % MediaDesc.datatype "CDATA" >
+
+<!-- style sheet data -->
+<!ENTITY % StyleSheet.datatype "CDATA" >
+
+<!-- Qualified Names (Default) ......................... -->
+
+<!ENTITY % SVG.style.qname "style" >
+
+<!-- Attribute Collections (Default) ................... -->
+
+<!ENTITY % SVG.Core.attrib "" >
+
+<!-- SVG.Style.class ................................... -->
+
+<!ENTITY % SVG.Style.extra.class "" >
+
+<!ENTITY % SVG.Style.class
+    "| %SVG.style.qname; %SVG.Style.extra.class;"
+>
+
+<!-- SVG.Style.attrib .................................. -->
+
+<!ENTITY % SVG.Style.extra.attrib "" >
+
+<!ENTITY % SVG.Style.attrib
+    "style %StyleSheet.datatype; #IMPLIED
+     class %ClassList.datatype; #IMPLIED
+     %SVG.Style.extra.attrib;"
+>
+
+<!-- style: Style Element .............................. -->
+
+<!ENTITY % SVG.style.extra.content "" >
+
+<!ENTITY % SVG.style.element "INCLUDE" >
+<![%SVG.style.element;[
+<!ENTITY % SVG.style.content
+    "( #PCDATA %SVG.style.extra.content; )*"
+>
+<!ELEMENT %SVG.style.qname; %SVG.style.content; >
+<!-- end of SVG.style.element -->]]>
+
+<!ENTITY % SVG.style.attlist "INCLUDE" >
+<![%SVG.style.attlist;[
+<!ATTLIST %SVG.style.qname;
+    xml:space ( preserve ) #FIXED 'preserve'
+    %SVG.Core.attrib;
+    type %ContentType.datatype; #REQUIRED
+    media %MediaDesc.datatype; #IMPLIED
+    title %Text.datatype; #IMPLIED
+>
+<!-- end of SVG.style.attlist -->]]>
+
+<!-- end of svg-style.mod -->
+]]>
+
+<!-- Shape Module ................................................ -->
+<!ENTITY % svg-shape.module "INCLUDE" >
+<![%svg-shape.module;[
+<!ENTITY % svg-shape.mod
+    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Shape//EN"
+           "svg-shape.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Shape Module .................................................. -->
+<!-- file: svg-shape.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-shape.mod,v 1.3 2002/10/24 17:40:16 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ELEMENTS SVG 1.1 Shape//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-shape.mod"
+
+     ....................................................................... -->
+
+<!-- Shape
+
+        path, rect, circle, line, ellipse, polyline, polygon
+
+     This module declares markup to provide support for graphical shapes.
+-->
+
+<!-- a list of points -->
+<!ENTITY % Points.datatype "CDATA" >
+
+<!-- Qualified Names (Default) ......................... -->
+
+<!ENTITY % SVG.path.qname "path" >
+<!ENTITY % SVG.rect.qname "rect" >
+<!ENTITY % SVG.circle.qname "circle" >
+<!ENTITY % SVG.line.qname "line" >
+<!ENTITY % SVG.ellipse.qname "ellipse" >
+<!ENTITY % SVG.polyline.qname "polyline" >
+<!ENTITY % SVG.polygon.qname "polygon" >
+
+<!-- Attribute Collections (Default) ................... -->
+
+<!ENTITY % SVG.Core.attrib "" >
+<!ENTITY % SVG.Conditional.attrib "" >
+<!ENTITY % SVG.Style.attrib "" >
+<!ENTITY % SVG.Paint.attrib "" >
+<!ENTITY % SVG.Color.attrib "" >
+<!ENTITY % SVG.Opacity.attrib "" >
+<!ENTITY % SVG.Graphics.attrib "" >
+<!ENTITY % SVG.Marker.attrib "" >
+<!ENTITY % SVG.Clip.attrib "" >
+<!ENTITY % SVG.Mask.attrib "" >
+<!ENTITY % SVG.Filter.attrib "" >
+<!ENTITY % SVG.GraphicalEvents.attrib "" >
+<!ENTITY % SVG.Cursor.attrib "" >
+<!ENTITY % SVG.External.attrib "" >
+
+<!-- SVG.Shape.class ................................... -->
+
+<!ENTITY % SVG.Shape.extra.class "" >
+
+<!ENTITY % SVG.Shape.class
+    "| %SVG.path.qname; | %SVG.rect.qname; | %SVG.circle.qname;
+     | %SVG.line.qname; | %SVG.ellipse.qname; | %SVG.polyline.qname;
+     | %SVG.polygon.qname; %SVG.Shape.extra.class;"
+>
+
+<!-- path: Path Element ................................ -->
+
+<!ENTITY % SVG.path.extra.content "" >
+
+<!ENTITY % SVG.path.element "INCLUDE" >
+<![%SVG.path.element;[
+<!ENTITY % SVG.path.content
+    "(( %SVG.Description.class; )*, ( %SVG.Animation.class;
+        %SVG.path.extra.content; )*)"
+>
+<!ELEMENT %SVG.path.qname; %SVG.path.content; >
+<!-- end of SVG.path.element -->]]>
+
+<!ENTITY % SVG.path.attlist "INCLUDE" >
+<![%SVG.path.attlist;[
+<!ATTLIST %SVG.path.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.Style.attrib;
+    %SVG.Paint.attrib;
+    %SVG.Color.attrib;
+    %SVG.Opacity.attrib;
+    %SVG.Graphics.attrib;
+    %SVG.Marker.attrib;
+    %SVG.Clip.attrib;
+    %SVG.Mask.attrib;
+    %SVG.Filter.attrib;
+    %SVG.GraphicalEvents.attrib;
+    %SVG.Cursor.attrib;
+    %SVG.External.attrib;
+    d %PathData.datatype; #REQUIRED
+    pathLength %Number.datatype; #IMPLIED
+    transform %TransformList.datatype; #IMPLIED
+>
+<!-- end of SVG.path.attlist -->]]>
+
+<!-- rect: Rectangle Element ........................... -->
+
+<!ENTITY % SVG.rect.extra.content "" >
+
+<!ENTITY % SVG.rect.element "INCLUDE" >
+<![%SVG.rect.element;[
+<!ENTITY % SVG.rect.content
+    "(( %SVG.Description.class; )*, ( %SVG.Animation.class;
+        %SVG.rect.extra.content; )*)"
+>
+<!ELEMENT %SVG.rect.qname; %SVG.rect.content; >
+<!-- end of SVG.rect.element -->]]>
+
+<!ENTITY % SVG.rect.attlist "INCLUDE" >
+<![%SVG.rect.attlist;[
+<!ATTLIST %SVG.rect.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.Style.attrib;
+    %SVG.Paint.attrib;
+    %SVG.Color.attrib;
+    %SVG.Opacity.attrib;
+    %SVG.Graphics.attrib;
+    %SVG.Clip.attrib;
+    %SVG.Mask.attrib;
+    %SVG.Filter.attrib;
+    %SVG.GraphicalEvents.attrib;
+    %SVG.Cursor.attrib;
+    %SVG.External.attrib;
+    x %Coordinate.datatype; #IMPLIED
+    y %Coordinate.datatype; #IMPLIED
+    width %Length.datatype; #REQUIRED
+    height %Length.datatype; #REQUIRED
+    rx %Length.datatype; #IMPLIED
+    ry %Length.datatype; #IMPLIED
+    transform %TransformList.datatype; #IMPLIED
+>
+<!-- end of SVG.rect.attlist -->]]>
+
+<!-- circle: Circle Element ............................ -->
+
+<!ENTITY % SVG.circle.extra.content "" >
+
+<!ENTITY % SVG.circle.element "INCLUDE" >
+<![%SVG.circle.element;[
+<!ENTITY % SVG.circle.content
+    "(( %SVG.Description.class; )*, ( %SVG.Animation.class;
+        %SVG.circle.extra.content; )*)"
+>
+<!ELEMENT %SVG.circle.qname; %SVG.circle.content; >
+<!-- end of SVG.circle.element -->]]>
+
+<!ENTITY % SVG.circle.attlist "INCLUDE" >
+<![%SVG.circle.attlist;[
+<!ATTLIST %SVG.circle.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.Style.attrib;
+    %SVG.Paint.attrib;
+    %SVG.Color.attrib;
+    %SVG.Opacity.attrib;
+    %SVG.Graphics.attrib;
+    %SVG.Clip.attrib;
+    %SVG.Mask.attrib;
+    %SVG.Filter.attrib;
+    %SVG.GraphicalEvents.attrib;
+    %SVG.Cursor.attrib;
+    %SVG.External.attrib;
+    cx %Coordinate.datatype; #IMPLIED
+    cy %Coordinate.datatype; #IMPLIED
+    r %Length.datatype; #REQUIRED
+    transform %TransformList.datatype; #IMPLIED
+>
+<!-- end of SVG.circle.attlist -->]]>
+
+<!-- line: Line Element ................................ -->
+
+<!ENTITY % SVG.line.extra.content "" >
+
+<!ENTITY % SVG.line.element "INCLUDE" >
+<![%SVG.line.element;[
+<!ENTITY % SVG.line.content
+    "(( %SVG.Description.class; )*, ( %SVG.Animation.class;
+        %SVG.line.extra.content; )*)"
+>
+<!ELEMENT %SVG.line.qname; %SVG.line.content; >
+<!-- end of SVG.line.element -->]]>
+
+<!ENTITY % SVG.line.attlist "INCLUDE" >
+<![%SVG.line.attlist;[
+<!ATTLIST %SVG.line.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.Style.attrib;
+    %SVG.Paint.attrib;
+    %SVG.Color.attrib;
+    %SVG.Opacity.attrib;
+    %SVG.Graphics.attrib;
+    %SVG.Marker.attrib;
+    %SVG.Clip.attrib;
+    %SVG.Mask.attrib;
+    %SVG.Filter.attrib;
+    %SVG.GraphicalEvents.attrib;
+    %SVG.Cursor.attrib;
+    %SVG.External.attrib;
+    x1 %Coordinate.datatype; #IMPLIED
+    y1 %Coordinate.datatype; #IMPLIED
+    x2 %Coordinate.datatype; #IMPLIED
+    y2 %Coordinate.datatype; #IMPLIED
+    transform %TransformList.datatype; #IMPLIED
+>
+<!-- end of SVG.line.attlist -->]]>
+
+<!-- ellipse: Ellipse Element .......................... -->
+
+<!ENTITY % SVG.ellipse.extra.content "" >
+
+<!ENTITY % SVG.ellipse.element "INCLUDE" >
+<![%SVG.ellipse.element;[
+<!ENTITY % SVG.ellipse.content
+    "(( %SVG.Description.class; )*, ( %SVG.Animation.class;
+        %SVG.ellipse.extra.content; )*)"
+>
+<!ELEMENT %SVG.ellipse.qname; %SVG.ellipse.content; >
+<!-- end of SVG.ellipse.element -->]]>
+
+<!ENTITY % SVG.ellipse.attlist "INCLUDE" >
+<![%SVG.ellipse.attlist;[
+<!ATTLIST %SVG.ellipse.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.Style.attrib;
+    %SVG.Paint.attrib;
+    %SVG.Color.attrib;
+    %SVG.Opacity.attrib;
+    %SVG.Graphics.attrib;
+    %SVG.Clip.attrib;
+    %SVG.Mask.attrib;
+    %SVG.Filter.attrib;
+    %SVG.GraphicalEvents.attrib;
+    %SVG.Cursor.attrib;
+    %SVG.External.attrib;
+    cx %Coordinate.datatype; #IMPLIED
+    cy %Coordinate.datatype; #IMPLIED
+    rx %Length.datatype; #REQUIRED
+    ry %Length.datatype; #REQUIRED
+    transform %TransformList.datatype; #IMPLIED
+>
+<!-- end of SVG.ellipse.attlist -->]]>
+
+<!-- polyline: Polyline Element ........................ -->
+
+<!ENTITY % SVG.polyline.extra.content "" >
+
+<!ENTITY % SVG.polyline.element "INCLUDE" >
+<![%SVG.polyline.element;[
+<!ENTITY % SVG.polyline.content
+    "(( %SVG.Description.class; )*, ( %SVG.Animation.class;
+        %SVG.polyline.extra.content; )*)"
+>
+<!ELEMENT %SVG.polyline.qname; %SVG.polyline.content; >
+<!-- end of SVG.polyline.element -->]]>
+
+<!ENTITY % SVG.polyline.attlist "INCLUDE" >
+<![%SVG.polyline.attlist;[
+<!ATTLIST %SVG.polyline.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.Style.attrib;
+    %SVG.Paint.attrib;
+    %SVG.Color.attrib;
+    %SVG.Opacity.attrib;
+    %SVG.Graphics.attrib;
+    %SVG.Marker.attrib;
+    %SVG.Clip.attrib;
+    %SVG.Mask.attrib;
+    %SVG.Filter.attrib;
+    %SVG.GraphicalEvents.attrib;
+    %SVG.Cursor.attrib;
+    %SVG.External.attrib;
+    points %Points.datatype; #REQUIRED
+    transform %TransformList.datatype; #IMPLIED
+>
+<!-- end of SVG.polyline.attlist -->]]>
+
+<!-- polygon: Polygon Element .......................... -->
+
+<!ENTITY % SVG.polygon.extra.content "" >
+
+<!ENTITY % SVG.polygon.element "INCLUDE" >
+<![%SVG.polygon.element;[
+<!ENTITY % SVG.polygon.content
+    "(( %SVG.Description.class; )*, ( %SVG.Animation.class;
+        %SVG.polygon.extra.content; )*)"
+>
+<!ELEMENT %SVG.polygon.qname; %SVG.polygon.content; >
+<!-- end of SVG.polygon.element -->]]>
+
+<!ENTITY % SVG.polygon.attlist "INCLUDE" >
+<![%SVG.polygon.attlist;[
+<!ATTLIST %SVG.polygon.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.Style.attrib;
+    %SVG.Paint.attrib;
+    %SVG.Color.attrib;
+    %SVG.Opacity.attrib;
+    %SVG.Graphics.attrib;
+    %SVG.Marker.attrib;
+    %SVG.Clip.attrib;
+    %SVG.Mask.attrib;
+    %SVG.Filter.attrib;
+    %SVG.GraphicalEvents.attrib;
+    %SVG.Cursor.attrib;
+    %SVG.External.attrib;
+    points %Points.datatype; #REQUIRED
+    transform %TransformList.datatype; #IMPLIED
+>
+<!-- end of SVG.polygon.attlist -->]]>
+
+<!-- end of svg-shape.mod -->
+]]>
+
+<!-- Text Module ................................................. -->
+<!ENTITY % svg-text.module "INCLUDE" >
+<![%svg-text.module;[
+<!ENTITY % svg-text.mod
+    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Text//EN"
+           "svg-text.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Text Module ................................................... -->
+<!-- file: svg-text.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-text.mod,v 1.4 2002/10/24 17:40:16 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ELEMENTS SVG 1.1 Text//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-text.mod"
+
+     ....................................................................... -->
+
+<!-- Text
+
+        text, tspan, tref, textPath, altGlyph, altGlyphDef, altGlyphItem,
+        glyphRef
+
+     This module declares markup to provide support for alternate glyph.
+-->
+
+<!-- 'baseline-shift' property/attribute value (e.g., 'baseline', 'sub', etc.) -->
+<!ENTITY % BaselineShiftValue.datatype "CDATA" >
+
+<!-- 'font-family' property/attribute value (i.e., list of fonts) -->
+<!ENTITY % FontFamilyValue.datatype "CDATA" >
+
+<!-- 'font-size' property/attribute value -->
+<!ENTITY % FontSizeValue.datatype "CDATA" >
+
+<!-- 'font-size-adjust' property/attribute value -->
+<!ENTITY % FontSizeAdjustValue.datatype "CDATA" >
+
+<!-- 'glyph-orientation-horizontal' property/attribute value (e.g., <angle>) -->
+<!ENTITY % GlyphOrientationHorizontalValue.datatype "CDATA" >
+
+<!-- 'glyph-orientation-vertical' property/attribute value (e.g., 'auto', <angle>) -->
+<!ENTITY % GlyphOrientationVerticalValue.datatype "CDATA" >
+
+<!-- 'kerning' property/attribute value (e.g., 'auto', <length>) -->
+<!ENTITY % KerningValue.datatype "CDATA" >
+
+<!-- 'letter-spacing' or 'word-spacing' property/attribute value (e.g., 'normal', <length>) -->
+<!ENTITY % SpacingValue.datatype "CDATA" >
+
+<!-- 'text-decoration' property/attribute value (e.g., 'none', 'underline') -->
+<!ENTITY % TextDecorationValue.datatype "CDATA" >
+
+<!-- Qualified Names (Default) ......................... -->
+
+<!ENTITY % SVG.text.qname "text" >
+<!ENTITY % SVG.tspan.qname "tspan" >
+<!ENTITY % SVG.tref.qname "tref" >
+<!ENTITY % SVG.textPath.qname "textPath" >
+<!ENTITY % SVG.altGlyph.qname "altGlyph" >
+<!ENTITY % SVG.altGlyphDef.qname "altGlyphDef" >
+<!ENTITY % SVG.altGlyphItem.qname "altGlyphItem" >
+<!ENTITY % SVG.glyphRef.qname "glyphRef" >
+
+<!-- Attribute Collections (Default) ................... -->
+
+<!ENTITY % SVG.Core.attrib "" >
+<!ENTITY % SVG.Conditional.attrib "" >
+<!ENTITY % SVG.Style.attrib "" >
+<!ENTITY % SVG.Paint.attrib "" >
+<!ENTITY % SVG.Color.attrib "" >
+<!ENTITY % SVG.Opacity.attrib "" >
+<!ENTITY % SVG.Graphics.attrib "" >
+<!ENTITY % SVG.Clip.attrib "" >
+<!ENTITY % SVG.Mask.attrib "" >
+<!ENTITY % SVG.Filter.attrib "" >
+<!ENTITY % SVG.GraphicalEvents.attrib "" >
+<!ENTITY % SVG.Cursor.attrib "" >
+<!ENTITY % SVG.XLink.attrib "" >
+<!ENTITY % SVG.XLinkRequired.attrib "" >
+<!ENTITY % SVG.External.attrib "" >
+
+<!-- SVG.Text.class .................................... -->
+
+<!ENTITY % SVG.Text.extra.class "" >
+
+<!ENTITY % SVG.Text.class
+    "| %SVG.text.qname; | %SVG.altGlyphDef.qname; %SVG.Text.extra.class;"
+>
+
+<!-- SVG.TextContent.class ............................. -->
+
+<!ENTITY % SVG.TextContent.extra.class "" >
+
+<!ENTITY % SVG.TextContent.class
+    "| %SVG.tspan.qname; | %SVG.tref.qname; | %SVG.textPath.qname;
+     | %SVG.altGlyph.qname; %SVG.TextContent.extra.class;"
+>
+
+<!-- SVG.Text.attrib ................................... -->
+
+<!ENTITY % SVG.Text.extra.attrib "" >
+
+<!ENTITY % SVG.Text.attrib
+    "writing-mode ( lr-tb | rl-tb | tb-rl | lr | rl | tb | inherit ) #IMPLIED
+     %SVG.Text.extra.attrib;"
+>
+
+<!-- SVG.TextContent.attrib ............................ -->
+
+<!ENTITY % SVG.TextContent.extra.attrib "" >
+
+<!ENTITY % SVG.TextContent.attrib
+    "alignment-baseline ( auto | baseline | before-edge | text-before-edge |
+                          middle | central | after-edge | text-after-edge |
+                          ideographic | alphabetic | hanging | mathematical |
+                          inherit ) #IMPLIED
+     baseline-shift %BaselineShiftValue.datatype; #IMPLIED
+     direction ( ltr | rtl | inherit ) #IMPLIED
+     dominant-baseline ( auto | use-script | no-change | reset-size |
+                         ideographic | alphabetic | hanging | mathematical |
+                         central | middle | text-after-edge | text-before-edge |
+                         inherit ) #IMPLIED
+     glyph-orientation-horizontal %GlyphOrientationHorizontalValue.datatype;
+                                  #IMPLIED
+     glyph-orientation-vertical %GlyphOrientationVerticalValue.datatype;
+                                #IMPLIED
+     kerning %KerningValue.datatype; #IMPLIED
+     letter-spacing %SpacingValue.datatype; #IMPLIED
+     text-anchor ( start | middle | end | inherit ) #IMPLIED
+     text-decoration %TextDecorationValue.datatype; #IMPLIED
+     unicode-bidi ( normal | embed | bidi-override | inherit ) #IMPLIED
+     word-spacing %SpacingValue.datatype; #IMPLIED
+     %SVG.TextContent.extra.attrib;"
+>
+
+<!-- SVG.Font.attrib ................................... -->
+
+<!ENTITY % SVG.Font.extra.attrib "" >
+
+<!ENTITY % SVG.Font.attrib
+    "font-family %FontFamilyValue.datatype; #IMPLIED
+     font-size %FontSizeValue.datatype; #IMPLIED
+     font-size-adjust %FontSizeAdjustValue.datatype; #IMPLIED
+     font-stretch ( normal | wider | narrower | ultra-condensed |
+                    extra-condensed | condensed | semi-condensed |
+                    semi-expanded | expanded | extra-expanded |
+                    ultra-expanded | inherit ) #IMPLIED
+     font-style ( normal | italic | oblique | inherit ) #IMPLIED
+     font-variant ( normal | small-caps | inherit ) #IMPLIED
+     font-weight ( normal | bold | bolder | lighter | 100 | 200 | 300 | 400 |
+                   500 | 600 | 700 | 800 | 900 | inherit ) #IMPLIED
+     %SVG.Font.extra.attrib;"
+>
+
+<!-- text: Text Element ................................ -->
+
+<!ENTITY % SVG.text.extra.content "" >
+
+<!ENTITY % SVG.text.element "INCLUDE" >
+<![%SVG.text.element;[
+<!ENTITY % SVG.text.content
+    "( #PCDATA | %SVG.Description.class; | %SVG.Animation.class;
+       %SVG.TextContent.class; %SVG.Hyperlink.class;
+       %SVG.text.extra.content; )*"
+>
+<!ELEMENT %SVG.text.qname; %SVG.text.content; >
+<!-- end of SVG.text.element -->]]>
+
+<!ENTITY % SVG.text.attlist "INCLUDE" >
+<![%SVG.text.attlist;[
+<!ATTLIST %SVG.text.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.Style.attrib;
+    %SVG.Text.attrib;
+    %SVG.TextContent.attrib;
+    %SVG.Font.attrib;
+    %SVG.Paint.attrib;
+    %SVG.Color.attrib;
+    %SVG.Opacity.attrib;
+    %SVG.Graphics.attrib;
+    %SVG.Clip.attrib;
+    %SVG.Mask.attrib;
+    %SVG.Filter.attrib;
+    %SVG.GraphicalEvents.attrib;
+    %SVG.Cursor.attrib;
+    %SVG.External.attrib;
+    x %Coordinates.datatype; #IMPLIED
+    y %Coordinates.datatype; #IMPLIED
+    dx %Lengths.datatype; #IMPLIED
+    dy %Lengths.datatype; #IMPLIED
+    rotate %Numbers.datatype; #IMPLIED
+    textLength %Length.datatype; #IMPLIED
+    lengthAdjust ( spacing | spacingAndGlyphs ) #IMPLIED
+    transform %TransformList.datatype; #IMPLIED
+>
+<!-- end of SVG.text.attlist -->]]>
+
+<!-- tspan: Text Span Element .......................... -->
+
+<!ENTITY % SVG.tspan.extra.content "" >
+
+<!ENTITY % SVG.tspan.element "INCLUDE" >
+<![%SVG.tspan.element;[
+<!ENTITY % SVG.tspan.content
+    "( #PCDATA | %SVG.tspan.qname; | %SVG.tref.qname; | %SVG.altGlyph.qname;
+     | %SVG.animate.qname; | %SVG.set.qname; | %SVG.animateColor.qname;
+     | %SVG.Description.class; %SVG.Hyperlink.class;
+       %SVG.tspan.extra.content; )*"
+>
+<!ELEMENT %SVG.tspan.qname; %SVG.tspan.content; >
+<!-- end of SVG.tspan.element -->]]>
+
+<!ENTITY % SVG.tspan.attlist "INCLUDE" >
+<![%SVG.tspan.attlist;[
+<!ATTLIST %SVG.tspan.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.Style.attrib;
+    %SVG.TextContent.attrib;
+    %SVG.Font.attrib;
+    %SVG.Paint.attrib;
+    %SVG.Color.attrib;
+    %SVG.Opacity.attrib;
+    %SVG.Graphics.attrib;
+    %SVG.Clip.attrib;
+    %SVG.Mask.attrib;
+    %SVG.Filter.attrib;
+    %SVG.GraphicalEvents.attrib;
+    %SVG.Cursor.attrib;
+    %SVG.External.attrib;
+    x %Coordinates.datatype; #IMPLIED
+    y %Coordinates.datatype; #IMPLIED
+    dx %Lengths.datatype; #IMPLIED
+    dy %Lengths.datatype; #IMPLIED
+    rotate %Numbers.datatype; #IMPLIED
+    textLength %Length.datatype; #IMPLIED
+    lengthAdjust ( spacing | spacingAndGlyphs ) #IMPLIED
+>
+<!-- end of SVG.tspan.attlist -->]]>
+
+<!-- tref: Text Reference Element ...................... -->
+
+<!ENTITY % SVG.tref.extra.content "" >
+
+<!ENTITY % SVG.tref.element "INCLUDE" >
+<![%SVG.tref.element;[
+<!ENTITY % SVG.tref.content
+    "( %SVG.animate.qname; | %SVG.set.qname; | %SVG.animateColor.qname;
+     | %SVG.Description.class; %SVG.tref.extra.content; )*"
+>
+<!ELEMENT %SVG.tref.qname; %SVG.tref.content; >
+<!-- end of SVG.tref.element -->]]>
+
+<!ENTITY % SVG.tref.attlist "INCLUDE" >
+<![%SVG.tref.attlist;[
+<!ATTLIST %SVG.tref.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.Style.attrib;
+    %SVG.TextContent.attrib;
+    %SVG.Font.attrib;
+    %SVG.Paint.attrib;
+    %SVG.Color.attrib;
+    %SVG.Opacity.attrib;
+    %SVG.Graphics.attrib;
+    %SVG.Clip.attrib;
+    %SVG.Mask.attrib;
+    %SVG.Filter.attrib;
+    %SVG.GraphicalEvents.attrib;
+    %SVG.Cursor.attrib;
+    %SVG.XLinkRequired.attrib;
+    %SVG.External.attrib;
+    x %Coordinates.datatype; #IMPLIED
+    y %Coordinates.datatype; #IMPLIED
+    dx %Lengths.datatype; #IMPLIED
+    dy %Lengths.datatype; #IMPLIED
+    rotate %Numbers.datatype; #IMPLIED
+    textLength %Length.datatype; #IMPLIED
+    lengthAdjust ( spacing | spacingAndGlyphs ) #IMPLIED
+>
+<!-- end of SVG.tref.attlist -->]]>
+
+<!-- textPath: Text Path Element ....................... -->
+
+<!ENTITY % SVG.textPath.extra.content "" >
+
+<!ENTITY % SVG.textPath.element "INCLUDE" >
+<![%SVG.textPath.element;[
+<!ENTITY % SVG.textPath.content
+    "( #PCDATA | %SVG.tspan.qname; | %SVG.tref.qname; | %SVG.altGlyph.qname;
+     | %SVG.animate.qname; | %SVG.set.qname; | %SVG.animateColor.qname;
+     | %SVG.Description.class; %SVG.Hyperlink.class;
+       %SVG.textPath.extra.content; )*"
+>
+<!ELEMENT %SVG.textPath.qname; %SVG.textPath.content; >
+<!-- end of SVG.textPath.element -->]]>
+
+<!ENTITY % SVG.textPath.attlist "INCLUDE" >
+<![%SVG.textPath.attlist;[
+<!ATTLIST %SVG.textPath.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.Style.attrib;
+    %SVG.TextContent.attrib;
+    %SVG.Font.attrib;
+    %SVG.Paint.attrib;
+    %SVG.Color.attrib;
+    %SVG.Opacity.attrib;
+    %SVG.Graphics.attrib;
+    %SVG.Clip.attrib;
+    %SVG.Mask.attrib;
+    %SVG.Filter.attrib;
+    %SVG.GraphicalEvents.attrib;
+    %SVG.Cursor.attrib;
+    %SVG.XLinkRequired.attrib;
+    %SVG.External.attrib;
+    startOffset %Length.datatype; #IMPLIED
+    textLength %Length.datatype; #IMPLIED
+    lengthAdjust ( spacing | spacingAndGlyphs ) #IMPLIED
+    method ( align | stretch ) #IMPLIED
+    spacing ( auto | exact ) #IMPLIED
+>
+<!-- end of SVG.textPath.attlist -->]]>
+
+<!-- altGlyph: Alternate Glyph Element ................. -->
+
+<!ENTITY % SVG.altGlyph.extra.content "" >
+
+<!ENTITY % SVG.altGlyph.element "INCLUDE" >
+<![%SVG.altGlyph.element;[
+<!ENTITY % SVG.altGlyph.content
+    "( #PCDATA %SVG.altGlyph.extra.content; )*"
+>
+<!ELEMENT %SVG.altGlyph.qname; %SVG.altGlyph.content; >
+<!-- end of SVG.altGlyph.element -->]]>
+
+<!ENTITY % SVG.altGlyph.attlist "INCLUDE" >
+<![%SVG.altGlyph.attlist;[
+<!ATTLIST %SVG.altGlyph.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.Style.attrib;
+    %SVG.TextContent.attrib;
+    %SVG.Font.attrib;
+    %SVG.Paint.attrib;
+    %SVG.Color.attrib;
+    %SVG.Opacity.attrib;
+    %SVG.Graphics.attrib;
+    %SVG.Clip.attrib;
+    %SVG.Mask.attrib;
+    %SVG.Filter.attrib;
+    %SVG.GraphicalEvents.attrib;
+    %SVG.Cursor.attrib;
+    %SVG.XLink.attrib;
+    %SVG.External.attrib;
+    x %Coordinates.datatype; #IMPLIED
+    y %Coordinates.datatype; #IMPLIED
+    dx %Lengths.datatype; #IMPLIED
+    dy %Lengths.datatype; #IMPLIED
+    glyphRef CDATA #IMPLIED
+    format CDATA #IMPLIED
+    rotate %Numbers.datatype; #IMPLIED
+>
+<!-- end of SVG.altGlyph.attlist -->]]>
+
+<!-- altGlyphDef: Alternate Glyph Definition Element ... -->
+
+<!ENTITY % SVG.altGlyphDef.extra.content "" >
+
+<!ENTITY % SVG.altGlyphDef.element "INCLUDE" >
+<![%SVG.altGlyphDef.element;[
+<!ENTITY % SVG.altGlyphDef.content
+    "(( %SVG.glyphRef.qname;+ | %SVG.altGlyphItem.qname;+ )
+        %SVG.altGlyphDef.extra.content; )"
+>
+<!ELEMENT %SVG.altGlyphDef.qname; %SVG.altGlyphDef.content; >
+<!-- end of SVG.altGlyphDef.element -->]]>
+
+<!ENTITY % SVG.altGlyphDef.attlist "INCLUDE" >
+<![%SVG.altGlyphDef.attlist;[
+<!ATTLIST %SVG.altGlyphDef.qname;
+    %SVG.Core.attrib;
+>
+<!-- end of SVG.altGlyphDef.attlist -->]]>
+
+<!-- altGlyphItem: Alternate Glyph Item Element ........ -->
+
+<!ENTITY % SVG.altGlyphItem.extra.content "" >
+
+<!ENTITY % SVG.altGlyphItem.element "INCLUDE" >
+<![%SVG.altGlyphItem.element;[
+<!ENTITY % SVG.altGlyphItem.content
+    "( %SVG.glyphRef.qname;+ %SVG.altGlyphItem.extra.content; )"
+>
+<!ELEMENT %SVG.altGlyphItem.qname; %SVG.altGlyphItem.content; >
+<!-- end of SVG.altGlyphItem.element -->]]>
+
+<!ENTITY % SVG.altGlyphItem.attlist "INCLUDE" >
+<![%SVG.altGlyphItem.attlist;[
+<!ATTLIST %SVG.altGlyphItem.qname;
+    %SVG.Core.attrib;
+>
+<!-- end of SVG.altGlyphItem.attlist -->]]>
+
+<!-- glyphRef: Glyph Reference Element ................. -->
+
+<!ENTITY % SVG.glyphRef.element "INCLUDE" >
+<![%SVG.glyphRef.element;[
+<!ENTITY % SVG.glyphRef.content "EMPTY" >
+<!ELEMENT %SVG.glyphRef.qname; %SVG.glyphRef.content; >
+<!-- end of SVG.glyphRef.element -->]]>
+
+<!ENTITY % SVG.glyphRef.attlist "INCLUDE" >
+<![%SVG.glyphRef.attlist;[
+<!ATTLIST %SVG.glyphRef.qname;
+    %SVG.Core.attrib;
+    %SVG.Style.attrib;
+    %SVG.Font.attrib;
+    %SVG.XLink.attrib;
+    x %Number.datatype; #IMPLIED
+    y %Number.datatype; #IMPLIED
+    dx %Number.datatype; #IMPLIED
+    dy %Number.datatype; #IMPLIED
+    glyphRef CDATA #IMPLIED
+    format CDATA #IMPLIED
+>
+<!-- end of SVG.glyphRef.attlist -->]]>
+
+<!-- end of svg-text.mod -->
+]]>
+
+<!-- Marker Module ............................................... -->
+<!ENTITY % svg-marker.module "INCLUDE" >
+<![%svg-marker.module;[
+<!ENTITY % svg-marker.mod
+    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Marker//EN"
+           "svg-marker.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Marker Module ................................................. -->
+<!-- file: svg-marker.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-marker.mod,v 1.4 2002/11/14 15:11:03 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ELEMENTS SVG 1.1 Marker//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-marker.mod"
+
+     ....................................................................... -->
+
+<!-- Marker
+
+        marker
+
+     This module declares markup to provide support for marker.
+-->
+
+<!-- 'marker' property/attribute value (e.g., 'none', <uri>) -->
+<!ENTITY % MarkerValue.datatype "CDATA" >
+
+<!-- Qualified Names (Default) ......................... -->
+
+<!ENTITY % SVG.marker.qname "marker" >
+
+<!-- Attribute Collections (Default) ................... -->
+
+<!ENTITY % SVG.Core.attrib "" >
+<!ENTITY % SVG.Container.attrib "" >
+<!ENTITY % SVG.Style.attrib "" >
+<!ENTITY % SVG.Viewport.attrib "" >
+<!ENTITY % SVG.Text.attrib "" >
+<!ENTITY % SVG.TextContent.attrib "" >
+<!ENTITY % SVG.Font.attrib "" >
+<!ENTITY % SVG.Paint.attrib "" >
+<!ENTITY % SVG.Color.attrib "" >
+<!ENTITY % SVG.Opacity.attrib "" >
+<!ENTITY % SVG.Graphics.attrib "" >
+<!ENTITY % SVG.ColorProfile.attrib "" >
+<!ENTITY % SVG.Gradient.attrib "" >
+<!ENTITY % SVG.Clip.attrib "" >
+<!ENTITY % SVG.Mask.attrib "" >
+<!ENTITY % SVG.Filter.attrib "" >
+<!ENTITY % SVG.FilterColor.attrib "" >
+<!ENTITY % SVG.Cursor.attrib "" >
+<!ENTITY % SVG.External.attrib "" >
+
+<!-- SVG.Marker.class .................................. -->
+
+<!ENTITY % SVG.Marker.extra.class "" >
+
+<!ENTITY % SVG.Marker.class
+    "| %SVG.marker.qname; %SVG.Marker.extra.class;"
+>
+
+<!-- SVG.Marker.attrib ................................. -->
+
+<!ENTITY % SVG.Marker.extra.attrib "" >
+
+<!ENTITY % SVG.Marker.attrib
+    "marker-start %MarkerValue.datatype; #IMPLIED
+     marker-mid %MarkerValue.datatype; #IMPLIED
+     marker-end %MarkerValue.datatype; #IMPLIED
+     %SVG.Marker.extra.attrib;"
+>
+
+<!-- SVG.Presentation.attrib ........................... -->
+
+<!ENTITY % SVG.Presentation.extra.attrib "" >
+
+<!ENTITY % SVG.Presentation.attrib
+    "%SVG.Container.attrib;
+     %SVG.Viewport.attrib;
+     %SVG.Text.attrib;
+     %SVG.TextContent.attrib;
+     %SVG.Font.attrib;
+     %SVG.Paint.attrib;
+     %SVG.Color.attrib;
+     %SVG.Opacity.attrib;
+     %SVG.Graphics.attrib;
+     %SVG.Marker.attrib;
+     %SVG.ColorProfile.attrib;
+     %SVG.Gradient.attrib;
+     %SVG.Clip.attrib;
+     %SVG.Mask.attrib;
+     %SVG.Filter.attrib;
+     %SVG.FilterColor.attrib;
+     %SVG.Cursor.attrib;
+     flood-color %SVGColor.datatype; #IMPLIED
+     flood-opacity %OpacityValue.datatype; #IMPLIED
+     lighting-color %SVGColor.datatype; #IMPLIED
+     %SVG.Presentation.extra.attrib;"
+>
+
+<!-- marker: Marker Element ............................ -->
+
+<!ENTITY % SVG.marker.extra.content "" >
+
+<!ENTITY % SVG.marker.element "INCLUDE" >
+<![%SVG.marker.element;[
+<!ENTITY % SVG.marker.content
+    "( %SVG.Description.class; | %SVG.Animation.class; %SVG.Structure.class;
+       %SVG.Conditional.class; %SVG.Image.class; %SVG.Style.class;
+       %SVG.Shape.class; %SVG.Text.class; %SVG.Marker.class;
+       %SVG.ColorProfile.class; %SVG.Gradient.class; %SVG.Pattern.class;
+       %SVG.Clip.class; %SVG.Mask.class; %SVG.Filter.class; %SVG.Cursor.class;
+       %SVG.Hyperlink.class; %SVG.View.class; %SVG.Script.class;
+       %SVG.Font.class; %SVG.marker.extra.content; )*"
+>
+<!ELEMENT %SVG.marker.qname; %SVG.marker.content; >
+<!-- end of SVG.marker.element -->]]>
+
+<!ENTITY % SVG.marker.attlist "INCLUDE" >
+<![%SVG.marker.attlist;[
+<!ATTLIST %SVG.marker.qname;
+    %SVG.Core.attrib;
+    %SVG.Style.attrib;
+    %SVG.Presentation.attrib;
+    %SVG.External.attrib;
+    refX %Coordinate.datatype; #IMPLIED
+    refY %Coordinate.datatype; #IMPLIED
+    markerUnits ( strokeWidth | userSpaceOnUse ) #IMPLIED
+    markerWidth  %Length.datatype; #IMPLIED
+    markerHeight %Length.datatype; #IMPLIED
+    orient CDATA #IMPLIED
+    viewBox %ViewBoxSpec.datatype; #IMPLIED
+    preserveAspectRatio %PreserveAspectRatioSpec.datatype; 'xMidYMid meet'
+>
+<!-- end of SVG.marker.attlist -->]]>
+
+<!-- end of svg-marker.mod -->
+]]>
+
+<!-- Color Profile Module ........................................ -->
+<!ENTITY % svg-profile.module "INCLUDE" >
+<![%svg-profile.module;[
+<!ENTITY % svg-profile.mod
+    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Color Profile//EN"
+           "svg-profile.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Color Profile Module .......................................... -->
+<!-- file: svg-profile.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-profile.mod,v 1.3 2002/11/14 15:11:03 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ELEMENTS SVG 1.1 Color Profile//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-profile.mod"
+
+     ....................................................................... -->
+
+<!-- Color Profile
+
+        color-profile
+
+     This module declares markup to provide support for color profile.
+-->
+
+<!-- Qualified Names (Default) ......................... -->
+
+<!ENTITY % SVG.color-profile.qname "color-profile" >
+
+<!-- Attribute Collections (Default) ................... -->
+
+<!ENTITY % SVG.Core.attrib "" >
+<!ENTITY % SVG.XLink.attrib "" >
+
+<!-- SVG.ColorProfile.class ............................ -->
+
+<!ENTITY % SVG.ColorProfile.extra.class "" >
+
+<!ENTITY % SVG.ColorProfile.class
+    "| %SVG.color-profile.qname; %SVG.ColorProfile.extra.class;"
+>
+
+<!-- SVG.ColorProfile.attrib ........................... -->
+
+<!ENTITY % SVG.ColorProfile.extra.attrib "" >
+
+<!ENTITY % SVG.ColorProfile.attrib
+    "color-profile CDATA #IMPLIED
+     %SVG.ColorProfile.extra.attrib;"
+>
+
+<!-- color-profile: Color Profile Element .............. -->
+
+<!ENTITY % SVG.color-profile.extra.content "" >
+
+<!ENTITY % SVG.color-profile.element "INCLUDE" >
+<![%SVG.color-profile.element;[
+<!ENTITY % SVG.color-profile.content
+    "( %SVG.Description.class; %SVG.color-profile.extra.content; )*"
+>
+<!ELEMENT %SVG.color-profile.qname; %SVG.color-profile.content; >
+<!-- end of SVG.color-profile.element -->]]>
+
+<!ENTITY % SVG.color-profile.attlist "INCLUDE" >
+<![%SVG.color-profile.attlist;[
+<!ATTLIST %SVG.color-profile.qname;
+    %SVG.Core.attrib;
+    %SVG.XLink.attrib;
+    local CDATA #IMPLIED
+    name CDATA #REQUIRED
+    rendering-intent ( auto | perceptual | relative-colorimetric | saturation |
+                       absolute-colorimetric ) 'auto'
+>
+<!-- end of SVG.color-profile.attlist -->]]>
+
+<!-- end of svg-profile.mod -->
+]]>
+
+<!-- Gradient Module ............................................. -->
+<!ENTITY % svg-gradient.module "INCLUDE" >
+<![%svg-gradient.module;[
+<!ENTITY % svg-gradient.mod
+    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Gradient//EN"
+           "svg-gradient.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Gradient Module ............................................... -->
+<!-- file: svg-gradient.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-gradient.mod,v 1.3 2002/10/24 17:40:15 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ELEMENTS SVG 1.1 Gradient//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-gradient.mod"
+
+     ....................................................................... -->
+
+<!-- Gradient
+
+        linearGradient, radialGradient, stop
+
+     This module declares markup to provide support for gradient fill.
+-->
+
+<!-- a <number> or a <percentage> -->
+<!ENTITY % NumberOrPercentage.datatype "CDATA" >
+
+<!-- Qualified Names (Default) ......................... -->
+
+<!ENTITY % SVG.linearGradient.qname "linearGradient" >
+<!ENTITY % SVG.radialGradient.qname "radialGradient" >
+<!ENTITY % SVG.stop.qname "stop" >
+
+<!-- Attribute Collections (Default) ................... -->
+
+<!ENTITY % SVG.Core.attrib "" >
+<!ENTITY % SVG.Style.attrib "" >
+<!ENTITY % SVG.Color.attrib "" >
+<!ENTITY % SVG.XLink.attrib "" >
+<!ENTITY % SVG.External.attrib "" >
+
+<!-- SVG.Gradient.class ................................ -->
+
+<!ENTITY % SVG.Gradient.extra.class "" >
+
+<!ENTITY % SVG.Gradient.class
+    "| %SVG.linearGradient.qname; | %SVG.radialGradient.qname;
+       %SVG.Gradient.extra.class;"
+>
+
+<!-- SVG.Gradient.attrib ............................... -->
+
+<!ENTITY % SVG.Gradient.extra.attrib "" >
+
+<!ENTITY % SVG.Gradient.attrib
+    "stop-color %SVGColor.datatype; #IMPLIED
+     stop-opacity %OpacityValue.datatype; #IMPLIED
+     %SVG.Gradient.extra.attrib;"
+>
+
+<!-- linearGradient: Linear Gradient Element ........... -->
+
+<!ENTITY % SVG.linearGradient.extra.content "" >
+
+<!ENTITY % SVG.linearGradient.element "INCLUDE" >
+<![%SVG.linearGradient.element;[
+<!ENTITY % SVG.linearGradient.content
+    "(( %SVG.Description.class; )*, ( %SVG.stop.qname; | %SVG.animate.qname;
+      | %SVG.set.qname; | %SVG.animateTransform.qname;
+        %SVG.linearGradient.extra.content; )*)"
+>
+<!ELEMENT %SVG.linearGradient.qname; %SVG.linearGradient.content; >
+<!-- end of SVG.linearGradient.element -->]]>
+
+<!ENTITY % SVG.linearGradient.attlist "INCLUDE" >
+<![%SVG.linearGradient.attlist;[
+<!ATTLIST %SVG.linearGradient.qname;
+    %SVG.Core.attrib;
+    %SVG.Style.attrib;
+    %SVG.Color.attrib;
+    %SVG.Gradient.attrib;
+    %SVG.XLink.attrib;
+    %SVG.External.attrib;
+    x1 %Coordinate.datatype; #IMPLIED
+    y1 %Coordinate.datatype; #IMPLIED
+    x2 %Coordinate.datatype; #IMPLIED
+    y2 %Coordinate.datatype; #IMPLIED
+    gradientUnits ( userSpaceOnUse | objectBoundingBox ) #IMPLIED
+    gradientTransform %TransformList.datatype; #IMPLIED
+    spreadMethod ( pad | reflect | repeat ) #IMPLIED
+>
+<!-- end of SVG.linearGradient.attlist -->]]>
+
+<!-- radialGradient: Radial Gradient Element ........... -->
+
+<!ENTITY % SVG.radialGradient.extra.content "" >
+
+<!ENTITY % SVG.radialGradient.element "INCLUDE" >
+<![%SVG.radialGradient.element;[
+<!ENTITY % SVG.radialGradient.content
+    "(( %SVG.Description.class; )*, ( %SVG.stop.qname; | %SVG.animate.qname;
+      | %SVG.set.qname; | %SVG.animateTransform.qname;
+        %SVG.radialGradient.extra.content; )*)"
+>
+<!ELEMENT %SVG.radialGradient.qname; %SVG.radialGradient.content; >
+<!-- end of SVG.radialGradient.element -->]]>
+
+<!ENTITY % SVG.radialGradient.attlist "INCLUDE" >
+<![%SVG.radialGradient.attlist;[
+<!ATTLIST %SVG.radialGradient.qname;
+    %SVG.Core.attrib;
+    %SVG.Style.attrib;
+    %SVG.Color.attrib;
+    %SVG.Gradient.attrib;
+    %SVG.XLink.attrib;
+    %SVG.External.attrib;
+    cx %Coordinate.datatype; #IMPLIED
+    cy %Coordinate.datatype; #IMPLIED
+    r %Length.datatype; #IMPLIED
+    fx %Coordinate.datatype; #IMPLIED
+    fy %Coordinate.datatype; #IMPLIED
+    gradientUnits ( userSpaceOnUse | objectBoundingBox ) #IMPLIED
+    gradientTransform %TransformList.datatype; #IMPLIED
+    spreadMethod ( pad | reflect | repeat ) #IMPLIED
+>
+<!-- end of SVG.radialGradient.attlist -->]]>
+
+<!-- stop: Stop Element ................................ -->
+
+<!ENTITY % SVG.stop.extra.content "" >
+
+<!ENTITY % SVG.stop.element "INCLUDE" >
+<![%SVG.stop.element;[
+<!ENTITY % SVG.stop.content
+    "( %SVG.animate.qname; | %SVG.set.qname; | %SVG.animateColor.qname;
+       %SVG.stop.extra.content; )*"
+>
+<!ELEMENT %SVG.stop.qname; %SVG.stop.content; >
+<!-- end of SVG.stop.element -->]]>
+
+<!ENTITY % SVG.stop.attlist "INCLUDE" >
+<![%SVG.stop.attlist;[
+<!ATTLIST %SVG.stop.qname;
+    %SVG.Core.attrib;
+    %SVG.Style.attrib;
+    %SVG.Color.attrib;
+    %SVG.Gradient.attrib;
+    offset %NumberOrPercentage.datatype; #REQUIRED
+>
+<!-- end of SVG.stop.attlist -->]]>
+
+<!-- end of svg-gradient.mod -->
+]]>
+
+<!-- Pattern Module .............................................. -->
+<!ENTITY % svg-pattern.module "INCLUDE" >
+<![%svg-pattern.module;[
+<!ENTITY % svg-pattern.mod
+    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Pattern//EN"
+           "svg-pattern.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Pattern Module ................................................ -->
+<!-- file: svg-pattern.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-pattern.mod,v 1.4 2002/11/14 15:11:03 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ELEMENTS SVG 1.1 Pattern//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-pattern.mod"
+
+     ....................................................................... -->
+
+<!-- Pattern
+
+        pattern
+
+     This module declares markup to provide support for pattern fill.
+-->
+
+<!-- Qualified Names (Default) ......................... -->
+
+<!ENTITY % SVG.pattern.qname "pattern" >
+
+<!-- Attribute Collections (Default) ................... -->
+
+<!ENTITY % SVG.Core.attrib "" >
+<!ENTITY % SVG.Container.attrib "" >
+<!ENTITY % SVG.Conditional.attrib "" >
+<!ENTITY % SVG.Style.attrib "" >
+<!ENTITY % SVG.Viewport.attrib "" >
+<!ENTITY % SVG.Text.attrib "" >
+<!ENTITY % SVG.TextContent.attrib "" >
+<!ENTITY % SVG.Font.attrib "" >
+<!ENTITY % SVG.Paint.attrib "" >
+<!ENTITY % SVG.Color.attrib "" >
+<!ENTITY % SVG.Opacity.attrib "" >
+<!ENTITY % SVG.Graphics.attrib "" >
+<!ENTITY % SVG.Marker.attrib "" >
+<!ENTITY % SVG.ColorProfile.attrib "" >
+<!ENTITY % SVG.Gradient.attrib "" >
+<!ENTITY % SVG.Clip.attrib "" >
+<!ENTITY % SVG.Mask.attrib "" >
+<!ENTITY % SVG.Filter.attrib "" >
+<!ENTITY % SVG.FilterColor.attrib "" >
+<!ENTITY % SVG.Cursor.attrib "" >
+<!ENTITY % SVG.XLink.attrib "" >
+<!ENTITY % SVG.External.attrib "" >
+
+<!-- SVG.Pattern.class ................................. -->
+
+<!ENTITY % SVG.Pattern.extra.class "" >
+
+<!ENTITY % SVG.Pattern.class
+    "| %SVG.pattern.qname; %SVG.Pattern.extra.class;"
+>
+
+<!-- SVG.Presentation.attrib ........................... -->
+
+<!ENTITY % SVG.Presentation.extra.attrib "" >
+
+<!ENTITY % SVG.Presentation.attrib
+    "%SVG.Container.attrib;
+     %SVG.Viewport.attrib;
+     %SVG.Text.attrib;
+     %SVG.TextContent.attrib;
+     %SVG.Font.attrib;
+     %SVG.Paint.attrib;
+     %SVG.Color.attrib;
+     %SVG.Opacity.attrib;
+     %SVG.Graphics.attrib;
+     %SVG.Marker.attrib;
+     %SVG.ColorProfile.attrib;
+     %SVG.Gradient.attrib;
+     %SVG.Clip.attrib;
+     %SVG.Mask.attrib;
+     %SVG.Filter.attrib;
+     %SVG.FilterColor.attrib;
+     %SVG.Cursor.attrib;
+     flood-color %SVGColor.datatype; #IMPLIED
+     flood-opacity %OpacityValue.datatype; #IMPLIED
+     lighting-color %SVGColor.datatype; #IMPLIED
+     %SVG.Presentation.extra.attrib;"
+>
+
+<!-- pattern: Pattern Element .......................... -->
+
+<!ENTITY % SVG.pattern.extra.content "" >
+
+<!ENTITY % SVG.pattern.element "INCLUDE" >
+<![%SVG.pattern.element;[
+<!ENTITY % SVG.pattern.content
+    "( %SVG.Description.class; | %SVG.Animation.class; %SVG.Structure.class;
+       %SVG.Conditional.class; %SVG.Image.class; %SVG.Style.class;
+       %SVG.Shape.class; %SVG.Text.class; %SVG.Marker.class;
+       %SVG.ColorProfile.class; %SVG.Gradient.class; %SVG.Pattern.class;
+       %SVG.Clip.class; %SVG.Mask.class; %SVG.Filter.class; %SVG.Cursor.class;
+       %SVG.Hyperlink.class; %SVG.View.class; %SVG.Script.class;
+       %SVG.Font.class; %SVG.pattern.extra.content; )*"
+>
+<!ELEMENT %SVG.pattern.qname; %SVG.pattern.content; >
+<!-- end of SVG.pattern.element -->]]>
+
+<!ENTITY % SVG.pattern.attlist "INCLUDE" >
+<![%SVG.pattern.attlist;[
+<!ATTLIST %SVG.pattern.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.Style.attrib;
+    %SVG.Presentation.attrib;
+    %SVG.XLink.attrib;
+    %SVG.External.attrib;
+    x %Coordinate.datatype; #IMPLIED
+    y %Coordinate.datatype; #IMPLIED
+    width %Length.datatype; #IMPLIED
+    height %Length.datatype; #IMPLIED
+    patternUnits ( userSpaceOnUse | objectBoundingBox ) #IMPLIED
+    patternContentUnits ( userSpaceOnUse | objectBoundingBox ) #IMPLIED
+    patternTransform %TransformList.datatype; #IMPLIED
+    viewBox %ViewBoxSpec.datatype; #IMPLIED
+    preserveAspectRatio %PreserveAspectRatioSpec.datatype; 'xMidYMid meet'
+>
+<!-- end of SVG.pattern.attlist -->]]>
+
+<!-- end of svg-pattern.mod -->
+]]>
+
+<!-- Clip Module ................................................. -->
+<!ENTITY % svg-clip.module "INCLUDE" >
+<![%svg-clip.module;[
+<!ENTITY % svg-clip.mod
+    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Clip//EN"
+           "svg-clip.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Clip Module ................................................... -->
+<!-- file: svg-clip.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-clip.mod,v 1.3 2002/10/24 17:40:15 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ELEMENTS SVG 1.1 Clip//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-clip.mod"
+
+     ....................................................................... -->
+
+<!-- Clip
+
+        clipPath
+
+     This module declares markup to provide support for clipping.
+-->
+
+<!-- 'clip-path' property/attribute value (e.g., 'none', <uri>) -->
+<!ENTITY % ClipPathValue.datatype "CDATA" >
+
+<!-- Qualified Names (Default) ......................... -->
+
+<!ENTITY % SVG.clipPath.qname "clipPath" >
+
+<!-- Attribute Collections (Default) ................... -->
+
+<!ENTITY % SVG.Core.attrib "" >
+<!ENTITY % SVG.Conditional.attrib "" >
+<!ENTITY % SVG.Style.attrib "" >
+<!ENTITY % SVG.Text.attrib "" >
+<!ENTITY % SVG.TextContent.attrib "" >
+<!ENTITY % SVG.Font.attrib "" >
+<!ENTITY % SVG.Paint.attrib "" >
+<!ENTITY % SVG.Color.attrib "" >
+<!ENTITY % SVG.Opacity.attrib "" >
+<!ENTITY % SVG.Graphics.attrib "" >
+<!ENTITY % SVG.Mask.attrib "" >
+<!ENTITY % SVG.Filter.attrib "" >
+<!ENTITY % SVG.Cursor.attrib "" >
+<!ENTITY % SVG.External.attrib "" >
+
+<!-- SVG.Clip.class .................................... -->
+
+<!ENTITY % SVG.Clip.extra.class "" >
+
+<!ENTITY % SVG.Clip.class
+    "| %SVG.clipPath.qname; %SVG.Clip.extra.class;"
+>
+
+<!-- SVG.Clip.attrib ................................... -->
+
+<!ENTITY % SVG.Clip.extra.attrib "" >
+
+<!ENTITY % SVG.Clip.attrib
+    "clip-path %ClipPathValue.datatype; #IMPLIED
+     clip-rule %ClipFillRule.datatype; #IMPLIED
+     %SVG.Clip.extra.attrib;"
+>
+
+<!-- clipPath: Clip Path Element ....................... -->
+
+<!ENTITY % SVG.clipPath.extra.content "" >
+
+<!ENTITY % SVG.clipPath.element "INCLUDE" >
+<![%SVG.clipPath.element;[
+<!ENTITY % SVG.clipPath.content
+    "(( %SVG.Description.class; )*, ( %SVG.Animation.class; %SVG.Use.class;
+        %SVG.Shape.class; %SVG.Text.class; %SVG.clipPath.extra.content; )*)"
+>
+<!ELEMENT %SVG.clipPath.qname; %SVG.clipPath.content; >
+<!-- end of SVG.clipPath.element -->]]>
+
+<!ENTITY % SVG.clipPath.attlist "INCLUDE" >
+<![%SVG.clipPath.attlist;[
+<!ATTLIST %SVG.clipPath.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.Style.attrib;
+    %SVG.Text.attrib;
+    %SVG.TextContent.attrib;
+    %SVG.Font.attrib;
+    %SVG.Paint.attrib;
+    %SVG.Color.attrib;
+    %SVG.Opacity.attrib;
+    %SVG.Graphics.attrib;
+    %SVG.Clip.attrib;
+    %SVG.Mask.attrib;
+    %SVG.Filter.attrib;
+    %SVG.Cursor.attrib;
+    %SVG.External.attrib;
+    transform %TransformList.datatype; #IMPLIED
+    clipPathUnits ( userSpaceOnUse | objectBoundingBox ) #IMPLIED
+>
+<!-- end of SVG.clipPath.attlist -->]]>
+
+<!-- end of svg-clip.mod -->
+]]>
+
+<!-- Mask Module ................................................. -->
+<!ENTITY % svg-mask.module "INCLUDE" >
+<![%svg-mask.module;[
+<!ENTITY % svg-mask.mod
+    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Mask//EN"
+           "svg-mask.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Mask Module ................................................... -->
+<!-- file: svg-mask.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-mask.mod,v 1.4 2002/11/14 15:11:03 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ELEMENTS SVG 1.1 Mask//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-mask.mod"
+
+     ....................................................................... -->
+
+<!-- Mask
+
+        mask
+
+     This module declares markup to provide support for masking.
+-->
+
+<!-- 'mask' property/attribute value (e.g., 'none', <uri>) -->
+<!ENTITY % MaskValue.datatype "CDATA" >
+
+<!-- Qualified Names (Default) ......................... -->
+
+<!ENTITY % SVG.mask.qname "mask" >
+
+<!-- Attribute Collections (Default) ................... -->
+
+<!ENTITY % SVG.Core.attrib "" >
+<!ENTITY % SVG.Container.attrib "" >
+<!ENTITY % SVG.Conditional.attrib "" >
+<!ENTITY % SVG.Style.attrib "" >
+<!ENTITY % SVG.Viewport.attrib "" >
+<!ENTITY % SVG.Text.attrib "" >
+<!ENTITY % SVG.TextContent.attrib "" >
+<!ENTITY % SVG.Font.attrib "" >
+<!ENTITY % SVG.Paint.attrib "" >
+<!ENTITY % SVG.Color.attrib "" >
+<!ENTITY % SVG.Opacity.attrib "" >
+<!ENTITY % SVG.Graphics.attrib "" >
+<!ENTITY % SVG.Marker.attrib "" >
+<!ENTITY % SVG.ColorProfile.attrib "" >
+<!ENTITY % SVG.Gradient.attrib "" >
+<!ENTITY % SVG.Clip.attrib "" >
+<!ENTITY % SVG.Filter.attrib "" >
+<!ENTITY % SVG.FilterColor.attrib "" >
+<!ENTITY % SVG.Cursor.attrib "" >
+<!ENTITY % SVG.External.attrib "" >
+
+<!-- SVG.Mask.class .................................... -->
+
+<!ENTITY % SVG.Mask.extra.class "" >
+
+<!ENTITY % SVG.Mask.class
+    "| %SVG.mask.qname; %SVG.Mask.extra.class;"
+>
+
+<!-- SVG.Mask.attrib ................................... -->
+
+<!ENTITY % SVG.Mask.extra.attrib "" >
+
+<!ENTITY % SVG.Mask.attrib
+    "mask %MaskValue.datatype; #IMPLIED
+     %SVG.Mask.extra.attrib;"
+>
+
+<!-- SVG.Presentation.attrib ........................... -->
+
+<!ENTITY % SVG.Presentation.extra.attrib "" >
+
+<!ENTITY % SVG.Presentation.attrib
+    "%SVG.Container.attrib;
+     %SVG.Viewport.attrib;
+     %SVG.Text.attrib;
+     %SVG.TextContent.attrib;
+     %SVG.Font.attrib;
+     %SVG.Paint.attrib;
+     %SVG.Color.attrib;
+     %SVG.Opacity.attrib;
+     %SVG.Graphics.attrib;
+     %SVG.Marker.attrib;
+     %SVG.ColorProfile.attrib;
+     %SVG.Gradient.attrib;
+     %SVG.Clip.attrib;
+     %SVG.Mask.attrib;
+     %SVG.Filter.attrib;
+     %SVG.FilterColor.attrib;
+     %SVG.Cursor.attrib;
+     flood-color %SVGColor.datatype; #IMPLIED
+     flood-opacity %OpacityValue.datatype; #IMPLIED
+     lighting-color %SVGColor.datatype; #IMPLIED
+     %SVG.Presentation.extra.attrib;"
+>
+
+<!-- mask: Mask Element ................................ -->
+
+<!ENTITY % SVG.mask.extra.content "" >
+
+<!ENTITY % SVG.mask.element "INCLUDE" >
+<![%SVG.mask.element;[
+<!ENTITY % SVG.mask.content
+    "( %SVG.Description.class; | %SVG.Animation.class; %SVG.Structure.class;
+       %SVG.Conditional.class; %SVG.Image.class; %SVG.Style.class;
+       %SVG.Shape.class; %SVG.Text.class; %SVG.Marker.class;
+       %SVG.ColorProfile.class; %SVG.Gradient.class; %SVG.Pattern.class;
+       %SVG.Clip.class; %SVG.Mask.class; %SVG.Filter.class; %SVG.Cursor.class;
+       %SVG.Hyperlink.class; %SVG.View.class; %SVG.Script.class;
+       %SVG.Font.class; %SVG.mask.extra.content; )*"
+>
+<!ELEMENT %SVG.mask.qname; %SVG.mask.content; >
+<!-- end of SVG.mask.element -->]]>
+
+<!ENTITY % SVG.mask.attlist "INCLUDE" >
+<![%SVG.mask.attlist;[
+<!ATTLIST %SVG.mask.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.Style.attrib;
+    %SVG.Presentation.attrib;
+    %SVG.External.attrib;
+    x %Coordinate.datatype; #IMPLIED
+    y %Coordinate.datatype; #IMPLIED
+    width %Length.datatype; #IMPLIED
+    height %Length.datatype; #IMPLIED
+    maskUnits ( userSpaceOnUse | objectBoundingBox ) #IMPLIED
+    maskContentUnits ( userSpaceOnUse | objectBoundingBox ) #IMPLIED
+>
+<!-- end of SVG.mask.attlist -->]]>
+
+<!-- end of svg-mask.mod -->
+]]>
+
+<!-- Filter Module ............................................... -->
+<!ENTITY % svg-filter.module "INCLUDE" >
+<![%svg-filter.module;[
+<!ENTITY % svg-filter.mod
+    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Filter//EN"
+           "svg-filter.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Filter Module ................................................. -->
+<!-- file: svg-filter.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-filter.mod,v 1.4 2002/11/14 15:11:02 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ELEMENTS SVG 1.1 Filter//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-filter.mod"
+
+     ....................................................................... -->
+
+<!-- Filter
+
+        filter, feBlend, feColorMatrix, feComponentTransfer, feComposite,
+        feConvolveMatrix, feDiffuseLighting, feDisplacementMap, feFlood,
+        feGaussianBlur, feImage, feMerge, feMergeNode, feMorphology, feOffset,
+        feSpecularLighting, feTile, feTurbulence, feDistantLight, fePointLight,
+        feSpotLight, feFuncR, feFuncG, feFuncB, feFuncA
+
+     This module declares markup to provide support for filter effect.
+-->
+
+<!-- 'filter' property/attribute value (e.g., 'none', <uri>) -->
+<!ENTITY % FilterValue.datatype "CDATA" >
+
+<!-- list of <number>s, but at least one and at most two -->
+<!ENTITY % NumberOptionalNumber.datatype "CDATA" >
+
+<!-- Qualified Names (Default) ......................... -->
+
+<!ENTITY % SVG.filter.qname "filter" >
+<!ENTITY % SVG.feBlend.qname "feBlend" >
+<!ENTITY % SVG.feColorMatrix.qname "feColorMatrix" >
+<!ENTITY % SVG.feComponentTransfer.qname "feComponentTransfer" >
+<!ENTITY % SVG.feComposite.qname "feComposite" >
+<!ENTITY % SVG.feConvolveMatrix.qname "feConvolveMatrix" >
+<!ENTITY % SVG.feDiffuseLighting.qname "feDiffuseLighting" >
+<!ENTITY % SVG.feDisplacementMap.qname "feDisplacementMap" >
+<!ENTITY % SVG.feFlood.qname "feFlood" >
+<!ENTITY % SVG.feGaussianBlur.qname "feGaussianBlur" >
+<!ENTITY % SVG.feImage.qname "feImage" >
+<!ENTITY % SVG.feMerge.qname "feMerge" >
+<!ENTITY % SVG.feMergeNode.qname "feMergeNode" >
+<!ENTITY % SVG.feMorphology.qname "feMorphology" >
+<!ENTITY % SVG.feOffset.qname "feOffset" >
+<!ENTITY % SVG.feSpecularLighting.qname "feSpecularLighting" >
+<!ENTITY % SVG.feTile.qname "feTile" >
+<!ENTITY % SVG.feTurbulence.qname "feTurbulence" >
+<!ENTITY % SVG.feDistantLight.qname "feDistantLight" >
+<!ENTITY % SVG.fePointLight.qname "fePointLight" >
+<!ENTITY % SVG.feSpotLight.qname "feSpotLight" >
+<!ENTITY % SVG.feFuncR.qname "feFuncR" >
+<!ENTITY % SVG.feFuncG.qname "feFuncG" >
+<!ENTITY % SVG.feFuncB.qname "feFuncB" >
+<!ENTITY % SVG.feFuncA.qname "feFuncA" >
+
+<!-- Attribute Collections (Default) ................... -->
+
+<!ENTITY % SVG.Core.attrib "" >
+<!ENTITY % SVG.Container.attrib "" >
+<!ENTITY % SVG.Style.attrib "" >
+<!ENTITY % SVG.Viewport.attrib "" >
+<!ENTITY % SVG.Text.attrib "" >
+<!ENTITY % SVG.TextContent.attrib "" >
+<!ENTITY % SVG.Font.attrib "" >
+<!ENTITY % SVG.Paint.attrib "" >
+<!ENTITY % SVG.Color.attrib "" >
+<!ENTITY % SVG.Opacity.attrib "" >
+<!ENTITY % SVG.Graphics.attrib "" >
+<!ENTITY % SVG.Marker.attrib "" >
+<!ENTITY % SVG.ColorProfile.attrib "" >
+<!ENTITY % SVG.Gradient.attrib "" >
+<!ENTITY % SVG.Clip.attrib "" >
+<!ENTITY % SVG.Mask.attrib "" >
+<!ENTITY % SVG.Cursor.attrib "" >
+<!ENTITY % SVG.XLink.attrib "" >
+<!ENTITY % SVG.XLinkEmbed.attrib "" >
+<!ENTITY % SVG.External.attrib "" >
+
+<!-- SVG.Filter.class .................................. -->
+
+<!ENTITY % SVG.Filter.extra.class "" >
+
+<!ENTITY % SVG.Filter.class
+    "| %SVG.filter.qname; %SVG.Filter.extra.class;"
+>
+
+<!-- SVG.FilterPrimitive.class ......................... -->
+
+<!ENTITY % SVG.FilterPrimitive.extra.class "" >
+
+<!ENTITY % SVG.FilterPrimitive.class
+    "| %SVG.feBlend.qname; | %SVG.feColorMatrix.qname;
+     | %SVG.feComponentTransfer.qname; | %SVG.feComposite.qname;
+     | %SVG.feConvolveMatrix.qname; | %SVG.feDiffuseLighting.qname;
+     | %SVG.feDisplacementMap.qname; | %SVG.feFlood.qname;
+     | %SVG.feGaussianBlur.qname; | %SVG.feImage.qname; | %SVG.feMerge.qname;
+     | %SVG.feMorphology.qname; | %SVG.feOffset.qname;
+     | %SVG.feSpecularLighting.qname; | %SVG.feTile.qname;
+     | %SVG.feTurbulence.qname; %SVG.FilterPrimitive.extra.class;"
+>
+
+<!-- SVG.Filter.attrib ................................. -->
+
+<!ENTITY % SVG.Filter.extra.attrib "" >
+
+<!ENTITY % SVG.Filter.attrib
+    "filter %FilterValue.datatype; #IMPLIED
+     %SVG.Filter.extra.attrib;"
+>
+
+<!-- SVG.FilterColor.attrib ............................ -->
+
+<!ENTITY % SVG.FilterColor.extra.attrib "" >
+
+<!ENTITY % SVG.FilterColor.attrib
+    "color-interpolation-filters ( auto | sRGB | linearRGB | inherit )
+                                   #IMPLIED
+     %SVG.FilterColor.extra.attrib;"
+>
+
+<!-- SVG.FilterPrimitive.attrib ........................ -->
+
+<!ENTITY % SVG.FilterPrimitive.extra.attrib "" >
+
+<!ENTITY % SVG.FilterPrimitive.attrib
+    "x %Coordinate.datatype; #IMPLIED
+     y %Coordinate.datatype; #IMPLIED
+     width %Length.datatype; #IMPLIED
+     height %Length.datatype; #IMPLIED
+     result CDATA #IMPLIED
+     %SVG.FilterPrimitive.extra.attrib;"
+>
+
+<!-- SVG.FilterPrimitiveWithIn.attrib .................. -->
+
+<!ENTITY % SVG.FilterPrimitiveWithIn.extra.attrib "" >
+
+<!ENTITY % SVG.FilterPrimitiveWithIn.attrib
+    "%SVG.FilterPrimitive.attrib;
+     in CDATA #IMPLIED
+     %SVG.FilterPrimitiveWithIn.extra.attrib;"
+>
+
+<!-- SVG.Presentation.attrib ........................... -->
+
+<!ENTITY % SVG.Presentation.extra.attrib "" >
+
+<!ENTITY % SVG.Presentation.attrib
+    "%SVG.Container.attrib;
+     %SVG.Viewport.attrib;
+     %SVG.Text.attrib;
+     %SVG.TextContent.attrib;
+     %SVG.Font.attrib;
+     %SVG.Paint.attrib;
+     %SVG.Color.attrib;
+     %SVG.Opacity.attrib;
+     %SVG.Graphics.attrib;
+     %SVG.Marker.attrib;
+     %SVG.ColorProfile.attrib;
+     %SVG.Gradient.attrib;
+     %SVG.Clip.attrib;
+     %SVG.Mask.attrib;
+     %SVG.Filter.attrib;
+     %SVG.FilterColor.attrib;
+     %SVG.Cursor.attrib;
+     flood-color %SVGColor.datatype; #IMPLIED
+     flood-opacity %OpacityValue.datatype; #IMPLIED
+     lighting-color %SVGColor.datatype; #IMPLIED
+     %SVG.Presentation.extra.attrib;"
+>
+
+<!-- filter: Filter Element ............................ -->
+
+<!ENTITY % SVG.filter.extra.content "" >
+
+<!ENTITY % SVG.filter.element "INCLUDE" >
+<![%SVG.filter.element;[
+<!ENTITY % SVG.filter.content
+    "(( %SVG.Description.class; )*, ( %SVG.animate.qname; | %SVG.set.qname;
+        %SVG.FilterPrimitive.class; %SVG.filter.extra.content; )*)"
+>
+<!ELEMENT %SVG.filter.qname; %SVG.filter.content; >
+<!-- end of SVG.filter.element -->]]>
+
+<!ENTITY % SVG.filter.attlist "INCLUDE" >
+<![%SVG.filter.attlist;[
+<!ATTLIST %SVG.filter.qname;
+    %SVG.Core.attrib;
+    %SVG.Style.attrib;
+    %SVG.Presentation.attrib;
+    %SVG.XLink.attrib;
+    %SVG.External.attrib;
+    x %Coordinate.datatype; #IMPLIED
+    y %Coordinate.datatype; #IMPLIED
+    width %Length.datatype; #IMPLIED
+    height %Length.datatype; #IMPLIED
+    filterRes %NumberOptionalNumber.datatype; #IMPLIED
+    filterUnits ( userSpaceOnUse | objectBoundingBox ) #IMPLIED
+    primitiveUnits ( userSpaceOnUse | objectBoundingBox ) #IMPLIED
+>
+<!-- end of SVG.filter.attlist -->]]>
+
+<!-- feBlend: Filter Effect Blend Element .............. -->
+
+<!ENTITY % SVG.feBlend.extra.content "" >
+
+<!ENTITY % SVG.feBlend.element "INCLUDE" >
+<![%SVG.feBlend.element;[
+<!ENTITY % SVG.feBlend.content
+    "( %SVG.animate.qname; | %SVG.set.qname; %SVG.feBlend.extra.content; )*"
+>
+<!ELEMENT %SVG.feBlend.qname; %SVG.feBlend.content; >
+<!-- end of SVG.feBlend.element -->]]>
+
+<!ENTITY % SVG.feBlend.attlist "INCLUDE" >
+<![%SVG.feBlend.attlist;[
+<!ATTLIST %SVG.feBlend.qname;
+    %SVG.Core.attrib;
+    %SVG.FilterColor.attrib;
+    %SVG.FilterPrimitiveWithIn.attrib;
+    in2 CDATA #REQUIRED
+    mode ( normal | multiply | screen | darken | lighten ) 'normal'
+>
+<!-- end of SVG.feBlend.attlist -->]]>
+
+<!-- feColorMatrix: Filter Effect Color Matrix Element . -->
+
+<!ENTITY % SVG.feColorMatrix.extra.content "" >
+
+<!ENTITY % SVG.feColorMatrix.element "INCLUDE" >
+<![%SVG.feColorMatrix.element;[
+<!ENTITY % SVG.feColorMatrix.content
+    "( %SVG.animate.qname; | %SVG.set.qname;
+       %SVG.feColorMatrix.extra.content; )*"
+>
+<!ELEMENT %SVG.feColorMatrix.qname; %SVG.feColorMatrix.content; >
+<!-- end of SVG.feColorMatrix.element -->]]>
+
+<!ENTITY % SVG.feColorMatrix.attlist "INCLUDE" >
+<![%SVG.feColorMatrix.attlist;[
+<!ATTLIST %SVG.feColorMatrix.qname;
+    %SVG.Core.attrib;
+    %SVG.FilterColor.attrib;
+    %SVG.FilterPrimitiveWithIn.attrib;
+    type ( matrix | saturate | hueRotate | luminanceToAlpha ) 'matrix'
+    values CDATA #IMPLIED
+>
+<!-- end of SVG.feColorMatrix.attlist -->]]>
+
+<!-- feComponentTransfer: Filter Effect Component Transfer Element -->
+
+<!ENTITY % SVG.feComponentTransfer.extra.content "" >
+
+<!ENTITY % SVG.feComponentTransfer.element "INCLUDE" >
+<![%SVG.feComponentTransfer.element;[
+<!ENTITY % SVG.feComponentTransfer.content
+    "( %SVG.feFuncR.qname;?, %SVG.feFuncG.qname;?, %SVG.feFuncB.qname;?,
+       %SVG.feFuncA.qname;? %SVG.feComponentTransfer.extra.content; )"
+>
+<!ELEMENT %SVG.feComponentTransfer.qname; %SVG.feComponentTransfer.content; >
+<!-- end of SVG.feComponentTransfer.element -->]]>
+
+<!ENTITY % SVG.feComponentTransfer.attlist "INCLUDE" >
+<![%SVG.feComponentTransfer.attlist;[
+<!ATTLIST %SVG.feComponentTransfer.qname;
+    %SVG.Core.attrib;
+    %SVG.FilterColor.attrib;
+    %SVG.FilterPrimitiveWithIn.attrib;
+>
+<!-- end of SVG.feComponentTransfer.attlist -->]]>
+
+<!-- feComposite: Filter Effect Composite Element ...... -->
+
+<!ENTITY % SVG.feComposite.extra.content "" >
+
+<!ENTITY % SVG.feComposite.element "INCLUDE" >
+<![%SVG.feComposite.element;[
+<!ENTITY % SVG.feComposite.content
+    "( %SVG.animate.qname; | %SVG.set.qname; %SVG.feComposite.extra.content; )*"
+>
+<!ELEMENT %SVG.feComposite.qname; %SVG.feComposite.content; >
+<!-- end of SVG.feComposite.element -->]]>
+
+<!ENTITY % SVG.feComposite.attlist "INCLUDE" >
+<![%SVG.feComposite.attlist;[
+<!ATTLIST %SVG.feComposite.qname;
+    %SVG.Core.attrib;
+    %SVG.FilterColor.attrib;
+    %SVG.FilterPrimitiveWithIn.attrib;
+    in2 CDATA #REQUIRED
+    operator ( over | in | out | atop | xor | arithmetic ) 'over'
+    k1 %Number.datatype; #IMPLIED
+    k2 %Number.datatype; #IMPLIED
+    k3 %Number.datatype; #IMPLIED
+    k4 %Number.datatype; #IMPLIED
+>
+<!-- end of SVG.feComposite.attlist -->]]>
+
+<!-- feConvolveMatrix: Filter Effect Convolve Matrix Element -->
+
+<!ENTITY % SVG.feConvolveMatrix.extra.content "" >
+
+<!ENTITY % SVG.feConvolveMatrix.element "INCLUDE" >
+<![%SVG.feConvolveMatrix.element;[
+<!ENTITY % SVG.feConvolveMatrix.content
+    "( %SVG.animate.qname; | %SVG.set.qname;
+       %SVG.feConvolveMatrix.extra.content; )*"
+>
+<!ELEMENT %SVG.feConvolveMatrix.qname; %SVG.feConvolveMatrix.content; >
+<!-- end of SVG.feConvolveMatrix.element -->]]>
+
+<!ENTITY % SVG.feConvolveMatrix.attlist "INCLUDE" >
+<![%SVG.feConvolveMatrix.attlist;[
+<!ATTLIST %SVG.feConvolveMatrix.qname;
+    %SVG.Core.attrib;
+    %SVG.FilterColor.attrib;
+    %SVG.FilterPrimitiveWithIn.attrib;
+    order %NumberOptionalNumber.datatype; #REQUIRED
+    kernelMatrix CDATA #REQUIRED
+    divisor %Number.datatype; #IMPLIED
+    bias %Number.datatype; #IMPLIED
+    targetX %Integer.datatype; #IMPLIED
+    targetY %Integer.datatype; #IMPLIED
+    edgeMode ( duplicate | wrap | none ) 'duplicate'
+    kernelUnitLength %NumberOptionalNumber.datatype; #IMPLIED
+    preserveAlpha %Boolean.datatype; #IMPLIED
+>
+<!-- end of SVG.feConvolveMatrix.attlist -->]]>
+
+<!-- feDiffuseLighting: Filter Effect Diffuse Lighting Element -->
+
+<!ENTITY % SVG.feDiffuseLighting.extra.content "" >
+
+<!ENTITY % SVG.feDiffuseLighting.element "INCLUDE" >
+<![%SVG.feDiffuseLighting.element;[
+<!ENTITY % SVG.feDiffuseLighting.content
+    "(( %SVG.feDistantLight.qname; | %SVG.fePointLight.qname;
+      | %SVG.feSpotLight.qname; ), ( %SVG.animate.qname; | %SVG.set.qname;
+      | %SVG.animateColor.qname; %SVG.feDiffuseLighting.extra.content; )*)"
+>
+<!ELEMENT %SVG.feDiffuseLighting.qname; %SVG.feDiffuseLighting.content; >
+<!-- end of SVG.feDiffuseLighting.element -->]]>
+
+<!ENTITY % SVG.feDiffuseLighting.attlist "INCLUDE" >
+<![%SVG.feDiffuseLighting.attlist;[
+<!ATTLIST %SVG.feDiffuseLighting.qname;
+    %SVG.Core.attrib;
+    %SVG.Style.attrib;
+    %SVG.Color.attrib;
+    %SVG.FilterColor.attrib;
+    %SVG.FilterPrimitiveWithIn.attrib;
+    lighting-color %SVGColor.datatype; #IMPLIED
+    surfaceScale %Number.datatype; #IMPLIED
+    diffuseConstant %Number.datatype; #IMPLIED
+    kernelUnitLength %NumberOptionalNumber.datatype; #IMPLIED
+>
+<!-- end of SVG.feDiffuseLighting.attlist -->]]>
+
+<!-- feDisplacementMap: Filter Effect Displacement Map Element -->
+
+<!ENTITY % SVG.feDisplacementMap.extra.content "" >
+
+<!ENTITY % SVG.feDisplacementMap.element "INCLUDE" >
+<![%SVG.feDisplacementMap.element;[
+<!ENTITY % SVG.feDisplacementMap.content
+    "( %SVG.animate.qname; | %SVG.set.qname;
+       %SVG.feDisplacementMap.extra.content; )*"
+>
+<!ELEMENT %SVG.feDisplacementMap.qname; %SVG.feDisplacementMap.content; >
+<!-- end of SVG.feDisplacementMap.element -->]]>
+
+<!ENTITY % SVG.feDisplacementMap.attlist "INCLUDE" >
+<![%SVG.feDisplacementMap.attlist;[
+<!ATTLIST %SVG.feDisplacementMap.qname;
+    %SVG.Core.attrib;
+    %SVG.FilterColor.attrib;
+    %SVG.FilterPrimitiveWithIn.attrib;
+    in2 CDATA #REQUIRED
+    scale %Number.datatype; #IMPLIED
+    xChannelSelector ( R | G | B | A ) 'A'
+    yChannelSelector ( R | G | B | A ) 'A'
+>
+<!-- end of SVG.feDisplacementMap.attlist -->]]>
+
+<!-- feFlood: Filter Effect Flood Element .............. -->
+
+<!ENTITY % SVG.feFlood.extra.content "" >
+
+<!ENTITY % SVG.feFlood.element "INCLUDE" >
+<![%SVG.feFlood.element;[
+<!ENTITY % SVG.feFlood.content
+    "( %SVG.animate.qname; | %SVG.set.qname; | %SVG.animateColor.qname;
+       %SVG.feFlood.extra.content; )*"
+>
+<!ELEMENT %SVG.feFlood.qname; %SVG.feFlood.content; >
+<!-- end of SVG.feFlood.element -->]]>
+
+<!ENTITY % SVG.feFlood.attlist "INCLUDE" >
+<![%SVG.feFlood.attlist;[
+<!ATTLIST %SVG.feFlood.qname;
+    %SVG.Core.attrib;
+    %SVG.Style.attrib;
+    %SVG.Color.attrib;
+    %SVG.FilterColor.attrib;
+    %SVG.FilterPrimitiveWithIn.attrib;
+    flood-color %SVGColor.datatype; #IMPLIED
+    flood-opacity %OpacityValue.datatype; #IMPLIED
+>
+<!-- end of SVG.feFlood.attlist -->]]>
+
+<!-- feGaussianBlur: Filter Effect Gaussian Blur Element -->
+
+<!ENTITY % SVG.feGaussianBlur.extra.content "" >
+
+<!ENTITY % SVG.feGaussianBlur.element "INCLUDE" >
+<![%SVG.feGaussianBlur.element;[
+<!ENTITY % SVG.feGaussianBlur.content
+    "( %SVG.animate.qname; | %SVG.set.qname;
+       %SVG.feGaussianBlur.extra.content; )*"
+>
+<!ELEMENT %SVG.feGaussianBlur.qname; %SVG.feGaussianBlur.content; >
+<!-- end of SVG.feGaussianBlur.element -->]]>
+
+<!ENTITY % SVG.feGaussianBlur.attlist "INCLUDE" >
+<![%SVG.feGaussianBlur.attlist;[
+<!ATTLIST %SVG.feGaussianBlur.qname;
+    %SVG.Core.attrib;
+    %SVG.FilterColor.attrib;
+    %SVG.FilterPrimitiveWithIn.attrib;
+    stdDeviation %NumberOptionalNumber.datatype; #IMPLIED
+>
+<!-- end of SVG.feGaussianBlur.attlist -->]]>
+
+<!-- feImage: Filter Effect Image Element .............. -->
+
+<!ENTITY % SVG.feImage.extra.content "" >
+
+<!ENTITY % SVG.feImage.element "INCLUDE" >
+<![%SVG.feImage.element;[
+<!ENTITY % SVG.feImage.content
+    "( %SVG.animate.qname; | %SVG.set.qname; | %SVG.animateTransform.qname;
+       %SVG.feImage.extra.content; )*"
+>
+<!ELEMENT %SVG.feImage.qname; %SVG.feImage.content; >
+<!-- end of SVG.feImage.element -->]]>
+
+<!ENTITY % SVG.feImage.attlist "INCLUDE" >
+<![%SVG.feImage.attlist;[
+<!ATTLIST %SVG.feImage.qname;
+    %SVG.Core.attrib;
+    %SVG.Style.attrib;
+    %SVG.Presentation.attrib;
+    %SVG.FilterPrimitive.attrib;
+    %SVG.XLinkEmbed.attrib;
+    %SVG.External.attrib;
+    preserveAspectRatio %PreserveAspectRatioSpec.datatype; 'xMidYMid meet'
+>
+<!-- end of SVG.feImage.attlist -->]]>
+
+<!-- feMerge: Filter Effect Merge Element .............. -->
+
+<!ENTITY % SVG.feMerge.extra.content "" >
+
+<!ENTITY % SVG.feMerge.element "INCLUDE" >
+<![%SVG.feMerge.element;[
+<!ENTITY % SVG.feMerge.content
+    "( %SVG.feMergeNode.qname; %SVG.feMerge.extra.content; )*"
+>
+<!ELEMENT %SVG.feMerge.qname; %SVG.feMerge.content; >
+<!-- end of SVG.feMerge.element -->]]>
+
+<!ENTITY % SVG.feMerge.attlist "INCLUDE" >
+<![%SVG.feMerge.attlist;[
+<!ATTLIST %SVG.feMerge.qname;
+    %SVG.Core.attrib;
+    %SVG.FilterColor.attrib;
+    %SVG.FilterPrimitive.attrib;
+>
+<!-- end of SVG.feMerge.attlist -->]]>
+
+<!-- feMergeNode: Filter Effect Merge Node Element ..... -->
+
+<!ENTITY % SVG.feMergeNode.extra.content "" >
+
+<!ENTITY % SVG.feMergeNode.element "INCLUDE" >
+<![%SVG.feMergeNode.element;[
+<!ENTITY % SVG.feMergeNode.content
+    "( %SVG.animate.qname; | %SVG.set.qname; %SVG.feMergeNode.extra.content; )*"
+>
+<!ELEMENT %SVG.feMergeNode.qname; %SVG.feMergeNode.content; >
+<!-- end of SVG.feMergeNode.element -->]]>
+
+<!ENTITY % SVG.feMergeNode.attlist "INCLUDE" >
+<![%SVG.feMergeNode.attlist;[
+<!ATTLIST %SVG.feMergeNode.qname;
+    %SVG.Core.attrib;
+    in CDATA #IMPLIED
+>
+<!-- end of SVG.feMergeNode.attlist -->]]>
+
+<!-- feMorphology: Filter Effect Morphology Element .... -->
+
+<!ENTITY % SVG.feMorphology.extra.content "" >
+
+<!ENTITY % SVG.feMorphology.element "INCLUDE" >
+<![%SVG.feMorphology.element;[
+<!ENTITY % SVG.feMorphology.content
+    "( %SVG.animate.qname; | %SVG.set.qname;
+       %SVG.feMorphology.extra.content; )*"
+>
+<!ELEMENT %SVG.feMorphology.qname; %SVG.feMorphology.content; >
+<!-- end of SVG.feMorphology.element -->]]>
+
+<!ENTITY % SVG.feMorphology.attlist "INCLUDE" >
+<![%SVG.feMorphology.attlist;[
+<!ATTLIST %SVG.feMorphology.qname;
+    %SVG.Core.attrib;
+    %SVG.FilterColor.attrib;
+    %SVG.FilterPrimitiveWithIn.attrib;
+    operator ( erode | dilate ) 'erode'
+    radius %NumberOptionalNumber.datatype; #IMPLIED
+>
+<!-- end of SVG.feMorphology.attlist -->]]>
+
+<!-- feOffset: Filter Effect Offset Element ............ -->
+
+<!ENTITY % SVG.feOffset.extra.content "" >
+
+<!ENTITY % SVG.feOffset.element "INCLUDE" >
+<![%SVG.feOffset.element;[
+<!ENTITY % SVG.feOffset.content
+    "( %SVG.animate.qname; | %SVG.set.qname; %SVG.feOffset.extra.content; )*"
+>
+<!ELEMENT %SVG.feOffset.qname; %SVG.feOffset.content; >
+<!-- end of SVG.feOffset.element -->]]>
+
+<!ENTITY % SVG.feOffset.attlist "INCLUDE" >
+<![%SVG.feOffset.attlist;[
+<!ATTLIST %SVG.feOffset.qname;
+    %SVG.Core.attrib;
+    %SVG.FilterColor.attrib;
+    %SVG.FilterPrimitiveWithIn.attrib;
+    dx %Number.datatype; #IMPLIED
+    dy %Number.datatype; #IMPLIED
+>
+<!-- end of SVG.feOffset.attlist -->]]>
+
+<!-- feSpecularLighting: Filter Effect Specular Lighting Element -->
+
+<!ENTITY % SVG.feSpecularLighting.extra.content "" >
+
+<!ENTITY % SVG.feSpecularLighting.element "INCLUDE" >
+<![%SVG.feSpecularLighting.element;[
+<!ENTITY % SVG.feSpecularLighting.content
+    "(( %SVG.feDistantLight.qname; | %SVG.fePointLight.qname;
+      | %SVG.feSpotLight.qname; ), ( %SVG.animate.qname; | %SVG.set.qname;
+      | %SVG.animateColor.qname; %SVG.feSpecularLighting.extra.content; )*)"
+>
+<!ELEMENT %SVG.feSpecularLighting.qname; %SVG.feSpecularLighting.content; >
+<!-- end of SVG.feSpecularLighting.element -->]]>
+
+<!ENTITY % SVG.feSpecularLighting.attlist "INCLUDE" >
+<![%SVG.feSpecularLighting.attlist;[
+<!ATTLIST %SVG.feSpecularLighting.qname;
+    %SVG.Core.attrib;
+    %SVG.Style.attrib;
+    %SVG.Color.attrib;
+    %SVG.FilterColor.attrib;
+    %SVG.FilterPrimitiveWithIn.attrib;
+    lighting-color %SVGColor.datatype; #IMPLIED
+    surfaceScale %Number.datatype; #IMPLIED
+    specularConstant %Number.datatype; #IMPLIED
+    specularExponent %Number.datatype; #IMPLIED
+    kernelUnitLength %NumberOptionalNumber.datatype; #IMPLIED
+>
+<!-- end of SVG.feSpecularLighting.attlist -->]]>
+
+<!-- feTile: Filter Effect Tile Element ................ -->
+
+<!ENTITY % SVG.feTile.extra.content "" >
+
+<!ENTITY % SVG.feTile.element "INCLUDE" >
+<![%SVG.feTile.element;[
+<!ENTITY % SVG.feTile.content
+    "( %SVG.animate.qname; | %SVG.set.qname; %SVG.feTile.extra.content; )*"
+>
+<!ELEMENT %SVG.feTile.qname; %SVG.feTile.content; >
+<!-- end of SVG.feTile.element -->]]>
+
+<!ENTITY % SVG.feTile.attlist "INCLUDE" >
+<![%SVG.feTile.attlist;[
+<!ATTLIST %SVG.feTile.qname;
+    %SVG.Core.attrib;
+    %SVG.FilterColor.attrib;
+    %SVG.FilterPrimitiveWithIn.attrib;
+>
+<!-- end of SVG.feTile.attlist -->]]>
+
+<!-- feTurbulence: Filter Effect Turbulence Element .... -->
+
+<!ENTITY % SVG.feTurbulence.extra.content "" >
+
+<!ENTITY % SVG.feTurbulence.element "INCLUDE" >
+<![%SVG.feTurbulence.element;[
+<!ENTITY % SVG.feTurbulence.content
+    "( %SVG.animate.qname; | %SVG.set.qname;
+       %SVG.feTurbulence.extra.content; )*"
+>
+<!ELEMENT %SVG.feTurbulence.qname; %SVG.feTurbulence.content; >
+<!-- end of SVG.feTurbulence.element -->]]>
+
+<!ENTITY % SVG.feTurbulence.attlist "INCLUDE" >
+<![%SVG.feTurbulence.attlist;[
+<!ATTLIST %SVG.feTurbulence.qname;
+    %SVG.Core.attrib;
+    %SVG.FilterColor.attrib;
+    %SVG.FilterPrimitive.attrib;
+    baseFrequency %NumberOptionalNumber.datatype; #IMPLIED
+    numOctaves %Integer.datatype; #IMPLIED
+    seed %Number.datatype; #IMPLIED
+    stitchTiles ( stitch | noStitch ) 'noStitch'
+    type ( fractalNoise | turbulence ) 'turbulence'
+>
+<!-- end of SVG.feTurbulence.attlist -->]]>
+
+<!-- feDistantLight: Filter Effect Distant Light Element -->
+
+<!ENTITY % SVG.feDistantLight.extra.content "" >
+
+<!ENTITY % SVG.feDistantLight.element "INCLUDE" >
+<![%SVG.feDistantLight.element;[
+<!ENTITY % SVG.feDistantLight.content
+    "( %SVG.animate.qname; | %SVG.set.qname;
+       %SVG.feDistantLight.extra.content; )*"
+>
+<!ELEMENT %SVG.feDistantLight.qname; %SVG.feDistantLight.content; >
+<!-- end of SVG.feDistantLight.element -->]]>
+
+<!ENTITY % SVG.feDistantLight.attlist "INCLUDE" >
+<![%SVG.feDistantLight.attlist;[
+<!ATTLIST %SVG.feDistantLight.qname;
+    %SVG.Core.attrib;
+    azimuth %Number.datatype; #IMPLIED
+    elevation %Number.datatype; #IMPLIED
+>
+<!-- end of SVG.feDistantLight.attlist -->]]>
+
+<!-- fePointLight: Filter Effect Point Light Element ... -->
+
+<!ENTITY % SVG.fePointLight.extra.content "" >
+
+<!ENTITY % SVG.fePointLight.element "INCLUDE" >
+<![%SVG.fePointLight.element;[
+<!ENTITY % SVG.fePointLight.content
+    "( %SVG.animate.qname; | %SVG.set.qname;
+       %SVG.fePointLight.extra.content; )*"
+>
+<!ELEMENT %SVG.fePointLight.qname; %SVG.fePointLight.content; >
+<!-- end of SVG.fePointLight.element -->]]>
+
+<!ENTITY % SVG.fePointLight.attlist "INCLUDE" >
+<![%SVG.fePointLight.attlist;[
+<!ATTLIST %SVG.fePointLight.qname;
+    %SVG.Core.attrib;
+    x %Number.datatype; #IMPLIED
+    y %Number.datatype; #IMPLIED
+    z %Number.datatype; #IMPLIED
+>
+<!-- end of SVG.fePointLight.attlist -->]]>
+
+<!-- feSpotLight: Filter Effect Spot Light Element ..... -->
+
+<!ENTITY % SVG.feSpotLight.extra.content "" >
+
+<!ENTITY % SVG.feSpotLight.element "INCLUDE" >
+<![%SVG.feSpotLight.element;[
+<!ENTITY % SVG.feSpotLight.content
+    "( %SVG.animate.qname; | %SVG.set.qname; %SVG.feSpotLight.extra.content; )*"
+>
+<!ELEMENT %SVG.feSpotLight.qname; %SVG.feSpotLight.content; >
+<!-- end of SVG.feSpotLight.element -->]]>
+
+<!ENTITY % SVG.feSpotLight.attlist "INCLUDE" >
+<![%SVG.feSpotLight.attlist;[
+<!ATTLIST %SVG.feSpotLight.qname;
+    %SVG.Core.attrib;
+    x %Number.datatype; #IMPLIED
+    y %Number.datatype; #IMPLIED
+    z %Number.datatype; #IMPLIED
+    pointsAtX %Number.datatype; #IMPLIED
+    pointsAtY %Number.datatype; #IMPLIED
+    pointsAtZ %Number.datatype; #IMPLIED
+    specularExponent %Number.datatype; #IMPLIED
+    limitingConeAngle %Number.datatype; #IMPLIED
+>
+<!-- end of SVG.feSpotLight.attlist -->]]>
+
+<!-- feFuncR: Filter Effect Function Red Element ....... -->
+
+<!ENTITY % SVG.feFuncR.extra.content "" >
+
+<!ENTITY % SVG.feFuncR.element "INCLUDE" >
+<![%SVG.feFuncR.element;[
+<!ENTITY % SVG.feFuncR.content
+    "( %SVG.animate.qname; | %SVG.set.qname; %SVG.feFuncR.extra.content; )*"
+>
+<!ELEMENT %SVG.feFuncR.qname; %SVG.feFuncR.content; >
+<!-- end of SVG.feFuncR.element -->]]>
+
+<!ENTITY % SVG.feFuncR.attlist "INCLUDE" >
+<![%SVG.feFuncR.attlist;[
+<!ATTLIST %SVG.feFuncR.qname;
+    %SVG.Core.attrib;
+    type ( identity | table | discrete | linear | gamma ) #REQUIRED
+    tableValues CDATA #IMPLIED
+    slope %Number.datatype; #IMPLIED
+    intercept %Number.datatype; #IMPLIED
+    amplitude %Number.datatype; #IMPLIED
+    exponent %Number.datatype; #IMPLIED
+    offset %Number.datatype; #IMPLIED
+>
+<!-- end of SVG.feFuncR.attlist -->]]>
+
+<!-- feFuncG: Filter Effect Function Green Element ..... -->
+
+<!ENTITY % SVG.feFuncG.extra.content "" >
+
+<!ENTITY % SVG.feFuncG.element "INCLUDE" >
+<![%SVG.feFuncG.element;[
+<!ENTITY % SVG.feFuncG.content
+    "( %SVG.animate.qname; | %SVG.set.qname; %SVG.feFuncG.extra.content; )*"
+>
+<!ELEMENT %SVG.feFuncG.qname; %SVG.feFuncG.content; >
+<!-- end of SVG.feFuncG.element -->]]>
+
+<!ENTITY % SVG.feFuncG.attlist "INCLUDE" >
+<![%SVG.feFuncG.attlist;[
+<!ATTLIST %SVG.feFuncG.qname;
+    %SVG.Core.attrib;
+    type ( identity | table | discrete | linear | gamma ) #REQUIRED
+    tableValues CDATA #IMPLIED
+    slope %Number.datatype; #IMPLIED
+    intercept %Number.datatype; #IMPLIED
+    amplitude %Number.datatype; #IMPLIED
+    exponent %Number.datatype; #IMPLIED
+    offset %Number.datatype; #IMPLIED
+>
+<!-- end of SVG.feFuncG.attlist -->]]>
+
+<!-- feFuncB: Filter Effect Function Blue Element ...... -->
+
+<!ENTITY % SVG.feFuncB.extra.content "" >
+
+<!ENTITY % SVG.feFuncB.element "INCLUDE" >
+<![%SVG.feFuncB.element;[
+<!ENTITY % SVG.feFuncB.content
+    "( %SVG.animate.qname; | %SVG.set.qname; %SVG.feFuncB.extra.content; )*"
+>
+<!ELEMENT %SVG.feFuncB.qname; %SVG.feFuncB.content; >
+<!-- end of SVG.feFuncB.element -->]]>
+
+<!ENTITY % SVG.feFuncB.attlist "INCLUDE" >
+<![%SVG.feFuncB.attlist;[
+<!ATTLIST %SVG.feFuncB.qname;
+    %SVG.Core.attrib;
+    type ( identity | table | discrete | linear | gamma ) #REQUIRED
+    tableValues CDATA #IMPLIED
+    slope %Number.datatype; #IMPLIED
+    intercept %Number.datatype; #IMPLIED
+    amplitude %Number.datatype; #IMPLIED
+    exponent %Number.datatype; #IMPLIED
+    offset %Number.datatype; #IMPLIED
+>
+<!-- end of SVG.feFuncB.attlist -->]]>
+
+<!-- feFuncA: Filter Effect Function Alpha Element ..... -->
+
+<!ENTITY % SVG.feFuncA.extra.content "" >
+
+<!ENTITY % SVG.feFuncA.element "INCLUDE" >
+<![%SVG.feFuncA.element;[
+<!ENTITY % SVG.feFuncA.content
+    "( %SVG.animate.qname; | %SVG.set.qname; %SVG.feFuncA.extra.content; )*"
+>
+<!ELEMENT %SVG.feFuncA.qname; %SVG.feFuncA.content; >
+<!-- end of SVG.feFuncA.element -->]]>
+
+<!ENTITY % SVG.feFuncA.attlist "INCLUDE" >
+<![%SVG.feFuncA.attlist;[
+<!ATTLIST %SVG.feFuncA.qname;
+    %SVG.Core.attrib;
+    type ( identity | table | discrete | linear | gamma ) #REQUIRED
+    tableValues CDATA #IMPLIED
+    slope %Number.datatype; #IMPLIED
+    intercept %Number.datatype; #IMPLIED
+    amplitude %Number.datatype; #IMPLIED
+    exponent %Number.datatype; #IMPLIED
+    offset %Number.datatype; #IMPLIED
+>
+<!-- end of SVG.feFuncA.attlist -->]]>
+
+<!-- end of svg-filter.mod -->
+]]>
+
+<!-- Cursor Module ............................................... -->
+<!ENTITY % svg-cursor.module "INCLUDE" >
+<![%svg-cursor.module;[
+<!ENTITY % svg-cursor.mod
+    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Cursor//EN"
+           "svg-cursor.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Cursor Module ................................................. -->
+<!-- file: svg-cursor.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-cursor.mod,v 1.3 2002/10/24 17:40:15 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ELEMENTS SVG 1.1 Cursor//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-cursor.mod"
+
+     ....................................................................... -->
+
+<!-- Cursor
+
+        cursor
+
+     This module declares markup to provide support for cursor.
+-->
+
+<!-- 'cursor' property/attribute value (e.g., 'crosshair', <uri>) -->
+<!ENTITY % CursorValue.datatype "CDATA" >
+
+<!-- Qualified Names (Default) ......................... -->
+
+<!ENTITY % SVG.cursor.qname "cursor" >
+
+<!-- Attribute Collections (Default) ................... -->
+
+<!ENTITY % SVG.Core.attrib "" >
+<!ENTITY % SVG.Conditional.attrib "" >
+<!ENTITY % SVG.XLinkRequired.attrib "" >
+<!ENTITY % SVG.External.attrib "" >
+
+<!-- SVG.Cursor.class .................................. -->
+
+<!ENTITY % SVG.Cursor.extra.class "" >
+
+<!ENTITY % SVG.Cursor.class
+    "| %SVG.cursor.qname; %SVG.Cursor.extra.class;"
+>
+
+<!-- SVG.Cursor.attrib ................................. -->
+
+<!ENTITY % SVG.Cursor.extra.attrib "" >
+
+<!ENTITY % SVG.Cursor.attrib
+    "cursor %CursorValue.datatype; #IMPLIED
+     %SVG.Cursor.extra.attrib;"
+>
+
+<!-- cursor: Cursor Element ............................ -->
+
+<!ENTITY % SVG.cursor.extra.content "" >
+
+<!ENTITY % SVG.cursor.element "INCLUDE" >
+<![%SVG.cursor.element;[
+<!ENTITY % SVG.cursor.content
+    "( %SVG.Description.class; %SVG.cursor.extra.content; )*"
+>
+<!ELEMENT %SVG.cursor.qname; %SVG.cursor.content; >
+<!-- end of SVG.cursor.element -->]]>
+
+<!ENTITY % SVG.cursor.attlist "INCLUDE" >
+<![%SVG.cursor.attlist;[
+<!ATTLIST %SVG.cursor.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.XLinkRequired.attrib;
+    %SVG.External.attrib;
+    x %Coordinate.datatype; #IMPLIED
+    y %Coordinate.datatype; #IMPLIED
+>
+<!-- end of SVG.cursor.attlist -->]]>
+
+<!-- end of svg-cursor.mod -->
+]]>
+
+<!-- Hyperlinking Module ......................................... -->
+<!ENTITY % svg-hyperlink.module "INCLUDE" >
+<![%svg-hyperlink.module;[
+<!ENTITY % svg-hyperlink.mod
+    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Hyperlinking//EN"
+           "svg-hyperlink.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Hyperlinking Module ........................................... -->
+<!-- file: svg-hyperlink.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-hyperlink.mod,v 1.4 2002/11/14 15:11:02 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ELEMENTS SVG 1.1 Hyperlinking//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-hyperlink.mod"
+
+     ....................................................................... -->
+
+<!-- Hyperlinking
+
+        a
+
+     This module declares markup to provide support for hyper linking.
+-->
+
+<!-- link to this target -->
+<!ENTITY % LinkTarget.datatype "NMTOKEN" >
+
+<!-- Qualified Names (Default) ......................... -->
+
+<!ENTITY % SVG.a.qname "a" >
+
+<!-- Attribute Collections (Default) ................... -->
+
+<!ENTITY % SVG.Core.attrib "" >
+<!ENTITY % SVG.Conditional.attrib "" >
+<!ENTITY % SVG.Style.attrib "" >
+<!ENTITY % SVG.Viewport.attrib "" >
+<!ENTITY % SVG.Text.attrib "" >
+<!ENTITY % SVG.TextContent.attrib "" >
+<!ENTITY % SVG.Font.attrib "" >
+<!ENTITY % SVG.Paint.attrib "" >
+<!ENTITY % SVG.Color.attrib "" >
+<!ENTITY % SVG.Opacity.attrib "" >
+<!ENTITY % SVG.Graphics.attrib "" >
+<!ENTITY % SVG.Marker.attrib "" >
+<!ENTITY % SVG.Gradient.attrib "" >
+<!ENTITY % SVG.Clip.attrib "" >
+<!ENTITY % SVG.Mask.attrib "" >
+<!ENTITY % SVG.Filter.attrib "" >
+<!ENTITY % SVG.FilterColor.attrib "" >
+<!ENTITY % SVG.GraphicalEvents.attrib "" >
+<!ENTITY % SVG.Cursor.attrib "" >
+<!ENTITY % SVG.XLinkReplace.attrib "" >
+<!ENTITY % SVG.External.attrib "" >
+
+<!-- SVG.Hyperlink.class ............................... -->
+
+<!ENTITY % SVG.Hyperlink.extra.class "" >
+
+<!ENTITY % SVG.Hyperlink.class
+    "| %SVG.a.qname; %SVG.Hyperlink.extra.class;"
+>
+
+<!-- SVG.Presentation.attrib ........................... -->
+
+<!ENTITY % SVG.Presentation.extra.attrib "" >
+
+<!ENTITY % SVG.Presentation.attrib
+    "%SVG.Container.attrib;
+     %SVG.Viewport.attrib;
+     %SVG.Text.attrib;
+     %SVG.TextContent.attrib;
+     %SVG.Font.attrib;
+     %SVG.Paint.attrib;
+     %SVG.Color.attrib;
+     %SVG.Opacity.attrib;
+     %SVG.Graphics.attrib;
+     %SVG.Marker.attrib;
+     %SVG.ColorProfile.attrib;
+     %SVG.Gradient.attrib;
+     %SVG.Clip.attrib;
+     %SVG.Mask.attrib;
+     %SVG.Filter.attrib;
+     %SVG.FilterColor.attrib;
+     %SVG.Cursor.attrib;
+     flood-color %SVGColor.datatype; #IMPLIED
+     flood-opacity %OpacityValue.datatype; #IMPLIED
+     lighting-color %SVGColor.datatype; #IMPLIED
+     %SVG.Presentation.extra.attrib;"
+>
+
+<!-- a: Anchor Element ................................. -->
+
+<!ENTITY % SVG.a.extra.content "" >
+
+<!ENTITY % SVG.a.element "INCLUDE" >
+<![%SVG.a.element;[
+<!ENTITY % SVG.a.content
+    "( #PCDATA | %SVG.Description.class; | %SVG.Animation.class;
+       %SVG.Structure.class; %SVG.Conditional.class; %SVG.Image.class;
+       %SVG.Style.class; %SVG.Shape.class; %SVG.Text.class; %SVG.Marker.class;
+       %SVG.ColorProfile.class; %SVG.Gradient.class; %SVG.Pattern.class;
+       %SVG.Clip.class; %SVG.Mask.class; %SVG.Filter.class; %SVG.Cursor.class;
+       %SVG.Hyperlink.class; %SVG.View.class; %SVG.Script.class;
+       %SVG.Font.class; %SVG.a.extra.content; )*"
+>
+<!ELEMENT %SVG.a.qname; %SVG.a.content; >
+<!-- end of SVG.a.element -->]]>
+
+<!ENTITY % SVG.a.attlist "INCLUDE" >
+<![%SVG.a.attlist;[
+<!ATTLIST %SVG.a.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.Style.attrib;
+    %SVG.Presentation.attrib;
+    %SVG.GraphicalEvents.attrib;
+    %SVG.XLinkReplace.attrib;
+    %SVG.External.attrib;
+    transform %TransformList.datatype; #IMPLIED
+    target %LinkTarget.datatype; #IMPLIED
+>
+<!-- end of SVG.a.attlist -->]]>
+
+<!-- end of svg-hyperlink.mod -->
+]]>
+
+<!-- View Module ................................................. -->
+<!ENTITY % svg-view.module "INCLUDE" >
+<![%svg-view.module;[
+<!ENTITY % svg-view.mod
+    PUBLIC "-//W3C//ELEMENTS SVG 1.1 View//EN"
+           "svg-view.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 View Module ................................................... -->
+<!-- file: svg-view.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-view.mod,v 1.3 2002/10/24 17:40:16 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ELEMENTS SVG 1.1 View//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-view.mod"
+
+     ....................................................................... -->
+
+<!-- View
+
+        view
+
+     This module declares markup to provide support for view.
+-->
+
+<!-- Qualified Names (Default) ......................... -->
+
+<!ENTITY % SVG.view.qname "view" >
+
+<!-- Attribute Collections (Default) ................... -->
+
+<!ENTITY % SVG.Core.attrib "" >
+<!ENTITY % SVG.External.attrib "" >
+
+<!-- SVG.View.class .................................... -->
+
+<!ENTITY % SVG.View.extra.class "" >
+
+<!ENTITY % SVG.View.class
+    "| %SVG.view.qname; %SVG.View.extra.class;"
+>
+
+<!-- view: View Element ................................ -->
+
+<!ENTITY % SVG.view.extra.content "" >
+
+<!ENTITY % SVG.view.element "INCLUDE" >
+<![%SVG.view.element;[
+<!ENTITY % SVG.view.content
+    "( %SVG.Description.class; %SVG.view.extra.content; )*"
+>
+<!ELEMENT %SVG.view.qname; %SVG.view.content; >
+<!-- end of SVG.view.element -->]]>
+
+<!ENTITY % SVG.view.attlist "INCLUDE" >
+<![%SVG.view.attlist;[
+<!ATTLIST %SVG.view.qname;
+    %SVG.Core.attrib;
+    %SVG.External.attrib;
+    viewBox %ViewBoxSpec.datatype; #IMPLIED
+    preserveAspectRatio %PreserveAspectRatioSpec.datatype; 'xMidYMid meet'
+    zoomAndPan ( disable | magnify ) 'magnify'
+    viewTarget CDATA #IMPLIED
+>
+<!-- end of SVG.view.attlist -->]]>
+
+<!-- end of svg-view.mod -->
+]]>
+
+<!-- Scripting Module ............................................ -->
+<!ENTITY % svg-script.module "INCLUDE" >
+<![%svg-script.module;[
+<!ENTITY % svg-script.mod
+    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Scripting//EN"
+           "svg-script.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Scripting Module .............................................. -->
+<!-- file: svg-script.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-script.mod,v 1.3 2002/10/24 17:40:16 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ELEMENTS SVG 1.1 Scripting//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-script.mod"
+
+     ....................................................................... -->
+
+<!-- Scripting
+
+        script
+
+     This module declares markup to provide support for scripting.
+-->
+
+<!-- Qualified Names (Default) ......................... -->
+
+<!ENTITY % SVG.script.qname "script" >
+
+<!-- Attribute Collections (Default) ................... -->
+
+<!ENTITY % SVG.Core.attrib "" >
+<!ENTITY % SVG.XLink.attrib "" >
+<!ENTITY % SVG.External.attrib "" >
+
+<!-- SVG.Script.class .................................. -->
+
+<!ENTITY % SVG.Script.extra.class "" >
+
+<!ENTITY % SVG.Script.class
+    "| %SVG.script.qname; %SVG.Script.extra.class;"
+>
+
+<!-- script: Script Element ............................ -->
+
+<!ENTITY % SVG.script.extra.content "" >
+
+<!ENTITY % SVG.script.element "INCLUDE" >
+<![%SVG.script.element;[
+<!ENTITY % SVG.script.content
+    "( #PCDATA %SVG.script.extra.content; )*"
+>
+<!ELEMENT %SVG.script.qname; %SVG.script.content; >
+<!-- end of SVG.script.element -->]]>
+
+<!ENTITY % SVG.script.attlist "INCLUDE" >
+<![%SVG.script.attlist;[
+<!ATTLIST %SVG.script.qname;
+    %SVG.Core.attrib;
+    %SVG.XLink.attrib;
+    %SVG.External.attrib;
+    type %ContentType.datatype; #REQUIRED
+>
+<!-- end of SVG.script.attlist -->]]>
+
+<!-- end of svg-script.mod -->
+]]>
+
+<!-- Animation Module ............................................ -->
+<!ENTITY % svg-animation.module "INCLUDE" >
+<![%svg-animation.module;[
+<!ENTITY % svg-animation.mod
+    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Animation//EN"
+           "svg-animation.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Animation Module .............................................. -->
+<!-- file: svg-animation.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-animation.mod,v 1.3 2002/10/24 17:40:14 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ELEMENTS SVG 1.1 Animation//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-animation.mod"
+
+     ....................................................................... -->
+
+<!-- Animation
+
+        animate, set, animateMotion, animateColor, animateTransform, mpath
+
+     This module declares markup to provide support for animation.
+-->
+
+<!-- Qualified Names (Default) ......................... -->
+
+<!ENTITY % SVG.animate.qname "animate" >
+<!ENTITY % SVG.set.qname "set" >
+<!ENTITY % SVG.animateMotion.qname "animateMotion" >
+<!ENTITY % SVG.animateColor.qname "animateColor" >
+<!ENTITY % SVG.animateTransform.qname "animateTransform" >
+<!ENTITY % SVG.mpath.qname "mpath" >
+
+<!-- Attribute Collections (Default) ................... -->
+
+<!ENTITY % SVG.Core.attrib "" >
+<!ENTITY % SVG.Conditional.attrib "" >
+<!ENTITY % SVG.AnimationEvents.attrib "" >
+<!ENTITY % SVG.XLink.attrib "" >
+<!ENTITY % SVG.XLinkRequired.attrib "" >
+<!ENTITY % SVG.External.attrib "" >
+
+<!-- SVG.Animation.class ............................... -->
+
+<!ENTITY % SVG.Animation.extra.class "" >
+
+<!ENTITY % SVG.Animation.class
+    "%SVG.animate.qname; | %SVG.set.qname; | %SVG.animateMotion.qname; |
+     %SVG.animateColor.qname; | %SVG.animateTransform.qname;
+     %SVG.Animation.extra.class;"
+>
+
+<!-- SVG.Animation.attrib .............................. -->
+
+<!ENTITY % SVG.Animation.extra.attrib "" >
+
+<!ENTITY % SVG.Animation.attrib
+    "%SVG.XLink.attrib;
+     %SVG.Animation.extra.attrib;"
+>
+
+<!-- SVG.AnimationAttribute.attrib ..................... -->
+
+<!ENTITY % SVG.AnimationAttribute.extra.attrib "" >
+
+<!ENTITY % SVG.AnimationAttribute.attrib
+    "attributeName  CDATA  #REQUIRED
+     attributeType  CDATA  #IMPLIED
+     %SVG.AnimationAttribute.extra.attrib;"
+>
+
+<!-- SVG.AnimationTiming.attrib ........................ -->
+
+<!ENTITY % SVG.AnimationTiming.extra.attrib "" >
+
+<!ENTITY % SVG.AnimationTiming.attrib
+    "begin CDATA #IMPLIED
+     dur CDATA #IMPLIED
+     end CDATA #IMPLIED
+     min CDATA #IMPLIED
+     max CDATA #IMPLIED
+     restart ( always | never | whenNotActive ) 'always'
+     repeatCount CDATA #IMPLIED
+     repeatDur CDATA #IMPLIED
+     fill ( remove | freeze ) 'remove'
+     %SVG.AnimationTiming.extra.attrib;"
+>
+
+<!-- SVG.AnimationValue.attrib ......................... -->
+
+<!ENTITY % SVG.AnimationValue.extra.attrib "" >
+
+<!ENTITY % SVG.AnimationValue.attrib
+    "calcMode ( discrete | linear | paced | spline ) 'linear'
+     values CDATA #IMPLIED
+     keyTimes CDATA #IMPLIED
+     keySplines CDATA #IMPLIED
+     from CDATA #IMPLIED
+     to CDATA #IMPLIED
+     by CDATA #IMPLIED
+     %SVG.AnimationValue.extra.attrib;"
+>
+
+<!-- SVG.AnimationAddtion.attrib ....................... -->
+
+<!ENTITY % SVG.AnimationAddtion.extra.attrib "" >
+
+<!ENTITY % SVG.AnimationAddtion.attrib
+    "additive ( replace | sum ) 'replace'
+     accumulate ( none | sum ) 'none'
+     %SVG.AnimationAddtion.extra.attrib;"
+>
+
+<!-- animate: Animate Element .......................... -->
+
+<!ENTITY % SVG.animate.extra.content "" >
+
+<!ENTITY % SVG.animate.element "INCLUDE" >
+<![%SVG.animate.element;[
+<!ENTITY % SVG.animate.content
+    "( %SVG.Description.class; %SVG.animate.extra.content; )*"
+>
+<!ELEMENT %SVG.animate.qname; %SVG.animate.content; >
+<!-- end of SVG.animate.element -->]]>
+
+<!ENTITY % SVG.animate.attlist "INCLUDE" >
+<![%SVG.animate.attlist;[
+<!ATTLIST %SVG.animate.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.AnimationEvents.attrib;
+    %SVG.External.attrib;
+    %SVG.Animation.attrib;
+    %SVG.AnimationAttribute.attrib;
+    %SVG.AnimationTiming.attrib;
+    %SVG.AnimationValue.attrib;
+    %SVG.AnimationAddtion.attrib;
+>
+<!-- end of SVG.animate.attlist -->]]>
+
+<!-- set: Set Element .................................. -->
+
+<!ENTITY % SVG.set.extra.content "" >
+
+<!ENTITY % SVG.set.element "INCLUDE" >
+<![%SVG.set.element;[
+<!ENTITY % SVG.set.content
+    "( %SVG.Description.class; %SVG.set.extra.content; )*"
+>
+<!ELEMENT %SVG.set.qname; %SVG.set.content; >
+<!-- end of SVG.set.element -->]]>
+
+<!ENTITY % SVG.set.attlist "INCLUDE" >
+<![%SVG.set.attlist;[
+<!ATTLIST %SVG.set.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.AnimationEvents.attrib;
+    %SVG.External.attrib;
+    %SVG.Animation.attrib;
+    %SVG.AnimationAttribute.attrib;
+    %SVG.AnimationTiming.attrib;
+    to CDATA #IMPLIED
+>
+<!-- end of SVG.set.attlist -->]]>
+
+<!-- animateMotion: Animate Motion Element ............. -->
+
+<!ENTITY % SVG.animateMotion.extra.content "" >
+
+<!ENTITY % SVG.animateMotion.element "INCLUDE" >
+<![%SVG.animateMotion.element;[
+<!ENTITY % SVG.animateMotion.content
+    "(( %SVG.Description.class; )*, %SVG.mpath.qname;?
+        %SVG.animateMotion.extra.content; )"
+>
+<!ELEMENT %SVG.animateMotion.qname; %SVG.animateMotion.content; >
+<!-- end of SVG.animateMotion.element -->]]>
+
+<!ENTITY % SVG.animateMotion.attlist "INCLUDE" >
+<![%SVG.animateMotion.attlist;[
+<!ATTLIST %SVG.animateMotion.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.AnimationEvents.attrib;
+    %SVG.External.attrib;
+    %SVG.Animation.attrib;
+    %SVG.AnimationTiming.attrib;
+    %SVG.AnimationAddtion.attrib;
+    calcMode ( discrete | linear | paced | spline ) 'paced'
+    values CDATA #IMPLIED
+    keyTimes CDATA #IMPLIED
+    keySplines CDATA #IMPLIED
+    from CDATA #IMPLIED
+    to CDATA #IMPLIED
+    by CDATA #IMPLIED
+    path CDATA #IMPLIED
+    keyPoints CDATA #IMPLIED
+    rotate CDATA #IMPLIED
+    origin CDATA #IMPLIED
+>
+<!-- end of SVG.animateMotion.attlist -->]]>
+
+<!-- animateColor: Animate Color Element ............... -->
+
+<!ENTITY % SVG.animateColor.extra.content "" >
+
+<!ENTITY % SVG.animateColor.element "INCLUDE" >
+<![%SVG.animateColor.element;[
+<!ENTITY % SVG.animateColor.content
+    "( %SVG.Description.class; %SVG.animateColor.extra.content; )*"
+>
+<!ELEMENT %SVG.animateColor.qname; %SVG.animateColor.content; >
+<!-- end of SVG.animateColor.element -->]]>
+
+<!ENTITY % SVG.animateColor.attlist "INCLUDE" >
+<![%SVG.animateColor.attlist;[
+<!ATTLIST %SVG.animateColor.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.AnimationEvents.attrib;
+    %SVG.External.attrib;
+    %SVG.Animation.attrib;
+    %SVG.AnimationAttribute.attrib;
+    %SVG.AnimationTiming.attrib;
+    %SVG.AnimationValue.attrib;
+    %SVG.AnimationAddtion.attrib;
+>
+<!-- end of SVG.animateColor.attlist -->]]>
+
+<!-- animateTransform: Animate Transform Element ....... -->
+
+<!ENTITY % SVG.animateTransform.extra.content "" >
+
+<!ENTITY % SVG.animateTransform.element "INCLUDE" >
+<![%SVG.animateTransform.element;[
+<!ENTITY % SVG.animateTransform.content
+    "( %SVG.Description.class; %SVG.animateTransform.extra.content; )*"
+>
+<!ELEMENT %SVG.animateTransform.qname; %SVG.animateTransform.content; >
+<!-- end of SVG.animateTransform.element -->]]>
+
+<!ENTITY % SVG.animateTransform.attlist "INCLUDE" >
+<![%SVG.animateTransform.attlist;[
+<!ATTLIST %SVG.animateTransform.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.AnimationEvents.attrib;
+    %SVG.External.attrib;
+    %SVG.Animation.attrib;
+    %SVG.AnimationAttribute.attrib;
+    %SVG.AnimationTiming.attrib;
+    %SVG.AnimationValue.attrib;
+    %SVG.AnimationAddtion.attrib;
+    type ( translate | scale | rotate | skewX | skewY ) 'translate'
+>
+<!-- end of SVG.animateTransform.attlist -->]]>
+
+<!-- mpath: Motion Path Element ........................ -->
+
+<!ENTITY % SVG.mpath.extra.content "" >
+
+<!ENTITY % SVG.mpath.element "INCLUDE" >
+<![%SVG.mpath.element;[
+<!ENTITY % SVG.mpath.content
+    "( %SVG.Description.class; %SVG.mpath.extra.content; )*"
+>
+<!ELEMENT %SVG.mpath.qname; %SVG.mpath.content; >
+<!-- end of SVG.mpath.element -->]]>
+
+<!ENTITY % SVG.mpath.attlist "INCLUDE" >
+<![%SVG.mpath.attlist;[
+<!ATTLIST %SVG.mpath.qname;
+    %SVG.Core.attrib;
+    %SVG.XLinkRequired.attrib;
+    %SVG.External.attrib;
+>
+<!-- end of SVG.mpath.attlist -->]]>
+
+<!-- end of svg-animation.mod -->
+]]>
+
+<!-- Font Module ................................................. -->
+<!ENTITY % svg-font.module "INCLUDE" >
+<![%svg-font.module;[
+<!ENTITY % svg-font.mod
+    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Font//EN"
+           "svg-font.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Font Module ................................................... -->
+<!-- file: svg-font.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-font.mod,v 1.4 2002/11/14 15:11:02 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ELEMENTS SVG 1.1 Font//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-font.mod"
+
+     ....................................................................... -->
+
+<!-- Font
+
+        font, font-face, glyph, missing-glyph, hkern, vkern, font-face-src,
+        font-face-uri, font-face-format, font-face-name, definition-src
+
+     This module declares markup to provide support for template.
+-->
+
+<!-- Qualified Names (Default) ......................... -->
+
+<!ENTITY % SVG.font.qname "font" >
+<!ENTITY % SVG.font-face.qname "font-face" >
+<!ENTITY % SVG.glyph.qname "glyph" >
+<!ENTITY % SVG.missing-glyph.qname "missing-glyph" >
+<!ENTITY % SVG.hkern.qname "hkern" >
+<!ENTITY % SVG.vkern.qname "vkern" >
+<!ENTITY % SVG.font-face-src.qname "font-face-src" >
+<!ENTITY % SVG.font-face-uri.qname "font-face-uri" >
+<!ENTITY % SVG.font-face-format.qname "font-face-format" >
+<!ENTITY % SVG.font-face-name.qname "font-face-name" >
+<!ENTITY % SVG.definition-src.qname "definition-src" >
+
+<!-- Attribute Collections (Default) ................... -->
+
+<!ENTITY % SVG.Core.attrib "" >
+<!ENTITY % SVG.Container.attrib "" >
+<!ENTITY % SVG.Style.attrib "" >
+<!ENTITY % SVG.Viewport.attrib "" >
+<!ENTITY % SVG.Text.attrib "" >
+<!ENTITY % SVG.TextContent.attrib "" >
+<!ENTITY % SVG.Font.attrib "" >
+<!ENTITY % SVG.Paint.attrib "" >
+<!ENTITY % SVG.Color.attrib "" >
+<!ENTITY % SVG.Opacity.attrib "" >
+<!ENTITY % SVG.Graphics.attrib "" >
+<!ENTITY % SVG.Marker.attrib "" >
+<!ENTITY % SVG.ColorProfile.attrib "" >
+<!ENTITY % SVG.Gradient.attrib "" >
+<!ENTITY % SVG.Clip.attrib "" >
+<!ENTITY % SVG.Mask.attrib "" >
+<!ENTITY % SVG.Filter.attrib "" >
+<!ENTITY % SVG.FilterColor.attrib "" >
+<!ENTITY % SVG.Cursor.attrib "" >
+<!ENTITY % SVG.XLinkRequired.attrib "" >
+<!ENTITY % SVG.External.attrib "" >
+
+<!-- SVG.Font.class .................................... -->
+
+<!ENTITY % SVG.Font.extra.class "" >
+
+<!ENTITY % SVG.Font.class
+    "| %SVG.font.qname; | %SVG.font-face.qname; %SVG.Font.extra.class;"
+>
+
+<!-- SVG.Presentation.attrib ........................... -->
+
+<!ENTITY % SVG.Presentation.extra.attrib "" >
+
+<!ENTITY % SVG.Presentation.attrib
+    "%SVG.Container.attrib;
+     %SVG.Viewport.attrib;
+     %SVG.Text.attrib;
+     %SVG.TextContent.attrib;
+     %SVG.Font.attrib;
+     %SVG.Paint.attrib;
+     %SVG.Color.attrib;
+     %SVG.Opacity.attrib;
+     %SVG.Graphics.attrib;
+     %SVG.Marker.attrib;
+     %SVG.ColorProfile.attrib;
+     %SVG.Gradient.attrib;
+     %SVG.Clip.attrib;
+     %SVG.Mask.attrib;
+     %SVG.Filter.attrib;
+     %SVG.FilterColor.attrib;
+     %SVG.Cursor.attrib;
+     flood-color %SVGColor.datatype; #IMPLIED
+     flood-opacity %OpacityValue.datatype; #IMPLIED
+     lighting-color %SVGColor.datatype; #IMPLIED
+     %SVG.Presentation.extra.attrib;"
+>
+
+<!-- font: Font Element ................................ -->
+
+<!ENTITY % SVG.font.extra.content "" >
+
+<!ENTITY % SVG.font.element "INCLUDE" >
+<![%SVG.font.element;[
+<!ENTITY % SVG.font.content
+    "(( %SVG.Description.class; )*, %SVG.font-face.qname;,
+        %SVG.missing-glyph.qname;, ( %SVG.glyph.qname; | %SVG.hkern.qname;
+      | %SVG.vkern.qname; %SVG.font.extra.content; )*)"
+>
+<!ELEMENT %SVG.font.qname; %SVG.font.content; >
+<!-- end of SVG.font.element -->]]>
+
+<!ENTITY % SVG.font.attlist "INCLUDE" >
+<![%SVG.font.attlist;[
+<!ATTLIST %SVG.font.qname;
+    %SVG.Core.attrib;
+    %SVG.Style.attrib;
+    %SVG.Presentation.attrib;
+    %SVG.External.attrib;
+    horiz-origin-x %Number.datatype; #IMPLIED
+    horiz-origin-y %Number.datatype; #IMPLIED
+    horiz-adv-x %Number.datatype; #REQUIRED
+    vert-origin-x %Number.datatype; #IMPLIED
+    vert-origin-y %Number.datatype; #IMPLIED
+    vert-adv-y %Number.datatype; #IMPLIED
+>
+<!-- end of SVG.font.attlist -->]]>
+
+<!-- font-face: Font Face Element ...................... -->
+
+<!ENTITY % SVG.font-face.extra.content "" >
+
+<!ENTITY % SVG.font-face.element "INCLUDE" >
+<![%SVG.font-face.element;[
+<!ENTITY % SVG.font-face.content
+    "(( %SVG.Description.class; )*, %SVG.font-face-src.qname;?,
+        %SVG.definition-src.qname;? %SVG.font-face.extra.content; )"
+>
+<!ELEMENT %SVG.font-face.qname; %SVG.font-face.content; >
+<!-- end of SVG.font-face.element -->]]>
+
+<!ENTITY % SVG.font-face.attlist "INCLUDE" >
+<![%SVG.font-face.attlist;[
+<!ATTLIST %SVG.font-face.qname;
+    %SVG.Core.attrib;
+    font-family CDATA #IMPLIED
+    font-style CDATA #IMPLIED
+    font-variant CDATA #IMPLIED
+    font-weight CDATA #IMPLIED
+    font-stretch CDATA #IMPLIED
+    font-size CDATA #IMPLIED
+    unicode-range CDATA #IMPLIED
+    units-per-em %Number.datatype; #IMPLIED
+    panose-1 CDATA #IMPLIED
+    stemv %Number.datatype; #IMPLIED
+    stemh %Number.datatype; #IMPLIED
+    slope %Number.datatype; #IMPLIED
+    cap-height %Number.datatype; #IMPLIED
+    x-height %Number.datatype; #IMPLIED
+    accent-height %Number.datatype; #IMPLIED
+    ascent %Number.datatype; #IMPLIED
+    descent %Number.datatype; #IMPLIED
+    widths CDATA #IMPLIED
+    bbox CDATA #IMPLIED
+    ideographic %Number.datatype; #IMPLIED
+    alphabetic %Number.datatype; #IMPLIED
+    mathematical %Number.datatype; #IMPLIED
+    hanging %Number.datatype; #IMPLIED
+    v-ideographic %Number.datatype; #IMPLIED
+    v-alphabetic %Number.datatype; #IMPLIED
+    v-mathematical %Number.datatype; #IMPLIED
+    v-hanging %Number.datatype; #IMPLIED
+    underline-position %Number.datatype; #IMPLIED
+    underline-thickness %Number.datatype; #IMPLIED
+    strikethrough-position %Number.datatype; #IMPLIED
+    strikethrough-thickness %Number.datatype; #IMPLIED
+    overline-position %Number.datatype; #IMPLIED
+    overline-thickness %Number.datatype; #IMPLIED
+>
+<!-- end of SVG.font-face.attlist -->]]>
+
+<!-- glyph: Glyph Element .............................. -->
+
+<!ENTITY % SVG.glyph.extra.content "" >
+
+<!ENTITY % SVG.glyph.element "INCLUDE" >
+<![%SVG.glyph.element;[
+<!ENTITY % SVG.glyph.content
+    "( %SVG.Description.class; | %SVG.Animation.class; %SVG.Structure.class;
+       %SVG.Conditional.class; %SVG.Image.class; %SVG.Style.class;
+       %SVG.Shape.class; %SVG.Text.class; %SVG.Marker.class;
+       %SVG.ColorProfile.class; %SVG.Gradient.class; %SVG.Pattern.class;
+       %SVG.Clip.class; %SVG.Mask.class; %SVG.Filter.class; %SVG.Cursor.class;
+       %SVG.Hyperlink.class; %SVG.View.class; %SVG.Script.class;
+       %SVG.Font.class; %SVG.glyph.extra.content; )*"
+>
+<!ELEMENT %SVG.glyph.qname; %SVG.glyph.content; >
+<!-- end of SVG.glyph.element -->]]>
+
+<!ENTITY % SVG.glyph.attlist "INCLUDE" >
+<![%SVG.glyph.attlist;[
+<!ATTLIST %SVG.glyph.qname;
+    %SVG.Core.attrib;
+    %SVG.Style.attrib;
+    %SVG.Presentation.attrib;
+    unicode CDATA #IMPLIED
+    glyph-name CDATA #IMPLIED
+    d %PathData.datatype; #IMPLIED
+    orientation CDATA #IMPLIED
+    arabic-form CDATA #IMPLIED
+    lang %LanguageCodes.datatype; #IMPLIED
+    horiz-adv-x %Number.datatype; #IMPLIED
+    vert-origin-x %Number.datatype; #IMPLIED
+    vert-origin-y %Number.datatype; #IMPLIED
+    vert-adv-y %Number.datatype; #IMPLIED
+>
+<!-- end of SVG.glyph.attlist -->]]>
+
+<!-- missing-glyph: Missing Glyph Element .............. -->
+
+<!ENTITY % SVG.missing-glyph.extra.content "" >
+
+<!ENTITY % SVG.missing-glyph.element "INCLUDE" >
+<![%SVG.missing-glyph.element;[
+<!ENTITY % SVG.missing-glyph.content
+    "( %SVG.Description.class; | %SVG.Animation.class; %SVG.Structure.class;
+       %SVG.Conditional.class; %SVG.Image.class; %SVG.Style.class;
+       %SVG.Shape.class; %SVG.Text.class; %SVG.Marker.class;
+       %SVG.ColorProfile.class; %SVG.Gradient.class; %SVG.Pattern.class;
+       %SVG.Clip.class; %SVG.Mask.class; %SVG.Filter.class; %SVG.Cursor.class;
+       %SVG.Hyperlink.class; %SVG.View.class; %SVG.Script.class;
+       %SVG.Font.class; %SVG.missing-glyph.extra.content; )*"
+>
+<!ELEMENT %SVG.missing-glyph.qname; %SVG.missing-glyph.content; >
+<!-- end of SVG.missing-glyph.element -->]]>
+
+<!ENTITY % SVG.missing-glyph.attlist "INCLUDE" >
+<![%SVG.missing-glyph.attlist;[
+<!ATTLIST %SVG.missing-glyph.qname;
+    %SVG.Core.attrib;
+    %SVG.Style.attrib;
+    %SVG.Presentation.attrib;
+    d %PathData.datatype; #IMPLIED
+    horiz-adv-x %Number.datatype; #IMPLIED
+    vert-origin-x %Number.datatype; #IMPLIED
+    vert-origin-y %Number.datatype; #IMPLIED
+    vert-adv-y %Number.datatype; #IMPLIED
+>
+<!-- end of SVG.missing-glyph.attlist -->]]>
+
+<!-- hkern: Horizontal Kerning Element ................. -->
+
+<!ENTITY % SVG.hkern.element "INCLUDE" >
+<![%SVG.hkern.element;[
+<!ENTITY % SVG.hkern.content "EMPTY" >
+<!ELEMENT %SVG.hkern.qname; %SVG.hkern.content; >
+<!-- end of SVG.hkern.element -->]]>
+
+<!ENTITY % SVG.hkern.attlist "INCLUDE" >
+<![%SVG.hkern.attlist;[
+<!ATTLIST %SVG.hkern.qname;
+    %SVG.Core.attrib;
+    u1 CDATA #IMPLIED
+    g1 CDATA #IMPLIED
+    u2 CDATA #IMPLIED
+    g2 CDATA #IMPLIED
+    k %Number.datatype; #REQUIRED
+>
+<!-- end of SVG.hkern.attlist -->]]>
+
+<!-- vkern: Vertical Kerning Element ................... -->
+
+<!ENTITY % SVG.vkern.element "INCLUDE" >
+<![%SVG.vkern.element;[
+<!ENTITY % SVG.vkern.content "EMPTY" >
+<!ELEMENT %SVG.vkern.qname; %SVG.vkern.content; >
+<!-- end of SVG.vkern.element -->]]>
+
+<!ENTITY % SVG.vkern.attlist "INCLUDE" >
+<![%SVG.vkern.attlist;[
+<!ATTLIST %SVG.vkern.qname;
+    %SVG.Core.attrib;
+    u1 CDATA #IMPLIED
+    g1 CDATA #IMPLIED
+    u2 CDATA #IMPLIED
+    g2 CDATA #IMPLIED
+    k %Number.datatype; #REQUIRED
+>
+<!-- end of SVG.vkern.attlist -->]]>
+
+<!-- font-face-src: Font Face Source Element ........... -->
+
+<!ENTITY % SVG.font-face-src.extra.content "" >
+
+<!ENTITY % SVG.font-face-src.element "INCLUDE" >
+<![%SVG.font-face-src.element;[
+<!ENTITY % SVG.font-face-src.content
+    "( %SVG.font-face-uri.qname; | %SVG.font-face-name.qname;
+       %SVG.font-face-src.extra.content; )+"
+>
+<!ELEMENT %SVG.font-face-src.qname; %SVG.font-face-src.content; >
+<!-- end of SVG.font-face-src.element -->]]>
+
+<!ENTITY % SVG.font-face-src.attlist "INCLUDE" >
+<![%SVG.font-face-src.attlist;[
+<!ATTLIST %SVG.font-face-src.qname;
+    %SVG.Core.attrib;
+>
+<!-- end of SVG.font-face-src.attlist -->]]>
+
+<!-- font-face-uri: Font Face URI Element .............. -->
+
+<!ENTITY % SVG.font-face-uri.extra.content "" >
+
+<!ENTITY % SVG.font-face-uri.element "INCLUDE" >
+<![%SVG.font-face-uri.element;[
+<!ENTITY % SVG.font-face-uri.content
+    "( %SVG.font-face-format.qname; %SVG.font-face-uri.extra.content; )*"
+>
+<!ELEMENT %SVG.font-face-uri.qname; %SVG.font-face-uri.content; >
+<!-- end of SVG.font-face-uri.element -->]]>
+
+<!ENTITY % SVG.font-face-uri.attlist "INCLUDE" >
+<![%SVG.font-face-uri.attlist;[
+<!ATTLIST %SVG.font-face-uri.qname;
+    %SVG.Core.attrib;
+    %SVG.XLinkRequired.attrib;
+>
+<!-- end of SVG.font-face-uri.attlist -->]]>
+
+<!-- font-face-format: Font Face Format Element ........ -->
+
+<!ENTITY % SVG.font-face-format.element "INCLUDE" >
+<![%SVG.font-face-format.element;[
+<!ENTITY % SVG.font-face-format.content "EMPTY" >
+<!ELEMENT %SVG.font-face-format.qname; %SVG.font-face-format.content; >
+<!-- end of SVG.font-face-format.element -->]]>
+
+<!ENTITY % SVG.font-face-format.attlist "INCLUDE" >
+<![%SVG.font-face-format.attlist;[
+<!ATTLIST %SVG.font-face-format.qname;
+    %SVG.Core.attrib;
+    string CDATA #IMPLIED
+>
+<!-- end of SVG.font-face-format.attlist -->]]>
+
+<!-- font-face-name: Font Face Name Element ............ -->
+
+<!ENTITY % SVG.font-face-name.element "INCLUDE" >
+<![%SVG.font-face-name.element;[
+<!ENTITY % SVG.font-face-name.content "EMPTY" >
+<!ELEMENT %SVG.font-face-name.qname; %SVG.font-face-name.content; >
+<!-- end of SVG.font-face-name.element -->]]>
+
+<!ENTITY % SVG.font-face-name.attlist "INCLUDE" >
+<![%SVG.font-face-name.attlist;[
+<!ATTLIST %SVG.font-face-name.qname;
+    %SVG.Core.attrib;
+    name CDATA #IMPLIED
+>
+<!-- end of SVG.font-face-name.attlist -->]]>
+
+<!-- definition-src: Definition Source Element ......... -->
+
+<!ENTITY % SVG.definition-src.element "INCLUDE" >
+<![%SVG.definition-src.element;[
+<!ENTITY % SVG.definition-src.content "EMPTY" >
+<!ELEMENT %SVG.definition-src.qname; %SVG.definition-src.content; >
+<!-- end of SVG.definition-src.element -->]]>
+
+<!ENTITY % SVG.definition-src.attlist "INCLUDE" >
+<![%SVG.definition-src.attlist;[
+<!ATTLIST %SVG.definition-src.qname;
+    %SVG.Core.attrib;
+    %SVG.XLinkRequired.attrib;
+>
+<!-- end of SVG.definition-src.attlist -->]]>
+
+<!-- end of svg-font.mod -->
+]]>
+
+<!-- Extensibility Module ........................................ -->
+<!ENTITY % svg-extensibility.module "INCLUDE" >
+<![%svg-extensibility.module;[
+<!ENTITY % svg-extensibility.mod
+    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Extensibility//EN"
+           "svg-extensibility.mod" >
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Extensibility Module .......................................... -->
+<!-- file: svg-extensibility.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-extensibility.mod,v 1.4 2002/11/14 15:11:02 fujisawa Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ELEMENTS SVG 1.1 Extensibility//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-extensibility.mod"
+
+     ....................................................................... -->
+
+<!-- Extensibility
+
+        foreignObject
+
+     This module declares markup to provide support for extensibility.
+-->
+
+<!-- Qualified Names (Default) ......................... -->
+
+<!ENTITY % SVG.foreignObject.qname "foreignObject" >
+
+<!-- Attribute Collections (Default) ................... -->
+
+<!ENTITY % SVG.Core.attrib "" >
+<!ENTITY % SVG.Conditional.attrib "" >
+<!ENTITY % SVG.Style.attrib "" >
+<!ENTITY % SVG.Viewport.attrib "" >
+<!ENTITY % SVG.Text.attrib "" >
+<!ENTITY % SVG.TextContent.attrib "" >
+<!ENTITY % SVG.Font.attrib "" >
+<!ENTITY % SVG.Paint.attrib "" >
+<!ENTITY % SVG.Color.attrib "" >
+<!ENTITY % SVG.Opacity.attrib "" >
+<!ENTITY % SVG.Graphics.attrib "" >
+<!ENTITY % SVG.Marker.attrib "" >
+<!ENTITY % SVG.Gradient.attrib "" >
+<!ENTITY % SVG.Clip.attrib "" >
+<!ENTITY % SVG.Mask.attrib "" >
+<!ENTITY % SVG.Filter.attrib "" >
+<!ENTITY % SVG.FilterColor.attrib "" >
+<!ENTITY % SVG.GraphicalEvents.attrib "" >
+<!ENTITY % SVG.Cursor.attrib "" >
+<!ENTITY % SVG.External.attrib "" >
+
+<!-- SVG.Extensibility.class ........................... -->
+
+<!ENTITY % SVG.Extensibility.extra.class "" >
+
+<!ENTITY % SVG.Extensibility.class
+    "| %SVG.foreignObject.qname; %SVG.Extensibility.extra.class;"
+>
+
+<!-- SVG.Presentation.attrib ........................... -->
+
+<!ENTITY % SVG.Presentation.extra.attrib "" >
+
+<!ENTITY % SVG.Presentation.attrib
+    "%SVG.Container.attrib;
+     %SVG.Viewport.attrib;
+     %SVG.Text.attrib;
+     %SVG.TextContent.attrib;
+     %SVG.Font.attrib;
+     %SVG.Paint.attrib;
+     %SVG.Color.attrib;
+     %SVG.Opacity.attrib;
+     %SVG.Graphics.attrib;
+     %SVG.Marker.attrib;
+     %SVG.ColorProfile.attrib;
+     %SVG.Gradient.attrib;
+     %SVG.Clip.attrib;
+     %SVG.Mask.attrib;
+     %SVG.Filter.attrib;
+     %SVG.FilterColor.attrib;
+     %SVG.Cursor.attrib;
+     flood-color %SVGColor.datatype; #IMPLIED
+     flood-opacity %OpacityValue.datatype; #IMPLIED
+     lighting-color %SVGColor.datatype; #IMPLIED
+     %SVG.Presentation.extra.attrib;"
+>
+
+<!-- foreignObject: Foreign Object Element ............. -->
+
+<!ENTITY % SVG.foreignObject.extra.content "" >
+
+<!ENTITY % SVG.foreignObject.element "INCLUDE" >
+<![%SVG.foreignObject.element;[
+<!ENTITY % SVG.foreignObject.content
+    "( #PCDATA %SVG.foreignObject.extra.content; )*"
+>
+<!ELEMENT %SVG.foreignObject.qname; %SVG.foreignObject.content; >
+<!-- end of SVG.foreignObject.element -->]]>
+
+<!ENTITY % SVG.foreignObject.attlist "INCLUDE" >
+<![%SVG.foreignObject.attlist;[
+<!ATTLIST %SVG.foreignObject.qname;
+    %SVG.Core.attrib;
+    %SVG.Conditional.attrib;
+    %SVG.Style.attrib;
+    %SVG.Presentation.attrib;
+    %SVG.GraphicalEvents.attrib;
+    %SVG.External.attrib;
+    x %Coordinate.datatype; #IMPLIED
+    y %Coordinate.datatype; #IMPLIED
+    width %Length.datatype; #REQUIRED
+    height %Length.datatype; #REQUIRED
+    transform %TransformList.datatype; #IMPLIED
+>
+<!-- end of SVG.foreignObject.attlist -->]]>
+
+<!-- end of svg-extensibility.mod -->
+]]>
+
+<!-- end of SVG 1.1 DTD .................................................... -->
+<!-- ....................................................................... -->
+
+
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/dtd/xhtml-lat1.dtdinc b/src/main/resources/com/adobe/epubcheck/schema/20/dtd/xhtml-lat1.dtdinc
new file mode 100644
index 0000000..ffee223
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/dtd/xhtml-lat1.dtdinc
@@ -0,0 +1,196 @@
+<!-- Portions (C) International Organization for Standardization 1986
+     Permission to copy in any form is granted for use with
+     conforming SGML systems and applications as defined in
+     ISO 8879, provided this notice is included in all copies.
+-->
+<!-- Character entity set. Typical invocation:
+    <!ENTITY % HTMLlat1 PUBLIC
+       "-//W3C//ENTITIES Latin 1 for XHTML//EN"
+       "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">
+    %HTMLlat1;
+-->
+
+<!ENTITY nbsp   " "> <!-- no-break space = non-breaking space,
+                                  U+00A0 ISOnum -->
+<!ENTITY iexcl  "¡"> <!-- inverted exclamation mark, U+00A1 ISOnum -->
+<!ENTITY cent   "¢"> <!-- cent sign, U+00A2 ISOnum -->
+<!ENTITY pound  "£"> <!-- pound sign, U+00A3 ISOnum -->
+<!ENTITY curren "¤"> <!-- currency sign, U+00A4 ISOnum -->
+<!ENTITY yen    "¥"> <!-- yen sign = yuan sign, U+00A5 ISOnum -->
+<!ENTITY brvbar "¦"> <!-- broken bar = broken vertical bar,
+                                  U+00A6 ISOnum -->
+<!ENTITY sect   "§"> <!-- section sign, U+00A7 ISOnum -->
+<!ENTITY uml    "¨"> <!-- diaeresis = spacing diaeresis,
+                                  U+00A8 ISOdia -->
+<!ENTITY copy   "©"> <!-- copyright sign, U+00A9 ISOnum -->
+<!ENTITY ordf   "ª"> <!-- feminine ordinal indicator, U+00AA ISOnum -->
+<!ENTITY laquo  "«"> <!-- left-pointing double angle quotation mark
+                                  = left pointing guillemet, U+00AB ISOnum -->
+<!ENTITY not    "¬"> <!-- not sign = angled dash,
+                                  U+00AC ISOnum -->
+<!ENTITY shy    "­"> <!-- soft hyphen = discretionary hyphen,
+                                  U+00AD ISOnum -->
+<!ENTITY reg    "®"> <!-- registered sign = registered trade mark sign,
+                                  U+00AE ISOnum -->
+<!ENTITY macr   "¯"> <!-- macron = spacing macron = overline
+                                  = APL overbar, U+00AF ISOdia -->
+<!ENTITY deg    "°"> <!-- degree sign, U+00B0 ISOnum -->
+<!ENTITY plusmn "±"> <!-- plus-minus sign = plus-or-minus sign,
+                                  U+00B1 ISOnum -->
+<!ENTITY sup2   "²"> <!-- superscript two = superscript digit two
+                                  = squared, U+00B2 ISOnum -->
+<!ENTITY sup3   "³"> <!-- superscript three = superscript digit three
+                                  = cubed, U+00B3 ISOnum -->
+<!ENTITY acute  "´"> <!-- acute accent = spacing acute,
+                                  U+00B4 ISOdia -->
+<!ENTITY micro  "µ"> <!-- micro sign, U+00B5 ISOnum -->
+<!ENTITY para   "¶"> <!-- pilcrow sign = paragraph sign,
+                                  U+00B6 ISOnum -->
+<!ENTITY middot "·"> <!-- middle dot = Georgian comma
+                                  = Greek middle dot, U+00B7 ISOnum -->
+<!ENTITY cedil  "¸"> <!-- cedilla = spacing cedilla, U+00B8 ISOdia -->
+<!ENTITY sup1   "¹"> <!-- superscript one = superscript digit one,
+                                  U+00B9 ISOnum -->
+<!ENTITY ordm   "º"> <!-- masculine ordinal indicator,
+                                  U+00BA ISOnum -->
+<!ENTITY raquo  "»"> <!-- right-pointing double angle quotation mark
+                                  = right pointing guillemet, U+00BB ISOnum -->
+<!ENTITY frac14 "¼"> <!-- vulgar fraction one quarter
+                                  = fraction one quarter, U+00BC ISOnum -->
+<!ENTITY frac12 "½"> <!-- vulgar fraction one half
+                                  = fraction one half, U+00BD ISOnum -->
+<!ENTITY frac34 "¾"> <!-- vulgar fraction three quarters
+                                  = fraction three quarters, U+00BE ISOnum -->
+<!ENTITY iquest "¿"> <!-- inverted question mark
+                                  = turned question mark, U+00BF ISOnum -->
+<!ENTITY Agrave "À"> <!-- latin capital letter A with grave
+                                  = latin capital letter A grave,
+                                  U+00C0 ISOlat1 -->
+<!ENTITY Aacute "Á"> <!-- latin capital letter A with acute,
+                                  U+00C1 ISOlat1 -->
+<!ENTITY Acirc  "Â"> <!-- latin capital letter A with circumflex,
+                                  U+00C2 ISOlat1 -->
+<!ENTITY Atilde "Ã"> <!-- latin capital letter A with tilde,
+                                  U+00C3 ISOlat1 -->
+<!ENTITY Auml   "Ä"> <!-- latin capital letter A with diaeresis,
+                                  U+00C4 ISOlat1 -->
+<!ENTITY Aring  "Å"> <!-- latin capital letter A with ring above
+                                  = latin capital letter A ring,
+                                  U+00C5 ISOlat1 -->
+<!ENTITY AElig  "Æ"> <!-- latin capital letter AE
+                                  = latin capital ligature AE,
+                                  U+00C6 ISOlat1 -->
+<!ENTITY Ccedil "Ç"> <!-- latin capital letter C with cedilla,
+                                  U+00C7 ISOlat1 -->
+<!ENTITY Egrave "È"> <!-- latin capital letter E with grave,
+                                  U+00C8 ISOlat1 -->
+<!ENTITY Eacute "É"> <!-- latin capital letter E with acute,
+                                  U+00C9 ISOlat1 -->
+<!ENTITY Ecirc  "Ê"> <!-- latin capital letter E with circumflex,
+                                  U+00CA ISOlat1 -->
+<!ENTITY Euml   "Ë"> <!-- latin capital letter E with diaeresis,
+                                  U+00CB ISOlat1 -->
+<!ENTITY Igrave "Ì"> <!-- latin capital letter I with grave,
+                                  U+00CC ISOlat1 -->
+<!ENTITY Iacute "Í"> <!-- latin capital letter I with acute,
+                                  U+00CD ISOlat1 -->
+<!ENTITY Icirc  "Î"> <!-- latin capital letter I with circumflex,
+                                  U+00CE ISOlat1 -->
+<!ENTITY Iuml   "Ï"> <!-- latin capital letter I with diaeresis,
+                                  U+00CF ISOlat1 -->
+<!ENTITY ETH    "Ð"> <!-- latin capital letter ETH, U+00D0 ISOlat1 -->
+<!ENTITY Ntilde "Ñ"> <!-- latin capital letter N with tilde,
+                                  U+00D1 ISOlat1 -->
+<!ENTITY Ograve "Ò"> <!-- latin capital letter O with grave,
+                                  U+00D2 ISOlat1 -->
+<!ENTITY Oacute "Ó"> <!-- latin capital letter O with acute,
+                                  U+00D3 ISOlat1 -->
+<!ENTITY Ocirc  "Ô"> <!-- latin capital letter O with circumflex,
+                                  U+00D4 ISOlat1 -->
+<!ENTITY Otilde "Õ"> <!-- latin capital letter O with tilde,
+                                  U+00D5 ISOlat1 -->
+<!ENTITY Ouml   "Ö"> <!-- latin capital letter O with diaeresis,
+                                  U+00D6 ISOlat1 -->
+<!ENTITY times  "×"> <!-- multiplication sign, U+00D7 ISOnum -->
+<!ENTITY Oslash "Ø"> <!-- latin capital letter O with stroke
+                                  = latin capital letter O slash,
+                                  U+00D8 ISOlat1 -->
+<!ENTITY Ugrave "Ù"> <!-- latin capital letter U with grave,
+                                  U+00D9 ISOlat1 -->
+<!ENTITY Uacute "Ú"> <!-- latin capital letter U with acute,
+                                  U+00DA ISOlat1 -->
+<!ENTITY Ucirc  "Û"> <!-- latin capital letter U with circumflex,
+                                  U+00DB ISOlat1 -->
+<!ENTITY Uuml   "Ü"> <!-- latin capital letter U with diaeresis,
+                                  U+00DC ISOlat1 -->
+<!ENTITY Yacute "Ý"> <!-- latin capital letter Y with acute,
+                                  U+00DD ISOlat1 -->
+<!ENTITY THORN  "Þ"> <!-- latin capital letter THORN,
+                                  U+00DE ISOlat1 -->
+<!ENTITY szlig  "ß"> <!-- latin small letter sharp s = ess-zed,
+                                  U+00DF ISOlat1 -->
+<!ENTITY agrave "à"> <!-- latin small letter a with grave
+                                  = latin small letter a grave,
+                                  U+00E0 ISOlat1 -->
+<!ENTITY aacute "á"> <!-- latin small letter a with acute,
+                                  U+00E1 ISOlat1 -->
+<!ENTITY acirc  "â"> <!-- latin small letter a with circumflex,
+                                  U+00E2 ISOlat1 -->
+<!ENTITY atilde "ã"> <!-- latin small letter a with tilde,
+                                  U+00E3 ISOlat1 -->
+<!ENTITY auml   "ä"> <!-- latin small letter a with diaeresis,
+                                  U+00E4 ISOlat1 -->
+<!ENTITY aring  "å"> <!-- latin small letter a with ring above
+                                  = latin small letter a ring,
+                                  U+00E5 ISOlat1 -->
+<!ENTITY aelig  "æ"> <!-- latin small letter ae
+                                  = latin small ligature ae, U+00E6 ISOlat1 -->
+<!ENTITY ccedil "ç"> <!-- latin small letter c with cedilla,
+                                  U+00E7 ISOlat1 -->
+<!ENTITY egrave "è"> <!-- latin small letter e with grave,
+                                  U+00E8 ISOlat1 -->
+<!ENTITY eacute "é"> <!-- latin small letter e with acute,
+                                  U+00E9 ISOlat1 -->
+<!ENTITY ecirc  "ê"> <!-- latin small letter e with circumflex,
+                                  U+00EA ISOlat1 -->
+<!ENTITY euml   "ë"> <!-- latin small letter e with diaeresis,
+                                  U+00EB ISOlat1 -->
+<!ENTITY igrave "ì"> <!-- latin small letter i with grave,
+                                  U+00EC ISOlat1 -->
+<!ENTITY iacute "í"> <!-- latin small letter i with acute,
+                                  U+00ED ISOlat1 -->
+<!ENTITY icirc  "î"> <!-- latin small letter i with circumflex,
+                                  U+00EE ISOlat1 -->
+<!ENTITY iuml   "ï"> <!-- latin small letter i with diaeresis,
+                                  U+00EF ISOlat1 -->
+<!ENTITY eth    "ð"> <!-- latin small letter eth, U+00F0 ISOlat1 -->
+<!ENTITY ntilde "ñ"> <!-- latin small letter n with tilde,
+                                  U+00F1 ISOlat1 -->
+<!ENTITY ograve "ò"> <!-- latin small letter o with grave,
+                                  U+00F2 ISOlat1 -->
+<!ENTITY oacute "ó"> <!-- latin small letter o with acute,
+                                  U+00F3 ISOlat1 -->
+<!ENTITY ocirc  "ô"> <!-- latin small letter o with circumflex,
+                                  U+00F4 ISOlat1 -->
+<!ENTITY otilde "õ"> <!-- latin small letter o with tilde,
+                                  U+00F5 ISOlat1 -->
+<!ENTITY ouml   "ö"> <!-- latin small letter o with diaeresis,
+                                  U+00F6 ISOlat1 -->
+<!ENTITY divide "÷"> <!-- division sign, U+00F7 ISOnum -->
+<!ENTITY oslash "ø"> <!-- latin small letter o with stroke,
+                                  = latin small letter o slash,
+                                  U+00F8 ISOlat1 -->
+<!ENTITY ugrave "ù"> <!-- latin small letter u with grave,
+                                  U+00F9 ISOlat1 -->
+<!ENTITY uacute "ú"> <!-- latin small letter u with acute,
+                                  U+00FA ISOlat1 -->
+<!ENTITY ucirc  "û"> <!-- latin small letter u with circumflex,
+                                  U+00FB ISOlat1 -->
+<!ENTITY uuml   "ü"> <!-- latin small letter u with diaeresis,
+                                  U+00FC ISOlat1 -->
+<!ENTITY yacute "ý"> <!-- latin small letter y with acute,
+                                  U+00FD ISOlat1 -->
+<!ENTITY thorn  "þ"> <!-- latin small letter thorn,
+                                  U+00FE ISOlat1 -->
+<!ENTITY yuml   "ÿ"> <!-- latin small letter y with diaeresis,
+                                  U+00FF ISOlat1 -->
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/dtd/xhtml-special.dtdinc b/src/main/resources/com/adobe/epubcheck/schema/20/dtd/xhtml-special.dtdinc
new file mode 100644
index 0000000..ca358b2
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/dtd/xhtml-special.dtdinc
@@ -0,0 +1,80 @@
+<!-- Special characters for XHTML -->
+
+<!-- Character entity set. Typical invocation:
+     <!ENTITY % HTMLspecial PUBLIC
+        "-//W3C//ENTITIES Special for XHTML//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent">
+     %HTMLspecial;
+-->
+
+<!-- Portions (C) International Organization for Standardization 1986:
+     Permission to copy in any form is granted for use with
+     conforming SGML systems and applications as defined in
+     ISO 8879, provided this notice is included in all copies.
+-->
+
+<!-- Relevant ISO entity set is given unless names are newly introduced.
+     New names (i.e., not in ISO 8879 list) do not clash with any
+     existing ISO 8879 entity names. ISO 10646 character numbers
+     are given for each character, in hex. values are decimal
+     conversions of the ISO 10646 values and refer to the document
+     character set. Names are Unicode names. 
+-->
+
+<!-- C0 Controls and Basic Latin -->
+<!ENTITY quot    """> <!--  quotation mark, U+0022 ISOnum -->
+<!ENTITY amp     "&#38;"> <!--  ampersand, U+0026 ISOnum -->
+<!ENTITY lt      "&#60;"> <!--  less-than sign, U+003C ISOnum -->
+<!ENTITY gt      ">"> <!--  greater-than sign, U+003E ISOnum -->
+<!ENTITY apos	 "'"> <!--  apostrophe = APL quote, U+0027 ISOnum -->
+
+<!-- Latin Extended-A -->
+<!ENTITY OElig   "Œ"> <!--  latin capital ligature OE,
+                                    U+0152 ISOlat2 -->
+<!ENTITY oelig   "œ"> <!--  latin small ligature oe, U+0153 ISOlat2 -->
+<!-- ligature is a misnomer, this is a separate character in some languages -->
+<!ENTITY Scaron  "Š"> <!--  latin capital letter S with caron,
+                                    U+0160 ISOlat2 -->
+<!ENTITY scaron  "š"> <!--  latin small letter s with caron,
+                                    U+0161 ISOlat2 -->
+<!ENTITY Yuml    "Ÿ"> <!--  latin capital letter Y with diaeresis,
+                                    U+0178 ISOlat2 -->
+
+<!-- Spacing Modifier Letters -->
+<!ENTITY circ    "ˆ"> <!--  modifier letter circumflex accent,
+                                    U+02C6 ISOpub -->
+<!ENTITY tilde   "˜"> <!--  small tilde, U+02DC ISOdia -->
+
+<!-- General Punctuation -->
+<!ENTITY ensp    " "> <!-- en space, U+2002 ISOpub -->
+<!ENTITY emsp    " "> <!-- em space, U+2003 ISOpub -->
+<!ENTITY thinsp  " "> <!-- thin space, U+2009 ISOpub -->
+<!ENTITY zwnj    "‌"> <!-- zero width non-joiner,
+                                    U+200C NEW RFC 2070 -->
+<!ENTITY zwj     "‍"> <!-- zero width joiner, U+200D NEW RFC 2070 -->
+<!ENTITY lrm     "‎"> <!-- left-to-right mark, U+200E NEW RFC 2070 -->
+<!ENTITY rlm     "‏"> <!-- right-to-left mark, U+200F NEW RFC 2070 -->
+<!ENTITY ndash   "–"> <!-- en dash, U+2013 ISOpub -->
+<!ENTITY mdash   "—"> <!-- em dash, U+2014 ISOpub -->
+<!ENTITY lsquo   "‘"> <!-- left single quotation mark,
+                                    U+2018 ISOnum -->
+<!ENTITY rsquo   "’"> <!-- right single quotation mark,
+                                    U+2019 ISOnum -->
+<!ENTITY sbquo   "‚"> <!-- single low-9 quotation mark, U+201A NEW -->
+<!ENTITY ldquo   "“"> <!-- left double quotation mark,
+                                    U+201C ISOnum -->
+<!ENTITY rdquo   "”"> <!-- right double quotation mark,
+                                    U+201D ISOnum -->
+<!ENTITY bdquo   "„"> <!-- double low-9 quotation mark, U+201E NEW -->
+<!ENTITY dagger  "†"> <!-- dagger, U+2020 ISOpub -->
+<!ENTITY Dagger  "‡"> <!-- double dagger, U+2021 ISOpub -->
+<!ENTITY permil  "‰"> <!-- per mille sign, U+2030 ISOtech -->
+<!ENTITY lsaquo  "‹"> <!-- single left-pointing angle quotation mark,
+                                    U+2039 ISO proposed -->
+<!-- lsaquo is proposed but not yet ISO standardized -->
+<!ENTITY rsaquo  "›"> <!-- single right-pointing angle quotation mark,
+                                    U+203A ISO proposed -->
+<!-- rsaquo is proposed but not yet ISO standardized -->
+
+<!-- Currency Symbols -->
+<!ENTITY euro   "€"> <!--  euro sign, U+20AC NEW -->
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/dtd/xhtml-symbol.dtdinc b/src/main/resources/com/adobe/epubcheck/schema/20/dtd/xhtml-symbol.dtdinc
new file mode 100644
index 0000000..63c2abf
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/dtd/xhtml-symbol.dtdinc
@@ -0,0 +1,237 @@
+<!-- Mathematical, Greek and Symbolic characters for XHTML -->
+
+<!-- Character entity set. Typical invocation:
+     <!ENTITY % HTMLsymbol PUBLIC
+        "-//W3C//ENTITIES Symbols for XHTML//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent">
+     %HTMLsymbol;
+-->
+
+<!-- Portions (C) International Organization for Standardization 1986:
+     Permission to copy in any form is granted for use with
+     conforming SGML systems and applications as defined in
+     ISO 8879, provided this notice is included in all copies.
+-->
+
+<!-- Relevant ISO entity set is given unless names are newly introduced.
+     New names (i.e., not in ISO 8879 list) do not clash with any
+     existing ISO 8879 entity names. ISO 10646 character numbers
+     are given for each character, in hex. values are decimal
+     conversions of the ISO 10646 values and refer to the document
+     character set. Names are Unicode names. 
+-->
+
+<!-- Latin Extended-B -->
+<!ENTITY fnof     "ƒ"> <!-- latin small letter f with hook = function
+                                    = florin, U+0192 ISOtech -->
+
+<!-- Greek -->
+<!ENTITY Alpha    "Α"> <!-- greek capital letter alpha, U+0391 -->
+<!ENTITY Beta     "Β"> <!-- greek capital letter beta, U+0392 -->
+<!ENTITY Gamma    "Γ"> <!-- greek capital letter gamma,
+                                    U+0393 ISOgrk3 -->
+<!ENTITY Delta    "Δ"> <!-- greek capital letter delta,
+                                    U+0394 ISOgrk3 -->
+<!ENTITY Epsilon  "Ε"> <!-- greek capital letter epsilon, U+0395 -->
+<!ENTITY Zeta     "Ζ"> <!-- greek capital letter zeta, U+0396 -->
+<!ENTITY Eta      "Η"> <!-- greek capital letter eta, U+0397 -->
+<!ENTITY Theta    "Θ"> <!-- greek capital letter theta,
+                                    U+0398 ISOgrk3 -->
+<!ENTITY Iota     "Ι"> <!-- greek capital letter iota, U+0399 -->
+<!ENTITY Kappa    "Κ"> <!-- greek capital letter kappa, U+039A -->
+<!ENTITY Lambda   "Λ"> <!-- greek capital letter lamda,
+                                    U+039B ISOgrk3 -->
+<!ENTITY Mu       "Μ"> <!-- greek capital letter mu, U+039C -->
+<!ENTITY Nu       "Ν"> <!-- greek capital letter nu, U+039D -->
+<!ENTITY Xi       "Ξ"> <!-- greek capital letter xi, U+039E ISOgrk3 -->
+<!ENTITY Omicron  "Ο"> <!-- greek capital letter omicron, U+039F -->
+<!ENTITY Pi       "Π"> <!-- greek capital letter pi, U+03A0 ISOgrk3 -->
+<!ENTITY Rho      "Ρ"> <!-- greek capital letter rho, U+03A1 -->
+<!-- there is no Sigmaf, and no U+03A2 character either -->
+<!ENTITY Sigma    "Σ"> <!-- greek capital letter sigma,
+                                    U+03A3 ISOgrk3 -->
+<!ENTITY Tau      "Τ"> <!-- greek capital letter tau, U+03A4 -->
+<!ENTITY Upsilon  "Υ"> <!-- greek capital letter upsilon,
+                                    U+03A5 ISOgrk3 -->
+<!ENTITY Phi      "Φ"> <!-- greek capital letter phi,
+                                    U+03A6 ISOgrk3 -->
+<!ENTITY Chi      "Χ"> <!-- greek capital letter chi, U+03A7 -->
+<!ENTITY Psi      "Ψ"> <!-- greek capital letter psi,
+                                    U+03A8 ISOgrk3 -->
+<!ENTITY Omega    "Ω"> <!-- greek capital letter omega,
+                                    U+03A9 ISOgrk3 -->
+
+<!ENTITY alpha    "α"> <!-- greek small letter alpha,
+                                    U+03B1 ISOgrk3 -->
+<!ENTITY beta     "β"> <!-- greek small letter beta, U+03B2 ISOgrk3 -->
+<!ENTITY gamma    "γ"> <!-- greek small letter gamma,
+                                    U+03B3 ISOgrk3 -->
+<!ENTITY delta    "δ"> <!-- greek small letter delta,
+                                    U+03B4 ISOgrk3 -->
+<!ENTITY epsilon  "ε"> <!-- greek small letter epsilon,
+                                    U+03B5 ISOgrk3 -->
+<!ENTITY zeta     "ζ"> <!-- greek small letter zeta, U+03B6 ISOgrk3 -->
+<!ENTITY eta      "η"> <!-- greek small letter eta, U+03B7 ISOgrk3 -->
+<!ENTITY theta    "θ"> <!-- greek small letter theta,
+                                    U+03B8 ISOgrk3 -->
+<!ENTITY iota     "ι"> <!-- greek small letter iota, U+03B9 ISOgrk3 -->
+<!ENTITY kappa    "κ"> <!-- greek small letter kappa,
+                                    U+03BA ISOgrk3 -->
+<!ENTITY lambda   "λ"> <!-- greek small letter lamda,
+                                    U+03BB ISOgrk3 -->
+<!ENTITY mu       "μ"> <!-- greek small letter mu, U+03BC ISOgrk3 -->
+<!ENTITY nu       "ν"> <!-- greek small letter nu, U+03BD ISOgrk3 -->
+<!ENTITY xi       "ξ"> <!-- greek small letter xi, U+03BE ISOgrk3 -->
+<!ENTITY omicron  "ο"> <!-- greek small letter omicron, U+03BF NEW -->
+<!ENTITY pi       "π"> <!-- greek small letter pi, U+03C0 ISOgrk3 -->
+<!ENTITY rho      "ρ"> <!-- greek small letter rho, U+03C1 ISOgrk3 -->
+<!ENTITY sigmaf   "ς"> <!-- greek small letter final sigma,
+                                    U+03C2 ISOgrk3 -->
+<!ENTITY sigma    "σ"> <!-- greek small letter sigma,
+                                    U+03C3 ISOgrk3 -->
+<!ENTITY tau      "τ"> <!-- greek small letter tau, U+03C4 ISOgrk3 -->
+<!ENTITY upsilon  "υ"> <!-- greek small letter upsilon,
+                                    U+03C5 ISOgrk3 -->
+<!ENTITY phi      "φ"> <!-- greek small letter phi, U+03C6 ISOgrk3 -->
+<!ENTITY chi      "χ"> <!-- greek small letter chi, U+03C7 ISOgrk3 -->
+<!ENTITY psi      "ψ"> <!-- greek small letter psi, U+03C8 ISOgrk3 -->
+<!ENTITY omega    "ω"> <!-- greek small letter omega,
+                                    U+03C9 ISOgrk3 -->
+<!ENTITY thetasym "ϑ"> <!-- greek theta symbol,
+                                    U+03D1 NEW -->
+<!ENTITY upsih    "ϒ"> <!-- greek upsilon with hook symbol,
+                                    U+03D2 NEW -->
+<!ENTITY piv      "ϖ"> <!-- greek pi symbol, U+03D6 ISOgrk3 -->
+
+<!-- General Punctuation -->
+<!ENTITY bull     "•"> <!-- bullet = black small circle,
+                                     U+2022 ISOpub  -->
+<!-- bullet is NOT the same as bullet operator, U+2219 -->
+<!ENTITY hellip   "…"> <!-- horizontal ellipsis = three dot leader,
+                                     U+2026 ISOpub  -->
+<!ENTITY prime    "′"> <!-- prime = minutes = feet, U+2032 ISOtech -->
+<!ENTITY Prime    "″"> <!-- double prime = seconds = inches,
+                                     U+2033 ISOtech -->
+<!ENTITY oline    "‾"> <!-- overline = spacing overscore,
+                                     U+203E NEW -->
+<!ENTITY frasl    "⁄"> <!-- fraction slash, U+2044 NEW -->
+
+<!-- Letterlike Symbols -->
+<!ENTITY weierp   "℘"> <!-- script capital P = power set
+                                     = Weierstrass p, U+2118 ISOamso -->
+<!ENTITY image    "ℑ"> <!-- black-letter capital I = imaginary part,
+                                     U+2111 ISOamso -->
+<!ENTITY real     "ℜ"> <!-- black-letter capital R = real part symbol,
+                                     U+211C ISOamso -->
+<!ENTITY trade    "™"> <!-- trade mark sign, U+2122 ISOnum -->
+<!ENTITY alefsym  "ℵ"> <!-- alef symbol = first transfinite cardinal,
+                                     U+2135 NEW -->
+<!-- alef symbol is NOT the same as hebrew letter alef,
+     U+05D0 although the same glyph could be used to depict both characters -->
+
+<!-- Arrows -->
+<!ENTITY larr     "←"> <!-- leftwards arrow, U+2190 ISOnum -->
+<!ENTITY uarr     "↑"> <!-- upwards arrow, U+2191 ISOnum-->
+<!ENTITY rarr     "→"> <!-- rightwards arrow, U+2192 ISOnum -->
+<!ENTITY darr     "↓"> <!-- downwards arrow, U+2193 ISOnum -->
+<!ENTITY harr     "↔"> <!-- left right arrow, U+2194 ISOamsa -->
+<!ENTITY crarr    "↵"> <!-- downwards arrow with corner leftwards
+                                     = carriage return, U+21B5 NEW -->
+<!ENTITY lArr     "⇐"> <!-- leftwards double arrow, U+21D0 ISOtech -->
+<!-- Unicode does not say that lArr is the same as the 'is implied by' arrow
+    but also does not have any other character for that function. So lArr can
+    be used for 'is implied by' as ISOtech suggests -->
+<!ENTITY uArr     "⇑"> <!-- upwards double arrow, U+21D1 ISOamsa -->
+<!ENTITY rArr     "⇒"> <!-- rightwards double arrow,
+                                     U+21D2 ISOtech -->
+<!-- Unicode does not say this is the 'implies' character but does not have 
+     another character with this function so rArr can be used for 'implies'
+     as ISOtech suggests -->
+<!ENTITY dArr     "⇓"> <!-- downwards double arrow, U+21D3 ISOamsa -->
+<!ENTITY hArr     "⇔"> <!-- left right double arrow,
+                                     U+21D4 ISOamsa -->
+
+<!-- Mathematical Operators -->
+<!ENTITY forall   "∀"> <!-- for all, U+2200 ISOtech -->
+<!ENTITY part     "∂"> <!-- partial differential, U+2202 ISOtech  -->
+<!ENTITY exist    "∃"> <!-- there exists, U+2203 ISOtech -->
+<!ENTITY empty    "∅"> <!-- empty set = null set, U+2205 ISOamso -->
+<!ENTITY nabla    "∇"> <!-- nabla = backward difference,
+                                     U+2207 ISOtech -->
+<!ENTITY isin     "∈"> <!-- element of, U+2208 ISOtech -->
+<!ENTITY notin    "∉"> <!-- not an element of, U+2209 ISOtech -->
+<!ENTITY ni       "∋"> <!-- contains as member, U+220B ISOtech -->
+<!ENTITY prod     "∏"> <!-- n-ary product = product sign,
+                                     U+220F ISOamsb -->
+<!-- prod is NOT the same character as U+03A0 'greek capital letter pi' though
+     the same glyph might be used for both -->
+<!ENTITY sum      "∑"> <!-- n-ary summation, U+2211 ISOamsb -->
+<!-- sum is NOT the same character as U+03A3 'greek capital letter sigma'
+     though the same glyph might be used for both -->
+<!ENTITY minus    "−"> <!-- minus sign, U+2212 ISOtech -->
+<!ENTITY lowast   "∗"> <!-- asterisk operator, U+2217 ISOtech -->
+<!ENTITY radic    "√"> <!-- square root = radical sign,
+                                     U+221A ISOtech -->
+<!ENTITY prop     "∝"> <!-- proportional to, U+221D ISOtech -->
+<!ENTITY infin    "∞"> <!-- infinity, U+221E ISOtech -->
+<!ENTITY ang      "∠"> <!-- angle, U+2220 ISOamso -->
+<!ENTITY and      "∧"> <!-- logical and = wedge, U+2227 ISOtech -->
+<!ENTITY or       "∨"> <!-- logical or = vee, U+2228 ISOtech -->
+<!ENTITY cap      "∩"> <!-- intersection = cap, U+2229 ISOtech -->
+<!ENTITY cup      "∪"> <!-- union = cup, U+222A ISOtech -->
+<!ENTITY int      "∫"> <!-- integral, U+222B ISOtech -->
+<!ENTITY there4   "∴"> <!-- therefore, U+2234 ISOtech -->
+<!ENTITY sim      "∼"> <!-- tilde operator = varies with = similar to,
+                                     U+223C ISOtech -->
+<!-- tilde operator is NOT the same character as the tilde, U+007E,
+     although the same glyph might be used to represent both  -->
+<!ENTITY cong     "≅"> <!-- approximately equal to, U+2245 ISOtech -->
+<!ENTITY asymp    "≈"> <!-- almost equal to = asymptotic to,
+                                     U+2248 ISOamsr -->
+<!ENTITY ne       "≠"> <!-- not equal to, U+2260 ISOtech -->
+<!ENTITY equiv    "≡"> <!-- identical to, U+2261 ISOtech -->
+<!ENTITY le       "≤"> <!-- less-than or equal to, U+2264 ISOtech -->
+<!ENTITY ge       "≥"> <!-- greater-than or equal to,
+                                     U+2265 ISOtech -->
+<!ENTITY sub      "⊂"> <!-- subset of, U+2282 ISOtech -->
+<!ENTITY sup      "⊃"> <!-- superset of, U+2283 ISOtech -->
+<!ENTITY nsub     "⊄"> <!-- not a subset of, U+2284 ISOamsn -->
+<!ENTITY sube     "⊆"> <!-- subset of or equal to, U+2286 ISOtech -->
+<!ENTITY supe     "⊇"> <!-- superset of or equal to,
+                                     U+2287 ISOtech -->
+<!ENTITY oplus    "⊕"> <!-- circled plus = direct sum,
+                                     U+2295 ISOamsb -->
+<!ENTITY otimes   "⊗"> <!-- circled times = vector product,
+                                     U+2297 ISOamsb -->
+<!ENTITY perp     "⊥"> <!-- up tack = orthogonal to = perpendicular,
+                                     U+22A5 ISOtech -->
+<!ENTITY sdot     "⋅"> <!-- dot operator, U+22C5 ISOamsb -->
+<!-- dot operator is NOT the same character as U+00B7 middle dot -->
+
+<!-- Miscellaneous Technical -->
+<!ENTITY lceil    "⌈"> <!-- left ceiling = APL upstile,
+                                     U+2308 ISOamsc  -->
+<!ENTITY rceil    "⌉"> <!-- right ceiling, U+2309 ISOamsc  -->
+<!ENTITY lfloor   "⌊"> <!-- left floor = APL downstile,
+                                     U+230A ISOamsc  -->
+<!ENTITY rfloor   "⌋"> <!-- right floor, U+230B ISOamsc  -->
+<!ENTITY lang     "〈"> <!-- left-pointing angle bracket = bra,
+                                     U+2329 ISOtech -->
+<!-- lang is NOT the same character as U+003C 'less than sign' 
+     or U+2039 'single left-pointing angle quotation mark' -->
+<!ENTITY rang     "〉"> <!-- right-pointing angle bracket = ket,
+                                     U+232A ISOtech -->
+<!-- rang is NOT the same character as U+003E 'greater than sign' 
+     or U+203A 'single right-pointing angle quotation mark' -->
+
+<!-- Geometric Shapes -->
+<!ENTITY loz      "◊"> <!-- lozenge, U+25CA ISOpub -->
+
+<!-- Miscellaneous Symbols -->
+<!ENTITY spades   "♠"> <!-- black spade suit, U+2660 ISOpub -->
+<!-- black here seems to mean filled as opposed to hollow -->
+<!ENTITY clubs    "♣"> <!-- black club suit = shamrock,
+                                     U+2663 ISOpub -->
+<!ENTITY hearts   "♥"> <!-- black heart suit = valentine,
+                                     U+2665 ISOpub -->
+<!ENTITY diams    "♦"> <!-- black diamond suit, U+2666 ISOpub -->
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/dtd/xhtml1-strict.dtd b/src/main/resources/com/adobe/epubcheck/schema/20/dtd/xhtml1-strict.dtd
new file mode 100644
index 0000000..7384d55
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/dtd/xhtml1-strict.dtd
@@ -0,0 +1,979 @@
+<!--
+   Extensible HTML version 1.0 Strict DTD
+
+   This is the same as HTML 4 Strict except for
+   changes due to the differences between XML and SGML.
+
+   Namespace = http://www.w3.org/1999/xhtml
+
+   For further information, see: http://www.w3.org/TR/xhtml1
+
+   Copyright (c) 1998-2002 W3C (MIT, INRIA, Keio),
+   All Rights Reserved. 
+
+   This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+   PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+   SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
+
+   $Revision: 1.1 $
+   $Date: 2002/08/01 13:56:03 $
+
+-->
+
+<!--================ Character mnemonic entities =========================-->
+
+<!ENTITY % HTMLlat1 PUBLIC
+   "-//W3C//ENTITIES Latin 1 for XHTML//EN"
+   "xhtml-lat1.ent">
+%HTMLlat1;
+
+<!ENTITY % HTMLsymbol PUBLIC
+   "-//W3C//ENTITIES Symbols for XHTML//EN"
+   "xhtml-symbol.ent">
+%HTMLsymbol;
+
+<!ENTITY % HTMLspecial PUBLIC
+   "-//W3C//ENTITIES Special for XHTML//EN"
+   "xhtml-special.ent">
+%HTMLspecial;
+
+<!--================== Imported Names ====================================-->
+
+<!ENTITY % ContentType "CDATA">
+    <!-- media type, as per [RFC2045] -->
+
+<!ENTITY % ContentTypes "CDATA">
+    <!-- comma-separated list of media types, as per [RFC2045] -->
+
+<!ENTITY % Charset "CDATA">
+    <!-- a character encoding, as per [RFC2045] -->
+
+<!ENTITY % Charsets "CDATA">
+    <!-- a space separated list of character encodings, as per [RFC2045] -->
+
+<!ENTITY % LanguageCode "NMTOKEN">
+    <!-- a language code, as per [RFC3066] -->
+
+<!ENTITY % Character "CDATA">
+    <!-- a single character, as per section 2.2 of [XML] -->
+
+<!ENTITY % Number "CDATA">
+    <!-- one or more digits -->
+
+<!ENTITY % LinkTypes "CDATA">
+    <!-- space-separated list of link types -->
+
+<!ENTITY % MediaDesc "CDATA">
+    <!-- single or comma-separated list of media descriptors -->
+
+<!ENTITY % URI "CDATA">
+    <!-- a Uniform Resource Identifier, see [RFC2396] -->
+
+<!ENTITY % UriList "CDATA">
+    <!-- a space separated list of Uniform Resource Identifiers -->
+
+<!ENTITY % Datetime "CDATA">
+    <!-- date and time information. ISO date format -->
+
+<!ENTITY % Script "CDATA">
+    <!-- script expression -->
+
+<!ENTITY % StyleSheet "CDATA">
+    <!-- style sheet data -->
+
+<!ENTITY % Text "CDATA">
+    <!-- used for titles etc. -->
+
+<!ENTITY % Length "CDATA">
+    <!-- nn for pixels or nn% for percentage length -->
+
+<!ENTITY % MultiLength "CDATA">
+    <!-- pixel, percentage, or relative -->
+
+<!ENTITY % Pixels "CDATA">
+    <!-- integer representing length in pixels -->
+
+<!-- these are used for image maps -->
+
+<!ENTITY % Shape "(rect|circle|poly|default)">
+
+<!ENTITY % Coords "CDATA">
+    <!-- comma separated list of lengths -->
+
+<!--=================== Generic Attributes ===============================-->
+
+<!-- core attributes common to most elements
+  id       document-wide unique id
+  class    space separated list of classes
+  style    associated style info
+  title    advisory title/amplification
+-->
+<!ENTITY % coreattrs
+ "id          ID             #IMPLIED
+  class       CDATA          #IMPLIED
+  style       %StyleSheet;   #IMPLIED
+  title       %Text;         #IMPLIED"
+  >
+
+<!-- internationalization attributes
+  lang        language code (backwards compatible)
+  xml:lang    language code (as per XML 1.0 spec)
+  dir         direction for weak/neutral text
+-->
+<!ENTITY % i18n
+ "lang        %LanguageCode; #IMPLIED
+  xml:lang    %LanguageCode; #IMPLIED
+  dir         (ltr|rtl)      #IMPLIED"
+  >
+
+<!-- attributes for common UI events
+  onclick     a pointer button was clicked
+  ondblclick  a pointer button was double clicked
+  onmousedown a pointer button was pressed down
+  onmouseup   a pointer button was released
+  onmousemove a pointer was moved onto the element
+  onmouseout  a pointer was moved away from the element
+  onkeypress  a key was pressed and released
+  onkeydown   a key was pressed down
+  onkeyup     a key was released
+-->
+<!ENTITY % events
+ "onclick     %Script;       #IMPLIED
+  ondblclick  %Script;       #IMPLIED
+  onmousedown %Script;       #IMPLIED
+  onmouseup   %Script;       #IMPLIED
+  onmouseover %Script;       #IMPLIED
+  onmousemove %Script;       #IMPLIED
+  onmouseout  %Script;       #IMPLIED
+  onkeypress  %Script;       #IMPLIED
+  onkeydown   %Script;       #IMPLIED
+  onkeyup     %Script;       #IMPLIED"
+  >
+
+<!-- attributes for elements that can get the focus
+  accesskey   accessibility key character
+  tabindex    position in tabbing order
+  onfocus     the element got the focus
+  onblur      the element lost the focus
+-->
+<!ENTITY % focus
+ "accesskey   %Character;    #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED"
+  >
+
+<!ENTITY % attrs "%coreattrs; %i18n; %events;">
+
+<!--=================== Text Elements ====================================-->
+
+<!ENTITY % special.pre
+   "br | span | bdo | map">
+
+
+<!ENTITY % special
+   "%special.pre; | object | img ">
+
+<!ENTITY % fontstyle "tt | i | b | big | small ">
+
+<!ENTITY % phrase "em | strong | dfn | code | q |
+                   samp | kbd | var | cite | abbr | acronym | sub | sup ">
+
+<!ENTITY % inline.forms "input | select | textarea | label | button">
+
+<!-- these can occur at block or inline level -->
+<!ENTITY % misc.inline "ins | del | script">
+
+<!-- these can only occur at block level -->
+<!ENTITY % misc "noscript | %misc.inline;">
+
+<!ENTITY % inline "a | %special; | %fontstyle; | %phrase; | %inline.forms;">
+
+<!-- %Inline; covers inline or "text-level" elements -->
+<!ENTITY % Inline "(#PCDATA | %inline; | %misc.inline;)*">
+
+<!--================== Block level elements ==============================-->
+
+<!ENTITY % heading "h1|h2|h3|h4|h5|h6">
+<!ENTITY % lists "ul | ol | dl">
+<!ENTITY % blocktext "pre | hr | blockquote | address">
+
+<!ENTITY % block
+     "p | %heading; | div | %lists; | %blocktext; | fieldset | table">
+
+<!ENTITY % Block "(%block; | form | %misc;)*">
+
+<!-- %Flow; mixes block and inline and is used for list items etc. -->
+<!ENTITY % Flow "(#PCDATA | %block; | form | %inline; | %misc;)*">
+
+<!--================== Content models for exclusions =====================-->
+
+<!-- a elements use %Inline; excluding a -->
+
+<!ENTITY % a.content
+   "(#PCDATA | %special; | %fontstyle; | %phrase; | %inline.forms; | %misc.inline;)*">
+
+<!-- pre uses %Inline excluding big, small, sup or sup -->
+
+<!ENTITY % pre.content
+   "(#PCDATA | a | %fontstyle; | %phrase; | %special.pre; | %misc.inline;
+      | %inline.forms;)*">
+
+<!-- form uses %Block; excluding form -->
+
+<!ENTITY % form.content "(%block; | %misc;)*">
+
+<!-- button uses %Flow; but excludes a, form and form controls -->
+
+<!ENTITY % button.content
+   "(#PCDATA | p | %heading; | div | %lists; | %blocktext; |
+    table | %special; | %fontstyle; | %phrase; | %misc;)*">
+
+<!--================ Document Structure ==================================-->
+
+<!-- the namespace URI designates the document profile -->
+
+<!ELEMENT html (head, body)>
+<!ATTLIST html
+  %i18n;
+  id          ID             #IMPLIED
+  xmlns       %URI;          #FIXED 'http://www.w3.org/1999/xhtml'
+  >
+
+<!--================ Document Head =======================================-->
+
+<!ENTITY % head.misc "(script|style|meta|link|object)*">
+
+<!-- content model is %head.misc; combined with a single
+     title and an optional base element in any order -->
+
+<!ELEMENT head (%head.misc;,
+     ((title, %head.misc;, (base, %head.misc;)?) |
+      (base, %head.misc;, (title, %head.misc;))))>
+
+<!ATTLIST head
+  %i18n;
+  id          ID             #IMPLIED
+  profile     %URI;          #IMPLIED
+  >
+
+<!-- The title element is not considered part of the flow of text.
+       It should be displayed, for example as the page header or
+       window title. Exactly one title is required per document.
+    -->
+<!ELEMENT title (#PCDATA)>
+<!ATTLIST title 
+  %i18n;
+  id          ID             #IMPLIED
+  >
+
+<!-- document base URI -->
+
+<!ELEMENT base EMPTY>
+<!ATTLIST base
+  href        %URI;          #REQUIRED
+  id          ID             #IMPLIED
+  >
+
+<!-- generic metainformation -->
+<!ELEMENT meta EMPTY>
+<!ATTLIST meta
+  %i18n;
+  id          ID             #IMPLIED
+  http-equiv  CDATA          #IMPLIED
+  name        CDATA          #IMPLIED
+  content     CDATA          #REQUIRED
+  scheme      CDATA          #IMPLIED
+  >
+
+<!--
+  Relationship values can be used in principle:
+
+   a) for document specific toolbars/menus when used
+      with the link element in document head e.g.
+        start, contents, previous, next, index, end, help
+   b) to link to a separate style sheet (rel="stylesheet")
+   c) to make a link to a script (rel="script")
+   d) by stylesheets to control how collections of
+      html nodes are rendered into printed documents
+   e) to make a link to a printable version of this document
+      e.g. a PostScript or PDF version (rel="alternate" media="print")
+-->
+
+<!ELEMENT link EMPTY>
+<!ATTLIST link
+  %attrs;
+  charset     %Charset;      #IMPLIED
+  href        %URI;          #IMPLIED
+  hreflang    %LanguageCode; #IMPLIED
+  type        %ContentType;  #IMPLIED
+  rel         %LinkTypes;    #IMPLIED
+  rev         %LinkTypes;    #IMPLIED
+  media       %MediaDesc;    #IMPLIED
+  >
+
+<!-- style info, which may include CDATA sections -->
+<!ELEMENT style (#PCDATA)>
+<!ATTLIST style
+  %i18n;
+  id          ID             #IMPLIED
+  type        %ContentType;  #REQUIRED
+  media       %MediaDesc;    #IMPLIED
+  title       %Text;         #IMPLIED
+  xml:space   (preserve)     #FIXED 'preserve'
+  >
+
+<!-- script statements, which may include CDATA sections -->
+<!ELEMENT script (#PCDATA)>
+<!ATTLIST script
+  id          ID             #IMPLIED
+  charset     %Charset;      #IMPLIED
+  type        %ContentType;  #REQUIRED
+  src         %URI;          #IMPLIED
+  defer       (defer)        #IMPLIED
+  xml:space   (preserve)     #FIXED 'preserve'
+  >
+
+<!-- alternate content container for non script-based rendering -->
+
+<!ELEMENT noscript %Block;>
+<!ATTLIST noscript
+  %attrs;
+  >
+
+<!--=================== Document Body ====================================-->
+
+<!ELEMENT body %Block;>
+<!ATTLIST body
+  %attrs;
+  onload          %Script;   #IMPLIED
+  onunload        %Script;   #IMPLIED
+  >
+
+<!ELEMENT div %Flow;>  <!-- generic language/style container -->
+<!ATTLIST div
+  %attrs;
+  >
+
+<!--=================== Paragraphs =======================================-->
+
+<!ELEMENT p %Inline;>
+<!ATTLIST p
+  %attrs;
+  >
+
+<!--=================== Headings =========================================-->
+
+<!--
+  There are six levels of headings from h1 (the most important)
+  to h6 (the least important).
+-->
+
+<!ELEMENT h1  %Inline;>
+<!ATTLIST h1
+   %attrs;
+   >
+
+<!ELEMENT h2 %Inline;>
+<!ATTLIST h2
+   %attrs;
+   >
+
+<!ELEMENT h3 %Inline;>
+<!ATTLIST h3
+   %attrs;
+   >
+
+<!ELEMENT h4 %Inline;>
+<!ATTLIST h4
+   %attrs;
+   >
+
+<!ELEMENT h5 %Inline;>
+<!ATTLIST h5
+   %attrs;
+   >
+
+<!ELEMENT h6 %Inline;>
+<!ATTLIST h6
+   %attrs;
+   >
+
+<!--=================== Lists ============================================-->
+
+<!-- Unordered list -->
+
+<!ELEMENT ul (li)+>
+<!ATTLIST ul
+  %attrs;
+  >
+
+<!-- Ordered (numbered) list -->
+
+<!ELEMENT ol (li)+>
+<!ATTLIST ol
+  %attrs;
+  >
+
+<!-- list item -->
+
+<!ELEMENT li %Flow;>
+<!ATTLIST li
+  %attrs;
+  >
+
+<!-- definition lists - dt for term, dd for its definition -->
+
+<!ELEMENT dl (dt|dd)+>
+<!ATTLIST dl
+  %attrs;
+  >
+
+<!ELEMENT dt %Inline;>
+<!ATTLIST dt
+  %attrs;
+  >
+
+<!ELEMENT dd %Flow;>
+<!ATTLIST dd
+  %attrs;
+  >
+
+<!--=================== Address ==========================================-->
+
+<!-- information on author -->
+
+<!ELEMENT address %Inline;>
+<!ATTLIST address
+  %attrs;
+  >
+
+<!--=================== Horizontal Rule ==================================-->
+
+<!ELEMENT hr EMPTY>
+<!ATTLIST hr
+  %attrs;
+  >
+
+<!--=================== Preformatted Text ================================-->
+
+<!-- content is %Inline; excluding "img|object|big|small|sub|sup" -->
+
+<!ELEMENT pre %pre.content;>
+<!ATTLIST pre
+  %attrs;
+  xml:space (preserve) #FIXED 'preserve'
+  >
+
+<!--=================== Block-like Quotes ================================-->
+
+<!ELEMENT blockquote %Block;>
+<!ATTLIST blockquote
+  %attrs;
+  cite        %URI;          #IMPLIED
+  >
+
+<!--=================== Inserted/Deleted Text ============================-->
+
+<!--
+  ins/del are allowed in block and inline content, but its
+  inappropriate to include block content within an ins element
+  occurring in inline content.
+-->
+<!ELEMENT ins %Flow;>
+<!ATTLIST ins
+  %attrs;
+  cite        %URI;          #IMPLIED
+  datetime    %Datetime;     #IMPLIED
+  >
+
+<!ELEMENT del %Flow;>
+<!ATTLIST del
+  %attrs;
+  cite        %URI;          #IMPLIED
+  datetime    %Datetime;     #IMPLIED
+  >
+
+<!--================== The Anchor Element ================================-->
+
+<!-- content is %Inline; except that anchors shouldn't be nested -->
+
+<!ELEMENT a %a.content;>
+<!ATTLIST a
+  %attrs;
+  %focus;
+  charset     %Charset;      #IMPLIED
+  type        %ContentType;  #IMPLIED
+  name        NMTOKEN        #IMPLIED
+  href        %URI;          #IMPLIED
+  hreflang    %LanguageCode; #IMPLIED
+  rel         %LinkTypes;    #IMPLIED
+  rev         %LinkTypes;    #IMPLIED
+  shape       %Shape;        "rect"
+  coords      %Coords;       #IMPLIED
+  >
+
+<!--===================== Inline Elements ================================-->
+
+<!ELEMENT span %Inline;> <!-- generic language/style container -->
+<!ATTLIST span
+  %attrs;
+  >
+
+<!ELEMENT bdo %Inline;>  <!-- I18N BiDi over-ride -->
+<!ATTLIST bdo
+  %coreattrs;
+  %events;
+  lang        %LanguageCode; #IMPLIED
+  xml:lang    %LanguageCode; #IMPLIED
+  dir         (ltr|rtl)      #REQUIRED
+  >
+
+<!ELEMENT br EMPTY>   <!-- forced line break -->
+<!ATTLIST br
+  %coreattrs;
+  >
+
+<!ELEMENT em %Inline;>   <!-- emphasis -->
+<!ATTLIST em %attrs;>
+
+<!ELEMENT strong %Inline;>   <!-- strong emphasis -->
+<!ATTLIST strong %attrs;>
+
+<!ELEMENT dfn %Inline;>   <!-- definitional -->
+<!ATTLIST dfn %attrs;>
+
+<!ELEMENT code %Inline;>   <!-- program code -->
+<!ATTLIST code %attrs;>
+
+<!ELEMENT samp %Inline;>   <!-- sample -->
+<!ATTLIST samp %attrs;>
+
+<!ELEMENT kbd %Inline;>  <!-- something user would type -->
+<!ATTLIST kbd %attrs;>
+
+<!ELEMENT var %Inline;>   <!-- variable -->
+<!ATTLIST var %attrs;>
+
+<!ELEMENT cite %Inline;>   <!-- citation -->
+<!ATTLIST cite %attrs;>
+
+<!ELEMENT abbr %Inline;>   <!-- abbreviation -->
+<!ATTLIST abbr %attrs;>
+
+<!ELEMENT acronym %Inline;>   <!-- acronym -->
+<!ATTLIST acronym %attrs;>
+
+<!ELEMENT q %Inline;>   <!-- inlined quote -->
+<!ATTLIST q
+  %attrs;
+  cite        %URI;          #IMPLIED
+  >
+
+<!ELEMENT sub %Inline;> <!-- subscript -->
+<!ATTLIST sub %attrs;>
+
+<!ELEMENT sup %Inline;> <!-- superscript -->
+<!ATTLIST sup %attrs;>
+
+<!ELEMENT tt %Inline;>   <!-- fixed pitch font -->
+<!ATTLIST tt %attrs;>
+
+<!ELEMENT i %Inline;>   <!-- italic font -->
+<!ATTLIST i %attrs;>
+
+<!ELEMENT b %Inline;>   <!-- bold font -->
+<!ATTLIST b %attrs;>
+
+<!ELEMENT big %Inline;>   <!-- bigger font -->
+<!ATTLIST big %attrs;>
+
+<!ELEMENT small %Inline;>   <!-- smaller font -->
+<!ATTLIST small %attrs;>
+
+<!--==================== Object ======================================-->
+<!--
+  object is used to embed objects as part of HTML pages.
+  param elements should precede other content. Parameters
+  can also be expressed as attribute/value pairs on the
+  object element itself when brevity is desired.
+-->
+
+<!ELEMENT object (#PCDATA | param | %block; | form | %inline; | %misc;)*>
+<!ATTLIST object
+  %attrs;
+  declare     (declare)      #IMPLIED
+  classid     %URI;          #IMPLIED
+  codebase    %URI;          #IMPLIED
+  data        %URI;          #IMPLIED
+  type        %ContentType;  #IMPLIED
+  codetype    %ContentType;  #IMPLIED
+  archive     %UriList;      #IMPLIED
+  standby     %Text;         #IMPLIED
+  height      %Length;       #IMPLIED
+  width       %Length;       #IMPLIED
+  usemap      %URI;          #IMPLIED
+  name        NMTOKEN        #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  >
+
+<!--
+  param is used to supply a named property value.
+  In XML it would seem natural to follow RDF and support an
+  abbreviated syntax where the param elements are replaced
+  by attribute value pairs on the object start tag.
+-->
+<!ELEMENT param EMPTY>
+<!ATTLIST param
+  id          ID             #IMPLIED
+  name        CDATA          #IMPLIED
+  value       CDATA          #IMPLIED
+  valuetype   (data|ref|object) "data"
+  type        %ContentType;  #IMPLIED
+  >
+
+<!--=================== Images ===========================================-->
+
+<!--
+   To avoid accessibility problems for people who aren't
+   able to see the image, you should provide a text
+   description using the alt and longdesc attributes.
+   In addition, avoid the use of server-side image maps.
+   Note that in this DTD there is no name attribute. That
+   is only available in the transitional and frameset DTD.
+-->
+
+<!ELEMENT img EMPTY>
+<!ATTLIST img
+  %attrs;
+  src         %URI;          #REQUIRED
+  alt         %Text;         #REQUIRED
+  longdesc    %URI;          #IMPLIED
+  height      %Length;       #IMPLIED
+  width       %Length;       #IMPLIED
+  usemap      %URI;          #IMPLIED
+  ismap       (ismap)        #IMPLIED
+  >
+
+<!-- usemap points to a map element which may be in this document
+  or an external document, although the latter is not widely supported -->
+
+<!--================== Client-side image maps ============================-->
+
+<!-- These can be placed in the same document or grouped in a
+     separate document although this isn't yet widely supported -->
+
+<!ELEMENT map ((%block; | form | %misc;)+ | area+)>
+<!ATTLIST map
+  %i18n;
+  %events;
+  id          ID             #REQUIRED
+  class       CDATA          #IMPLIED
+  style       %StyleSheet;   #IMPLIED
+  title       %Text;         #IMPLIED
+  name        NMTOKEN        #IMPLIED
+  >
+
+<!ELEMENT area EMPTY>
+<!ATTLIST area
+  %attrs;
+  %focus;
+  shape       %Shape;        "rect"
+  coords      %Coords;       #IMPLIED
+  href        %URI;          #IMPLIED
+  nohref      (nohref)       #IMPLIED
+  alt         %Text;         #REQUIRED
+  >
+
+<!--================ Forms ===============================================-->
+<!ELEMENT form %form.content;>   <!-- forms shouldn't be nested -->
+
+<!ATTLIST form
+  %attrs;
+  action      %URI;          #REQUIRED
+  method      (get|post)     "get"
+  enctype     %ContentType;  "application/x-www-form-urlencoded"
+  onsubmit    %Script;       #IMPLIED
+  onreset     %Script;       #IMPLIED
+  accept      %ContentTypes; #IMPLIED
+  accept-charset %Charsets;  #IMPLIED
+  >
+
+<!--
+  Each label must not contain more than ONE field
+  Label elements shouldn't be nested.
+-->
+<!ELEMENT label %Inline;>
+<!ATTLIST label
+  %attrs;
+  for         IDREF          #IMPLIED
+  accesskey   %Character;    #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  >
+
+<!ENTITY % InputType
+  "(text | password | checkbox |
+    radio | submit | reset |
+    file | hidden | image | button)"
+   >
+
+<!-- the name attribute is required for all but submit & reset -->
+
+<!ELEMENT input EMPTY>     <!-- form control -->
+<!ATTLIST input
+  %attrs;
+  %focus;
+  type        %InputType;    "text"
+  name        CDATA          #IMPLIED
+  value       CDATA          #IMPLIED
+  checked     (checked)      #IMPLIED
+  disabled    (disabled)     #IMPLIED
+  readonly    (readonly)     #IMPLIED
+  size        CDATA          #IMPLIED
+  maxlength   %Number;       #IMPLIED
+  src         %URI;          #IMPLIED
+  alt         CDATA          #IMPLIED
+  usemap      %URI;          #IMPLIED
+  onselect    %Script;       #IMPLIED
+  onchange    %Script;       #IMPLIED
+  accept      %ContentTypes; #IMPLIED
+  >
+
+<!ELEMENT select (optgroup|option)+>  <!-- option selector -->
+<!ATTLIST select
+  %attrs;
+  name        CDATA          #IMPLIED
+  size        %Number;       #IMPLIED
+  multiple    (multiple)     #IMPLIED
+  disabled    (disabled)     #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  onchange    %Script;       #IMPLIED
+  >
+
+<!ELEMENT optgroup (option)+>   <!-- option group -->
+<!ATTLIST optgroup
+  %attrs;
+  disabled    (disabled)     #IMPLIED
+  label       %Text;         #REQUIRED
+  >
+
+<!ELEMENT option (#PCDATA)>     <!-- selectable choice -->
+<!ATTLIST option
+  %attrs;
+  selected    (selected)     #IMPLIED
+  disabled    (disabled)     #IMPLIED
+  label       %Text;         #IMPLIED
+  value       CDATA          #IMPLIED
+  >
+
+<!ELEMENT textarea (#PCDATA)>     <!-- multi-line text field -->
+<!ATTLIST textarea
+  %attrs;
+  %focus;
+  name        CDATA          #IMPLIED
+  rows        %Number;       #REQUIRED
+  cols        %Number;       #REQUIRED
+  disabled    (disabled)     #IMPLIED
+  readonly    (readonly)     #IMPLIED
+  onselect    %Script;       #IMPLIED
+  onchange    %Script;       #IMPLIED
+  >
+
+<!--
+  The fieldset element is used to group form fields.
+  Only one legend element should occur in the content
+  and if present should only be preceded by whitespace.
+-->
+<!ELEMENT fieldset (#PCDATA | legend | %block; | form | %inline; | %misc;)*>
+<!ATTLIST fieldset
+  %attrs;
+  >
+
+<!ELEMENT legend %Inline;>     <!-- fieldset label -->
+<!ATTLIST legend
+  %attrs;
+  accesskey   %Character;    #IMPLIED
+  >
+
+<!--
+ Content is %Flow; excluding a, form and form controls
+--> 
+<!ELEMENT button %button.content;>  <!-- push button -->
+<!ATTLIST button
+  %attrs;
+  %focus;
+  name        CDATA          #IMPLIED
+  value       CDATA          #IMPLIED
+  type        (button|submit|reset) "submit"
+  disabled    (disabled)     #IMPLIED
+  >
+
+<!--======================= Tables =======================================-->
+
+<!-- Derived from IETF HTML table standard, see [RFC1942] -->
+
+<!--
+ The border attribute sets the thickness of the frame around the
+ table. The default units are screen pixels.
+
+ The frame attribute specifies which parts of the frame around
+ the table should be rendered. The values are not the same as
+ CALS to avoid a name clash with the valign attribute.
+-->
+<!ENTITY % TFrame "(void|above|below|hsides|lhs|rhs|vsides|box|border)">
+
+<!--
+ The rules attribute defines which rules to draw between cells:
+
+ If rules is absent then assume:
+     "none" if border is absent or border="0" otherwise "all"
+-->
+
+<!ENTITY % TRules "(none | groups | rows | cols | all)">
+  
+<!-- horizontal alignment attributes for cell contents
+
+  char        alignment char, e.g. char=':'
+  charoff     offset for alignment char
+-->
+<!ENTITY % cellhalign
+  "align      (left|center|right|justify|char) #IMPLIED
+   char       %Character;    #IMPLIED
+   charoff    %Length;       #IMPLIED"
+  >
+
+<!-- vertical alignment attributes for cell contents -->
+<!ENTITY % cellvalign
+  "valign     (top|middle|bottom|baseline) #IMPLIED"
+  >
+
+<!ELEMENT table
+     (caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))>
+<!ELEMENT caption  %Inline;>
+<!ELEMENT thead    (tr)+>
+<!ELEMENT tfoot    (tr)+>
+<!ELEMENT tbody    (tr)+>
+<!ELEMENT colgroup (col)*>
+<!ELEMENT col      EMPTY>
+<!ELEMENT tr       (th|td)+>
+<!ELEMENT th       %Flow;>
+<!ELEMENT td       %Flow;>
+
+<!ATTLIST table
+  %attrs;
+  summary     %Text;         #IMPLIED
+  width       %Length;       #IMPLIED
+  border      %Pixels;       #IMPLIED
+  frame       %TFrame;       #IMPLIED
+  rules       %TRules;       #IMPLIED
+  cellspacing %Length;       #IMPLIED
+  cellpadding %Length;       #IMPLIED
+  >
+
+<!ATTLIST caption
+  %attrs;
+  >
+
+<!--
+colgroup groups a set of col elements. It allows you to group
+several semantically related columns together.
+-->
+<!ATTLIST colgroup
+  %attrs;
+  span        %Number;       "1"
+  width       %MultiLength;  #IMPLIED
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!--
+ col elements define the alignment properties for cells in
+ one or more columns.
+
+ The width attribute specifies the width of the columns, e.g.
+
+     width=64        width in screen pixels
+     width=0.5*      relative width of 0.5
+
+ The span attribute causes the attributes of one
+ col element to apply to more than one column.
+-->
+<!ATTLIST col
+  %attrs;
+  span        %Number;       "1"
+  width       %MultiLength;  #IMPLIED
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!--
+    Use thead to duplicate headers when breaking table
+    across page boundaries, or for static headers when
+    tbody sections are rendered in scrolling panel.
+
+    Use tfoot to duplicate footers when breaking table
+    across page boundaries, or for static footers when
+    tbody sections are rendered in scrolling panel.
+
+    Use multiple tbody sections when rules are needed
+    between groups of table rows.
+-->
+<!ATTLIST thead
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!ATTLIST tfoot
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!ATTLIST tbody
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!ATTLIST tr
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+
+<!-- Scope is simpler than headers attribute for common tables -->
+<!ENTITY % Scope "(row|col|rowgroup|colgroup)">
+
+<!-- th is for headers, td for data and for cells acting as both -->
+
+<!ATTLIST th
+  %attrs;
+  abbr        %Text;         #IMPLIED
+  axis        CDATA          #IMPLIED
+  headers     IDREFS         #IMPLIED
+  scope       %Scope;        #IMPLIED
+  rowspan     %Number;       "1"
+  colspan     %Number;       "1"
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!ATTLIST td
+  %attrs;
+  abbr        %Text;         #IMPLIED
+  axis        CDATA          #IMPLIED
+  headers     IDREFS         #IMPLIED
+  scope       %Scope;        #IMPLIED
+  rowspan     %Number;       "1"
+  colspan     %Number;       "1"
+  %cellhalign;
+  %cellvalign;
+  >
+
+
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/dtd/xhtml1-transitional.dtd b/src/main/resources/com/adobe/epubcheck/schema/20/dtd/xhtml1-transitional.dtd
new file mode 100644
index 0000000..f0367b1
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/dtd/xhtml1-transitional.dtd
@@ -0,0 +1,1200 @@
+<!--
+   Extensible HTML version 1.0 Transitional DTD
+
+   This is the same as HTML 4 Transitional except for
+   changes due to the differences between XML and SGML.
+
+   Namespace = http://www.w3.org/1999/xhtml
+
+   For further information, see: http://www.w3.org/TR/xhtml1
+
+   Copyright (c) 1998-2002 W3C (MIT, INRIA, Keio),
+   All Rights Reserved. 
+
+   This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+   PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+   SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
+
+   $Revision: 1.2 $
+   $Date: 2002/08/01 18:37:55 $
+
+-->
+
+<!--================ Character mnemonic entities =========================-->
+
+<!ENTITY % HTMLlat1 PUBLIC
+   "-//W3C//ENTITIES Latin 1 for XHTML//EN"
+   "xhtml-lat1.ent">
+%HTMLlat1;
+
+<!ENTITY % HTMLsymbol PUBLIC
+   "-//W3C//ENTITIES Symbols for XHTML//EN"
+   "xhtml-symbol.ent">
+%HTMLsymbol;
+
+<!ENTITY % HTMLspecial PUBLIC
+   "-//W3C//ENTITIES Special for XHTML//EN"
+   "xhtml-special.ent">
+%HTMLspecial;
+
+<!--================== Imported Names ====================================-->
+
+<!ENTITY % ContentType "CDATA">
+    <!-- media type, as per [RFC2045] -->
+
+<!ENTITY % ContentTypes "CDATA">
+    <!-- comma-separated list of media types, as per [RFC2045] -->
+
+<!ENTITY % Charset "CDATA">
+    <!-- a character encoding, as per [RFC2045] -->
+
+<!ENTITY % Charsets "CDATA">
+    <!-- a space separated list of character encodings, as per [RFC2045] -->
+
+<!ENTITY % LanguageCode "NMTOKEN">
+    <!-- a language code, as per [RFC3066] -->
+
+<!ENTITY % Character "CDATA">
+    <!-- a single character, as per section 2.2 of [XML] -->
+
+<!ENTITY % Number "CDATA">
+    <!-- one or more digits -->
+
+<!ENTITY % LinkTypes "CDATA">
+    <!-- space-separated list of link types -->
+
+<!ENTITY % MediaDesc "CDATA">
+    <!-- single or comma-separated list of media descriptors -->
+
+<!ENTITY % URI "CDATA">
+    <!-- a Uniform Resource Identifier, see [RFC2396] -->
+
+<!ENTITY % UriList "CDATA">
+    <!-- a space separated list of Uniform Resource Identifiers -->
+
+<!ENTITY % Datetime "CDATA">
+    <!-- date and time information. ISO date format -->
+
+<!ENTITY % Script "CDATA">
+    <!-- script expression -->
+
+<!ENTITY % StyleSheet "CDATA">
+    <!-- style sheet data -->
+
+<!ENTITY % Text "CDATA">
+    <!-- used for titles etc. -->
+
+<!ENTITY % FrameTarget "NMTOKEN">
+    <!-- render in this frame -->
+
+<!ENTITY % Length "CDATA">
+    <!-- nn for pixels or nn% for percentage length -->
+
+<!ENTITY % MultiLength "CDATA">
+    <!-- pixel, percentage, or relative -->
+
+<!ENTITY % Pixels "CDATA">
+    <!-- integer representing length in pixels -->
+
+<!-- these are used for image maps -->
+
+<!ENTITY % Shape "(rect|circle|poly|default)">
+
+<!ENTITY % Coords "CDATA">
+    <!-- comma separated list of lengths -->
+
+<!-- used for object, applet, img, input and iframe -->
+<!ENTITY % ImgAlign "(top|middle|bottom|left|right)">
+
+<!-- a color using sRGB: #RRGGBB as Hex values -->
+<!ENTITY % Color "CDATA">
+
+<!-- There are also 16 widely known color names with their sRGB values:
+
+    Black  = #000000    Green  = #008000
+    Silver = #C0C0C0    Lime   = #00FF00
+    Gray   = #808080    Olive  = #808000
+    White  = #FFFFFF    Yellow = #FFFF00
+    Maroon = #800000    Navy   = #000080
+    Red    = #FF0000    Blue   = #0000FF
+    Purple = #800080    Teal   = #008080
+    Fuchsia= #FF00FF    Aqua   = #00FFFF
+-->
+
+<!--=================== Generic Attributes ===============================-->
+
+<!-- core attributes common to most elements
+  id       document-wide unique id
+  class    space separated list of classes
+  style    associated style info
+  title    advisory title/amplification
+-->
+<!ENTITY % coreattrs
+ "id          ID             #IMPLIED
+  class       CDATA          #IMPLIED
+  style       %StyleSheet;   #IMPLIED
+  title       %Text;         #IMPLIED"
+  >
+
+<!-- internationalization attributes
+  lang        language code (backwards compatible)
+  xml:lang    language code (as per XML 1.0 spec)
+  dir         direction for weak/neutral text
+-->
+<!ENTITY % i18n
+ "lang        %LanguageCode; #IMPLIED
+  xml:lang    %LanguageCode; #IMPLIED
+  dir         (ltr|rtl)      #IMPLIED"
+  >
+
+<!-- attributes for common UI events
+  onclick     a pointer button was clicked
+  ondblclick  a pointer button was double clicked
+  onmousedown a pointer button was pressed down
+  onmouseup   a pointer button was released
+  onmousemove a pointer was moved onto the element
+  onmouseout  a pointer was moved away from the element
+  onkeypress  a key was pressed and released
+  onkeydown   a key was pressed down
+  onkeyup     a key was released
+-->
+<!ENTITY % events
+ "onclick     %Script;       #IMPLIED
+  ondblclick  %Script;       #IMPLIED
+  onmousedown %Script;       #IMPLIED
+  onmouseup   %Script;       #IMPLIED
+  onmouseover %Script;       #IMPLIED
+  onmousemove %Script;       #IMPLIED
+  onmouseout  %Script;       #IMPLIED
+  onkeypress  %Script;       #IMPLIED
+  onkeydown   %Script;       #IMPLIED
+  onkeyup     %Script;       #IMPLIED"
+  >
+
+<!-- attributes for elements that can get the focus
+  accesskey   accessibility key character
+  tabindex    position in tabbing order
+  onfocus     the element got the focus
+  onblur      the element lost the focus
+-->
+<!ENTITY % focus
+ "accesskey   %Character;    #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED"
+  >
+
+<!ENTITY % attrs "%coreattrs; %i18n; %events;">
+
+<!-- text alignment for p, div, h1-h6. The default is
+     align="left" for ltr headings, "right" for rtl -->
+
+<!ENTITY % TextAlign "align (left|center|right|justify) #IMPLIED">
+
+<!--=================== Text Elements ====================================-->
+
+<!ENTITY % special.extra
+   "object | applet | img | map | iframe">
+	
+<!ENTITY % special.basic
+	"br | span | bdo">
+
+<!ENTITY % special
+   "%special.basic; | %special.extra;">
+
+<!ENTITY % fontstyle.extra "big | small | font | basefont">
+
+<!ENTITY % fontstyle.basic "tt | i | b | u
+                      | s | strike ">
+
+<!ENTITY % fontstyle "%fontstyle.basic; | %fontstyle.extra;">
+
+<!ENTITY % phrase.extra "sub | sup">
+<!ENTITY % phrase.basic "em | strong | dfn | code | q |
+                   samp | kbd | var | cite | abbr | acronym">
+
+<!ENTITY % phrase "%phrase.basic; | %phrase.extra;">
+
+<!ENTITY % inline.forms "input | select | textarea | label | button">
+
+<!-- these can occur at block or inline level -->
+<!ENTITY % misc.inline "ins | del | script">
+
+<!-- these can only occur at block level -->
+<!ENTITY % misc "noscript | %misc.inline;">
+
+<!ENTITY % inline "a | %special; | %fontstyle; | %phrase; | %inline.forms;">
+
+<!-- %Inline; covers inline or "text-level" elements -->
+<!ENTITY % Inline "(#PCDATA | %inline; | %misc.inline;)*">
+
+<!--================== Block level elements ==============================-->
+
+<!ENTITY % heading "h1|h2|h3|h4|h5|h6">
+<!ENTITY % lists "ul | ol | dl | menu | dir">
+<!ENTITY % blocktext "pre | hr | blockquote | address | center | noframes">
+
+<!ENTITY % block
+    "p | %heading; | div | %lists; | %blocktext; | isindex |fieldset | table">
+
+<!-- %Flow; mixes block and inline and is used for list items etc. -->
+<!ENTITY % Flow "(#PCDATA | %block; | form | %inline; | %misc;)*">
+
+<!--================== Content models for exclusions =====================-->
+
+<!-- a elements use %Inline; excluding a -->
+
+<!ENTITY % a.content
+   "(#PCDATA | %special; | %fontstyle; | %phrase; | %inline.forms; | %misc.inline;)*">
+
+<!-- pre uses %Inline excluding img, object, applet, big, small,
+     font, or basefont -->
+
+<!ENTITY % pre.content
+   "(#PCDATA | a | %special.basic; | %fontstyle.basic; | %phrase.basic; |
+	   %inline.forms; | %misc.inline;)*">
+
+<!-- form uses %Flow; excluding form -->
+
+<!ENTITY % form.content "(#PCDATA | %block; | %inline; | %misc;)*">
+
+<!-- button uses %Flow; but excludes a, form, form controls, iframe -->
+
+<!ENTITY % button.content
+   "(#PCDATA | p | %heading; | div | %lists; | %blocktext; |
+      table | br | span | bdo | object | applet | img | map |
+      %fontstyle; | %phrase; | %misc;)*">
+
+<!--================ Document Structure ==================================-->
+
+<!-- the namespace URI designates the document profile -->
+
+<!ELEMENT html (head, body)>
+<!ATTLIST html
+  %i18n;
+  id          ID             #IMPLIED
+  xmlns       %URI;          #FIXED 'http://www.w3.org/1999/xhtml'
+  >
+
+<!--================ Document Head =======================================-->
+
+<!ENTITY % head.misc "(script|style|meta|link|object|isindex)*">
+
+<!-- content model is %head.misc; combined with a single
+     title and an optional base element in any order -->
+
+<!ELEMENT head (%head.misc;,
+     ((title, %head.misc;, (base, %head.misc;)?) |
+      (base, %head.misc;, (title, %head.misc;))))>
+
+<!ATTLIST head
+  %i18n;
+  id          ID             #IMPLIED
+  profile     %URI;          #IMPLIED
+  >
+
+<!-- The title element is not considered part of the flow of text.
+       It should be displayed, for example as the page header or
+       window title. Exactly one title is required per document.
+    -->
+<!ELEMENT title (#PCDATA)>
+<!ATTLIST title 
+  %i18n;
+  id          ID             #IMPLIED
+  >
+
+<!-- document base URI -->
+
+<!ELEMENT base EMPTY>
+<!ATTLIST base
+  id          ID             #IMPLIED
+  href        %URI;          #IMPLIED
+  target      %FrameTarget;  #IMPLIED
+  >
+
+<!-- generic metainformation -->
+<!ELEMENT meta EMPTY>
+<!ATTLIST meta
+  %i18n;
+  id          ID             #IMPLIED
+  http-equiv  CDATA          #IMPLIED
+  name        CDATA          #IMPLIED
+  content     CDATA          #REQUIRED
+  scheme      CDATA          #IMPLIED
+  >
+
+<!--
+  Relationship values can be used in principle:
+
+   a) for document specific toolbars/menus when used
+      with the link element in document head e.g.
+        start, contents, previous, next, index, end, help
+   b) to link to a separate style sheet (rel="stylesheet")
+   c) to make a link to a script (rel="script")
+   d) by stylesheets to control how collections of
+      html nodes are rendered into printed documents
+   e) to make a link to a printable version of this document
+      e.g. a PostScript or PDF version (rel="alternate" media="print")
+-->
+
+<!ELEMENT link EMPTY>
+<!ATTLIST link
+  %attrs;
+  charset     %Charset;      #IMPLIED
+  href        %URI;          #IMPLIED
+  hreflang    %LanguageCode; #IMPLIED
+  type        %ContentType;  #IMPLIED
+  rel         %LinkTypes;    #IMPLIED
+  rev         %LinkTypes;    #IMPLIED
+  media       %MediaDesc;    #IMPLIED
+  target      %FrameTarget;  #IMPLIED
+  >
+
+<!-- style info, which may include CDATA sections -->
+<!ELEMENT style (#PCDATA)>
+<!ATTLIST style
+  %i18n;
+  id          ID             #IMPLIED
+  type        %ContentType;  #REQUIRED
+  media       %MediaDesc;    #IMPLIED
+  title       %Text;         #IMPLIED
+  xml:space   (preserve)     #FIXED 'preserve'
+  >
+
+<!-- script statements, which may include CDATA sections -->
+<!ELEMENT script (#PCDATA)>
+<!ATTLIST script
+  id          ID             #IMPLIED
+  charset     %Charset;      #IMPLIED
+  type        %ContentType;  #REQUIRED
+  language    CDATA          #IMPLIED
+  src         %URI;          #IMPLIED
+  defer       (defer)        #IMPLIED
+  xml:space   (preserve)     #FIXED 'preserve'
+  >
+
+<!-- alternate content container for non script-based rendering -->
+
+<!ELEMENT noscript %Flow;>
+<!ATTLIST noscript
+  %attrs;
+  >
+
+<!--======================= Frames =======================================-->
+
+<!-- inline subwindow -->
+
+<!ELEMENT iframe %Flow;>
+<!ATTLIST iframe
+  %coreattrs;
+  longdesc    %URI;          #IMPLIED
+  name        NMTOKEN        #IMPLIED
+  src         %URI;          #IMPLIED
+  frameborder (1|0)          "1"
+  marginwidth %Pixels;       #IMPLIED
+  marginheight %Pixels;      #IMPLIED
+  scrolling   (yes|no|auto)  "auto"
+  align       %ImgAlign;     #IMPLIED
+  height      %Length;       #IMPLIED
+  width       %Length;       #IMPLIED
+  >
+
+<!-- alternate content container for non frame-based rendering -->
+
+<!ELEMENT noframes %Flow;>
+<!ATTLIST noframes
+  %attrs;
+  >
+
+<!--=================== Document Body ====================================-->
+
+<!ELEMENT body %Flow;>
+<!ATTLIST body
+  %attrs;
+  onload      %Script;       #IMPLIED
+  onunload    %Script;       #IMPLIED
+  background  %URI;          #IMPLIED
+  bgcolor     %Color;        #IMPLIED
+  text        %Color;        #IMPLIED
+  link        %Color;        #IMPLIED
+  vlink       %Color;        #IMPLIED
+  alink       %Color;        #IMPLIED
+  >
+
+<!ELEMENT div %Flow;>  <!-- generic language/style container -->
+<!ATTLIST div
+  %attrs;
+  %TextAlign;
+  >
+
+<!--=================== Paragraphs =======================================-->
+
+<!ELEMENT p %Inline;>
+<!ATTLIST p
+  %attrs;
+  %TextAlign;
+  >
+
+<!--=================== Headings =========================================-->
+
+<!--
+  There are six levels of headings from h1 (the most important)
+  to h6 (the least important).
+-->
+
+<!ELEMENT h1  %Inline;>
+<!ATTLIST h1
+  %attrs;
+  %TextAlign;
+  >
+
+<!ELEMENT h2 %Inline;>
+<!ATTLIST h2
+  %attrs;
+  %TextAlign;
+  >
+
+<!ELEMENT h3 %Inline;>
+<!ATTLIST h3
+  %attrs;
+  %TextAlign;
+  >
+
+<!ELEMENT h4 %Inline;>
+<!ATTLIST h4
+  %attrs;
+  %TextAlign;
+  >
+
+<!ELEMENT h5 %Inline;>
+<!ATTLIST h5
+  %attrs;
+  %TextAlign;
+  >
+
+<!ELEMENT h6 %Inline;>
+<!ATTLIST h6
+  %attrs;
+  %TextAlign;
+  >
+
+<!--=================== Lists ============================================-->
+
+<!-- Unordered list bullet styles -->
+
+<!ENTITY % ULStyle "(disc|square|circle)">
+
+<!-- Unordered list -->
+
+<!ELEMENT ul (li)+>
+<!ATTLIST ul
+  %attrs;
+  type        %ULStyle;     #IMPLIED
+  compact     (compact)     #IMPLIED
+  >
+
+<!-- Ordered list numbering style
+
+    1   arabic numbers      1, 2, 3, ...
+    a   lower alpha         a, b, c, ...
+    A   upper alpha         A, B, C, ...
+    i   lower roman         i, ii, iii, ...
+    I   upper roman         I, II, III, ...
+
+    The style is applied to the sequence number which by default
+    is reset to 1 for the first list item in an ordered list.
+-->
+<!ENTITY % OLStyle "CDATA">
+
+<!-- Ordered (numbered) list -->
+
+<!ELEMENT ol (li)+>
+<!ATTLIST ol
+  %attrs;
+  type        %OLStyle;      #IMPLIED
+  compact     (compact)      #IMPLIED
+  start       %Number;       #IMPLIED
+  >
+
+<!-- single column list (DEPRECATED) --> 
+<!ELEMENT menu (li)+>
+<!ATTLIST menu
+  %attrs;
+  compact     (compact)     #IMPLIED
+  >
+
+<!-- multiple column list (DEPRECATED) --> 
+<!ELEMENT dir (li)+>
+<!ATTLIST dir
+  %attrs;
+  compact     (compact)     #IMPLIED
+  >
+
+<!-- LIStyle is constrained to: "(%ULStyle;|%OLStyle;)" -->
+<!ENTITY % LIStyle "CDATA">
+
+<!-- list item -->
+
+<!ELEMENT li %Flow;>
+<!ATTLIST li
+  %attrs;
+  type        %LIStyle;      #IMPLIED
+  value       %Number;       #IMPLIED
+  >
+
+<!-- definition lists - dt for term, dd for its definition -->
+
+<!ELEMENT dl (dt|dd)+>
+<!ATTLIST dl
+  %attrs;
+  compact     (compact)      #IMPLIED
+  >
+
+<!ELEMENT dt %Inline;>
+<!ATTLIST dt
+  %attrs;
+  >
+
+<!ELEMENT dd %Flow;>
+<!ATTLIST dd
+  %attrs;
+  >
+
+<!--=================== Address ==========================================-->
+
+<!-- information on author -->
+
+<!ELEMENT address (#PCDATA | %inline; | %misc.inline; | p)*>
+<!ATTLIST address
+  %attrs;
+  >
+
+<!--=================== Horizontal Rule ==================================-->
+
+<!ELEMENT hr EMPTY>
+<!ATTLIST hr
+  %attrs;
+  align       (left|center|right) #IMPLIED
+  noshade     (noshade)      #IMPLIED
+  size        %Pixels;       #IMPLIED
+  width       %Length;       #IMPLIED
+  >
+
+<!--=================== Preformatted Text ================================-->
+
+<!-- content is %Inline; excluding 
+        "img|object|applet|big|small|sub|sup|font|basefont" -->
+
+<!ELEMENT pre %pre.content;>
+<!ATTLIST pre
+  %attrs;
+  width       %Number;      #IMPLIED
+  xml:space   (preserve)    #FIXED 'preserve'
+  >
+
+<!--=================== Block-like Quotes ================================-->
+
+<!ELEMENT blockquote %Flow;>
+<!ATTLIST blockquote
+  %attrs;
+  cite        %URI;          #IMPLIED
+  >
+
+<!--=================== Text alignment ===================================-->
+
+<!-- center content -->
+<!ELEMENT center %Flow;>
+<!ATTLIST center
+  %attrs;
+  >
+
+<!--=================== Inserted/Deleted Text ============================-->
+
+<!--
+  ins/del are allowed in block and inline content, but its
+  inappropriate to include block content within an ins element
+  occurring in inline content.
+-->
+<!ELEMENT ins %Flow;>
+<!ATTLIST ins
+  %attrs;
+  cite        %URI;          #IMPLIED
+  datetime    %Datetime;     #IMPLIED
+  >
+
+<!ELEMENT del %Flow;>
+<!ATTLIST del
+  %attrs;
+  cite        %URI;          #IMPLIED
+  datetime    %Datetime;     #IMPLIED
+  >
+
+<!--================== The Anchor Element ================================-->
+
+<!-- content is %Inline; except that anchors shouldn't be nested -->
+
+<!ELEMENT a %a.content;>
+<!ATTLIST a
+  %attrs;
+  %focus;
+  charset     %Charset;      #IMPLIED
+  type        %ContentType;  #IMPLIED
+  name        NMTOKEN        #IMPLIED
+  href        %URI;          #IMPLIED
+  hreflang    %LanguageCode; #IMPLIED
+  rel         %LinkTypes;    #IMPLIED
+  rev         %LinkTypes;    #IMPLIED
+  shape       %Shape;        "rect"
+  coords      %Coords;       #IMPLIED
+  target      %FrameTarget;  #IMPLIED
+  >
+
+<!--===================== Inline Elements ================================-->
+
+<!ELEMENT span %Inline;> <!-- generic language/style container -->
+<!ATTLIST span
+  %attrs;
+  >
+
+<!ELEMENT bdo %Inline;>  <!-- I18N BiDi over-ride -->
+<!ATTLIST bdo
+  %coreattrs;
+  %events;
+  lang        %LanguageCode; #IMPLIED
+  xml:lang    %LanguageCode; #IMPLIED
+  dir         (ltr|rtl)      #REQUIRED
+  >
+
+<!ELEMENT br EMPTY>   <!-- forced line break -->
+<!ATTLIST br
+  %coreattrs;
+  clear       (left|all|right|none) "none"
+  >
+
+<!ELEMENT em %Inline;>   <!-- emphasis -->
+<!ATTLIST em %attrs;>
+
+<!ELEMENT strong %Inline;>   <!-- strong emphasis -->
+<!ATTLIST strong %attrs;>
+
+<!ELEMENT dfn %Inline;>   <!-- definitional -->
+<!ATTLIST dfn %attrs;>
+
+<!ELEMENT code %Inline;>   <!-- program code -->
+<!ATTLIST code %attrs;>
+
+<!ELEMENT samp %Inline;>   <!-- sample -->
+<!ATTLIST samp %attrs;>
+
+<!ELEMENT kbd %Inline;>  <!-- something user would type -->
+<!ATTLIST kbd %attrs;>
+
+<!ELEMENT var %Inline;>   <!-- variable -->
+<!ATTLIST var %attrs;>
+
+<!ELEMENT cite %Inline;>   <!-- citation -->
+<!ATTLIST cite %attrs;>
+
+<!ELEMENT abbr %Inline;>   <!-- abbreviation -->
+<!ATTLIST abbr %attrs;>
+
+<!ELEMENT acronym %Inline;>   <!-- acronym -->
+<!ATTLIST acronym %attrs;>
+
+<!ELEMENT q %Inline;>   <!-- inlined quote -->
+<!ATTLIST q
+  %attrs;
+  cite        %URI;          #IMPLIED
+  >
+
+<!ELEMENT sub %Inline;> <!-- subscript -->
+<!ATTLIST sub %attrs;>
+
+<!ELEMENT sup %Inline;> <!-- superscript -->
+<!ATTLIST sup %attrs;>
+
+<!ELEMENT tt %Inline;>   <!-- fixed pitch font -->
+<!ATTLIST tt %attrs;>
+
+<!ELEMENT i %Inline;>   <!-- italic font -->
+<!ATTLIST i %attrs;>
+
+<!ELEMENT b %Inline;>   <!-- bold font -->
+<!ATTLIST b %attrs;>
+
+<!ELEMENT big %Inline;>   <!-- bigger font -->
+<!ATTLIST big %attrs;>
+
+<!ELEMENT small %Inline;>   <!-- smaller font -->
+<!ATTLIST small %attrs;>
+
+<!ELEMENT u %Inline;>   <!-- underline -->
+<!ATTLIST u %attrs;>
+
+<!ELEMENT s %Inline;>   <!-- strike-through -->
+<!ATTLIST s %attrs;>
+
+<!ELEMENT strike %Inline;>   <!-- strike-through -->
+<!ATTLIST strike %attrs;>
+
+<!ELEMENT basefont EMPTY>  <!-- base font size -->
+<!ATTLIST basefont
+  id          ID             #IMPLIED
+  size        CDATA          #REQUIRED
+  color       %Color;        #IMPLIED
+  face        CDATA          #IMPLIED
+  >
+
+<!ELEMENT font %Inline;> <!-- local change to font -->
+<!ATTLIST font
+  %coreattrs;
+  %i18n;
+  size        CDATA          #IMPLIED
+  color       %Color;        #IMPLIED
+  face        CDATA          #IMPLIED
+  >
+
+<!--==================== Object ======================================-->
+<!--
+  object is used to embed objects as part of HTML pages.
+  param elements should precede other content. Parameters
+  can also be expressed as attribute/value pairs on the
+  object element itself when brevity is desired.
+-->
+
+<!ELEMENT object (#PCDATA | param | %block; | form | %inline; | %misc;)*>
+<!ATTLIST object
+  %attrs;
+  declare     (declare)      #IMPLIED
+  classid     %URI;          #IMPLIED
+  codebase    %URI;          #IMPLIED
+  data        %URI;          #IMPLIED
+  type        %ContentType;  #IMPLIED
+  codetype    %ContentType;  #IMPLIED
+  archive     %UriList;      #IMPLIED
+  standby     %Text;         #IMPLIED
+  height      %Length;       #IMPLIED
+  width       %Length;       #IMPLIED
+  usemap      %URI;          #IMPLIED
+  name        NMTOKEN        #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  align       %ImgAlign;     #IMPLIED
+  border      %Pixels;       #IMPLIED
+  hspace      %Pixels;       #IMPLIED
+  vspace      %Pixels;       #IMPLIED
+  >
+
+<!--
+  param is used to supply a named property value.
+  In XML it would seem natural to follow RDF and support an
+  abbreviated syntax where the param elements are replaced
+  by attribute value pairs on the object start tag.
+-->
+<!ELEMENT param EMPTY>
+<!ATTLIST param
+  id          ID             #IMPLIED
+  name        CDATA          #REQUIRED
+  value       CDATA          #IMPLIED
+  valuetype   (data|ref|object) "data"
+  type        %ContentType;  #IMPLIED
+  >
+
+<!--=================== Java applet ==================================-->
+<!--
+  One of code or object attributes must be present.
+  Place param elements before other content.
+-->
+<!ELEMENT applet (#PCDATA | param | %block; | form | %inline; | %misc;)*>
+<!ATTLIST applet
+  %coreattrs;
+  codebase    %URI;          #IMPLIED
+  archive     CDATA          #IMPLIED
+  code        CDATA          #IMPLIED
+  object      CDATA          #IMPLIED
+  alt         %Text;         #IMPLIED
+  name        NMTOKEN        #IMPLIED
+  width       %Length;       #REQUIRED
+  height      %Length;       #REQUIRED
+  align       %ImgAlign;     #IMPLIED
+  hspace      %Pixels;       #IMPLIED
+  vspace      %Pixels;       #IMPLIED
+  >
+
+<!--=================== Images ===========================================-->
+
+<!--
+   To avoid accessibility problems for people who aren't
+   able to see the image, you should provide a text
+   description using the alt and longdesc attributes.
+   In addition, avoid the use of server-side image maps.
+-->
+
+<!ELEMENT img EMPTY>
+<!ATTLIST img
+  %attrs;
+  src         %URI;          #REQUIRED
+  alt         %Text;         #REQUIRED
+  name        NMTOKEN        #IMPLIED
+  longdesc    %URI;          #IMPLIED
+  height      %Length;       #IMPLIED
+  width       %Length;       #IMPLIED
+  usemap      %URI;          #IMPLIED
+  ismap       (ismap)        #IMPLIED
+  align       %ImgAlign;     #IMPLIED
+  border      %Length;       #IMPLIED
+  hspace      %Pixels;       #IMPLIED
+  vspace      %Pixels;       #IMPLIED
+  >
+
+<!-- usemap points to a map element which may be in this document
+  or an external document, although the latter is not widely supported -->
+
+<!--================== Client-side image maps ============================-->
+
+<!-- These can be placed in the same document or grouped in a
+     separate document although this isn't yet widely supported -->
+
+<!ELEMENT map ((%block; | form | %misc;)+ | area+)>
+<!ATTLIST map
+  %i18n;
+  %events;
+  id          ID             #REQUIRED
+  class       CDATA          #IMPLIED
+  style       %StyleSheet;   #IMPLIED
+  title       %Text;         #IMPLIED
+  name        CDATA          #IMPLIED
+  >
+
+<!ELEMENT area EMPTY>
+<!ATTLIST area
+  %attrs;
+  %focus;
+  shape       %Shape;        "rect"
+  coords      %Coords;       #IMPLIED
+  href        %URI;          #IMPLIED
+  nohref      (nohref)       #IMPLIED
+  alt         %Text;         #REQUIRED
+  target      %FrameTarget;  #IMPLIED
+  >
+
+<!--================ Forms ===============================================-->
+
+<!ELEMENT form %form.content;>   <!-- forms shouldn't be nested -->
+
+<!ATTLIST form
+  %attrs;
+  action      %URI;          #REQUIRED
+  method      (get|post)     "get"
+  name        NMTOKEN        #IMPLIED
+  enctype     %ContentType;  "application/x-www-form-urlencoded"
+  onsubmit    %Script;       #IMPLIED
+  onreset     %Script;       #IMPLIED
+  accept      %ContentTypes; #IMPLIED
+  accept-charset %Charsets;  #IMPLIED
+  target      %FrameTarget;  #IMPLIED
+  >
+
+<!--
+  Each label must not contain more than ONE field
+  Label elements shouldn't be nested.
+-->
+<!ELEMENT label %Inline;>
+<!ATTLIST label
+  %attrs;
+  for         IDREF          #IMPLIED
+  accesskey   %Character;    #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  >
+
+<!ENTITY % InputType
+  "(text | password | checkbox |
+    radio | submit | reset |
+    file | hidden | image | button)"
+   >
+
+<!-- the name attribute is required for all but submit & reset -->
+
+<!ELEMENT input EMPTY>     <!-- form control -->
+<!ATTLIST input
+  %attrs;
+  %focus;
+  type        %InputType;    "text"
+  name        CDATA          #IMPLIED
+  value       CDATA          #IMPLIED
+  checked     (checked)      #IMPLIED
+  disabled    (disabled)     #IMPLIED
+  readonly    (readonly)     #IMPLIED
+  size        CDATA          #IMPLIED
+  maxlength   %Number;       #IMPLIED
+  src         %URI;          #IMPLIED
+  alt         CDATA          #IMPLIED
+  usemap      %URI;          #IMPLIED
+  onselect    %Script;       #IMPLIED
+  onchange    %Script;       #IMPLIED
+  accept      %ContentTypes; #IMPLIED
+  align       %ImgAlign;     #IMPLIED
+  >
+
+<!ELEMENT select (optgroup|option)+>  <!-- option selector -->
+<!ATTLIST select
+  %attrs;
+  name        CDATA          #IMPLIED
+  size        %Number;       #IMPLIED
+  multiple    (multiple)     #IMPLIED
+  disabled    (disabled)     #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  onchange    %Script;       #IMPLIED
+  >
+
+<!ELEMENT optgroup (option)+>   <!-- option group -->
+<!ATTLIST optgroup
+  %attrs;
+  disabled    (disabled)     #IMPLIED
+  label       %Text;         #REQUIRED
+  >
+
+<!ELEMENT option (#PCDATA)>     <!-- selectable choice -->
+<!ATTLIST option
+  %attrs;
+  selected    (selected)     #IMPLIED
+  disabled    (disabled)     #IMPLIED
+  label       %Text;         #IMPLIED
+  value       CDATA          #IMPLIED
+  >
+
+<!ELEMENT textarea (#PCDATA)>     <!-- multi-line text field -->
+<!ATTLIST textarea
+  %attrs;
+  %focus;
+  name        CDATA          #IMPLIED
+  rows        %Number;       #REQUIRED
+  cols        %Number;       #REQUIRED
+  disabled    (disabled)     #IMPLIED
+  readonly    (readonly)     #IMPLIED
+  onselect    %Script;       #IMPLIED
+  onchange    %Script;       #IMPLIED
+  >
+
+<!--
+  The fieldset element is used to group form fields.
+  Only one legend element should occur in the content
+  and if present should only be preceded by whitespace.
+-->
+<!ELEMENT fieldset (#PCDATA | legend | %block; | form | %inline; | %misc;)*>
+<!ATTLIST fieldset
+  %attrs;
+  >
+
+<!ENTITY % LAlign "(top|bottom|left|right)">
+
+<!ELEMENT legend %Inline;>     <!-- fieldset label -->
+<!ATTLIST legend
+  %attrs;
+  accesskey   %Character;    #IMPLIED
+  align       %LAlign;       #IMPLIED
+  >
+
+<!--
+ Content is %Flow; excluding a, form, form controls, iframe
+--> 
+<!ELEMENT button %button.content;>  <!-- push button -->
+<!ATTLIST button
+  %attrs;
+  %focus;
+  name        CDATA          #IMPLIED
+  value       CDATA          #IMPLIED
+  type        (button|submit|reset) "submit"
+  disabled    (disabled)     #IMPLIED
+  >
+
+<!-- single-line text input control (DEPRECATED) -->
+<!ELEMENT isindex EMPTY>
+<!ATTLIST isindex
+  %coreattrs;
+  %i18n;
+  prompt      %Text;         #IMPLIED
+  >
+
+<!--======================= Tables =======================================-->
+
+<!-- Derived from IETF HTML table standard, see [RFC1942] -->
+
+<!--
+ The border attribute sets the thickness of the frame around the
+ table. The default units are screen pixels.
+
+ The frame attribute specifies which parts of the frame around
+ the table should be rendered. The values are not the same as
+ CALS to avoid a name clash with the valign attribute.
+-->
+<!ENTITY % TFrame "(void|above|below|hsides|lhs|rhs|vsides|box|border)">
+
+<!--
+ The rules attribute defines which rules to draw between cells:
+
+ If rules is absent then assume:
+     "none" if border is absent or border="0" otherwise "all"
+-->
+
+<!ENTITY % TRules "(none | groups | rows | cols | all)">
+  
+<!-- horizontal placement of table relative to document -->
+<!ENTITY % TAlign "(left|center|right)">
+
+<!-- horizontal alignment attributes for cell contents
+
+  char        alignment char, e.g. char=':'
+  charoff     offset for alignment char
+-->
+<!ENTITY % cellhalign
+  "align      (left|center|right|justify|char) #IMPLIED
+   char       %Character;    #IMPLIED
+   charoff    %Length;       #IMPLIED"
+  >
+
+<!-- vertical alignment attributes for cell contents -->
+<!ENTITY % cellvalign
+  "valign     (top|middle|bottom|baseline) #IMPLIED"
+  >
+
+<!ELEMENT table
+     (caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))>
+<!ELEMENT caption  %Inline;>
+<!ELEMENT thead    (tr)+>
+<!ELEMENT tfoot    (tr)+>
+<!ELEMENT tbody    (tr)+>
+<!ELEMENT colgroup (col)*>
+<!ELEMENT col      EMPTY>
+<!ELEMENT tr       (th|td)+>
+<!ELEMENT th       %Flow;>
+<!ELEMENT td       %Flow;>
+
+<!ATTLIST table
+  %attrs;
+  summary     %Text;         #IMPLIED
+  width       %Length;       #IMPLIED
+  border      %Pixels;       #IMPLIED
+  frame       %TFrame;       #IMPLIED
+  rules       %TRules;       #IMPLIED
+  cellspacing %Length;       #IMPLIED
+  cellpadding %Length;       #IMPLIED
+  align       %TAlign;       #IMPLIED
+  bgcolor     %Color;        #IMPLIED
+  >
+
+<!ENTITY % CAlign "(top|bottom|left|right)">
+
+<!ATTLIST caption
+  %attrs;
+  align       %CAlign;       #IMPLIED
+  >
+
+<!--
+colgroup groups a set of col elements. It allows you to group
+several semantically related columns together.
+-->
+<!ATTLIST colgroup
+  %attrs;
+  span        %Number;       "1"
+  width       %MultiLength;  #IMPLIED
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!--
+ col elements define the alignment properties for cells in
+ one or more columns.
+
+ The width attribute specifies the width of the columns, e.g.
+
+     width=64        width in screen pixels
+     width=0.5*      relative width of 0.5
+
+ The span attribute causes the attributes of one
+ col element to apply to more than one column.
+-->
+<!ATTLIST col
+  %attrs;
+  span        %Number;       "1"
+  width       %MultiLength;  #IMPLIED
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!--
+    Use thead to duplicate headers when breaking table
+    across page boundaries, or for static headers when
+    tbody sections are rendered in scrolling panel.
+
+    Use tfoot to duplicate footers when breaking table
+    across page boundaries, or for static footers when
+    tbody sections are rendered in scrolling panel.
+
+    Use multiple tbody sections when rules are needed
+    between groups of table rows.
+-->
+<!ATTLIST thead
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!ATTLIST tfoot
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!ATTLIST tbody
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!ATTLIST tr
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  bgcolor     %Color;        #IMPLIED
+  >
+
+<!-- Scope is simpler than headers attribute for common tables -->
+<!ENTITY % Scope "(row|col|rowgroup|colgroup)">
+
+<!-- th is for headers, td for data and for cells acting as both -->
+
+<!ATTLIST th
+  %attrs;
+  abbr        %Text;         #IMPLIED
+  axis        CDATA          #IMPLIED
+  headers     IDREFS         #IMPLIED
+  scope       %Scope;        #IMPLIED
+  rowspan     %Number;       "1"
+  colspan     %Number;       "1"
+  %cellhalign;
+  %cellvalign;
+  nowrap      (nowrap)       #IMPLIED
+  bgcolor     %Color;        #IMPLIED
+  width       %Length;       #IMPLIED
+  height      %Length;       #IMPLIED
+  >
+
+<!ATTLIST td
+  %attrs;
+  abbr        %Text;         #IMPLIED
+  axis        CDATA          #IMPLIED
+  headers     IDREFS         #IMPLIED
+  scope       %Scope;        #IMPLIED
+  rowspan     %Number;       "1"
+  colspan     %Number;       "1"
+  %cellhalign;
+  %cellvalign;
+  nowrap      (nowrap)       #IMPLIED
+  bgcolor     %Color;        #IMPLIED
+  width       %Length;       #IMPLIED
+  height      %Length;       #IMPLIED
+  >
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/dtd/xhtml11-ent.dtd b/src/main/resources/com/adobe/epubcheck/schema/20/dtd/xhtml11-ent.dtd
new file mode 100644
index 0000000..c691abe
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/dtd/xhtml11-ent.dtd
@@ -0,0 +1,324 @@
+<!-- Relevant ISO entity set is given unless names are newly introduced.
+     New names (i.e., not in ISO 8879 [SGML] list) do not clash with
+     any existing ISO 8879 entity names. ISO 10646 [ISO10646] character
+     numbers are given for each character, in hex. Entity values are
+     decimal conversions of the ISO 10646 values and refer to the
+     document character set. Names are Unicode [UNICODE] names.
+-->
+
+<!-- C0 Controls and Basic Latin -->
+<!ENTITY lt      "&#60;" ><!-- less-than sign, U+003C ISOnum -->
+<!ENTITY gt      ">" ><!-- greater-than sign, U+003E ISOnum -->
+<!ENTITY amp     "&#38;" ><!-- ampersand, U+0026 ISOnum -->
+<!ENTITY apos    "'" ><!-- The Apostrophe (Apostrophe Quote, APL Quote), U+0027 ISOnum -->
+<!ENTITY quot    """ ><!-- quotation mark (Quote Double), U+0022 ISOnum -->
+
+<!-- Latin Extended-A -->
+<!ENTITY OElig   "Œ" ><!-- latin capital ligature OE, U+0152 ISOlat2 -->
+<!ENTITY oelig   "œ" ><!-- latin small ligature oe, U+0153 ISOlat2 -->
+
+<!-- ligature is a misnomer, this is a separate character in some languages -->
+<!ENTITY Scaron  "Š" ><!-- latin capital letter S with caron, U+0160 ISOlat2 -->
+<!ENTITY scaron  "š" ><!-- latin small letter s with caron, U+0161 ISOlat2 -->
+<!ENTITY Yuml    "Ÿ" ><!-- latin capital letter Y with diaeresis, U+0178 ISOlat2 -->
+
+<!-- Spacing Modifier Letters -->
+<!ENTITY circ    "ˆ" ><!-- modifier letter circumflex accent, U+02C6 ISOpub -->
+<!ENTITY tilde   "˜" ><!-- small tilde, U+02DC ISOdia -->
+
+<!-- General Punctuation -->
+<!ENTITY ensp    " " ><!-- en space, U+2002 ISOpub -->
+<!ENTITY emsp    " " ><!-- em space, U+2003 ISOpub -->
+<!ENTITY thinsp  " " ><!-- thin space, U+2009 ISOpub -->
+<!ENTITY zwnj    "‌" ><!-- zero width non-joiner, U+200C NEW RFC 2070 -->
+<!ENTITY zwj     "‍" ><!-- zero width joiner, U+200D NEW RFC 2070 -->
+<!ENTITY lrm     "‎" ><!-- left-to-right mark, U+200E NEW RFC 2070 -->
+<!ENTITY rlm     "‏" ><!-- right-to-left mark, U+200F NEW RFC 2070 -->
+<!ENTITY ndash   "–" ><!-- en dash, U+2013 ISOpub -->
+<!ENTITY mdash   "—" ><!-- em dash, U+2014 ISOpub -->
+<!ENTITY lsquo   "‘" ><!-- left single quotation mark, U+2018 ISOnum -->
+<!ENTITY rsquo   "’" ><!-- right single quotation mark, U+2019 ISOnum -->
+<!ENTITY sbquo   "‚" ><!-- single low-9 quotation mark, U+201A NEW -->
+<!ENTITY ldquo   "“" ><!-- left double quotation mark, U+201C ISOnum -->
+<!ENTITY rdquo   "”" ><!-- right double quotation mark, U+201D ISOnum -->
+<!ENTITY bdquo   "„" ><!-- double low-9 quotation mark, U+201E NEW -->
+<!ENTITY dagger  "†" ><!-- dagger, U+2020 ISOpub -->
+<!ENTITY Dagger  "‡" ><!-- double dagger, U+2021 ISOpub -->
+<!ENTITY permil  "‰" ><!-- per mille sign, U+2030 ISOtech -->
+
+<!-- lsaquo is proposed but not yet ISO standardized -->
+<!ENTITY lsaquo  "‹" ><!-- single left-pointing angle quotation mark, U+2039 ISO proposed -->
+<!-- rsaquo is proposed but not yet ISO standardized -->
+<!ENTITY rsaquo  "›" ><!-- single right-pointing angle quotation mark, U+203A ISO proposed -->
+<!ENTITY euro    "€" ><!-- euro sign, U+20AC NEW -->
+
+<!-- end of xhtml-special.ent -->
+<!ENTITY nbsp   " " ><!-- no-break space = non-breaking space, U+00A0 ISOnum -->
+<!ENTITY iexcl  "¡" ><!-- inverted exclamation mark, U+00A1 ISOnum -->
+<!ENTITY cent   "¢" ><!-- cent sign, U+00A2 ISOnum -->
+<!ENTITY pound  "£" ><!-- pound sign, U+00A3 ISOnum -->
+<!ENTITY curren "¤" ><!-- currency sign, U+00A4 ISOnum -->
+<!ENTITY yen    "¥" ><!-- yen sign = yuan sign, U+00A5 ISOnum -->
+<!ENTITY brvbar "¦" ><!-- broken bar = broken vertical bar, U+00A6 ISOnum -->
+<!ENTITY sect   "§" ><!-- section sign, U+00A7 ISOnum -->
+<!ENTITY uml    "¨" ><!-- diaeresis = spacing diaeresis, U+00A8 ISOdia -->
+<!ENTITY copy   "©" ><!-- copyright sign, U+00A9 ISOnum -->
+<!ENTITY ordf   "ª" ><!-- feminine ordinal indicator, U+00AA ISOnum -->
+<!ENTITY laquo  "«" ><!-- left-pointing double angle quotation mark = left pointing guillemet, U+00AB ISOnum -->
+<!ENTITY not    "¬" ><!-- not sign, U+00AC ISOnum -->
+<!ENTITY shy    "­" ><!-- soft hyphen = discretionary hyphen, U+00AD ISOnum -->
+<!ENTITY reg    "®" ><!-- registered sign = registered trade mark sign, U+00AE ISOnum -->
+<!ENTITY macr   "¯" ><!-- macron = spacing macron = overline = APL overbar, U+00AF ISOdia -->
+<!ENTITY deg    "°" ><!-- degree sign, U+00B0 ISOnum -->
+<!ENTITY plusmn "±" ><!-- plus-minus sign = plus-or-minus sign, U+00B1 ISOnum -->
+<!ENTITY sup2   "²" ><!-- superscript two = superscript digit two = squared, U+00B2 ISOnum -->
+<!ENTITY sup3   "³" ><!-- superscript three = superscript digit three = cubed, U+00B3 ISOnum -->
+<!ENTITY acute  "´" ><!-- acute accent = spacing acute, U+00B4 ISOdia -->
+<!ENTITY micro  "µ" ><!-- micro sign, U+00B5 ISOnum -->
+<!ENTITY para   "¶" ><!-- pilcrow sign = paragraph sign, U+00B6 ISOnum -->
+<!ENTITY middot "·" ><!-- middle dot = Georgian comma = Greek middle dot, U+00B7 ISOnum -->
+<!ENTITY cedil  "¸" ><!-- cedilla = spacing cedilla, U+00B8 ISOdia -->
+<!ENTITY sup1   "¹" ><!-- superscript one = superscript digit one, U+00B9 ISOnum -->
+<!ENTITY ordm   "º" ><!-- masculine ordinal indicator, U+00BA ISOnum -->
+<!ENTITY raquo  "»" ><!-- right-pointing double angle quotation mark = right pointing guillemet, U+00BB ISOnum -->
+<!ENTITY frac14 "¼" ><!-- vulgar fraction one quarter = fraction one quarter, U+00BC ISOnum -->
+<!ENTITY frac12 "½" ><!-- vulgar fraction one half = fraction one half, U+00BD ISOnum -->
+<!ENTITY frac34 "¾" ><!-- vulgar fraction three quarters = fraction three quarters, U+00BE ISOnum -->
+<!ENTITY iquest "¿" ><!-- inverted question mark = turned question mark, U+00BF ISOnum -->
+<!ENTITY Agrave "À" ><!-- latin capital A with grave = latin capital A grave, U+00C0 ISOlat1 -->
+<!ENTITY Aacute "Á" ><!-- latin capital A with acute, U+00C1 ISOlat1 -->
+<!ENTITY Acirc  "Â" ><!-- latin capital A with circumflex, U+00C2 ISOlat1 -->
+<!ENTITY Atilde "Ã" ><!-- latin capital A with tilde, U+00C3 ISOlat1 -->
+<!ENTITY Auml   "Ä" ><!-- latin capital A with diaeresis, U+00C4 ISOlat1 -->
+<!ENTITY Aring  "Å" ><!-- latin capital A with ring above = latin capital A ring, U+00C5 ISOlat1 -->
+<!ENTITY AElig  "Æ" ><!-- latin capital AE = latin capital ligature AE, U+00C6 ISOlat1 -->
+<!ENTITY Ccedil "Ç" ><!-- latin capital C with cedilla, U+00C7 ISOlat1 -->
+<!ENTITY Egrave "È" ><!-- latin capital E with grave, U+00C8 ISOlat1 -->
+<!ENTITY Eacute "É" ><!-- latin capital E with acute, U+00C9 ISOlat1 -->
+<!ENTITY Ecirc  "Ê" ><!-- latin capital E with circumflex, U+00CA ISOlat1 -->
+<!ENTITY Euml   "Ë" ><!-- latin capital E with diaeresis, U+00CB ISOlat1 -->
+<!ENTITY Igrave "Ì" ><!-- latin capital I with grave, U+00CC ISOlat1 -->
+<!ENTITY Iacute "Í" ><!-- latin capital I with acute, U+00CD ISOlat1 -->
+<!ENTITY Icirc  "Î" ><!-- latin capital I with circumflex, U+00CE ISOlat1 -->
+<!ENTITY Iuml   "Ï" ><!-- latin capital I with diaeresis, U+00CF ISOlat1 -->
+<!ENTITY ETH    "Ð" ><!-- latin capital ETH, U+00D0 ISOlat1 -->
+<!ENTITY Ntilde "Ñ" ><!-- latin capital N with tilde, U+00D1 ISOlat1 -->
+<!ENTITY Ograve "Ò" ><!-- latin capital O with grave, U+00D2 ISOlat1 -->
+<!ENTITY Oacute "Ó" ><!-- latin capital O with acute, U+00D3 ISOlat1 -->
+<!ENTITY Ocirc  "Ô" ><!-- latin capital O with circumflex, U+00D4 ISOlat1 -->
+<!ENTITY Otilde "Õ" ><!-- latin capital O with tilde, U+00D5 ISOlat1 -->
+<!ENTITY Ouml   "Ö" ><!-- latin capital O with diaeresis, U+00D6 ISOlat1 -->
+<!ENTITY times  "×" ><!-- multiplication sign, U+00D7 ISOnum -->
+<!ENTITY Oslash "Ø" ><!-- latin capital O with stroke = latin capital O slash, U+00D8 ISOlat1 -->
+<!ENTITY Ugrave "Ù" ><!-- latin capital U with grave, U+00D9 ISOlat1 -->
+<!ENTITY Uacute "Ú" ><!-- latin capital U with acute, U+00DA ISOlat1 -->
+<!ENTITY Ucirc  "Û" ><!-- latin capital U with circumflex, U+00DB ISOlat1 -->
+<!ENTITY Uuml   "Ü" ><!-- latin capital U with diaeresis, U+00DC ISOlat1 -->
+<!ENTITY Yacute "Ý" ><!-- latin capital Y with acute, U+00DD ISOlat1 -->
+<!ENTITY THORN  "Þ" ><!-- latin capital THORN, U+00DE ISOlat1 -->
+<!ENTITY szlig  "ß" ><!-- latin small sharp s = ess-zed, U+00DF ISOlat1 -->
+<!ENTITY agrave "à" ><!-- latin small a with grave = latin small a grave, U+00E0 ISOlat1 -->
+<!ENTITY aacute "á" ><!-- latin small a with acute, U+00E1 ISOlat1 -->
+<!ENTITY acirc  "â" ><!-- latin small a with circumflex, U+00E2 ISOlat1 -->
+<!ENTITY atilde "ã" ><!-- latin small a with tilde, U+00E3 ISOlat1 -->
+<!ENTITY auml   "ä" ><!-- latin small a with diaeresis, U+00E4 ISOlat1 -->
+<!ENTITY aring  "å" ><!-- latin small a with ring above = latin small a ring, U+00E5 ISOlat1 -->
+<!ENTITY aelig  "æ" ><!-- latin small ae = latin small ligature ae, U+00E6 ISOlat1 -->
+<!ENTITY ccedil "ç" ><!-- latin small c with cedilla, U+00E7 ISOlat1 -->
+<!ENTITY egrave "è" ><!-- latin small e with grave, U+00E8 ISOlat1 -->
+<!ENTITY eacute "é" ><!-- latin small e with acute, U+00E9 ISOlat1 -->
+<!ENTITY ecirc  "ê" ><!-- latin small e with circumflex, U+00EA ISOlat1 -->
+<!ENTITY euml   "ë" ><!-- latin small e with diaeresis, U+00EB ISOlat1 -->
+<!ENTITY igrave "ì" ><!-- latin small i with grave, U+00EC ISOlat1 -->
+<!ENTITY iacute "í" ><!-- latin small i with acute, U+00ED ISOlat1 -->
+<!ENTITY icirc  "î" ><!-- latin small i with circumflex, U+00EE ISOlat1 -->
+<!ENTITY iuml   "ï" ><!-- latin small i with diaeresis, U+00EF ISOlat1 -->
+<!ENTITY eth    "ð" ><!-- latin small eth, U+00F0 ISOlat1 -->
+<!ENTITY ntilde "ñ" ><!-- latin small n with tilde, U+00F1 ISOlat1 -->
+<!ENTITY ograve "ò" ><!-- latin small o with grave, U+00F2 ISOlat1 -->
+<!ENTITY oacute "ó" ><!-- latin small o with acute, U+00F3 ISOlat1 -->
+<!ENTITY ocirc  "ô" ><!-- latin small o with circumflex, U+00F4 ISOlat1 -->
+<!ENTITY otilde "õ" ><!-- latin small o with tilde, U+00F5 ISOlat1 -->
+<!ENTITY ouml   "ö" ><!-- latin small o with diaeresis, U+00F6 ISOlat1 -->
+<!ENTITY divide "÷" ><!-- division sign, U+00F7 ISOnum -->
+<!ENTITY oslash "ø" ><!-- latin small o with stroke, = latin small o slash, U+00F8 ISOlat1 -->
+<!ENTITY ugrave "ù" ><!-- latin small u with grave, U+00F9 ISOlat1 -->
+<!ENTITY uacute "ú" ><!-- latin small u with acute, U+00FA ISOlat1 -->
+<!ENTITY ucirc  "û" ><!-- latin small u with circumflex, U+00FB ISOlat1 -->
+<!ENTITY uuml   "ü" ><!-- latin small u with diaeresis, U+00FC ISOlat1 -->
+<!ENTITY yacute "ý" ><!-- latin small y with acute, U+00FD ISOlat1 -->
+<!ENTITY thorn  "þ" ><!-- latin small thorn with, U+00FE ISOlat1 -->
+<!ENTITY yuml   "ÿ" ><!-- latin small y with diaeresis, U+00FF ISOlat1 -->
+<!-- end of xhtml-lat1.ent -->
+<!-- Latin Extended-B -->
+<!ENTITY fnof     "ƒ" ><!-- latin small f with hook = function
+                              = florin, U+0192 ISOtech -->
+
+<!-- Greek -->
+<!ENTITY Alpha    "Α" ><!-- greek capital letter alpha, U+0391 -->
+<!ENTITY Beta     "Β" ><!-- greek capital letter beta, U+0392 -->
+<!ENTITY Gamma    "Γ" ><!-- greek capital letter gamma, U+0393 ISOgrk3 -->
+<!ENTITY Delta    "Δ" ><!-- greek capital letter delta, U+0394 ISOgrk3 -->
+<!ENTITY Epsilon  "Ε" ><!-- greek capital letter epsilon, U+0395 -->
+<!ENTITY Zeta     "Ζ" ><!-- greek capital letter zeta, U+0396 -->
+<!ENTITY Eta      "Η" ><!-- greek capital letter eta, U+0397 -->
+<!ENTITY Theta    "Θ" ><!-- greek capital letter theta, U+0398 ISOgrk3 -->
+<!ENTITY Iota     "Ι" ><!-- greek capital letter iota, U+0399 -->
+<!ENTITY Kappa    "Κ" ><!-- greek capital letter kappa, U+039A -->
+<!ENTITY Lambda   "Λ" ><!-- greek capital letter lambda, U+039B ISOgrk3 -->
+<!ENTITY Mu       "Μ" ><!-- greek capital letter mu, U+039C -->
+<!ENTITY Nu       "Ν" ><!-- greek capital letter nu, U+039D -->
+<!ENTITY Xi       "Ξ" ><!-- greek capital letter xi, U+039E ISOgrk3 -->
+<!ENTITY Omicron  "Ο" ><!-- greek capital letter omicron, U+039F -->
+<!ENTITY Pi       "Π" ><!-- greek capital letter pi, U+03A0 ISOgrk3 -->
+<!ENTITY Rho      "Ρ" ><!-- greek capital letter rho, U+03A1 -->
+<!-- there is no Sigmaf, and no U+03A2 character either -->
+<!ENTITY Sigma    "Σ" ><!-- greek capital letter sigma, U+03A3 ISOgrk3 -->
+<!ENTITY Tau      "Τ" ><!-- greek capital letter tau, U+03A4 -->
+<!ENTITY Upsilon  "Υ" ><!-- greek capital letter upsilon,
+                              U+03A5 ISOgrk3 -->
+<!ENTITY Phi      "Φ" ><!-- greek capital letter phi, U+03A6 ISOgrk3 -->
+<!ENTITY Chi      "Χ" ><!-- greek capital letter chi, U+03A7 -->
+<!ENTITY Psi      "Ψ" ><!-- greek capital letter psi, U+03A8 ISOgrk3 -->
+<!ENTITY Omega    "Ω" ><!-- greek capital letter omega, U+03A9 ISOgrk3 -->
+<!ENTITY alpha    "α" ><!-- greek small letter alpha, U+03B1 ISOgrk3 -->
+<!ENTITY beta     "β" ><!-- greek small letter beta, U+03B2 ISOgrk3 -->
+<!ENTITY gamma    "γ" ><!-- greek small letter gamma, U+03B3 ISOgrk3 -->
+<!ENTITY delta    "δ" ><!-- greek small letter delta, U+03B4 ISOgrk3 -->
+<!ENTITY epsilon  "ε" ><!-- greek small letter epsilon, U+03B5 ISOgrk3 -->
+<!ENTITY zeta     "ζ" ><!-- greek small letter zeta, U+03B6 ISOgrk3 -->
+<!ENTITY eta      "η" ><!-- greek small letter eta, U+03B7 ISOgrk3 -->
+<!ENTITY theta    "θ" ><!-- greek small letter theta, U+03B8 ISOgrk3 -->
+<!ENTITY iota     "ι" ><!-- greek small letter iota, U+03B9 ISOgrk3 -->
+<!ENTITY kappa    "κ" ><!-- greek small letter kappa, U+03BA ISOgrk3 -->
+<!ENTITY lambda   "λ" ><!-- greek small letter lambda, U+03BB ISOgrk3 -->
+<!ENTITY mu       "μ" ><!-- greek small letter mu, U+03BC ISOgrk3 -->
+<!ENTITY nu       "ν" ><!-- greek small letter nu, U+03BD ISOgrk3 -->
+<!ENTITY xi       "ξ" ><!-- greek small letter xi, U+03BE ISOgrk3 -->
+<!ENTITY omicron  "ο" ><!-- greek small letter omicron, U+03BF NEW -->
+<!ENTITY pi       "π" ><!-- greek small letter pi, U+03C0 ISOgrk3 -->
+<!ENTITY rho      "ρ" ><!-- greek small letter rho, U+03C1 ISOgrk3 -->
+<!ENTITY sigmaf   "ς" ><!-- greek small letter final sigma, U+03C2 ISOgrk3 -->
+<!ENTITY sigma    "σ" ><!-- greek small letter sigma, U+03C3 ISOgrk3 -->
+<!ENTITY tau      "τ" ><!-- greek small letter tau, U+03C4 ISOgrk3 -->
+<!ENTITY upsilon  "υ" ><!-- greek small letter upsilon, U+03C5 ISOgrk3 -->
+<!ENTITY phi      "φ" ><!-- greek small letter phi, U+03C6 ISOgrk3 -->
+<!ENTITY chi      "χ" ><!-- greek small letter chi, U+03C7 ISOgrk3 -->
+<!ENTITY psi      "ψ" ><!-- greek small letter psi, U+03C8 ISOgrk3 -->
+<!ENTITY omega    "ω" ><!-- greek small letter omega, U+03C9 ISOgrk3 -->
+<!ENTITY thetasym "ϑ" ><!-- greek small letter theta symbol, U+03D1 NEW -->
+<!ENTITY upsih    "ϒ" ><!-- greek upsilon with hook symbol, U+03D2 NEW -->
+<!ENTITY piv      "ϖ" ><!-- greek pi symbol, U+03D6 ISOgrk3 -->
+
+<!-- General Punctuation -->
+<!ENTITY bull     "•" ><!-- bullet = black small circle, U+2022 ISOpub  -->
+<!-- bullet is NOT the same as bullet operator, U+2219 -->
+<!ENTITY hellip   "…" ><!-- horizontal ellipsis = three dot leader, U+2026 ISOpub  -->
+<!ENTITY prime    "′" ><!-- prime = minutes = feet, U+2032 ISOtech -->
+<!ENTITY Prime    "″" ><!-- double prime = seconds = inches, U+2033 ISOtech -->
+<!ENTITY oline    "‾" ><!-- overline = spacing overscore, U+203E NEW -->
+<!ENTITY frasl    "⁄" ><!-- fraction slash, U+2044 NEW -->
+
+<!-- Letterlike Symbols -->
+<!ENTITY weierp   "℘" ><!-- script capital P = power set = Weierstrass p, U+2118 ISOamso -->
+<!ENTITY image    "ℑ" ><!-- blackletter capital I = imaginary part, U+2111 ISOamso -->
+<!ENTITY real     "ℜ" ><!-- blackletter capital R = real part symbol, U+211C ISOamso -->
+<!ENTITY trade    "™" ><!-- trade mark sign, U+2122 ISOnum -->
+<!ENTITY alefsym  "ℵ" ><!-- alef symbol = first transfinite cardinal, U+2135 NEW -->
+<!-- alef symbol is NOT the same as hebrew letter alef, U+05D0 although
+     the same glyph could be used to depict both characters -->
+
+<!-- Arrows -->
+<!ENTITY larr     "←" ><!-- leftwards arrow, U+2190 ISOnum -->
+<!ENTITY uarr     "↑" ><!-- upwards arrow, U+2191 ISOnum-->
+<!ENTITY rarr     "→" ><!-- rightwards arrow, U+2192 ISOnum -->
+<!ENTITY darr     "↓" ><!-- downwards arrow, U+2193 ISOnum -->
+<!ENTITY harr     "↔" ><!-- left right arrow, U+2194 ISOamsa -->
+<!ENTITY crarr    "↵" ><!-- downwards arrow with corner leftwards
+                               = carriage return, U+21B5 NEW -->
+<!ENTITY lArr     "⇐" ><!-- leftwards double arrow, U+21D0 ISOtech -->
+<!-- Unicode does not say that lArr is the same as the 'is implied by' arrow
+    but also does not have any other character for that function. So ? lArr can
+    be used for 'is implied by' as ISOtech suggests -->
+<!ENTITY uArr     "⇑" ><!-- upwards double arrow, U+21D1 ISOamsa -->
+<!ENTITY rArr     "⇒" ><!-- rightwards double arrow, U+21D2 ISOtech -->
+<!-- Unicode does not say this is the 'implies' character but does not have
+     another character with this function so ?
+     rArr can be used for 'implies' as ISOtech suggests -->
+<!ENTITY dArr     "⇓" ><!-- downwards double arrow, U+21D3 ISOamsa -->
+<!ENTITY hArr     "⇔" ><!-- left right double arrow, U+21D4 ISOamsa -->
+
+<!-- Mathematical Operators -->
+<!ENTITY forall   "∀" ><!-- for all, U+2200 ISOtech -->
+<!ENTITY part     "∂" ><!-- partial differential, U+2202 ISOtech  -->
+<!ENTITY exist    "∃" ><!-- there exists, U+2203 ISOtech -->
+<!ENTITY empty    "∅" ><!-- empty set = null set, U+2205 ISOamso -->
+<!ENTITY nabla    "∇" ><!-- nabla = backward difference, U+2207 ISOtech -->
+<!ENTITY isin     "∈" ><!-- element of, U+2208 ISOtech -->
+<!ENTITY notin    "∉" ><!-- not an element of, U+2209 ISOtech -->
+<!ENTITY ni       "∋" ><!-- contains as member, U+220B ISOtech -->
+<!-- should there be a more memorable name than 'ni'? -->
+<!ENTITY prod     "∏" ><!-- n-ary product = product sign, U+220F ISOamsb -->
+<!-- prod is NOT the same character as U+03A0 'greek capital letter pi' though
+     the same glyph might be used for both -->
+<!ENTITY sum      "∑" ><!-- n-ary sumation, U+2211 ISOamsb -->
+<!-- sum is NOT the same character as U+03A3 'greek capital letter sigma'
+     though the same glyph might be used for both -->
+<!ENTITY minus    "−" ><!-- minus sign, U+2212 ISOtech -->
+<!ENTITY lowast   "∗" ><!-- asterisk operator, U+2217 ISOtech -->
+<!ENTITY radic    "√" ><!-- square root = radical sign, U+221A ISOtech -->
+<!ENTITY prop     "∝" ><!-- proportional to, U+221D ISOtech -->
+<!ENTITY infin    "∞" ><!-- infinity, U+221E ISOtech -->
+<!ENTITY ang      "∠" ><!-- angle, U+2220 ISOamso -->
+<!ENTITY and      "∧" ><!-- logical and = wedge, U+2227 ISOtech -->
+<!ENTITY or       "∨" ><!-- logical or = vee, U+2228 ISOtech -->
+<!ENTITY cap      "∩" ><!-- intersection = cap, U+2229 ISOtech -->
+<!ENTITY cup      "∪" ><!-- union = cup, U+222A ISOtech -->
+<!ENTITY int      "∫" ><!-- integral, U+222B ISOtech -->
+<!ENTITY there4   "∴" ><!-- therefore, U+2234 ISOtech -->
+<!ENTITY sim      "∼" ><!-- tilde operator = varies with = similar to, U+223C ISOtech -->
+<!-- tilde operator is NOT the same character as the tilde, U+007E,
+     although the same glyph might be used to represent both  -->
+<!ENTITY cong     "≅" ><!-- approximately equal to, U+2245 ISOtech -->
+<!ENTITY asymp    "≈" ><!-- almost equal to = asymptotic to, U+2248 ISOamsr -->
+<!ENTITY ne       "≠" ><!-- not equal to, U+2260 ISOtech -->
+<!ENTITY equiv    "≡" ><!-- identical to, U+2261 ISOtech -->
+<!ENTITY le       "≤" ><!-- less-than or equal to, U+2264 ISOtech -->
+<!ENTITY ge       "≥" ><!-- greater-than or equal to, U+2265 ISOtech -->
+<!ENTITY sub      "⊂" ><!-- subset of, U+2282 ISOtech -->
+<!ENTITY sup      "⊃" ><!-- superset of, U+2283 ISOtech -->
+<!-- note that nsup, 'not a superset of, U+2283' is not covered by the Symbol
+     font encoding and is not included. Should it be, for symmetry?
+     It is in ISOamsn  -->
+<!ENTITY nsub     "⊄" ><!-- not a subset of, U+2284 ISOamsn -->
+<!ENTITY sube     "⊆" ><!-- subset of or equal to, U+2286 ISOtech -->
+<!ENTITY supe     "⊇" ><!-- superset of or equal to, U+2287 ISOtech -->
+<!ENTITY oplus    "⊕" ><!-- circled plus = direct sum, U+2295 ISOamsb -->
+<!ENTITY otimes   "⊗" ><!-- circled times = vector product, U+2297 ISOamsb -->
+<!ENTITY perp     "⊥" ><!-- up tack = orthogonal to = perpendicular, U+22A5 ISOtech -->
+<!ENTITY sdot     "⋅" ><!-- dot operator, U+22C5 ISOamsb -->
+<!-- dot operator is NOT the same character as U+00B7 middle dot -->
+
+<!-- Miscellaneous Technical -->
+<!ENTITY lceil    "⌈" ><!-- left ceiling = apl upstile, U+2308 ISOamsc  -->
+<!ENTITY rceil    "⌉" ><!-- right ceiling, U+2309 ISOamsc  -->
+<!ENTITY lfloor   "⌊" ><!-- left floor = apl downstile, U+230A ISOamsc  -->
+<!ENTITY rfloor   "⌋" ><!-- right floor, U+230B ISOamsc  -->
+<!ENTITY lang     "〈" ><!-- left-pointing angle bracket = bra, U+2329 ISOtech -->
+<!-- lang is NOT the same character as U+003C 'less than'
+     or U+2039 'single left-pointing angle quotation mark' -->
+<!ENTITY rang     "〉" ><!-- right-pointing angle bracket = ket, U+232A ISOtech -->
+<!-- rang is NOT the same character as U+003E 'greater than'
+     or U+203A 'single right-pointing angle quotation mark' -->
+
+<!-- Geometric Shapes -->
+<!ENTITY loz      "◊" ><!-- lozenge, U+25CA ISOpub -->
+
+<!-- Miscellaneous Symbols -->
+<!ENTITY spades   "♠" ><!-- black spade suit, U+2660 ISOpub -->
+<!-- black here seems to mean filled as opposed to hollow -->
+<!ENTITY clubs    "♣" ><!-- black club suit = shamrock, U+2663 ISOpub -->
+<!ENTITY hearts   "♥" ><!-- black heart suit = valentine, U+2665 ISOpub -->
+<!ENTITY diams    "♦" ><!-- black diamond suit, U+2666 ISOpub -->
+
+<!-- end of xhtml-symbol.ent -->
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/container.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/container.rng
new file mode 100644
index 0000000..7193309
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/container.rng
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
+         ns="urn:oasis:names:tc:opendocument:xmlns:container"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+	<start>
+		<element name="container">
+  			<attribute name="version">
+  				<text/>
+  			</attribute>
+			<element name="rootfiles">
+				<oneOrMore>
+					<element name="rootfile">
+	  					<attribute name="full-path">
+	  						<text/>
+	  					</attribute>
+	  					<attribute name="media-type">
+	  						<text/>
+	  					</attribute>
+					</element>
+      			</oneOrMore>
+      		</element>
+    	</element>
+   </start>
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/content-svg.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/content-svg.rng
new file mode 100644
index 0000000..d9bb399
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/content-svg.rng
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         xmlns:xlink="http://www.w3.org/1999/xlink" xml:lang="en" 
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+     
+	<include href="content.rng"/>
+	
+	<start>
+	  <ref name="svg"/>
+	</start>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/content-xhtml.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/content-xhtml.rng
new file mode 100644
index 0000000..d784058
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/content-xhtml.rng
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         xmlns:xlink="http://www.w3.org/1999/xlink" xml:lang="en" 
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+     
+	<include href="content.rng"/>
+	
+	<start>
+	  <ref name="html"/>
+	</start>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/content.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/content.rng
new file mode 100644
index 0000000..9f85146
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/content.rng
@@ -0,0 +1,93 @@
+<?xml version="1.0"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
+         ns="http://www.w3.org/1999/xhtml" 
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         xmlns:xlink="http://www.w3.org/1999/xlink" xml:lang="en" 
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+	<!-- Get XHTML modules -->
+	
+	<include href="xhtml/datatypes.rng"/>
+	<include href="xhtml/attribs.rng"/>
+	<include href="xhtml/struct.rng"/>
+	<include href="xhtml/text.rng"/>
+	<include href="xhtml/hypertext.rng"/>
+	<include href="xhtml/list.rng"/>
+	<include href="xhtml/image.rng"/>
+	<include href="xhtml/ssismap.rng"/>
+	<include href="xhtml/base.rng"/>
+	<include href="xhtml/link.rng"/>
+	<include href="xhtml/meta.rng"/>
+	<include href="xhtml/param.rng"/>
+	<include href="xhtml/object.rng"/>
+	<include href="xhtml/bdo.rng"/>
+	<include href="xhtml/pres.rng"/>
+	<include href="xhtml/edit.rng"/>
+	<include href="xhtml/applet.rng"/>
+	<include href="xhtml/style.rng"/>
+	<include href="xhtml/script.rng"/>
+	<include href="xhtml/table.rng"/>
+	<include href="xhtml/csismap.rng"/>
+	<include href="xhtml/inlstyle.rng"/>
+	<include href="xhtml/target.rng"/>
+	<include href="xhtml/iframe.rng"/>
+	
+	<!-- name attribute is not allowed in XHTML 1.1
+	<include href="xhtml/nameident.rng"/>
+	-->
+
+	<!-- Get SVG modules -->
+
+	<include href="svg/svg-container-attrib.rng"/>	
+	<include href="svg/svg-viewport-attrib.rng"/>
+	<include href="svg/svg-paint-attrib.rng"/>
+	<include href="svg/svg-opacity-attrib.rng"/>
+	<include href="svg/svg-graphics-attrib.rng"/>
+	<include href="svg/svg-docevents-attrib.rng"/>
+	<include href="svg/svg-graphevents-attrib.rng"/>
+	<include href="svg/svg-animevents-attrib.rng"/>
+	<include href="svg/svg-xlink-attrib.rng"/>
+	<include href="svg/svg-extresources-attrib.rng"/>
+	<include href="svg/svg-structure.rng"/>
+	<include href="svg/svg-conditional.rng"/>
+	<include href="svg/svg-image.rng"/>
+	<include href="svg/svg-style.rng"/>
+	<include href="svg/svg-shape.rng"/>
+	<include href="svg/svg-text.rng"/>
+	<include href="svg/svg-marker.rng"/>
+	<include href="svg/svg-profile.rng"/>
+	<include href="svg/svg-gradient.rng"/>
+	<include href="svg/svg-pattern.rng"/>
+	<include href="svg/svg-clip.rng"/>
+	<include href="svg/svg-mask.rng"/>
+	<include href="svg/svg-filter.rng"/>
+	<include href="svg/svg-cursor.rng"/>
+	<include href="svg/svg-hyperlink.rng"/>
+	<include href="svg/svg-view.rng"/>
+	<include href="svg/svg-script.rng"/>
+	<include href="svg/svg-animation.rng"/>
+	<include href="svg/svg-font.rng"/>
+	<include href="svg/svg-extensibility.rng"/>
+
+	<!-- hook SVG svg element as a valid block and inline element -->
+	
+	<define name="Block.class" combine="choice">
+  		<ref name="svg"/>
+	</define>
+	
+	<define name="Inline.class" combine="choice">
+	  <ref name="svg"/>
+	</define>
+	
+	<!-- hook XHTML body element as a valid content of the SVG foreignObject element -->
+	
+	<define name="SVG.ForeignObjectContent.class" combine="choice">
+	  <choice>	  
+	      <ref name="body"/>
+		  <ref name="Inline.model"/>
+		  <ref name="Block.model"/>
+	  </choice>
+	</define>
+	
+</grammar>
+	
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/dtbook-2005-2.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/dtbook-2005-2.rng
new file mode 100644
index 0000000..929f4a4
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/dtbook-2005-2.rng
@@ -0,0 +1,4110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  DTBook DTD v2005-2  2006-09-08
+  file: dtbook-2005-2.dtd   
+  
+  The following identifiers apply to this DTD:    
+    "-//NISO//DTD dtbook 2005-2//EN"
+    "http://www.daisy.org/z3986/2005/dtbook-2005-2.dtd">
+-->
+<!--
+  jpritchett at rfbd.org:  2006-09-08  Changes that update to version 2005-2, per committee decisions 
+  Issue numbers noted in change log below refer to Z39.86 issue tracker at 
+  http://www.daisy.org/z3986/issues/ 
+-->
+<!--
+  HB: 2004-03-25 - 2004-04-28 Changes that update dtbook 1.1.0 Document
+  Type Declaration: 
+  When the change date is followed by "nn:" or "nna" that represents the
+  number/letter code on the change list supplied from Michael Moodie on
+  that date. Additional changes not so noted have been made in discussion
+  with Michael Moodie.
+  These changes have been made by Harvey Bingham.
+-->
+<!-- HB: 2004-04-15 Editorial revisions made at the group meeting 2004-04-15 -->
+<!--
+  Original authors:
+  
+  Harvey Bingham 
+  George Kerscher 
+  Michael Moodie 
+  David Pawson 
+  
+  Assisted by DAISY Consortium and NISO DTB Committee work teams.
+  
+  1. Purpose
+  
+  The Digital Talking Book Document Type Definition (DTD) provides
+  the means to mark up the text of a document to permit support for
+  the combination of professional narration and navigation into that
+  narration. It also facilitates the output of a document's content in
+  a variety of accessible formats. The markup tags in the book convey
+  its content in structure, and contain some metadata about the book
+  content and its structure.
+  
+  The Document Type Definition names and defines the allowable element
+  types, their allowable content, and their attributes. Correct markup
+  of the text of the book permits the textual material to be synchronized
+  using SMIL [SMIL2.0] files with the professionally narrated version of
+  that book. The synchronization can permit concurrent display of the
+  text being narrated. The textual content can be searched in context to
+  locate material desired for narration.
+  
+  More detailed documentation of this dtbook dtd [DTBOOKV20052DTD] is
+  available as an html document. See [DTBOOKV20052DOC].
+  
+  1.1. Prior Related Work
+  
+  The DAISY (Digital Accessible Information SYstem) Consortium
+  contributed substantially to the development of this DTD.
+  This application of XML is the next generation after several DAISY
+  versions of 2.X specifications, see [DAISY202].
+  
+  The DAISY Statement of Principles for the Creation and Production
+  of Accessible Books and Materials [DAISY-2-GUIDELINES] represents
+  the minimum standard to be met by Libraries of the Blind and producers
+  of alternative format materials.
+  
+  Its Navigation Control Center (NCC) provided for synchronizing
+  document structure with narration.
+  
+  The NCC evolved into an XML application called the "Navigation Control
+  File for XML applications" (NCX). Its content is derived from
+  the markup of documents tagged using the dtbook DTD. Richer
+  structuring capability is one of the objectives of that DTD. The
+  Synchronized Multimedia Integration Language [SMIL2.0] is used
+  to provide synchronized narrations and text. The NCX provides
+  navigation using the identified elements of documents tagged to this DTD.
+  
+  The dtbook DTD includes many, but not all, of the element types found
+  in both the [HTML401STRICT] and [XHTML11STRICT] strict DTDs. HTML
+  authoring tools permit those additional element tags, and may ignore
+  the additional tags that are dtbook-specific. The lowercase names
+  from XHTML are used, rather than the uppercase names from HTML.
+  
+  1.2. Evolution from HTML and XHTML
+  
+  
+  Dtbook-2005-2 has 83 element types. It shares 46 element types with the
+  HTML4.0 Strict DTD [HTML401STRICT] (as adjusted to use the lower-case
+  names consonant with the XHTML Strict DTD [XHTML11STRICT]). It omits
+  31 element types from them, and has 32 unique element types.
+  
+  Endtag markup is sometimes optional in HTML. It is required for use with
+  xhtml and dtbook. Any XML application [XML12] requires endtags, or their
+  abbreviated form for empty elements, such as "<link />". The benefit of
+  including endtags is that the tagged document has dependable structure
+  that can be validated against the dtbook dtd.
+  
+  Some tools available for browsing HTML may be used with dtbook
+  material, at the expense of their discarding or ignoring some specific
+  tagging and attributes that are not part of HTML 4.0. A CSS-based
+  stylesheet [CSS1] or [CSS2] that identifies the presentation expectations
+  for the HTML and non-HTML tags, or a filter to map those tags onto
+  suitable HTML tags can provide appropriate visual presentation.
+  
+  2. Document Prolog
+  
+  A Digital Talking Book document is an XML application. Therefore, it
+  must begin with the XML declaration, followed by the DOCTYPE
+  declaration.
+  
+  2.1. XML Declaration
+  
+  The XML declaration identifies the version of XML, and the
+  optional character set encoding for the document:
+  
+      <?xml version="1.0" encoding="UTF-8" ?>
+  
+  
+  
+  2.2. Character Set Encodings (removed as redundant; unicode suffices)
+  
+  
+  
+  
+  2.3. DOCTYPE Declaration
+  
+  The document type declaration, the DOCTYPE, follows. It has several forms.
+  The simpler form assumes that the proper version of the dtbook DTD
+  is in the same directory as the dtbook file itself.
+  
+      <!DOCTYPE dtbook SYSTEM
+          "dtbook-2005-2.dtd">
+  
+  A more general form provides the PUBLIC URI from which the SYSTEM
+  filename can be substituted, should that system copy be missing:
+  
+      <!DOCTYPE dtbook PUBLIC
+          "http://www.daisy.org/z3986/2005/dtbook-2005-2.dtd"
+          "dtbook-2005-2.dtd">
+  
+  That assumes the URI can be reached, which may not be true for
+  portable dtbook players.
+  
+  The still more general form recommended for xml applications [XML12] is:
+  
+      <!DOCTYPE dtbook PUBLIC
+          "-//NISO//DTD dtbook 2005-2//EN"
+          "http://www.daisy.org/z3986/2005/dtbook-2005-2.dtd">
+  
+  where the Formal Public Identifier (FPI) on the second line is converted
+  to the URI where it may be publicly found:
+  
+  http://www.daisy.org/z3986/2005/dtbook-2005-2.dtd
+  
+  The [OASIS-TR9401] Entity Management Catalog provides an indirect
+  means to provide that mapping from FPI to the dtd.
+  
+  That catalog is more generally useful to provide the mapping from
+  any external entity names (such as modules) to URIs where they may
+  be found.
+  
+  Note that the reference above is to a particular version of the DTD,
+  distinguished by the string "2005-2".
+  
+  2.4. Digital Talking Book File MIME Type
+  
+  A Digital Talking Book document is tagged to the dtbook XML
+  application. Its MIME media-type is "text/xml". The tagged book
+  filename should have suffix ".xml". See [RFC2045].
+  
+  3. Modular Extension to the DTD
+  
+  The dtbook DTD has four parameter entities defined that provide means
+  to allow an individual book to modularly extend the content models:
+  
+      <!ENTITY % externalblock "">
+      <!ENTITY % externalinline "">
+      <!ENTITY % externalFlow "">
+      <!ENTITY % externalNamespaces "">
+  
+  These parameter entities appear in corresponding block and inline
+  content models. With this "" content they have no effect on books
+  tagged to the dtbook DTD. In a book that needs a modular extension,
+  values are given by redefinition in the internal subset of that book.
+  This extends the dtbook DTD without having to change it.
+  
+  A book can augment the dtbook DTD by including other declarations
+  or parameter entity references in the internal subset of declarations.
+  The internal subset may occur in square brackets following the
+  ExternalID and before the concluding ">" of the initial DOCTYPE
+  declaration that identifies the dtbook DTD.
+  
+  Those additional markup declarations in the internal subset
+  take preference over any in the dtbook DTD itself. The effective
+  DTD is thereby augmented by the parameter entity values and any other
+  declarations of the book's internal subset. When a given parameter
+  entity declaration appears more than once in the external modules and
+  the dtbook DTD, the first occurrence of that declaration is the one
+  that takes effect, with modules in the internal subset being processed
+  in order, before the DTD itself.
+  
+  For example:
+  
+      <!DOCTYPE dtbook SYSTEM
+      "dtbook.dtd"
+      [
+          <!ENTITY % dramaModule SYSTEM "drama.dtd">
+          %dramaModule;
+          <!ENTITY % externalblock "| d:drama">
+          <!ENTITY % externalinline "| d:character">
+          <!ENTITY % externalFlow "| d:stagedir">
+          <!ENTITY % externalNamespaces "xmlns:d CDATA #FIXED 'http://www.sample.org/drama'">
+      ]>
+  
+  The "%dramaModule;" invocation causes all declarations made within
+  dramaModule to become the initial part of the dtbook DTD. Within the
+  book, the empty entity declarations for % externalblock, 
+  % externalinline, % externalFlow, and %externalNamespaces
+  are replaced by these new definitions. Thus the
+  block element d:drama can appear wherever block elements may occur in
+  dtbook, d:character can appear wherever inline elements may occur, and
+  d:stagedir can appear in either block or inline contexts.  Note that
+  each extension element must appear in no more than one of these three
+  entities. The namespace attribute xmlns:d can occur on any element with 
+  the fixed value of "http://www.sample.org/drama".
+  
+  More than one module may be needed and included in a book, for example
+  both poem and drama can appear in the internal subset of the book.
+  For example, the internal subset of the book could contain:
+  
+      <!DOCTYPE dtbook SYSTEM
+      "dtbook.dtd"
+      [
+          <!ENTITY % poemModule SYSTEM "poem.dtd">
+          %poemModule;
+          <!ENTITY % dramaModule SYSTEM "drama.dtd">
+          %dramaModule;
+          <!ENTITY % externalblock "| poem | stanza | verse | drama">
+          <!ENTITY % externalinline "| stagedir">
+      ]>
+  
+  Such external modules need to include the definitions of any parameter
+  entities that are used in the modules since their definitions are needed
+  before they can be expanded in their references. They cannot depend
+  on parameter entities in the SystemLiteral or PubidLiteral.
+  
+  Note that arbitrary external modules from other sources may not have
+  all the needed attributes. XML allows augmentation of ATTLISTs in the
+  internal subset. Additional attribute names can be added to an
+  associated element type. Any redefinitions of a particular named
+  attribute resulting from presence in the internal subset have
+  precedence.
+  
+  Note that tools and players processing any extended markup that affects
+  navigation structure will need to know of those modular extensions.
+  
+  The form above for augmenting the dtbook dtd through the document's
+  internal subset does not require the XML namespace mechanism, with
+  its namespace-specific prefix on element and attribute names to
+  disambiguate any potential name collisions. However, use of XML
+  namespaces [XML-NAMES] is recommended.
+  
+  4. References
+  
+  These references are informative. The bracketed names here are targets for
+  indirect reference from the corresponding bracketed names in other parts
+  of this document or in descriptions within this section.
+  
+  [CSS1] Cascading Style Sheets, Level 1. Rec-CSS1-1999011 Revised 11 Jan 1999
+  
+      http://www.w3.org/TR/REC-CSS1
+  
+  [CSS2] Cascading Style Sheets, Level 2 CSS2 Specification REC-CSS2-19980512
+  
+      http://www.w3.org/TR/REC-CSS2
+  
+  [DAISY202] The DAISY 2.02 Specification for the DAISY Digital Talking
+  Book (DTB) format, which enables navigation within a sequential
+  and hierarchical structure consisting of (marked-up) text synchronized
+  with audio.
+  
+      http://www.daisy.org/dtbook/spec/2/final/d202/daisy_202.html
+  
+  [DAISY-2-GUIDELINES] The DAISY 2.02 Specification for
+  the Creation and Production of Accessible Books and Materials,
+  Version 0.99 1999-09-23 represents minimum standard to be met by
+  Libraries for the Blind and producers of alternative format materials:
+  
+      http://www.daisy.org/dtbook/guidelines/draft/principles.htm
+  
+  [DTBOOKV20052DTD] The dtbook DTD version 2005-2 (this DTD) is available at:
+  
+      http://www.daisy.org/z3986/2005/dtbook-2005-2.dtd
+  
+  Note that some browsers do not permit downloading a file with suffix dtd.
+  
+  [DTBOOKV20052DOC] Digital Talking Book Expanded Document Type Definition
+  Documentation for Version 2005-2 of this DTD is available as an
+  HTML 4.0 document:
+  
+      http://www.daisy.org/z3986/2005/dtbook/dtbookdoc.html
+  
+  Should revisions occur, a new directory with node named for the year
+  of change will contain the revisions.
+  
+  Any prior specific version of the dtbook dtd and its documentation will
+  persist.
+  
+  [DTBOOK3] The last public beta version was dtbook3-07.dtd (2001-01-31).
+  
+      http://www.loc.gov/nls/z3986/background/dtbk3_old_dtds/dtbk3-07.dtd
+  
+  and its expanded documentation:
+  
+      http://www.loc.gov/nls/z3986/background/dtbk3_old_dtds/dtbk3-07doc.htm
+  
+  Those and prior versions are available at:
+  
+      http://www.loc.gov/nls/z3986/background/dtbk3_old_dtds/index.html
+  
+  The history of changes prior to this version, including those
+  in internal drafts through dtbk110.dtd and before is in:
+  
+      http://www.loc.gov/nls/z3986/background/dtbook-dtd-changes.txt
+  
+  In that directory also are the old dtdbk3 dtds, some of which have
+  been used for test markup,  and their documentation. See its
+  index.html for the list. (Caution: some browsers may not
+  permit downloading DTDs.)
+  
+      http://www.loc.gov/nls/z3986/background/index.html
+  
+  [HTML401STRICT] "HTML 4.0 Strict DTD," 1999-12-24, Dave Raggett,
+  Arnaud Le hors, and Ian Jacobs. Dtbook110 was originally based on
+  the HTML 4.0 Strict DTD with design adaptation for dtbook110.
+  A principal adaptation is to use lower-case names for element types
+  and attribute names. For expanded discussion, see [HTML401].
+  
+      http://www.w3.org/TR/1999/REC-html401-19991224/strict.dtd
+  
+  [HTML401] "HTML 4.01 Specification" W3C Recommendation 24 December 1999
+  Documentation of the element types that come from the HTML 4.0 Strict
+  DTD [HTML401STRICT] is available at:
+  
+      http://www.w3.org/TR/1999/REC-html401-19991224/
+  
+  Dtbook110 (and now Dtbook122) is partially harmonized with the
+  [XHTML11STRICT] DTD.
+  
+  The XHTML camelCase parameter entity names are retained, and comments
+  and references following those parameter entities explain them. The
+  lower-case element and attribute names are used. The simplified table
+  content model of just table rows is included.
+  
+  [ISO10646] "Information Technology - Universal Multiple-Octet Coded
+  Character Set (UCS) - Part 1: Architecture and Basic Multilingual
+  Plane", ISO/IEC 10646-1:1993. The current specification also takes
+  into consideration the first five amendments to ISO/IEC 10646-1:1993.
+  
+  [ISO8859] "Information Processing - 8-bit single-byte coded graphic
+  character sets - Part 1: Latin alphabet No. 1," ISO 8859-1:1987.
+  Other suffixes "-2 through -9" correspond to other character sets
+  in the family.
+  
+  [JIS] "JIS Character Sets" describes the history of JIS, and the
+  several character sets for KANJI, KANA and other characters.
+  
+      http://www.io.com/~kazushi/encoding/jis.html
+  
+  [ANSINISOZ39-86-2002] Specifications for the Digital Talking Book.
+  
+      http://www.niso.org
+  
+  [ANSINISOZ39-86-2005] Specifications for the Digital Talking Book.
+  
+      http://www.niso.org    
+  
+  [NLS-Z3986] Development of ANSI/NISO Z39.86
+  Contains links to the DTDs developed for ANSI/NISO Z39.86,
+  Specifications for the Digital Talking Book
+  
+      http://www.loc.gov/nls/z3986/index.html
+  
+  [OASIS-TR9401] Entity Management, OASIS Technical Resolution 9401:1997
+  (Amendment 2 to TR 9401). Paul Grosso, 1997 September 10.
+  
+      http://www.oasis-open.org/specs/tr9401.html
+  
+  [RFC1556] "Handling of Bi-directional Texts in MIME," H. Nussbacher,
+  December 1993.
+  
+      http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc1556.html
+  
+  [RFC1942] "HTML Tables", D. Raggett, May 1996
+  
+      http://www.ietf.org/rfc/rfc1942.txt
+  
+  Contains detailed descriptions of table elements and their
+  inheritance of attribute values. Adjustment for XML application is
+  required: end-tags are necessary, not optional, attribute values
+  must be quoted.
+  
+  [RFC2045] "Multipurpose Internet Mail Extensions (MIME) Part One:
+  Format of Internet Message Bodies", N. Freed and N. Borenstein,
+  November 1996. Note that this RFC obsoletes RFC1521, RFC1522, and RFC1590.
+  The %ContentType; and %ContentTypes; media types and the
+  %Charset; and %Charsets; character encoding values are from [RFC2045].
+  
+      http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2045.html
+  
+  [RFC2046] "Multipurpose Internet Mail Extensions (MIME) Part Two:
+  Media Types," N. Freed, November 1996. Source for %ContentType; and
+  %ContentTypes; permitted values:
+  
+      http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2046.html
+  
+  [RFC2396] "Uniform Resource Identifiers (URI): Generic Syntax,"
+  T. Berners-Lee, R. Fielding, L. Masinter, August 1998. Note that this RFC
+  revises and replaces the generic definitions in RFC 1738 and RFC 1808.
+  
+      http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2396.html
+  
+  
+  
+  [RFC3066] "Tags for the Identification of Languages,"
+  H. Alvestrand, January 2001
+  
+      http://www.faqs.org/rfcs/rfc3066.html
+  
+  
+  [SMIL2.0] The Synchronized Multimedia Integration Language SMIL 2.0
+  W3C Recommendation 07 August 2001 is available at:
+  
+      http://www.w3.org/TR/2001/REC-smil20-20010807/smil20.html
+  
+  [XHTML11] "XHTML (tm) 1.0: The Extensible HyperText Markup Language,"
+  W3C Recommendation 26 January 2000, A reformulation of HTML4 in XML 1.0
+  includes case-sensitive names, lower-case for elements and their
+  attributes (but not parameter entity names) and in some cases
+  equivalent content models that do not require SGML inclusions
+  and exclusion exceptions (as occurred in the HTML4.0 strict
+  DTD [HTML401STRICT]) is available at:
+  
+      http://www.w3.org/TR/xhtml/
+  
+  [XML-NAMES] "Namespaces in XML 1.1" World Wide Web Consortium
+  W3C Recommendation 4-Febrary-2004
+  
+      http://www.w3.org/TR/REC-xml-names11-20040204
+  
+  
+  [XHTML11STRICT] Expanded documentation of the element types that come
+  from the XHTML11 strict.dtd and its other DTDs is available within
+  the zip file:
+  
+      http://www.w3.org/TR/xhtml1/DTD/xhtml1/xhtml1.zip
+  
+  Note: some browsers cannot download a dtd directly.
+  
+  
+  
+  [XML12] This dtbook-2005-2.dtd is an application of the Extensible Markup
+  Language XML 1.0 (Second Edition) W3C Recommendation 6 October 2000.
+  It is available at:
+  
+      http://www.w3.org/TR/REC-xml
+  
+-->
+<!-- ======================= Change Log Summary ============================ -->
+<!-- HB: 2004-04-28 changed all version references from 1.1.2 to 1.2.0 -->
+<!--
+  HB: 2004-03-25 - 2004-04-28 Changes that update dtbook 1.1.0 Document
+  Type Declaration: 
+  When the change date is followed by "nn:" or "nna" that represents the
+  number/letter code on the change list supplied from Michael Moodie on
+  that date. Additional changes not so noted have been made in discussion
+  with Michael Moodie.
+  These changes have been made by Harvey Bingham.
+-->
+<!-- HB: 2004-04-15 Editorial revisions made at the group meeting 2004-04-15 -->
+<!--
+  HB: 2004-03-25 32: Drop section 2.2 on Character Set Encoding, retained
+  number so external references won't break to subsequent sections.
+-->
+<!--
+  HB: 2004-04-02 dtbook: updated public identifier
+  fro:  "http://www.loc.bov/nls/z3986/v100"
+  to:   "http://www.loc.gov/nls/z3986/2004".
+-->
+<!--
+  HB: 2004-04-02 dtbook: updated public identifier 
+  from: "http://www.loc.bov/nls/z3986/v100/dtbook110.dtd"
+  to:   "http://www.loc.gov/nls/z3986/2004/dtbook.dtd".
+-->
+<!-- HB: 2004-03-25 Changed reference from RFC1766 to its revison, RFC 3066. -->
+<!-- HB: 2004-03-25 Changed reference from RFC1766 to its revison, RFC 3066. -->
+<!-- HB: 2004-04-05 % list removed: as content reduced to contain only <list>. -->
+<!-- HB: 2004-03-25 36f: caption: removed from % inlineinblock. -->
+<!-- HB: 2004-03-25 30: hr: eliminated, so dropped from % block. -->
+<!--
+  HB: 2004-03-29 % block additions:
+  poem | linegroup | byline | dateline | epigraph.
+-->
+<!-- HB: 2004-03-25 30: hr: eliminated, dropped from % blocknoimggroup. -->
+<!--
+  HB: 2004-03-29 % blocknoimggroup additions:
+  poem | linegroup | byline | dateline | epigraph.
+-->
+<!--
+  HB: 2004-03-29 % docblockorinline additions:
+  poem | linegroup | byline | dateline | epigraph.
+-->
+<!-- HB: 2004-04-08 covertitle: added to % docblockorinline -->
+<!-- HB: 2004-04-27 blockhead: added to % docblockorinline; -->
+<!--
+  HB: 2004-03-25 33: % coreattrs: dropped mention of character
+  mnemonic entities, as use unicode.
+-->
+<!--
+  HB: 2004-03-25 36a: % i18n: removed lang attribute,
+  as redundant with xml:lang.
+-->
+<!--
+  HB: 2004-04-05 dtbook: added attribute xmlns with FIXED value 
+  'http://www.loc.gov/nls/z3986/2004/dtbook'
+  Also updated version value from 1.1.0' to '1.1.1'.
+-->
+<!--
+  HB: 2004-04-05 version: updated from '1.1.0' to '1.1.1'.
+  added value for xmlns: 
+  %URI #FIXED 'http://www.loc.gov/nls/z3986/2004/dtbook/'.
+-->
+<!-- HB: 2004-03-25 36: % headmisc: removed style. -->
+<!--
+  HB: 2004-04-02 title: element removed from head,
+  now only used for cite and poem.
+-->
+<!--
+  HB: 2004-03-29 Dublin Core: minimum requirement 
+  name="dc:title" content="book title"; encourage use of
+  additional name/content pairs from Dublin Core 
+  name="dc:..." and from Digital Talking Book name="dtb:..."
+  Encourage inclusion of additional Dublin Core and Dtbook metadata
+  attributes to make more useful the dtbook as stand-alone content.
+-->
+<!-- HB: 2004-03-25 36: head: drop th removed element style. -->
+<!--
+  HB: 2004-03-25 29: frontmatter: eliminate %block;
+  level or level1 container is required.
+-->
+<!-- HB: 2004-04-08 frontmatter: added covertitle. -->
+<!--
+  HB: 2004-03-25 29: bodymatter: eliminate %block;
+  level or level1 container is required.
+-->
+<!--
+  HB: 2004-03-25 29: rearmatter: eliminate %block;
+  level or level1 container is required.
+-->
+<!--
+  HB: 2004-03-25 28: level: add constraint - at most one <levelhd> (later 
+  changed to <hd>) per <level>.
+-->
+<!-- HB: 2004-03-26 34: level: make contentmodel (...)+, rather than (...)*. -->
+<!--
+  HB: 2004-03-25 28: level1: added constraint - at most one <h1> 
+  per <level1>.
+-->
+<!-- HB: 2004-03-26 34: level1: make contentmodel (...)+, rather than (...)*. -->
+<!--
+  HB: 2004-03-25 28: level2: added constraint - at most one <h2> 
+  per <level2>.
+-->
+<!-- HB: 2004-03-26 34: level2: make contentmodel (...)+, rather than (...)*. -->
+<!--
+  HB: 2004-03-25 28: level3: added constraint - at most one <h3> 
+  per <level3>.
+-->
+<!--
+  HB: 2004-03-25 28: level4: added constraint - at most one <h4> 
+  per <level4>.
+-->
+<!--
+  HB: 2004-03-25 28: level5: added constraint - at most one <h5> 
+  per <level5>.
+-->
+<!--
+  HB: 2004-03-25 28: level6: added constraint - at most one <h6> 
+  per <level6>.
+-->
+<!--
+  HB: 2004-04-23 % special: eliminated linenum from % special,
+  linenum only appears within line.
+-->
+<!--
+  HB: 2004-04-23 % specialnoa: eliminated linenum from % specialnoa,
+  linenum only appears within line.
+-->
+<!-- HB: 2004-03-25 36h: to % inlinenoa add %dtbookinline;. -->
+<!-- HB: 2004-03-30 poem: added linenum use. -->
+<!-- HB: 2004-04-08 div: added covertitle. -->
+<!-- HB: 2004-04-04 35b  title: added <title> for use in <poem> or <cite>. -->
+<!--
+  HB: 2004-03-25 35d: notice element dropped: its purpose is sufficiently
+  achieved with sidebar with attribute render="required." This provides
+  sufficient capability for admonitions like warning, hazard, 
+  danger, or caution.
+-->
+<!--
+  HB: 2004-03-25 35g: prodnote: use render="required" to achieve the explicit
+  admonition such as caution, warning, danger, or hazard, from the
+  text. Optionally put the specific admonition in the class attribute
+  value, repeating it from the text.
+-->
+<!--
+  HB: 2004-03-25 35g: sidebar: use render="required" to achieve the explicit
+  admonition such as caution, warning, danger, or hazard, from the
+  text. Optionally put the specific admonition in the class attribute
+  value, repeating it from the text.
+-->
+<!-- HB: 2004-03-30 epigraph: element added. -->
+<!-- HB: 2004-30-30 byline: element added. -->
+<!-- HB: 2004-30-30 dateline: element added. -->
+<!--
+  HB: 2004-03-30 linegroup: The class attribute value can identify the
+  kind of linegroup, such as "stanza", "chorus", or "canto".
+-->
+<!-- HB: 2004-03-30 poem: removed notice and hr from content model. -->
+<!-- HB: 2004-03-30 poem: added title and author to content model. -->
+<!-- HB: 2004-03-25 35a: cite: allow title and author. -->
+<!-- HB: 2004-03-25 30: hr: element dropped horizontal rule as purely visual. -->
+<!-- HB: 2004-04-08 covertitle: element added -->
+<!-- HB: 2004-04-02 bridgehead: element added. -->
+<!-- HB: 2004-03-25 36i: blockquote allow pagenum. -->
+<!--
+  HB: 2004-03-25 36d: list: added start attribute to indicate initial
+  ordinal of a numbered list.
+-->
+<!--
+  HB: 2004-03-31 list: changed enum from 'U' to 'A' for uppercase, and
+  "X" to 'I' for uppercase Roman.
+-->
+<!--
+  HB: 2004-03-31 list: changed enum value choices from "U" to "A" for
+  uppercase, and "X" to "I" for uppercase Roman for compatibility
+  with xhtml.
+-->
+<!-- HB: 2004-04-02 list: expanded discussion on enum attribute. -->
+<!--
+  HB: 2004-04-27 list: added type "pl" to indicate that the list is 
+  preformatted so no bullets or enumerations should be added.
+-->
+<!--
+  HB: 2004-04-22 list: removed bullet attribute, It is up to a style-sheet to
+  make any needed visual distinction for nested unordered lists, or if the
+  list type is "pl" preformatted the bullet form may be there.
+-->
+<!-- HB: 2004-03-25 36f: caption: removed use for <img>. -->
+<!-- MM: 2004-07-08 Various editorial changes. -->
+<!-- MM: 2004-07-08 34: level3: make contentmodel (...)+, rather than (...)*. -->
+<!-- MM: 2004-07-08 34: level4: make contentmodel (...)+, rather than (...)*. -->
+<!-- MM: 2004-07-08 34: level5: make contentmodel (...)+, rather than (...)*. -->
+<!-- MM: 2004-07-08 34: level6: make contentmodel (...)+, rather than (...)*. -->
+<!--
+  MM: 2004-07-23 In %docblockorinline: changed blockhead to bridgehead; 
+  eliminated poem, linegroup, byline, dateline, and epigraph since already
+  present via %block
+-->
+<!--
+  MM: 2004-07-23 In %inlinenoa: removed %externalinline; since already present
+  via %dtbookinline;.
+-->
+<!--
+  MM: 2004-07-23 34: level6: replaced "%block | %inlineinblock" with 
+  "%docblockorinline;" per other leveln models.
+-->
+<!--
+  MM: 2004-07-30  Changed content models of level and level1 - level6 to 
+  eliminate ambiguity. Changed version to 1.1.5a
+-->
+<!--
+  MM: 2004-07-30 Dropped 'level' attribute from element div. Revised 
+  description of page types for 'page' attribute on element pagenum.  
+  Dropped recommendation to use page number as id. Copied recent change 
+  comments to text. Removed comments explaining amp, lt, gt, etc. Changed 
+  version to 1.1.5b
+-->
+<!--
+  MM, DP: 2004-08-17 Corrected typos in content models of level and level1 - 
+  level6. Added missing exclamation point in previous change message.
+-->
+<!--
+  MM: 2004-08-17 Added %dtbookblocknoimggroup; to % blocknoimggroup, from 
+  which it had been accidentally dropped. Deleted section on 
+  character entities.
+-->
+<!-- MM: 2004-09-15: caption: changed content model to %flow;. -->
+<!--
+  MM: 2004-09-15 Deleted element levelhd, replacing it with hd in content 
+  model of level.
+-->
+<!--
+  MM: 2004-09-15 bridgehead: changed content model to (%inline;)*, to match 
+  hd, and h1-h6.
+-->
+<!-- MM: 2004-09-16 Changed version to 1.2.0 -->
+<!--
+  MM: 2005-03-10 level, level1 - level6: Reverted to 2004-08-17 content model 
+  as simplified content model was not valid.
+-->
+<!-- MM: 2005-03-10 Changed version to 1.2.1 -->
+<!--
+  MM: 2005-03-11 changed value for xmlns to: 
+  %URI; #FIXED 'http://www.loc.gov/nls/z3986/2005/dtbook/'.
+-->
+<!-- MM: 2005-04-22 epigraph - changed ATTLIST to %attrs; -->
+<!-- MM: 2005-04-22 byline - changed ATTLIST to %attrs; -->
+<!-- MM: 2005-04-22 dateline - changed ATTLIST to %attrs; -->
+<!-- MM: 2005-04-22 linegroup - changed ATTLIST to %attrs; -->
+<!-- MM: 2005-04-22 poem - changed ATTLIST to %attrs; -->
+<!-- MM: 2005-04-22 dtbook - changed version to 1.2.1a -->
+<!-- MM: 2005-04-26 version: updated from 1.2.1a to 1.2.2 -->
+<!-- MG: 2005-05-03 fixed malformed comments (double hyphen) -->
+<!-- NB: 2005-06-22 wrapped all lines at 80 columns -->
+<!-- 2005-06-26 M. Gylling. Changed pid, sid, ns uri, and filename for Z3986-2005 -->
+<!-- jpritchett at rfbd.org:  2006-07-06.  Changed pid, sid, version, and filename for 2005-2 throughout -->
+<!-- jpritchett at rfbd.org:  2006-07-06.  (Issue 45) Changed div model to %docblockorinline to include bridgehead -->
+<!-- jpritchett at rfbd.org:  2006-07-06.  (Issue 51) Changed content model for frontmatter.  doctitle now required, order of doctitle, covertitle, docauthor fixed. -->
+<!-- jpritchett at rfbd.org:  2006-07-06.  (Issue 129) Removed @style from %coreattrs and %attrsrqd -->
+<!-- jpritchett at rfbd.org:  2006-07-06.  Removed definition of %StyleSheet, since it is no longer needed -->
+<!-- jpritchett at rfbd.org:  2006-07-06.  (Issues 50/68)  Added xml:space to %coreattrs and %attrsrqd -->
+<!-- jpritchett at rfbd.org:  2006-07-06.  (Issue 52) Added %coreattrs (id, class, title, xml:space) to title attribute list -->
+<!-- jpritchett at rfbd.org:  2006-07-07.  (Issue 102) Changed @idref type for noteref/annoref to %URI to clarify usage -->
+<!-- jpritchett at rfbd.org:  2006-07-07.  (Issue 102) Modified comments in noteref/annoref ATTLISTs to clarify @idref usage -->
+<!-- jpritchett at rfbd.org:  2006-07-07.  (Issue 119) Changed @lang to @xml:lang in bdo -->
+<!-- jpritchett at rfbd.org:  2006-07-07.  (Issue 48) Corrected reference to RFC2046 in comments regarding @type for a, annoref, noteref -->
+<!-- jpritchett at rfbd.org:  2006-07-07.  (Issue 65) Corrected usage comment for meta -->
+<!-- jpritchett at rfbd.org:  2006-07-07.  (Issue 120) Corrected terminology in section 2 of general documentation comment -->
+<!-- jpritchett at rfbd.org:  2006-07-07.  (Issue 92) Added comment deprecating @showin -->
+<!-- jpritchett at rfbd.org:  2006-07-07.  (Issue 113) Created new entity %externalFlow; for extension elements that are both block and inline -->
+<!-- jpritchett at rfbd.org:  2006-07-07.  (Issue 113) Added %externalFlow to %flow;, %flownopagenum;, %inlines;, %inlinew;, %dtbookblock;, %block; -->
+<!-- jpritchett at rfbd.org:  2006-07-07.  (Issue 117) Created new entity %externalNamespaces; for extension namespace attributes -->
+<!-- jpritchett at rfbd.org:  2006-07-07.  (Issue 117) Added %externalNamespaces; to %coreattrs;, %attrsrqd;, and dtbook -->
+<!-- jpritchett at rfbd.org:  2006-08-11.  (Issue 113) Added %externalFlow; to %dtbookinline; -->
+<!-- jpritchett at rfbd.org:  2006-09-08.  (Issues 50/68) Rewrote attribute lists of code and samp to prevent duplication of @xml:lang -->
+<!-- ================= Comment Classification Conventions ================== -->
+<!--
+  Some comments start with a pattern followed by a colon:
+  
+      Use: element type and its use.
+  
+      Attuse: attribute use for associated element type.
+  
+      HB: date object comment on change by Michael Moodie.
+  
+  Other comments without such a pattern are dividing lines,
+  details about the DTD structure, or about dtbook objects.
+-->
+<!-- =================== Imported Parameter Entity Names =================== -->
+<!-- Many parameter entities come from the [XHTML11STRICT] strict DTD. -->
+<!-- jpritchett at rfbd.org:  2006-07-06.  Removed definition of %StyleSheet, since it is no longer needed -->
+<grammar ns="http://www.daisy.org/z3986/2005/dtbook/" xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+  <define name="Character">
+    <data type="string" datatypeLibrary=""/>
+  </define>
+  <!-- a single character from [ISO10646]. -->
+  <define name="Charset">
+    <data type="string" datatypeLibrary=""/>
+  </define>
+  <!-- a character encoding, as per [RFC2045]. -->
+  <define name="ContentType">
+    <data type="string" datatypeLibrary=""/>
+  </define>
+  <!-- media type, as per [RFC2046]. -->
+  <!-- HB: 2004-03-25 Changed reference from RFC1766 to its revison, RFC 3066. -->
+  <define name="LanguageCode">
+    <data type="NMTOKEN"/>
+  </define>
+  <!-- a language code, per [RFC3066]. -->
+  <define name="Number">
+    <data type="string" datatypeLibrary=""/>
+  </define>
+  <!-- one or more digits. -->
+  <define name="LinkTypes">
+    <data type="string" datatypeLibrary=""/>
+  </define>
+  <!-- space-separated list of link types. -->
+  <define name="MediaDesc">
+    <data type="string" datatypeLibrary=""/>
+  </define>
+  <!--
+    single or comma-separated list of media descriptors;
+    possible values include BRAILLE, PRINT, PROJECTION, SPEECH, ALL,
+    or the default SCREEN.
+  -->
+  <define name="Text">
+    <data type="string" datatypeLibrary=""/>
+  </define>
+  <!-- used for titles etc. -->
+  <define name="URI">
+    <data type="string" datatypeLibrary=""/>
+  </define>
+  <!-- a Uniform Resource Identifier, see [RFC2396]. -->
+  <!-- ================== dtbook External Module Inclusion =================== -->
+  <define name="externalblock">
+    <notAllowed/>
+  </define>
+  <!--
+    placeholder for block element expansion from external modules;
+    if changed, string in external subset begins " | blockelementname".
+  -->
+  <define name="externalinline">
+    <notAllowed/>
+  </define>
+  <!--
+    placeholder for inline element expansion from external modules;
+    if changed, string in external subset begins " | inlineelementname".
+  -->
+  <!-- jpritchett at rfbd.org:  2006-07-07.  Created new entity %externalFlow; for extension elements that are both block and inline -->
+  <define name="externalFlow">
+    <notAllowed/>
+  </define>
+  <!--
+    placeholder for elements that can be either block or inline from 
+    external modules; if changed, string in external subset begins 
+    " | flowelementname".
+  -->
+  <!-- jpritchett at rfbd.org:  2006-07-07.  Created new entity %externalNamespaces; for extension namespace attributes -->
+  <define name="externalNamespaces">
+    <empty/>
+  </define>
+  <!--
+    placeholder for namespace attributes for external modules.  These 
+    attributes will be available on all elements.  If changed, string
+    in external subset is in format 
+       "xmlns:sample   CDATA #FIXED 'http://www.sample.org/example'"
+  -->
+  <!-- ======================== dtbook Content Models ======================== -->
+  <!-- HB: 2004-04-05 % list removed: as content reduced to contain only <list>. -->
+  <!-- jpritchett at rfbd.org:  2006-07-07.  Added %externalFlow; to %dtbookblock; -->
+  <!-- block elements unique to dtbook. -->
+  <define name="dtbookblocknoimggroup">
+    <choice>
+      <ref name="author"/>
+      <ref name="prodnote"/>
+      <ref name="sidebar"/>
+      <ref name="note"/>
+      <ref name="annotation"/>
+      <ref name="externalblock"/>
+    </choice>
+  </define>
+  <!-- block elements unique to dtbook without imggroup. -->
+  <!-- HB: 2004-03-25 36f: caption: removed from % inlineinblock. -->
+  <define name="inlineinblock">
+    <choice>
+      <ref name="a"/>
+      <ref name="cite"/>
+      <ref name="samp"/>
+      <ref name="kbd"/>
+      <ref name="pagenum"/>
+    </choice>
+  </define>
+  <!-- inlines that may alternatively be in block elements. -->
+  <!-- HB: 2004-03-25 30: hr: eliminated, so dropped from % block. -->
+  <!--
+    HB: 2004-03-29 % block additions:
+    poem | linegroup | byline | dateline | epigraph.
+  -->
+  <!-- jpritchett at rfbd.org:  2006-07-07.  Added %externalFlow; to %block; -->
+  <define name="block">
+    <choice>
+      <ref name="p"/>
+      <ref name="list"/>
+      <ref name="dl"/>
+      <ref name="div"/>
+      <ref name="blockquote"/>
+      <ref name="img"/>
+      <ref name="imggroup"/>
+      <ref name="poem"/>
+      <ref name="linegroup"/>
+      <ref name="byline"/>
+      <ref name="dateline"/>
+      <ref name="epigraph"/>
+      <ref name="table"/>
+      <ref name="address"/>
+      <ref name="line"/>
+      <ref name="dtbookblocknoimggroup"/>
+      <ref name="externalFlow"/>
+    </choice>
+  </define>
+  <!--
+    block elements from [HTML401STRICT] dtd augmented by dtbook-unique
+    elements (note: list container difers from html ol and ul.)
+  -->
+  <!-- HB: 2004-03-25 30: hr: eliminated, dropped from % blocknoimggroup. -->
+  <!--
+    HB: 2004-03-29 % blocknoimggroup additions:
+    poem | linegroup | byline | dateline | epigraph.
+  -->
+  <!--
+    MM: 2004-08-17 Added %dtbookblocknoimggroup; to % blocknoimggroup, 
+    from which it had been accidentally dropped.
+  -->
+  <define name="blocknoimggroup">
+    <choice>
+      <ref name="p"/>
+      <ref name="list"/>
+      <ref name="dl"/>
+      <ref name="div"/>
+      <ref name="blockquote"/>
+      <ref name="poem"/>
+      <ref name="linegroup"/>
+      <ref name="byline"/>
+      <ref name="dateline"/>
+      <ref name="epigraph"/>
+      <ref name="table"/>
+      <ref name="address"/>
+      <ref name="line"/>
+      <ref name="dtbookblocknoimggroup"/>
+    </choice>
+  </define>
+  <!--
+    block elements from [HTML401STRICT] dtd augmented by dtbook-unique
+    elements.
+  -->
+  <!--
+    HB: 2004-03-29 % docblockorinline additions:
+    poem | linegroup | byline | dateline | epigraph.
+  -->
+  <!-- HB: 2004-04-08 covertitle: added to % docblockorinline -->
+  <!-- HB: 2004-04-27 blockhead: added to % docblockorinline; -->
+  <!--
+    MM: 2004-07-23 changed blockhead to bridgehead; eliminated poem, linegroup, 
+    byline, dateline, and epigraph since already present via %block
+  -->
+  <define name="docblockorinline">
+    <choice>
+      <ref name="doctitle"/>
+      <ref name="docauthor"/>
+      <ref name="covertitle"/>
+      <ref name="bridgehead"/>
+      <ref name="block"/>
+      <ref name="inlineinblock"/>
+    </choice>
+  </define>
+  <!-- common non-head elements for use with level or levelN -->
+  <!-- ========================= Generic Attributes ========================== -->
+  <!--
+    HB: 2004-03-25 33: % coreattrs: dropped mention of character
+    mnemonic entities, as use unicode.
+  -->
+  <!-- jpritchett at rfbd.org:  2006-07-06.  Removed @style -->
+  <!-- jpritchett at rfbd.org:  2006-07-06 Added @xml:space -->
+  <!-- jpritchett at rfbd.org:  2006-07-07.  Added %externalNamespaces; -->
+  <define name="coreattrs">
+    <optional>
+      <attribute name="id">
+        <data type="ID"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="class"/>
+    </optional>
+    <optional>
+      <attribute name="title">
+        <ref name="Text"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="xml:space">
+        <choice>
+          <value>default</value>
+          <value>preserve</value>
+        </choice>
+      </attribute>
+    </optional>
+    <ref name="externalNamespaces"/>
+  </define>
+  <!--
+    coreattrs are attributes permissible for most elements
+    
+    id       document-wide unique id
+    class    space separated list of classes used for rendering
+    title    advisory title/amplification
+    xml:space	whitespace handling (see http://www.w3.org/TR/xml11/#sec-white-space)
+  -->
+  <!--
+    HB: 2004-03-25 36a: % i18n: removed lang attribute,
+    as redundant with xml:lang.
+  -->
+  <define name="i18n">
+    <optional>
+      <attribute name="xml:lang">
+        <ref name="LanguageCode"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="dir">
+        <choice>
+          <value>ltr</value>
+          <value>rtl</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+  <!--
+    i18n internationalization attributes
+        xml:lang    language code (as per XML 1.0 spec)
+        dir         direction for weak/neutral text
+                    ltr=left to right
+                    rtl=right to left
+    
+    xhtml recommendation: use xml:lang such as "en-US", on the major
+    containing block, to provide source language for
+    the #IMPLIED values of its descendent elements.
+    See [RFC1556] for handling bi-directional text in MIME.
+  -->
+  <!-- jpritchett at rfbd.org:  2006-07-07  Added comment deprecating @showin -->
+  <define name="showin">
+    <optional>
+      <attribute name="showin">
+        <choice>
+          <value>xxx</value>
+          <value>xxp</value>
+          <value>xlx</value>
+          <value>xlp</value>
+          <value>bxx</value>
+          <value>bxp</value>
+          <value>blx</value>
+          <value>blp</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+  <!--
+    NOTE:
+    With version 2005-2 of the DTD, the use of the showin attribute is deprecated.
+    Following more modern conventions that have evolved since showin was
+    originally added, the Z39.86 Maintenance Committee's intention is to use
+    namespaces to distinguish output-format-specific information via extension
+    modules
+  -->
+  <!--
+    showin attribute applies for text elements to permit identification
+    of the kinds of display appropriate for the element, so presentation
+    choice by the reader among alternative readings can be provided, when
+    appropriate. Values of showin are coded with three letters in order:
+    "b"=Braille, "l"=Largeprint, and "p"=Print; or "x"=inappropriate:
+    
+        Value  Braille  Largeprint Print   Interpretation
+    
+        "xxx"                              hide
+        "xxp"                      p       print only
+        "xlx"           l                  largeprint only
+        "xlp"           l          p       largeprint and print
+        "bxx"   b                          braille only
+        "bxp"   b                  p       braille and print
+        "blx"   b       l                  braille and largeprint
+        "blp"   b       l          p       braille, largeprint, and print
+    
+    There is no default value; this attribute value is implied
+    from the most immediate ancestor that specifies a value.
+    The usual default for showin is 'blp'. If only one showin
+    value is needed it should be included with <book>.
+    
+    Different content for the same element (usually <prodnote>) meeting
+    different needs is possible, with showin serving as a switch to
+    differentiate among them. Both largeprint and print are appropriate
+    for screen rendering as well as printing. Different corresponding
+    styles may be appropriate.
+    
+    It is possible to include equivalent content from any major structure
+    below <book> to provide the different content suitable for different
+    media. These would be independent, sharing no direct content, possibly
+    having common references to images, with different accompanying text
+    descriptions.
+  -->
+  <define name="attrs">
+    <ref name="coreattrs"/>
+    <ref name="i18n"/>
+    <optional>
+      <attribute name="smilref"/>
+    </optional>
+    <ref name="showin"/>
+  </define>
+  <!--
+    %attrs; is part of most attribute lists. It includes
+    
+    %coreattrs; from which come the four #IMPLIED attributes:
+        id, class, title, and xml:space
+    
+    %i18n; from which come the implied attributes: xml:lang, and dir
+    
+    smilref is a pointer to a [SMIL2.0] file, normally to the time container
+        (SMIL <par> or <seq>) containing the media object that references this
+        element. However, in a text-only DTB consisting of a sequence of
+        text media objects, smilref points to the media object that
+        references this element. smilref allows resumption of SMIL
+        presentation at the proper location after navigation via dtbook file.
+        All smilref values are expected to be added to an augmented
+        version of the <dtbook> during production.
+    
+    %showin; (See entity declaration.)
+  -->
+  <!-- jpritchett at rfbd.org:  2006-07-06.  Removed @style -->
+  <!-- jpritchett at rfbd.org:  2006-07-06.  Added xml:space.  This allows control of whitespace handling on any element. -->
+  <!-- jpritchett at rfbd.org:  2006-07-07.  Added %externalNamespaces; -->
+  <define name="attrsrqd">
+    <attribute name="id">
+      <data type="ID"/>
+    </attribute>
+    <optional>
+      <attribute name="class"/>
+    </optional>
+    <optional>
+      <attribute name="title">
+        <ref name="Text"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="xml:space">
+        <choice>
+          <value>default</value>
+          <value>preserve</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="smilref"/>
+    </optional>
+    <ref name="i18n"/>
+    <ref name="showin"/>
+    <ref name="externalNamespaces"/>
+  </define>
+  <!--
+    %attrsrqd; includes required id and implied class,
+        title, and xml:space (see %coreattrs above)
+    
+    %i18n; from which come the implied attributes: xml:lang, and dir
+    
+    smilref is a pointer to a [SMIL2.0] file, normally to the time container
+        (SMIL <par> or <seq>) containing the media object that references this
+        element. However, in a text-only DTB consisting of a sequence of
+        text media objects, smilref points to the media object that
+        references this element. smilref allows resumption of SMIL
+        presentation at the proper location after navigation via dtbook file.
+        All smilref values are expected to be added to an augmented
+        version of the <dtbook> during production.
+    
+    %externalnamespace; (See entity declaration)
+    
+    %showin; (See entity declaration.)
+  -->
+  <!-- ========================= Document Structure ========================== -->
+  <define name="dtbookcontent">
+    <ref name="head"/>
+    <ref name="book"/>
+  </define>
+  <!--
+    dtbookContent designates that each dtbook has a <head> of
+    metainformation preceding the <book> content.
+  -->
+  <!--
+    Use: dtbook is the root element in the Digital Talking Book DTD.
+    <dtbook> contains metadata in <head> and the contents itself
+    in <book>.
+  -->
+  <define name="dtbook">
+    <element name="dtbook">
+      <ref name="attlist.dtbook"/>
+      <ref name="dtbookcontent"/>
+    </element>
+  </define>
+  <!--
+    HB: 2004-04-05 dtbook: added attribute xmlns with FIXED value 
+    'http://www.loc.gov/nls/z3986/2004/dtbook'
+    Also updated version value from 1.1.0' to '1.1.1'.
+  -->
+  <!--
+    Attuse: dtbook
+    
+    "version" is required, and contains the specific
+    version of the dtd, so that the dtd version for any dtbook can
+    be recognized.
+    
+    "xmlns" is the URL where this dtd and its related materials can
+    be found.
+    
+    "%i18n;" internationalization attributes characterize the <book>.
+    Those values may be adjusted for language changes within it.
+  -->
+  <!--
+    HB: 2004-04-05 version: updated from '1.1.0' to '1.1.1'.
+    added value for xmlns: 
+    %URI; #FIXED 'http://www.loc.gov/nls/z3986/2004/dtbook/'.
+  -->
+  <!--
+    MM: 2005-03-11 changed value for xmlns to: 
+    %URI; #FIXED 'http://www.loc.gov/nls/z3986/2005/dtbook/'.
+  -->
+  <!-- MM: 2005-04-26 version: updated to 1.2.2 -->
+  <!-- MG: 2005-06-26 version: updated to 2005-1 -->
+  <!-- jpritchett at rfbd.org:  2006-07-07  updated @version to 2005-2 -->
+  <!-- jpritchett at rfbd.org:  2006-07-07.  Added %externalNamespaces; -->
+  <define name="attlist.dtbook" combine="interleave">
+    <optional>
+      <attribute name="version" a:defaultValue="2005-2">
+        <value type="string" datatypeLibrary="">2005-2</value>
+      </attribute>
+    </optional>
+    <ref name="i18n"/>
+    <ref name="externalNamespaces"/>
+  </define>
+  <!-- ======================== Document Head Metadata ======================= -->
+  <!-- HB: 2004-03-25 36: % headmisc: removed style. -->
+  <define name="headmisc">
+    <choice>
+      <ref name="meta"/>
+      <ref name="link"/>
+    </choice>
+  </define>
+  <!-- optional head elements -->
+  <!--
+    Use: head contains metainformation about the book but no
+    actual content of the book itself, which is placed in <book>.
+    This information is consonant with the <head> information
+    in xhtml, see [XHTML11STRICT].
+  -->
+  <!-- HB: 2003-03-25 head: element drop title -->
+  <define name="head">
+    <element name="head">
+      <ref name="attlist.head"/>
+      <zeroOrMore>
+        <ref name="headmisc"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <!--
+    Attuse: head
+    "profile" gives one or more
+    whitespace-separated profile URI targets that may provide
+    additional information about the current document.
+  -->
+  <define name="attlist.head" combine="interleave">
+    <ref name="i18n"/>
+    <optional>
+      <attribute name="profile">
+        <ref name="URI"/>
+      </attribute>
+    </optional>
+  </define>
+  <!--
+    HB: 2004-04-02 title: element removed from head,
+    now only used for cite and poem.
+  -->
+  <!--
+    Use: link is an empty element appearing in the <head> section
+    of a document that establishes a connection between the current
+    document and another document. The <link> element conveys
+    relationship information (for example, "next" and "previous") that
+    may be rendered by user agents in a variety of ways.
+  -->
+  <define name="link">
+    <element name="link">
+      <ref name="attlist.link"/>
+      <empty/>
+    </element>
+  </define>
+  <!--
+    Attuse: link
+    
+    Each attribute use indicated by a parameter entity is
+    defined in the comment following its definition.
+  -->
+  <define name="attlist.link" combine="interleave">
+    <ref name="attrs"/>
+    <optional>
+      <attribute name="charset">
+        <ref name="Charset"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="href">
+        <ref name="URI"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="hreflang">
+        <ref name="LanguageCode"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="type">
+        <ref name="ContentType"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="rel">
+        <ref name="LinkTypes"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="rev">
+        <ref name="LinkTypes"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="media">
+        <ref name="MediaDesc"/>
+      </attribute>
+    </optional>
+  </define>
+  <!--
+    HB: 2004-03-29 Dublin Core: minimum requirement 
+    name="dc:title" content="book title"; encourage use of
+    additional name/content pairs from Dublin Core 
+    name="dc:..." and from Digital Talking Book name="dtb:..."
+    Encourage inclusion of additional Dublin Core and Dtbook metadata
+    attributes to make more useful the dtbook as stand-alone content.
+  -->
+  <!-- jpritchett at rfbd.org:  2006-07-07  Corrected usage comment -->
+  <!--
+    Use: meta indicates metadata about the book. It is an empty
+    element that may appear repeatedly only in <head>.
+    Meta is the container for the Dublin Core attributes, 
+    and the additional DTBook attributes.
+    As a minumum the dc:Title and dtb:uid meta are required.
+    Inclusion of the full range of applicable Dublin Core elements is 
+    recommended, to make a DTBook document more useful as stand-alone 
+    content.
+    The Dublin Core specification is available at:
+        http://purl.org/dc/
+  -->
+  <define name="meta">
+    <element name="meta">
+      <ref name="attlist.meta"/>
+      <empty/>
+    </element>
+  </define>
+  <!--
+    Attuse: meta
+    
+    "http-equiv" connects the content attribute
+    value to an http header field.
+    
+    "name" value identifies the specific kind of
+    content value.
+    
+    "content" indicates the value for that "name",
+    possibly constrained by the semantics for the individual names.
+    
+    "scheme" indicates a predetermined format for interpreting
+    the content value, such as the Dublin Core.
+  -->
+  <define name="attlist.meta" combine="interleave">
+    <ref name="i18n"/>
+    <optional>
+      <attribute name="http-equiv">
+        <data type="NMTOKEN"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="name">
+        <data type="NMTOKEN"/>
+      </attribute>
+    </optional>
+    <attribute name="content"/>
+    <optional>
+      <attribute name="scheme"/>
+    </optional>
+  </define>
+  <!-- HB: 2004-03-25 36: head: removed element style. -->
+  <!-- ============================ Book Content ============================= -->
+  <!--
+    Use: book surrounds the actual content of the document, which
+    is divided into <frontmatter>, <bodymatter>, and <rearmatter>.
+    <head>, which contains metadata, precedes <book>.
+  -->
+  <define name="book">
+    <element name="book">
+      <ref name="attlist.book"/>
+      <optional>
+        <ref name="frontmatter"/>
+      </optional>
+      <optional>
+        <ref name="bodymatter"/>
+      </optional>
+      <optional>
+        <ref name="rearmatter"/>
+      </optional>
+    </element>
+  </define>
+  <define name="attlist.book" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!-- ======================== Book Major Structures ======================== -->
+  <!--
+    Use: frontmatter usually contains <doctitle> and <docauthor>, as
+    well as preliminary material that is often enclosed in appropriate
+    <level> or <level1>. Content may include copyright notice, foreword,
+    acknowledgments, table of contents, etc. <frontmatter> serves as a
+    guide to the content and nature of a <book>.
+  -->
+  <!--
+    HB: 2004-03-25 29: frontmatter: eliminate %block;
+    level or level1 container is required.
+  -->
+  <!-- HB: 2004-04-08 frontmatter: added covertitle. -->
+  <!-- jpritchett at rfbd.org:  2006-07-06 doctitle now required, order of doctitle, covertitle, docauthor fixed. -->
+  <define name="frontmatter">
+    <element name="frontmatter">
+      <ref name="attlist.frontmatter"/>
+      <ref name="doctitle"/>
+      <optional>
+        <ref name="covertitle"/>
+      </optional>
+      <zeroOrMore>
+        <ref name="docauthor"/>
+      </zeroOrMore>
+      <zeroOrMore>
+        <choice>
+          <ref name="level"/>
+          <ref name="level1"/>
+        </choice>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.frontmatter" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    Use: bodymatter consists of the text proper of a book, as contrasted
+    with preliminary material <frontmatter> or supplementary information
+    in <rearmatter>.
+  -->
+  <!--
+    HB: 2004-03-25 29: bodymatter: eliminate %block;
+    level or level1 container is required.
+  -->
+  <define name="bodymatter">
+    <element name="bodymatter">
+      <ref name="attlist.bodymatter"/>
+      <oneOrMore>
+        <choice>
+          <ref name="level"/>
+          <ref name="level1"/>
+        </choice>
+      </oneOrMore>
+    </element>
+  </define>
+  <define name="attlist.bodymatter" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    Use: rearmatter contains supplementary material such as
+    appendices, glossaries, bibliographies, and indices. It follows
+    the <bodymatter> of the book.
+  -->
+  <!--
+    HB: 2004-03-25 29: rearmatter: eliminate %block;
+    level or level1 container is required.
+  -->
+  <define name="rearmatter">
+    <element name="rearmatter">
+      <ref name="attlist.rearmatter"/>
+      <oneOrMore>
+        <choice>
+          <ref name="level"/>
+          <ref name="level1"/>
+        </choice>
+      </oneOrMore>
+    </element>
+  </define>
+  <define name="attlist.rearmatter" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!-- ================== dtbook Recursive Structure level =================== -->
+  <!--
+    HB: 2004-03-25 28: level: add constraint - at most one <levelhd> 
+    (later changed to <hd>) per <level>.
+  -->
+  <!--
+    Use: level is an alternative tag for marking the major
+    structures in a book. It may be used recursively, i.e., repeated
+    indefinitely with each successive occurrence nesting within the
+    previous. It may also be included in a subsequent higher level.
+    At most one <hd> heading child may be used.
+    Subordinate levels have greater depth. Contrast with the explicit
+    <level1>...<level6> elements, which may not be intermixed with
+    <level>.
+  -->
+  <!-- HB: 2004-03-26 34: level: make contentmodel (...)+, rather than (...)*. -->
+  <!-- MM: 2004-07-30 level: Changed content model to eliminate ambiguity. -->
+  <!--
+    MM, DP: 2004-08-17 Corrected typos in content models of level 
+    and level1-level6.
+  -->
+  <!-- MM: 2004-09-15 level: Simplified content model. -->
+  <!--
+    MM: 2005-03-10 level: Reverted to 2004-08-17 content model as simplified 
+    content model was not valid.
+  -->
+  <define name="level">
+    <element name="level">
+      <ref name="attlist.level"/>
+      <choice>
+        <group>
+          <ref name="hd"/>
+          <oneOrMore>
+            <choice>
+              <ref name="docblockorinline"/>
+              <ref name="level"/>
+            </choice>
+          </oneOrMore>
+        </group>
+        <group>
+          <oneOrMore>
+            <choice>
+              <ref name="docblockorinline"/>
+              <ref name="level"/>
+            </choice>
+          </oneOrMore>
+          <optional>
+            <ref name="hd"/>
+            <oneOrMore>
+              <choice>
+                <ref name="docblockorinline"/>
+                <ref name="level"/>
+              </choice>
+            </oneOrMore>
+          </optional>
+        </group>
+      </choice>
+    </element>
+  </define>
+  <!--
+    Attuse: level
+    
+    "class" identifies the actual name (e.g., part,
+    chapter, section, subsection) of the structure it marks.
+    "depth" indicates the nesting depth, starting at 1.
+  -->
+  <define name="attlist.level" combine="interleave">
+    <ref name="attrs"/>
+    <optional>
+      <attribute name="depth"/>
+    </optional>
+  </define>
+  <!-- ============ dtbook Hierarchic Structure level1 ... level6 ============ -->
+  <!--
+    Use: level1 is the highest-level container of major divisions of
+    a book. Used in <frontmatter>, <bodymatter>, and <rearmatter> to
+    mark the largest divisions of the book (usually parts or chapters),
+    inside which level2 subdivisions (often sections) may nest.
+    The class attribute identifies the actual name (e.g., part, chapter)
+    of the structure it marks. Contrast with <level>.
+    At most one heading <h1> may be used.
+  -->
+  <!--
+    HB: 2004-03-25 28: level1: added constraint - at most one <h1> 
+    per <level1>.
+  -->
+  <!-- HB: 2004-03-26 34: level1: make contentmodel (...)+, rather than (...)*. -->
+  <!-- MM: 2004-07-30 level1: Changed content model to eliminate ambiguity. -->
+  <!--
+    MM, DP: 2004-08-17 Corrected typos in content models of level 
+    and level1-level6.
+  -->
+  <!-- MM: 2004-09-15 level1: Simplified content model. -->
+  <!--
+    MM: 2005-03-10 level1: Reverted to 2004-08-17 content model as simplified 
+    content model was not valid.
+  -->
+  <define name="level1">
+    <element name="level1">
+      <ref name="attlist.level1"/>
+      <choice>
+        <group>
+          <ref name="h1"/>
+          <oneOrMore>
+            <choice>
+              <ref name="docblockorinline"/>
+              <ref name="level2"/>
+            </choice>
+          </oneOrMore>
+        </group>
+        <group>
+          <oneOrMore>
+            <choice>
+              <ref name="docblockorinline"/>
+              <ref name="level2"/>
+            </choice>
+          </oneOrMore>
+          <optional>
+            <ref name="h1"/>
+            <oneOrMore>
+              <choice>
+                <ref name="docblockorinline"/>
+                <ref name="level2"/>
+              </choice>
+            </oneOrMore>
+          </optional>
+        </group>
+      </choice>
+    </element>
+  </define>
+  <define name="attlist.level1" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    Use: level2 contains subdivisions that nest within <level1>
+    divisions. The class attribute identifies the actual name (e.g.,
+    subpart, chapter, subsection) of the structure it marks.
+    At most one heading <h2> may be used.
+  -->
+  <!--
+    HB: 2004-03-25 28: level2: added constraint - at most one <h2> 
+    per <level2>.
+  -->
+  <!-- HB: 2004-03-26 34: level2: make contentmodel (...)+, rather than (...)*. -->
+  <!-- MM: 2004-07-30 level2: Changed content model to eliminate ambiguity. -->
+  <!--
+    MM, DP: 2004-08-17 Corrected typos in content models of level 
+    and level1-level6.
+  -->
+  <!-- MM: 2004-09-15 level2: Simplified content model. -->
+  <!--
+    MM: 2005-03-10 level2: Reverted to 2004-08-17 content model as simplified 
+    content model was not valid.
+  -->
+  <define name="level2">
+    <element name="level2">
+      <ref name="attlist.level2"/>
+      <choice>
+        <group>
+          <ref name="h2"/>
+          <oneOrMore>
+            <choice>
+              <ref name="docblockorinline"/>
+              <ref name="level3"/>
+            </choice>
+          </oneOrMore>
+        </group>
+        <group>
+          <oneOrMore>
+            <choice>
+              <ref name="docblockorinline"/>
+              <ref name="level3"/>
+            </choice>
+          </oneOrMore>
+          <optional>
+            <ref name="h2"/>
+            <oneOrMore>
+              <choice>
+                <ref name="docblockorinline"/>
+                <ref name="level3"/>
+              </choice>
+            </oneOrMore>
+          </optional>
+        </group>
+      </choice>
+    </element>
+  </define>
+  <define name="attlist.level2" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    HB: 2004-03-25 28: level3: added constraint - at most one <h3> 
+    per <level3>.
+  -->
+  <!-- MM: 2004-07-08 34: level3: make contentmodel (...)+, rather than (...)*. -->
+  <!-- MM: 2004-07-30 level3: Changed content model to eliminate ambiguity. -->
+  <!--
+    MM, DP: 2004-08-17 Corrected typos in content models of level 
+    and level1-level6.
+  -->
+  <!-- MM: 2004-09-15 level3: Simplified content model. -->
+  <!--
+    MM: 2005-03-10 level3: Reverted to 2004-08-17 content model as simplified 
+    content model was not valid.
+  -->
+  <!--
+    Use: level3 contains sub-subdivisions that nest within <level2>
+    subdivisions (e.g., sub-subsections within subsections). The class
+    attribute identifies the actual name (e.g., section, subpart,
+    subsubsection) of the subordinate structure it marks.
+    At most one heading <h3> may be used.
+  -->
+  <define name="level3">
+    <element name="level3">
+      <ref name="attlist.level3"/>
+      <choice>
+        <group>
+          <ref name="h3"/>
+          <oneOrMore>
+            <choice>
+              <ref name="docblockorinline"/>
+              <ref name="level4"/>
+            </choice>
+          </oneOrMore>
+        </group>
+        <group>
+          <oneOrMore>
+            <choice>
+              <ref name="docblockorinline"/>
+              <ref name="level4"/>
+            </choice>
+          </oneOrMore>
+          <optional>
+            <ref name="h3"/>
+            <oneOrMore>
+              <choice>
+                <ref name="docblockorinline"/>
+                <ref name="level4"/>
+              </choice>
+            </oneOrMore>
+          </optional>
+        </group>
+      </choice>
+    </element>
+  </define>
+  <define name="attlist.level3" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    HB: 2004-03-25 28: level4: added constraint - at most one <h4> 
+    per <level4>.
+  -->
+  <!-- MM: 2004-07-08 34: level4: make contentmodel (...)+, rather than (...)*. -->
+  <!-- MM: 2004-07-30 level4: Changed content model to eliminate ambiguity. -->
+  <!--
+    MM, DP: 2004-08-17 Corrected typos in content models of level 
+    and level1-level6.
+  -->
+  <!-- MM: 2004-09-15 level4: Simplified content model. -->
+  <!--
+    MM: 2005-03-10 level4: Reverted to 2004-08-17 content model as simplified 
+    content model was not valid.
+  -->
+  <!--
+    Use: level4 contains further subdivisions that nest within <level3>
+    subdivisions. The class attribute identifies the actual name
+    of the subordinate structure it marks.
+    At most one heading <h4> may be used.
+  -->
+  <define name="level4">
+    <element name="level4">
+      <ref name="attlist.level4"/>
+      <choice>
+        <group>
+          <ref name="h4"/>
+          <oneOrMore>
+            <choice>
+              <ref name="docblockorinline"/>
+              <ref name="level5"/>
+            </choice>
+          </oneOrMore>
+        </group>
+        <group>
+          <oneOrMore>
+            <choice>
+              <ref name="docblockorinline"/>
+              <ref name="level5"/>
+            </choice>
+          </oneOrMore>
+          <optional>
+            <ref name="h4"/>
+            <oneOrMore>
+              <choice>
+                <ref name="docblockorinline"/>
+                <ref name="level5"/>
+              </choice>
+            </oneOrMore>
+          </optional>
+        </group>
+      </choice>
+    </element>
+  </define>
+  <define name="attlist.level4" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    HB: 2004-03-25 28: level5: added constraint - at most one <h5> 
+    per <level5>.
+  -->
+  <!-- MM: 2004-07-08 34: level5: make contentmodel (...)+, rather than (...)*. -->
+  <!-- MM: 2004-07-30 level5: Changed content model to eliminate ambiguity. -->
+  <!--
+    MM, DP: 2004-08-17 Corrected typos in content models of level 
+    and level1-level6.
+  -->
+  <!-- MM: 2004-09-15 level5: Simplified content model. -->
+  <!--
+    MM: 2005-03-10 level5: Reverted to 2004-08-17 content model as simplified 
+    content model was not valid.
+  -->
+  <!--
+    Use: level5 contains further subdivisions that nest within <level4>
+    subdivisions. The class attribute identifies the actual name
+    of the subordinate structure it marks.
+    At most one heading <h5> may be used.
+  -->
+  <define name="level5">
+    <element name="level5">
+      <ref name="attlist.level5"/>
+      <choice>
+        <group>
+          <ref name="h5"/>
+          <oneOrMore>
+            <choice>
+              <ref name="docblockorinline"/>
+              <ref name="level6"/>
+            </choice>
+          </oneOrMore>
+        </group>
+        <group>
+          <oneOrMore>
+            <choice>
+              <ref name="docblockorinline"/>
+              <ref name="level6"/>
+            </choice>
+          </oneOrMore>
+          <optional>
+            <ref name="h5"/>
+            <oneOrMore>
+              <choice>
+                <ref name="docblockorinline"/>
+                <ref name="level6"/>
+              </choice>
+            </oneOrMore>
+          </optional>
+        </group>
+      </choice>
+    </element>
+  </define>
+  <define name="attlist.level5" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    HB: 2004-03-25 28: level6: added constraint - at most one <h6> 
+    per <level6>.
+  -->
+  <!-- MM: 2004-07-08 34: level6: make contentmodel (...)+, rather than (...)*. -->
+  <!--
+    MM: 2004-07-23 34: level6: replaced "%block | %inlineinblock" 
+    with "%docblockorinline;" per other leveln models.
+  -->
+  <!-- MM: 2004-07-30 level6: Changed content model to eliminate ambiguity. -->
+  <!--
+    MM, DP: 2004-08-17 Corrected typos in content models of level 
+    and level1-level6.
+  -->
+  <!-- MM: 2004-09-15 level6: Simplified content model. -->
+  <!--
+    MM: 2005-03-10 level6: Reverted to 2004-08-17 content model as simplified 
+    content model was not valid.
+  -->
+  <!--
+    Use: level6 contains further subdivisions that nest within <level5>
+    subdivisions. The class attribute identifies the actual name
+    of the subordinate structure it marks.
+    At most one heading <h6> may be used.
+  -->
+  <define name="level6">
+    <element name="level6">
+      <ref name="attlist.level6"/>
+      <choice>
+        <group>
+          <ref name="h6"/>
+          <oneOrMore>
+            <ref name="docblockorinline"/>
+          </oneOrMore>
+        </group>
+        <group>
+          <oneOrMore>
+            <ref name="docblockorinline"/>
+          </oneOrMore>
+          <optional>
+            <ref name="h6"/>
+            <oneOrMore>
+              <ref name="docblockorinline"/>
+            </oneOrMore>
+          </optional>
+        </group>
+      </choice>
+    </element>
+  </define>
+  <define name="attlist.level6" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!-- ============================= Text Markup ============================= -->
+  <define name="phrase">
+    <choice>
+      <ref name="em"/>
+      <ref name="strong"/>
+      <ref name="dfn"/>
+      <ref name="code"/>
+      <ref name="samp"/>
+      <ref name="kbd"/>
+      <ref name="cite"/>
+      <ref name="abbr"/>
+      <ref name="acronym"/>
+    </choice>
+  </define>
+  <!-- inline text elements -->
+  <!--
+    HB: 2004-04-23 % special: eliminated linenum from % special,
+    linenum only appears within line.
+  -->
+  <define name="special">
+    <choice>
+      <ref name="a"/>
+      <ref name="img"/>
+      <ref name="imggroup"/>
+      <ref name="br"/>
+      <ref name="q"/>
+      <ref name="sub"/>
+      <ref name="sup"/>
+      <ref name="span"/>
+      <ref name="bdo"/>
+    </choice>
+  </define>
+  <!-- special inline text elements -->
+  <!--
+    HB: 2004-04-23 % specialnoa: eliminated linenum from % specialnoa,
+    linenum only appears within line.
+  -->
+  <define name="specialnoa">
+    <choice>
+      <ref name="img"/>
+      <ref name="imggroup"/>
+      <ref name="br"/>
+      <ref name="q"/>
+      <ref name="sub"/>
+      <ref name="sup"/>
+      <ref name="span"/>
+      <ref name="bdo"/>
+    </choice>
+  </define>
+  <!-- specialnoa inline text elements for anchor <a> -->
+  <!-- =========================== Inline Entities =========================== -->
+  <!-- jpritchett at rfbd.org:  2006-08-11.  Add %externalFlow to %dtbookinline; -->
+  <define name="dtbookinline">
+    <choice>
+      <ref name="sent"/>
+      <ref name="w"/>
+      <ref name="pagenum"/>
+      <ref name="prodnote"/>
+      <ref name="annoref"/>
+      <ref name="noteref"/>
+      <ref name="externalinline"/>
+      <ref name="externalFlow"/>
+    </choice>
+  </define>
+  <!-- dtbook added inline text elements -->
+  <define name="inline">
+    <choice>
+      <text/>
+      <ref name="phrase"/>
+      <ref name="special"/>
+      <ref name="dtbookinline"/>
+    </choice>
+  </define>
+  <!-- inline text elements -->
+  <!-- HB: 2004-03-25 36h: to % inlinenoa add %dtbookinline;. -->
+  <!--
+    MM: 2004-07-23 Remove %externalinline; since already present 
+    via %dtbookinline;.
+  -->
+  <define name="inlinenoa">
+    <choice>
+      <text/>
+      <ref name="phrase"/>
+      <ref name="specialnoa"/>
+      <ref name="dtbookinline"/>
+    </choice>
+  </define>
+  <!-- inlinenoa excludes nested <a> -->
+  <!-- jpritchett at rfbd.org:  2006-07-07.  Added %externalFlow %inlines;, %inlinew; -->
+  <define name="inlines">
+    <choice>
+      <text/>
+      <ref name="phrase"/>
+      <ref name="special"/>
+      <ref name="pagenum"/>
+      <ref name="w"/>
+      <ref name="prodnote"/>
+      <ref name="annoref"/>
+      <ref name="noteref"/>
+      <ref name="externalinline"/>
+      <ref name="externalFlow"/>
+    </choice>
+  </define>
+  <!-- inlines excludes direct nesting of sentences <sent> -->
+  <define name="inlinew">
+    <choice>
+      <text/>
+      <ref name="phrase"/>
+      <ref name="special"/>
+      <ref name="externalinline"/>
+      <ref name="externalFlow"/>
+    </choice>
+  </define>
+  <!-- inlinew for word <w> excludes any of the %dtbookinline; -->
+  <define name="inlinenopagenum">
+    <choice>
+      <text/>
+      <ref name="phrase"/>
+      <ref name="special"/>
+      <ref name="sent"/>
+      <ref name="w"/>
+      <ref name="annoref"/>
+      <ref name="noteref"/>
+      <ref name="externalinline"/>
+    </choice>
+  </define>
+  <!-- inlinenopagenum excludes direct <pagenum> in <table> <th> and <td>. -->
+  <define name="inlinenoprodnote">
+    <choice>
+      <text/>
+      <ref name="phrase"/>
+      <ref name="special"/>
+      <ref name="sent"/>
+      <ref name="w"/>
+      <ref name="pagenum"/>
+      <ref name="annoref"/>
+      <ref name="noteref"/>
+      <ref name="externalinline"/>
+    </choice>
+  </define>
+  <!-- inlinenoprodnote excludes direct <prodnote>, as they shouldn't nest -->
+  <!-- =================== Flow (Block or Inline) Entities =================== -->
+  <!-- jpritchett at rfbd.org:  2006-07-07.  Added %externalFlow to %flow;, %flownopagenum; -->
+  <define name="flow">
+    <choice>
+      <ref name="inlinenoprodnote"/>
+      <ref name="blocknoimggroup"/>
+      <ref name="externalFlow"/>
+    </choice>
+  </define>
+  <!-- flow elements add inlinenoprodnote to block -->
+  <define name="flownopagenum">
+    <choice>
+      <ref name="inlinenopagenum"/>
+      <ref name="blocknoimggroup"/>
+      <ref name="externalFlow"/>
+    </choice>
+  </define>
+  <!--
+    flownopagenum ideally excludes pagenum though can get in
+    indirectly through elements of %blocknoimggroup;
+  -->
+  <!-- ========= Br, Line, Linenum, Address, and Div Content Models ========== -->
+  <!-- Use: br marks a forced line break. -->
+  <define name="br">
+    <element name="br">
+      <ref name="attlist.br"/>
+      <empty/>
+    </element>
+  </define>
+  <!--
+    Attuse: br
+    
+    The %coreattrs; only appear, as there is no content
+    to which the more general %attrs; apply.
+  -->
+  <define name="attlist.br" combine="interleave">
+    <ref name="coreattrs"/>
+  </define>
+  <!--
+    Use: line marks a single logical line of text. Often used in
+    conjunction with <linenum> in documents with numbered lines.
+  -->
+  <define name="line">
+    <element name="line">
+      <ref name="attlist.line"/>
+      <zeroOrMore>
+        <choice>
+          <ref name="inline"/>
+          <ref name="linenum"/>
+        </choice>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.line" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!-- HB: 2004-03-30 poem: added linenum use. -->
+  <!-- Use: linenum contains a line number, for example in legal text, or <poem>. -->
+  <define name="linenum">
+    <element name="linenum">
+      <ref name="attlist.linenum"/>
+      <text/>
+    </element>
+  </define>
+  <define name="attlist.linenum" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    Use: address contains a location at which a person or agency
+    may be contacted. By use of <line> to contain content of the
+    individual lines, the class attribute can be used to identify
+    the content of that <line>. For example, class values might include:
+    name, address, region (state. province, etc.), country, location
+    code (such as zipcode, provincial code), phone, fax, email, etc.
+  -->
+  <define name="address">
+    <element name="address">
+      <ref name="attlist.address"/>
+      <zeroOrMore>
+        <choice>
+          <ref name="inline"/>
+          <ref name="line"/>
+        </choice>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.address" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    Use: div is a generic container for subdivisions of a book. The
+    <level1> ... <level6> hierarchy, or the <level> tag used recursively,
+    should mark the major hierarchical structures of a book, while <div>
+    is used in less formal circumstances or when for production purposes
+    it is desired that a structure should be treated differently.
+    Compare with <span>, which is used in inline settings.
+  -->
+  <!-- HB: 2004-04-08 div: added covertitle. -->
+  <!-- MM: 2004-07-30 Dropped 'level' attribute from element div. -->
+  <!-- jpritchett at rfbd.org:  2006-07-06 Changed model to %docblockorinline to include bridgehead -->
+  <define name="div">
+    <element name="div">
+      <ref name="attlist.div"/>
+      <oneOrMore>
+        <ref name="docblockorinline"/>
+      </oneOrMore>
+    </element>
+  </define>
+  <!--
+    Attuse: div
+    
+    "class" value can identify the
+    actual name (e.g., part, chapter, letter) of the structure it marks.
+  -->
+  <define name="attlist.div" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!-- === dtbook Block Elements: Title, Author, Prodnote, Sidebar === -->
+  <!-- HB: 2004-04-04 35b  title: added <title> for use in <poem> or <cite>. -->
+  <!-- Use: title contains the title of a <poem> or <cite> (citation) -->
+  <!-- jpritchett at rfbd.org:  2006-07-06 Added %coreattrs (id, class, title, xml:space) to attribute list -->
+  <define name="title">
+    <element name="title">
+      <ref name="attlist.title"/>
+      <text/>
+    </element>
+  </define>
+  <define name="attlist.title" combine="interleave">
+    <ref name="i18n"/>
+    <ref name="coreattrs"/>
+  </define>
+  <!--
+    Use: author identifies the writer of a work other than this one.
+    Contrast with <docauthor>,  which identifies the author of this work.
+    <author> typically occurs within <poem>, <blockquote> or <cite>.
+  -->
+  <define name="author">
+    <element name="author">
+      <ref name="attlist.author"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.author" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    HB: 2004-03-25 35d: notice element dropped: its purpose is sufficiently
+    achieved with sidebar with attribute render="required." This provides
+    sufficient capability for admonitions like warning, hazard, 
+    danger, or caution.
+  -->
+  <!--
+    Use: prodnote contains language added to the alternative-format
+    version by the producer; commonly used to:
+    1) provide descriptions of one or more visual elements such
+        as charts, graphs, etc.
+    2) supply operating instructions
+    3) describe differences between the print book and the audio
+    version.
+  -->
+  <define name="prodnote">
+    <element name="prodnote">
+      <ref name="attlist.prodnote"/>
+      <zeroOrMore>
+        <ref name="flow"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <!--
+    Attuse: prodnote
+    
+    "imgref" identifies the space-separated id value(s)
+    on pertinent images <img>.
+    
+    "render" indicates that the content is
+    'required' or 'optional' for the user. If optional, some user
+    preference may allow skipping over the content. But <prodnote
+    render='required'> is essential content for the user. An
+    audible cue could announce the presence of the <prodnote>.
+  -->
+  <!--
+    HB: 2004-03-25 35g: prodnote: use render="required" to achieve the explicit
+    admonition such as caution, warning, danger, or hazard, from the
+    text. Optionally put the specific admonition in the class attribute
+    value, repeating it from the text.
+  -->
+  <define name="attlist.prodnote" combine="interleave">
+    <ref name="attrs"/>
+    <optional>
+      <attribute name="imgref">
+        <data type="IDREFS"/>
+      </attribute>
+    </optional>
+    <attribute name="render">
+      <choice>
+        <value>required</value>
+        <value>optional</value>
+      </choice>
+    </attribute>
+  </define>
+  <!--
+    Use: sidebar contains information supplementary to the main
+    text and/or narrative flow and is often boxed and printed apart
+    from the main text block on a page. It may have a heading <hd>.
+  -->
+  <define name="sidebar">
+    <element name="sidebar">
+      <ref name="attlist.sidebar"/>
+      <zeroOrMore>
+        <choice>
+          <ref name="flow"/>
+          <ref name="hd"/>
+        </choice>
+      </zeroOrMore>
+    </element>
+  </define>
+  <!--
+    HB: 2004-03-25 35g: sidebar: use render="required" to achieve the explicit
+    admonition such as caution, warning, danger, or hazard, from the
+    text. Optionally put the specific admonition in the class attribute
+    value, repeating it from the text.
+  -->
+  <define name="attlist.sidebar" combine="interleave">
+    <ref name="attrs"/>
+    <attribute name="render">
+      <choice>
+        <value>required</value>
+        <value>optional</value>
+      </choice>
+    </attribute>
+  </define>
+  <!--
+    Use: note marks a footnote, endnote, etc. Any local reference to
+    <note id="yyy"> is by <noteref idref="#yyy">.
+  -->
+  <define name="note">
+    <element name="note">
+      <ref name="attlist.note"/>
+      <oneOrMore>
+        <choice>
+          <ref name="block"/>
+          <ref name="inlineinblock"/>
+        </choice>
+      </oneOrMore>
+    </element>
+  </define>
+  <define name="attlist.note" combine="interleave">
+    <ref name="attrsrqd"/>
+  </define>
+  <!--
+    Use: annotation is a comment on or explanation of a portion of
+    a printed book. It differs from <note> in that an <annotation>
+    is usually set in the margin or on a facing page, often with
+    no explicit reference to it inserted in the text. Any local
+    reference to <annotation id="xxx"> is by <annoref idref="#xxx">.
+  -->
+  <define name="annotation">
+    <element name="annotation">
+      <ref name="attlist.annotation"/>
+      <oneOrMore>
+        <choice>
+          <ref name="block"/>
+          <ref name="inlineinblock"/>
+        </choice>
+      </oneOrMore>
+    </element>
+  </define>
+  <define name="attlist.annotation" combine="interleave">
+    <ref name="attrsrqd"/>
+  </define>
+  <!-- ====================== Byline, Epigraph, Dateline ===================== -->
+  <!--
+    Addenda module for dtbook
+    M. Moodie and J. Pritchett
+    9 July 2003
+    This module defines the <epigraph>, <dateline>, and <byline> elements.
+  -->
+  <!-- HB: 2004-03-30 epigraph: element added. -->
+  <!--
+    Use: epigraph marks a quotation placed at the beginnihg of a work
+    or a division of a work.
+  -->
+  <!-- MM: 2005-04-22 epigraph - changed ATTLIST to %attrs; -->
+  <define name="epigraph">
+    <element name="epigraph">
+      <ref name="attlist.epigraph"/>
+      <zeroOrMore>
+        <ref name="flow"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.epigraph" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!-- HB: 2004-30-30 byline: element added. -->
+  <!--
+    Use: byline contains information about the creator of or contributor
+    to a work. 
+  -->
+  <!-- MM: 2005-04-22 byline - changed ATTLIST to %attrs; -->
+  <define name="byline">
+    <element name="byline">
+      <ref name="attlist.byline"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.byline" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!-- HB: 2004-30-30 dateline: element added. -->
+  <!--
+    Use: dateline contains information about the time and/or place at which
+    a work was authored. 
+  -->
+  <!-- MM: 2005-04-22 dateline - changed ATTLIST to %attrs; -->
+  <define name="dateline">
+    <element name="dateline">
+      <ref name="attlist.dateline"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.dateline" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!-- ============================= Poem, Linegroup ========================= -->
+  <!--
+    dtbook poetry module
+    M. Moodie and J. Pritchett
+    9 July 2003
+    This module defines the <linegroup> and <poem> elements.
+  -->
+  <!-- Use: linegroup provides means to group a set of lines of a <poem>. -->
+  <define name="linegroup">
+    <element name="linegroup">
+      <ref name="attlist.linegroup"/>
+      <zeroOrMore>
+        <choice>
+          <ref name="hd"/>
+          <ref name="dateline"/>
+          <ref name="epigraph"/>
+          <ref name="byline"/>
+          <ref name="linegroup"/>
+          <ref name="line"/>
+          <ref name="pagenum"/>
+          <ref name="prodnote"/>
+          <ref name="noteref"/>
+          <ref name="annoref"/>
+          <ref name="note"/>
+          <ref name="annotation"/>
+          <ref name="p"/>
+          <ref name="blockquote"/>
+          <ref name="img"/>
+          <ref name="imggroup"/>
+        </choice>
+      </zeroOrMore>
+    </element>
+  </define>
+  <!--
+    HB: 2004-03-30 linegroup: The class attribute value can identify the
+    kind of linegroup, such as "stanza", "chorus", or "canto".
+  -->
+  <!-- MM: 2005-04-22 linegroup - changed ATTLIST to %attrs; -->
+  <define name="attlist.linegroup" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!-- HB: 2004-03-30 poem: removed notice and hr from content model. -->
+  <!-- HB: 2004-03-30 poem: added title and author to content model. -->
+  <!-- Use: poem is a complete <poem> or fragment thereof. -->
+  <!-- MM: 2005-04-22 poem - changed ATTLIST to %attrs; -->
+  <define name="poem">
+    <element name="poem">
+      <ref name="attlist.poem"/>
+      <zeroOrMore>
+        <choice>
+          <ref name="title"/>
+          <ref name="author"/>
+          <ref name="hd"/>
+          <ref name="dateline"/>
+          <ref name="epigraph"/>
+          <ref name="byline"/>
+          <ref name="linegroup"/>
+          <ref name="line"/>
+          <ref name="pagenum"/>
+          <ref name="img"/>
+          <ref name="imggroup"/>
+          <ref name="sidebar"/>
+        </choice>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.poem" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!-- ========================= The Anchor Element ========================== -->
+  <!--
+    Use: a contains an anchor, which is used to reference another
+    location, within the same or another <dtbook>.
+  -->
+  <define name="a">
+    <element name="a">
+      <ref name="attlist.a"/>
+      <zeroOrMore>
+        <ref name="inlinenoa"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <!-- jpritchett at rfbd.org:  2006-07-07  Corrected reference to RFC2046 in comment regarding @type -->
+  <!--
+    Attuse: a
+    
+    "href" value may have three forms:
+    
+    1) '#idref', in the <dtbook>, to the element type having the
+        referenced id value;
+    
+    2) 'uri', a uniform resource identifier to a resource, typically a
+        document, see [RFC2396], possibly restricted to work with only
+        the <dtbook> document content, as referenced content is
+        expected to be available on the same media, and off-media
+        references may not be available;
+    
+    3) 'uri#xxx', in the resource uri, the element with id='xxx'.
+    
+    Uses of the remaining attributes other than %attrs; are:
+    
+        "type" is advisory content MIME type of the target, see [RFC2046];
+    
+        "hreflang" is the language code of the href target, see [RFC3066];
+    
+        "rel" is a list of forward link type(s), the relationship(s)
+            expressed by the href value to the target, space-separated
+            if multiple;
+    
+        "rev" is a list of reverse link types, the relationship(s)
+            to this location from the href target, space-separated
+            if multiple;
+    
+        "accesskey"=accessibility key character shortcut;
+    
+        "tabindex"=tabbing order.
+    
+        "external" An external link points to media content that is not part 
+            of the DTB.  The external media content must be rendered by an 
+            external application, whether or not that content is renderable by 
+            the DTB player.
+  -->
+  <define name="attlist.a" combine="interleave">
+    <ref name="attrs"/>
+    <optional>
+      <attribute name="type">
+        <ref name="ContentType"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="href">
+        <ref name="URI"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="hreflang">
+        <ref name="LanguageCode"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="rel">
+        <ref name="LinkTypes"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="rev">
+        <ref name="LinkTypes"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="accesskey">
+        <ref name="Character"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="tabindex">
+        <ref name="Number"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="external" a:defaultValue="false">
+        <choice>
+          <value>true</value>
+          <value>false</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+  <!-- =========================== Inline Elements =========================== -->
+  <!--
+    Use: em indicates emphasis. Usually <em> is rendered in italics.
+    Compare with <strong>.
+  -->
+  <define name="em">
+    <element name="em">
+      <ref name="attlist.em"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.em" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    Use: strong marks stronger emphasis than <em>. Visually <strong> is
+    usually rendered bold.
+  -->
+  <define name="strong">
+    <element name="strong">
+      <ref name="attlist.strong"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.strong" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    Use: dfn marks the first occurrence of a word or term that is
+    defined or explained there or elsewhere in <book>. Often
+    <dfn> is rendered in italics, sometimes in parentheses.
+  -->
+  <define name="dfn">
+    <element name="dfn">
+      <ref name="attlist.dfn"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.dfn" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    Use: kbd designates information that the reader is to input
+    directly into a computer using the keyboard.
+  -->
+  <define name="kbd">
+    <element name="kbd">
+      <ref name="attlist.kbd"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.kbd" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!-- Use: code designates a fragment of computer code. -->
+  <define name="code">
+    <element name="code">
+      <ref name="attlist.code"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <!-- jpritchett at rfbd.org: 2006-09-08  Expanded %attrs; to prevent duplication of @xml:space -->
+  <!--
+    Attuse: code
+    
+    See http://www.w3.org/TR/xml11/#sec-white-space for information on xml:space.
+  -->
+  <define name="attlist.code" combine="interleave">
+    <optional>
+      <attribute name="id">
+        <data type="ID"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="class"/>
+    </optional>
+    <optional>
+      <attribute name="title">
+        <ref name="Text"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="xml:space" a:defaultValue="preserve">
+        <choice>
+          <value>default</value>
+          <value>preserve</value>
+        </choice>
+      </attribute>
+    </optional>
+    <ref name="externalNamespaces"/>
+    <ref name="i18n"/>
+    <optional>
+      <attribute name="smilref"/>
+    </optional>
+    <ref name="showin"/>
+  </define>
+  <!--
+    Use: samp contains a sample of work created by the author for
+    use as an example or template. For example, a sample business
+    letter, resume, computer program output, or form.
+  -->
+  <define name="samp">
+    <element name="samp">
+      <ref name="attlist.samp"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <!-- jpritchett at rfbd.org: 2006-09-08  Expanded %attrs; to prevent duplication of @xml:space -->
+  <!--
+    Attuse: samp
+    
+    See http://www.w3.org/TR/xml11/#sec-white-space for information on xml:space.
+  -->
+  <define name="attlist.samp" combine="interleave">
+    <optional>
+      <attribute name="id">
+        <data type="ID"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="class"/>
+    </optional>
+    <optional>
+      <attribute name="title">
+        <ref name="Text"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="xml:space" a:defaultValue="preserve">
+        <choice>
+          <value>default</value>
+          <value>preserve</value>
+        </choice>
+      </attribute>
+    </optional>
+    <ref name="externalNamespaces"/>
+    <ref name="i18n"/>
+    <optional>
+      <attribute name="smilref"/>
+    </optional>
+    <ref name="showin"/>
+  </define>
+  <!-- Use: cite marks a reference (or citation) to another document. -->
+  <!-- HB: 2004-03-25 35a: cite: allow title and author. -->
+  <define name="cite">
+    <element name="cite">
+      <ref name="attlist.cite"/>
+      <zeroOrMore>
+        <choice>
+          <ref name="inline"/>
+          <ref name="title"/>
+          <ref name="author"/>
+        </choice>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.cite" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    Use: abbr designates an abbreviation, a shortened form of a
+    word. For examples: Mr., approx., lbs., rec'd.
+    Contrast with <acronym>.
+  -->
+  <define name="abbr">
+    <element name="abbr">
+      <ref name="attlist.abbr"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <!--
+    Attuse: abbr
+    
+    "title" value may expand that abbreviation.
+  -->
+  <define name="attlist.abbr" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    Use: acronym marks a word formed from key letters (usually
+    initials) of a group of words. For examples: UNESCO, NATO, XML, US.
+    Contrast with <abbr>.
+  -->
+  <define name="acronym">
+    <element name="acronym">
+      <ref name="attlist.acronym"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <!--
+    Attuse: acronym
+    
+    "title" value may expand that acronym.
+    "pronounce" value 'yes' indicates that the
+    acronym is pronounceable as a word (for example, NATO);
+    'no' that the acronym is best presented as a sequence
+    of letters (for examples, "XML" or  "US").
+  -->
+  <define name="attlist.acronym" combine="interleave">
+    <ref name="attrs"/>
+    <optional>
+      <attribute name="pronounce">
+        <choice>
+          <value>yes</value>
+          <value>no</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+  <!--
+    Use: sub indicates a subscript character (printed below a
+    character's normal baseline). Can be used recursively and/or
+    intermixed with <sup>.
+  -->
+  <define name="sub">
+    <element name="sub">
+      <ref name="attlist.sub"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.sub" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    Use: sup marks a superscript character (printed above a
+    character's normal baseline). Can be used recursively and/or
+    intermixed with <sub>.
+  -->
+  <define name="sup">
+    <element name="sup">
+      <ref name="attlist.sup"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.sup" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    Use: span is a generic container for use in inline settings
+    when no specific tag exists for a given situation. The class
+    attribute may describe the nature of the text it marks (e.g.,
+    a typographical error). May be used to mark a class of items
+    to which styles are to be applied. Compare with <div>, which
+    is used in a block settings.
+  -->
+  <define name="span">
+    <element name="span">
+      <ref name="attlist.span"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.span" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    Use: bdo is used in special cases where the automatic actions
+    of the bi-directional algorithm would result in incorrect display.
+  -->
+  <define name="bdo">
+    <element name="bdo">
+      <ref name="attlist.bdo"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <!-- jpritchett at rfd.org:  2006-07-07  Changed @lang to @xml:lang -->
+  <!--
+    Attuse: bdo
+    
+    "lang" indicates the language of the content.
+    
+    "dir" indicates the writing direction: 'ltr' is
+    left-to-right, 'rtl' is right-to-left.
+  -->
+  <define name="attlist.bdo" combine="interleave">
+    <ref name="coreattrs"/>
+    <optional>
+      <attribute name="xml:lang">
+        <ref name="LanguageCode"/>
+      </attribute>
+    </optional>
+    <attribute name="dir">
+      <choice>
+        <value>ltr</value>
+        <value>rtl</value>
+      </choice>
+    </attribute>
+  </define>
+  <!-- =================== dtbook Inline Sentence and Word =================== -->
+  <!-- Use: sent marks a sentence. -->
+  <define name="sent">
+    <element name="sent">
+      <ref name="attlist.sent"/>
+      <zeroOrMore>
+        <ref name="inlines"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.sent" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!-- Use: w marks a word. -->
+  <define name="w">
+    <element name="w">
+      <ref name="attlist.w"/>
+      <zeroOrMore>
+        <ref name="inlinew"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.w" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!-- ======== Inline Page Number, Footnote and Annotation Reference ======== -->
+  <!--
+    MM: 2004-07-30 Revised description of page types for 'page' attribute on 
+    element pagenum.  Dropped recommendation to use page number as id.
+  -->
+  <!--
+    Use: pagenum contains one page number as it appears from the print
+    document, usually inserted at the point within the file immediately
+    preceding the first item of content on a new page.
+  -->
+  <define name="pagenum">
+    <element name="pagenum">
+      <ref name="attlist.pagenum"/>
+      <text/>
+    </element>
+  </define>
+  <!--
+    Attuse: pagenum
+    
+    "page" allows three kinds of page numbering
+    schemes to be identified:
+    "front" (for roman-numeral pages at the start of a book), 
+    "normal" (for pages identified by arabic numerals),
+    or "special" (for all other kinds of pages)
+    For multi-page continuous content,
+    such as large <img> or <table>, put the sequence of <pagenum> on
+    the page where that content starts.
+  -->
+  <define name="attlist.pagenum" combine="interleave">
+    <ref name="attrsrqd"/>
+    <optional>
+      <attribute name="page" a:defaultValue="normal">
+        <choice>
+          <value>front</value>
+          <value>normal</value>
+          <value>special</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+  <!--
+    Use: noteref marks one or more characters that reference a footnote
+    or endnote <note>. Contrast with <annoref>. <noteref> and <note>
+    are independently skippable.
+  -->
+  <define name="noteref">
+    <element name="noteref">
+      <ref name="attlist.noteref"/>
+      <text/>
+    </element>
+  </define>
+  <!-- jpritchett at rfbd.org:  2006-07-07  Changed @idref type to %URI to clarify usage -->
+  <!-- jpritchett at rfbd.org:  2006-07-07  Modified comments to clarify @idref usage -->
+  <!-- jpritchett at rfbd.org:  2006-07-07  Corrected reference to RFC2046 in comment regarding @type -->
+  <!--
+    Attuse: noteref
+    
+    "idref" is a URI pointing to the target note, either within
+    same document or in another document.  For example:
+    <noteref idref='#yyy'> refers to <note id='yyy'> within same document.
+    <noteref idref='foobar.xml#xxx'> refers to <note id='xxx'> in document foobar.xml
+    
+    "type" provides advisory content MIME type of
+    the target, see [RFC2046].
+  -->
+  <define name="attlist.noteref" combine="interleave">
+    <ref name="attrs"/>
+    <attribute name="idref">
+      <ref name="URI"/>
+    </attribute>
+    <optional>
+      <attribute name="type">
+        <ref name="ContentType"/>
+      </attribute>
+    </optional>
+  </define>
+  <!--
+    Use: annoref marks a text segment that references an <annotation>.
+    Each <annoref> is usually a word, phrase, or whole line that
+    is part of the surrounding text (identified in the original
+    print book by bolding, italics, etc.). It should not normally
+    be allowed to be turned off in a DTB application.
+  -->
+  <define name="annoref">
+    <element name="annoref">
+      <ref name="attlist.annoref"/>
+      <text/>
+    </element>
+  </define>
+  <!-- jpritchett at rfbd.org:  2006-07-07  Changed @idref type to %URI to clarify usage -->
+  <!-- jpritchett at rfbd.org:  2006-07-07  Modified comments to clarify @idref usage -->
+  <!-- jpritchett at rfbd.org:  2006-07-07  Corrected reference to RFC2046 in comment regarding @type -->
+  <!--
+    Attuse: annoref
+    
+    "idref" is a URI pointing to the target annotation, either within
+    same document or in another document.  For example:
+    <annoref idref='#yyy'> refers to <annotation id='yyy'> within same document.
+    <annoref idref='foobar.xml#xxx'> refers to <annotation id='xxx'> in document foobar.xml
+    
+    "type" provides advisory content MIME
+    type of the targeted id, see [RFC2046].
+  -->
+  <define name="attlist.annoref" combine="interleave">
+    <ref name="attrs"/>
+    <attribute name="idref">
+      <ref name="URI"/>
+    </attribute>
+    <optional>
+      <attribute name="type">
+        <ref name="ContentType"/>
+      </attribute>
+    </optional>
+  </define>
+  <!-- ============================ Inline Quotes ============================ -->
+  <!--
+    Use: q contains a short, inline quotation. Compare with
+    <blockquote>, which marks a longer quotation set off from the
+    surrounding text.
+  -->
+  <define name="q">
+    <element name="q">
+      <ref name="attlist.q"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <!--
+    Attuse: q
+    
+    "cite" may provide a URI reference.
+  -->
+  <define name="attlist.q" combine="interleave">
+    <ref name="attrs"/>
+    <optional>
+      <attribute name="cite">
+        <ref name="URI"/>
+      </attribute>
+    </optional>
+  </define>
+  <!-- =============================== Images ================================ -->
+  <!--
+    Image <img> comes from HTML. An <img> may be grouped
+    using <imggroup>, with <caption>, and special
+    usage instructions or description with <prodnote>. The <imggroup>
+    element may contain one or more <img> and any associated
+    <caption> and <prodnote>. Multiple <img> may share a single
+    caption, or multiple <caption> may apply if several captions
+    refer to a single <img>. Multiple <prodnote> may apply if
+    different versions are needed for different media.
+  -->
+  <define name="Length">
+    <data type="string" datatypeLibrary=""/>
+  </define>
+  <!-- measured in pixels, percent (nn%) -->
+  <define name="MultiLength">
+    <data type="string" datatypeLibrary=""/>
+  </define>
+  <!--
+    measured in integer pixels "n", percent "nn%" of display width,
+    "0*" indicating minimum appropriate width based on column
+    content, or "nn*" the relative proportional width (".5*" is
+    half the available width after any explicit widths have been
+    consumed). The lengths are separated by commas or whitespace.
+  -->
+  <define name="Pixels">
+    <data type="string" datatypeLibrary=""/>
+  </define>
+  <!--
+    0 for no <table> border, positive integer for <table> border width
+    in pixels.
+  -->
+  <!--
+    Use: img marks a visual image. An <img> will always contain an alt and
+    generally contain a longdesc, a pointer to a related <prodnote>. The
+    <img> may be referenced by a <caption> or <prodnote>, using, for
+    example, the form <caption imgref="#yyy">the Caption</caption> for
+    the <img id="yyy">.
+  -->
+  <define name="img">
+    <element name="img">
+      <ref name="attlist.img"/>
+      <empty/>
+    </element>
+  </define>
+  <!--
+    Attuse: img
+    
+    "src" specifies by URI the location of the image file.
+    
+    "alt" is used to supply a short description of the <img>.
+    
+    "longdesc" generally contains a pointer to a related
+    <prodnote> that contains a detailed description of the <img>.
+    
+    The attributes "height" and "width" provide visual sizing
+    information, measured in pixels.
+  -->
+  <define name="attlist.img" combine="interleave">
+    <ref name="attrs"/>
+    <attribute name="src">
+      <ref name="URI"/>
+    </attribute>
+    <attribute name="alt">
+      <ref name="Text"/>
+    </attribute>
+    <optional>
+      <attribute name="longdesc">
+        <ref name="URI"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="height">
+        <ref name="Length"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="width">
+        <ref name="Length"/>
+      </attribute>
+    </optional>
+  </define>
+  <!--
+    Use: imggroup provides a container for one or more <img> and associated
+    <caption>(s) and <prodnote>(s). A <prodnote> may contain a description
+    of the image. The content model allows:
+    
+    1) multiple <img> if they share a caption, with the ids of
+    each <img> in the <caption imgref="id1 id2 ...">,
+    
+    2) multiple <caption> if several captions refer to a single
+    <img id="xxx"> where each caption has the same
+    <caption imgref="xxx">,
+    
+    3) multiple <prodnote> if different versions are needed for different
+    media (e.g., large print, braille, or print).  If several <prodnote>
+    refer to a single <img id="xxx">, each prodnote has the same <prodnote
+    imgref="xxx">.
+  -->
+  <define name="imggroup">
+    <element name="imggroup">
+      <ref name="attlist.imggroup"/>
+      <oneOrMore>
+        <choice>
+          <ref name="prodnote"/>
+          <ref name="img"/>
+          <ref name="caption"/>
+        </choice>
+      </oneOrMore>
+    </element>
+  </define>
+  <define name="attlist.imggroup" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!-- HB: 2004-03-25 30: hr: element dropped horizontal rule as purely visual. -->
+  <!-- ============================= Paragraphs ============================== -->
+  <!-- Use: p contains a paragraph, which may contain subsidiary <list> or <dl>. -->
+  <define name="p">
+    <element name="p">
+      <ref name="attlist.p"/>
+      <zeroOrMore>
+        <choice>
+          <ref name="inline"/>
+          <ref name="list"/>
+          <ref name="dl"/>
+        </choice>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.p" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!-- =========== Doctitle, Docauthor, Covertitle, and Headings  ============ -->
+  <!--
+    Use: doctitle marks the full title of the book, including any
+    subtitles,  <frontmatter>. By convention <doctitle> should appear
+    Contrast with covertitle.
+  -->
+  <define name="doctitle">
+    <element name="doctitle">
+      <ref name="attlist.doctitle"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.doctitle" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    Use: docauthor marks each author or editor of this work. Compare with
+    <author>, used to mark the author of another work, within <blockquote>
+    or <cite>.
+  -->
+  <define name="docauthor">
+    <element name="docauthor">
+      <ref name="attlist.docauthor"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.docauthor" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    Use: covertitle is the short title of a book, often found on the
+    spine. It may be the same as the doctitle.
+  -->
+  <!-- HB: 2004-04-08 covertitle: element added -->
+  <define name="covertitle">
+    <element name="covertitle">
+      <ref name="attlist.covertitle"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.covertitle" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    MM: 2004-09-15 Deleted element levelhd, replacing it with hd in content 
+    model of level.
+  -->
+  <!-- Use: h1 contains the text of the heading for a <level1> structure. -->
+  <define name="h1">
+    <element name="h1">
+      <ref name="attlist.h1"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.h1" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!-- Use: h2 contains the text of the heading for a <level2> structure. -->
+  <define name="h2">
+    <element name="h2">
+      <ref name="attlist.h2"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.h2" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!-- Use: h3 contains the text of the heading for a <level3> structure. -->
+  <define name="h3">
+    <element name="h3">
+      <ref name="attlist.h3"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.h3" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!-- Use: h4 contains the text of the heading for a <level4> structure. -->
+  <define name="h4">
+    <element name="h4">
+      <ref name="attlist.h4"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.h4" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!-- Use: h5 contains the text of the heading for a <level5> structure. -->
+  <define name="h5">
+    <element name="h5">
+      <ref name="attlist.h5"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.h5" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!-- Use: h6 contains the text of the heading for a <level6> structure. -->
+  <define name="h6">
+    <element name="h6">
+      <ref name="attlist.h6"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.h6" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!-- HB: 2004-04-02 bridgehead: element added. -->
+  <!--
+    MM: 2004-09-15 bridgehead: changed content model to (%inline;)*, to match 
+    hd, and h1-h6.
+  -->
+  <!--
+    Use: bridgehead is a free-floating heading that is not associated with the
+    hierarchical structure of a document. It may occur only subsidiary to one
+    of the hierarchic elements. <hd> and <h1> ... <h6> are
+    restricted to one occurrence per level or <level1> ... <level6>,
+    respectively. <bridgehead> has no such restriction, but should be used
+    only when it is clear that none of the structural headings is appropriate.
+    See also <hd>.
+  -->
+  <define name="bridgehead">
+    <element name="bridgehead">
+      <ref name="attlist.bridgehead"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.bridgehead" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    Use: hd marks the text of a heading in <level>, <poem>, <list>, <linegroup>,
+    or <sidebar>.
+  -->
+  <define name="hd">
+    <element name="hd">
+      <ref name="attlist.hd"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.hd" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!-- ========================== Preformatted Text ========================== -->
+  <!--
+    HTML or XHTML preformatted text is omitted, as inappropriate for
+    narrated material.
+  -->
+  <!-- ========================== Block-like Quotes ========================== -->
+  <!--
+    Use: blockquote indicates a block of quoted content that is set
+    off from the surrounding text by paragraph breaks. Compare with
+    <q>, which marks short, inline quotations.
+  -->
+  <!-- HB: 2004-03-25 36i: blockquote allow pagenum. -->
+  <define name="blockquote">
+    <element name="blockquote">
+      <ref name="attlist.blockquote"/>
+      <zeroOrMore>
+        <choice>
+          <ref name="pagenum"/>
+          <ref name="block"/>
+        </choice>
+      </zeroOrMore>
+    </element>
+  </define>
+  <!--
+    Attuse: blockquote
+    
+    "cite" permits inclusion of the
+    URI from which the <blockquote> came.
+  -->
+  <define name="attlist.blockquote" combine="interleave">
+    <ref name="attrs"/>
+    <optional>
+      <attribute name="cite">
+        <ref name="URI"/>
+      </attribute>
+    </optional>
+  </define>
+  <!-- ================== Definition List, and Other Lists =================== -->
+  <!--
+    Use: dl contains a definition list, usually consisting of pairs of
+    terms <dt> and definitions <dd>. Any definition can contain another
+    definition list.
+  -->
+  <define name="dl">
+    <element name="dl">
+      <ref name="attlist.dl"/>
+      <oneOrMore>
+        <choice>
+          <ref name="dt"/>
+          <ref name="dd"/>
+          <ref name="pagenum"/>
+        </choice>
+      </oneOrMore>
+    </element>
+  </define>
+  <define name="attlist.dl" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    Use: dt marks a term in a definition list <dl> for which a
+    definition <dd> follows.
+  -->
+  <define name="dt">
+    <element name="dt">
+      <ref name="attlist.dt"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.dt" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    Use: dd marks a definition of the preceding term <dt> within a
+    definition list <dl>. A definition without a preceding <dt> has
+    no semantic interpretation, but is visually presented aligned
+    with other <dd>.
+  -->
+  <define name="dd">
+    <element name="dd">
+      <ref name="attlist.dd"/>
+      <zeroOrMore>
+        <ref name="flow"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.dd" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    Use: list contains some form of list, ordered, unordered, or preformatted.
+    The list may have intermixed heading <hd> (generally only one,
+    possibly with <prodnote>) and an intermixture of list items <li>
+    and <pagenum>. If bullets and outline enumerations are part of
+    the preformatted print content, they are expected to prefix those list
+    items in content, rather than be implicitly generated. Note: XHTML
+    has explicitly distinguished list element types: ol for ordered,
+    and ul for unordered, but not pl for preformatted.
+  -->
+  <define name="list">
+    <element name="list">
+      <ref name="attlist.list"/>
+      <oneOrMore>
+        <choice>
+          <ref name="hd"/>
+          <ref name="prodnote"/>
+          <ref name="li"/>
+          <ref name="pagenum"/>
+        </choice>
+      </oneOrMore>
+    </element>
+  </define>
+  <!--
+    HB: 2004-03-25 36d: list: added start attribute to indicate initial
+    ordinal of a numbered list.
+  -->
+  <!--
+    HB: 2004-03-31 list: changed enum from 'U' to 'A' for uppercase, and
+    "X" to 'I' for uppercase Roman.
+  -->
+  <!--
+    HB: 2004-03-31 list: changed enum value choices from "U" to "A" for
+    uppercase, and "X" to "I" for uppercase Roman for compatibility
+    with xhtml.
+  -->
+  <!-- HB: 2004-04-02 list: expanded discussion on enum attribute. -->
+  <!--
+    HB: 2004-04-27 list: added type "pl" to indicate that the list is 
+    preformatted so no bullets or enumerations should be added.
+  -->
+  <!--
+    Attuse: list
+    
+    "type" indicates whether the list items
+    <li> are ordered 'ol' or 
+             unordered 'ul' or
+             preformatted 'pl'.
+    
+    "depth" indicates nesting depth of lists within list items <li>
+    of ancestor lists, starting at 1.
+    
+    "enum" indicates the kind of enumeration:
+        '1'=integer,
+        'a'=lowercase,
+        'A'=uppercase,
+        'i'=lowercase Roman, or
+        'I'=uppercase Roman.
+    
+    "start" value indicates the ordered list integer ordinal, impllcitly 1,
+    to denote the first ordered list item. Its value is determined for the
+    indicated enum type. A start value is useful when there is an injection
+    of a different element type, such as <pageno>.
+  -->
+  <!--
+    HB: 2004-04-22 list: removed bullet attribute, It is up to a style-sheet to
+    make any needed visual distinction for nested unordered lists, or if the
+    list type is "pl" preformatted the bullet form may be there.
+  -->
+  <define name="attlist.list" combine="interleave">
+    <ref name="attrs"/>
+    <attribute name="type">
+      <choice>
+        <value>ol</value>
+        <value>ul</value>
+        <value>pl</value>
+      </choice>
+    </attribute>
+    <optional>
+      <attribute name="depth"/>
+    </optional>
+    <optional>
+      <attribute name="enum">
+        <choice>
+          <value>1</value>
+          <value>a</value>
+          <value>A</value>
+          <value>i</value>
+          <value>I</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="start"/>
+    </optional>
+  </define>
+  <!--
+    Use: li marks each list item in a <list>. <li> content may be
+    either inline or block and may include other nested
+    lists. Alternatively it may contain a sequence of list item
+    components, <lic>, that identify regularly occurring content,
+    such as the heading and page number of each entry in a
+    table of contents.
+  -->
+  <define name="li">
+    <element name="li">
+      <ref name="attlist.li"/>
+      <zeroOrMore>
+        <choice>
+          <ref name="flow"/>
+          <ref name="lic"/>
+        </choice>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="attlist.li" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!--
+    Use: lic ("list item component") allows ordered substructure
+    within a list item <li>. Used when a list item is made up of
+    two or more components, as in a table of contents entry.
+    The same number of <lic> should occur in each <li>. If not,
+    correspondence of <lic> in different <li> is in order of
+    occurrence for the current writing direction of the <li>.
+  -->
+  <define name="lic">
+    <element name="lic">
+      <ref name="attlist.lic"/>
+      <zeroOrMore>
+        <ref name="inline"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <!--
+    Attuse: lic
+    
+    class attribute may be used to identify the particular
+    component of a list item <li>. For example, in a table of contents
+    class values might include "section", and "pagenumber".
+  -->
+  <define name="attlist.lic" combine="interleave">
+    <ref name="attrs"/>
+  </define>
+  <!-- =============================== Tables ================================ -->
+  <!--
+    The XHTML <table> model is used, including the presentational
+    attributes that have little meaning in Digital Talking Books,
+    but may be useful for concurrent display in different media.
+    That model is derived from IETF HTML table standard, see [RFC1942].
+    
+    Note: The XHTML <table> model has been enhanced from HTML to allow
+    a simple <table> of one or more rows <tr>.
+  -->
+  <define name="Scope">
+    <choice>
+      <value>row</value>
+      <value>col</value>
+      <value>rowgroup</value>
+      <value>colgroup</value>
+    </choice>
+  </define>
+  <!--
+    Scope specifies a set of data cells for which the <th> provides
+    header information.
+  -->
+  <define name="TFrame">
+    <choice>
+      <value>void</value>
+      <value>above</value>
+      <value>below</value>
+      <value>hsides</value>
+      <value>lhs</value>
+      <value>rhs</value>
+      <value>vsides</value>
+      <value>box</value>
+      <value>border</value>
+    </choice>
+  </define>
+  <!-- TFrame identifies the sides that are visually framed. -->
+  <define name="TRules">
+    <choice>
+      <value>none</value>
+      <value>groups</value>
+      <value>rows</value>
+      <value>cols</value>
+      <value>all</value>
+    </choice>
+  </define>
+  <!--
+    %TRules identifies where visual rulings appear.
+    If no Trules is present then assume:
+    'none' if border is absent or border='0' otherwise 'all'.
+  -->
+  <define name="cellhalign">
+    <optional>
+      <attribute name="align">
+        <choice>
+          <value>left</value>
+          <value>center</value>
+          <value>right</value>
+          <value>justify</value>
+          <value>char</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="char">
+        <ref name="Character"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="charoff">
+        <ref name="Length"/>
+      </attribute>
+    </optional>
+  </define>
+  <!--
+    % cellhalign
+    cellhalign sets horizontal alignment of content in
+    a table cell.
+    
+    char indicates a character expected in each table
+    cell of a column that text should align on. The default is
+    the decimal point for the current language.
+    
+    charoff sets the alignment offset of the first character
+    to align on, as specified with char.
+    
+    Inheritance order for horizontal alignment is <th>|<td>,
+    <tr>, <thead>|<tfoot>|<tbody>, <col>, <colgroup>, default. The
+    default value is from the user agent, and may be affected
+    by user preference. The recommended default alignment for
+    <th> is center, and for <td> is left.
+  -->
+  <define name="cellvalign">
+    <optional>
+      <attribute name="valign">
+        <choice>
+          <value>top</value>
+          <value>middle</value>
+          <value>bottom</value>
+          <value>baseline</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+  <!--
+    % cellvalign
+    valign sets vertical alignment of content in a table cell.
+    
+    Inheritance order for vertical alignment is <th>|<td>, <col>,
+    <colgroup>, <tr>, <thead>|<tfoot>|<tbody>, default. The
+    default value is from the user agent, and may be affected
+    by user preference. The recommended default is middle.
+  -->
+  <!--
+    Use: table contains cells of tabular data arranged in rows and
+    columns. A <table> may have a <caption>. It may have descriptions of
+    the columns in <col>s or groupings of several <col> in <colgroup>.
+    A simple <table> may be made up of just rows <tr>. A long table
+    crossing several pages of the print book should have separate
+    <pagenum> values for each of the pages containing that <table>
+    indicated on the page where it starts. Note the logical order of
+    optional <thead>, optional <tfoot>, then one or more of either
+    <tbody> or just rows <tr>. This order accommodates simple or large,
+    complex tables. The <thead> and <tfoot> information usually helps
+    identify content of the <tbody> rows, For a multiple-page print
+    <table> the <thead> and <tfoot> are repeated on each page, but
+    not redundantly tagged.
+  -->
+  <define name="table">
+    <element name="table">
+      <ref name="attlist.table"/>
+      <optional>
+        <ref name="caption"/>
+      </optional>
+      <choice>
+        <zeroOrMore>
+          <ref name="col"/>
+        </zeroOrMore>
+        <zeroOrMore>
+          <ref name="colgroup"/>
+        </zeroOrMore>
+      </choice>
+      <optional>
+        <ref name="thead"/>
+      </optional>
+      <optional>
+        <ref name="tfoot"/>
+      </optional>
+      <choice>
+        <oneOrMore>
+          <ref name="tbody"/>
+        </oneOrMore>
+        <oneOrMore>
+          <ref name="tr"/>
+        </oneOrMore>
+      </choice>
+    </element>
+  </define>
+  <!--
+    Attuse: table
+    
+    "summary" value provides a textual summary.
+    
+    The attributes: "width", "border", "frame", "rules", "cellspacing",
+    and "cellpadding" provide visual presentation guidance. See their
+    explanation in the comment following those parameter entity
+    declarations.
+  -->
+  <define name="attlist.table" combine="interleave">
+    <ref name="attrs"/>
+    <optional>
+      <attribute name="summary">
+        <ref name="Text"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="width">
+        <ref name="Length"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="border">
+        <ref name="Pixels"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="frame">
+        <ref name="TFrame"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="rules">
+        <ref name="TRules"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="cellspacing">
+        <ref name="Length"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="cellpadding">
+        <ref name="Length"/>
+      </attribute>
+    </optional>
+  </define>
+  <!-- HB: 2004-03-25 36f: caption: removed use for <img>. -->
+  <!-- MM: 2004-09-15: caption: changed content model to %flow;. -->
+  <!--
+    Use: caption describes a <table>, or <imggroup>. If used with
+    <table> it must follow immediately after the <table> start tag. If used
+    with <imggroup> it is not so constrained.
+  -->
+  <define name="caption">
+    <element name="caption">
+      <ref name="attlist.caption"/>
+      <zeroOrMore>
+        <ref name="flow"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <!--
+    Attuse: caption
+    
+    "imgref" value (or space-separated
+    id values) identifies the id values of the <img>(s) to which the
+    caption applies. Any internal id reference is preceded by '#id'.
+    Note: imgref is an extension for dtbook.
+  -->
+  <define name="attlist.caption" combine="interleave">
+    <ref name="attrs"/>
+    <optional>
+      <attribute name="imgref">
+        <data type="IDREFS"/>
+      </attribute>
+    </optional>
+  </define>
+  <!--
+    Use: thead marks header information in a <table>, consisting of
+    one or more rows <tr> of <th> cells. Use <thead> to duplicate
+    headers when breaking table across page boundaries, or for static
+    headers when <tbody> sections are rendered in scrolling panel.
+  -->
+  <define name="thead">
+    <element name="thead">
+      <ref name="attlist.thead"/>
+      <oneOrMore>
+        <ref name="tr"/>
+      </oneOrMore>
+    </element>
+  </define>
+  <define name="attlist.thead" combine="interleave">
+    <ref name="attrs"/>
+    <ref name="cellhalign"/>
+    <ref name="cellvalign"/>
+  </define>
+  <!--
+    Use: tfoot marks footer information in a <table>, consisting of
+    one or more rows <tr>, usually of <th> cells. Use <tfoot> to
+    duplicate footers when breaking table across page boundaries,
+    or for static footers when <tbody> sections are rendered in
+    scrolling panel.
+  -->
+  <define name="tfoot">
+    <element name="tfoot">
+      <ref name="attlist.tfoot"/>
+      <oneOrMore>
+        <ref name="tr"/>
+      </oneOrMore>
+    </element>
+  </define>
+  <define name="attlist.tfoot" combine="interleave">
+    <ref name="attrs"/>
+    <ref name="cellhalign"/>
+    <ref name="cellvalign"/>
+  </define>
+  <!--
+    Use: tbody marks a group of rows in the main body of a <table>. If
+    the <table> is divided into several sections, each consisting of a
+    number of rows, each section would be separately tagged with <tbody>.
+    The same <thead> and <tfoot> apply to every <tbody> section.
+    Use multiple <tbody> sections when rules are needed between groups
+    of table rows.
+  -->
+  <define name="tbody">
+    <element name="tbody">
+      <ref name="attlist.tbody"/>
+      <oneOrMore>
+        <ref name="tr"/>
+      </oneOrMore>
+    </element>
+  </define>
+  <define name="attlist.tbody" combine="interleave">
+    <ref name="attrs"/>
+    <ref name="cellhalign"/>
+    <ref name="cellvalign"/>
+  </define>
+  <!--
+    Use: colgroup groups adjacent columns <col> that are semantically
+    related.
+  -->
+  <define name="colgroup">
+    <element name="colgroup">
+      <ref name="attlist.colgroup"/>
+      <zeroOrMore>
+        <ref name="col"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <!--
+    Attuse: colgroup
+    
+    "span" causes the attributes of one
+    col element to apply to more than one column, extending in the
+    writing direction for the language. Span is ignored if
+    any <col> are present.
+    
+    "width" specifies the width of the columns, e.g.
+    
+        width='64'        width in screen pixels
+        width='0.5*'      relative width of 0.5
+    
+    "width" may contain a space- or comma-separated list of widths
+    for each <col>, or percentages if values end in '%', or relative
+    'nn*' to indicate a fractional portion of the remaining
+    widths after more explicit forms have been specified for other
+    columns in the colgroup (presumably the sum encompasses all
+    the columns). '0*' indicates minimal acceptable width based
+    on column content.
+    
+    The <col> in a <colgroup> may inherit attribute values
+    from it, or the closest enclosing ancestor element:
+    <thead>|<tfoot>|<tbody>. If none, then the values are up to the
+    user agent, possibly by user preference.
+  -->
+  <define name="attlist.colgroup" combine="interleave">
+    <ref name="attrs"/>
+    <optional>
+      <attribute name="span" a:defaultValue="1">
+        <data type="NMTOKEN"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="width">
+        <ref name="MultiLength"/>
+      </attribute>
+    </optional>
+    <ref name="cellhalign"/>
+    <ref name="cellvalign"/>
+  </define>
+  <!--
+    Use: col elements define the alignment properties for cells in
+    one or more columns.
+  -->
+  <define name="col">
+    <element name="col">
+      <ref name="attlist.col"/>
+      <empty/>
+    </element>
+  </define>
+  <!--
+    Attuse: col
+    "span" indicates how many columns the <col>
+    extends, in the writing direction of the <table>. The
+    attribute values apply to <th> and <td> that start in the
+    column, even if they extend into the next column(s), by
+    span value more than 1, and that next <col> may have different
+    attribute values.
+    
+    "width" may contain a space- or comma-separated list of widths
+    for each <col> of the span, or percentages if values end in '%',
+    or relative 'nn*' to indicate a fractional portion of the remaining
+    widths after more explicit forms have been specified for other
+    columns in the span (presumably the sum encompasses all
+    the columns of this span, and of other <colgroup>s). '0*' indicates
+    minimal acceptable width based on individual <col> content.
+    
+    <col> may inherit attribute values from the most immediate
+    enclosing ancestor element: <colgroup>, <thead>|<tbody>|<tfoot>.
+    If none, it is up to the user agent, possibly by user preference.
+  -->
+  <define name="attlist.col" combine="interleave">
+    <ref name="attrs"/>
+    <optional>
+      <attribute name="span" a:defaultValue="1">
+        <data type="NMTOKEN"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="width">
+        <ref name="MultiLength"/>
+      </attribute>
+    </optional>
+    <ref name="cellhalign"/>
+    <ref name="cellvalign"/>
+  </define>
+  <!-- Use: tr marks one row of a <table> containing <th> or <td> cells. -->
+  <define name="tr">
+    <element name="tr">
+      <ref name="attlist.tr"/>
+      <oneOrMore>
+        <choice>
+          <ref name="th"/>
+          <ref name="td"/>
+        </choice>
+      </oneOrMore>
+    </element>
+  </define>
+  <!--
+    Attuse: tr
+    
+    %cellvalign; values provide default vertical alignment
+    values for <th> and <td> in the row, overriding any from
+        <thead>|<tbody>|<tfoot>, <col>, <colgroup>
+    If none, it is up to the user agent, possibly by user preference.
+    
+    %cellhalign; values provide default horizontal alignment from
+        <thead>|<tbody>|<tfoot>
+    If none, it is up to the user agent, possibly by user preference.
+    
+  -->
+  <define name="attlist.tr" combine="interleave">
+    <ref name="attrs"/>
+    <ref name="cellhalign"/>
+    <ref name="cellvalign"/>
+  </define>
+  <!-- Use: th indicates a table cell containing header information. -->
+  <define name="th">
+    <element name="th">
+      <ref name="attlist.th"/>
+      <zeroOrMore>
+        <ref name="flownopagenum"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <!--
+    Attuse: th
+    
+    The uses of attributes other than %attrs; %cellvalign; and %cellhalign;
+    are shown below. See [HTML401STRICT] for details and examples.
+    
+    "abbr" provides an abbreviated name for a <th> cell that can be used
+    when referring to that <th> cell. Its default value is the cell content.
+    
+    "axis" is used to place cells into conceptual categories in order to
+    provide improved access to information.
+    
+    "headers" provides the id value(s), used with <td> cells, to reference
+    one or more cells with <th id="xxx"> that contain headings that
+    collectively describe or qualify the content of the cell, for example
+    <td headers="id1 id2">.
+    
+    "scope" identifies one of
+        (row | rowgroup | column | colgroup)
+    to which the header information applies.
+    
+    "rowspan" indicates the total number of rows that the cell extends, by
+    default 1. All spanned cells share these attributes.
+    
+    "colspan" indicates the total number of columns the cell extends,
+    by default 1, in the writing direction of the table. All spanned
+    cells share these attributes.
+  -->
+  <define name="attlist.th" combine="interleave">
+    <ref name="attrs"/>
+    <optional>
+      <attribute name="abbr">
+        <ref name="Text"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="axis"/>
+    </optional>
+    <optional>
+      <attribute name="headers">
+        <data type="IDREFS"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="scope">
+        <ref name="Scope"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="rowspan" a:defaultValue="1">
+        <data type="NMTOKEN"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="colspan" a:defaultValue="1">
+        <data type="NMTOKEN"/>
+      </attribute>
+    </optional>
+    <ref name="cellhalign"/>
+    <ref name="cellvalign"/>
+  </define>
+  <!-- Use: td indicates a table cell containing data. -->
+  <define name="td">
+    <element name="td">
+      <ref name="attlist.td"/>
+      <zeroOrMore>
+        <ref name="flownopagenum"/>
+      </zeroOrMore>
+    </element>
+  </define>
+  <!--
+    Attuse: td
+    
+    The uses of attributes other than %attrs; %cellhalign; and %cellvalign;
+    are shown below.  See [HTML401STRICT] for details and examples.
+    
+    "abbr" provides an abbreviated name for a <th> cell that can be used
+    when referring to that <th> cell. Its default value is the cell content.
+    
+    "axis" is used to place cells into conceptual categories in order to
+    provide improved access to information.
+    
+    "headers" provides the id value(s), used with <td> cells, to reference
+    one or more cells with <th id="xxx"> that contain headings that
+    collectively describe or qualify the content of the cell, for example
+    <td headers="id1 id2">.
+    
+    "scope" identifies one of
+        (row | rowgroup | column | colgroup)
+    to which the header information applies.
+    
+    "rowspan" indicates the total number of rows that the cell extends, by
+    default 1. All spanned cells share these attributes.
+    
+    "colspan" indicates the total number of columns the cell extends,
+    by default 1, in the writing direction of the table. All spanned
+    cells share these attributes.
+  -->
+  <define name="attlist.td" combine="interleave">
+    <ref name="attrs"/>
+    <optional>
+      <attribute name="abbr">
+        <ref name="Text"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="axis"/>
+    </optional>
+    <optional>
+      <attribute name="headers">
+        <data type="IDREFS"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="scope">
+        <ref name="Scope"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="rowspan" a:defaultValue="1">
+        <data type="NMTOKEN"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="colspan" a:defaultValue="1">
+        <data type="NMTOKEN"/>
+      </attribute>
+    </optional>
+    <ref name="cellhalign"/>
+    <ref name="cellvalign"/>
+  </define>
+  <start>
+    <choice>
+      <ref name="dtbook"/>
+    </choice>
+  </start>
+</grammar>
+<!-- End dtbook-2005-2.dtd -->
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/encryption.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/encryption.rng
new file mode 100644
index 0000000..c4c982c
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/encryption.rng
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
+         ns="urn:oasis:names:tc:opendocument:xmlns:container"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+    <include href="xenc-schema.rng" />
+	<start>
+		<element name="encryption">
+    		<oneOrMore>
+    			<choice>
+    				<element name="EncryptedData" ns="http://www.w3.org/2001/04/xmlenc#">
+						<ref name="EncryptedDataType" />
+					</element>
+					<element name="EncryptedKey" ns="http://www.w3.org/2001/04/xmlenc#">
+						<ref name="EncryptedKeyType" />
+					</element>
+				</choice>
+			</oneOrMore>
+		</element>
+	</start>
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/ncx-old.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/ncx-old.rng
new file mode 100644
index 0000000..e183c81
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/ncx-old.rng
@@ -0,0 +1,253 @@
+<?xml version="1.0"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
+         ns="http://www.daisy.org/z3986/2005/ncx/"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+	<start>
+		<element name="ncx" ns="http://www.daisy.org/z3986/2005/ncx/">
+			<attribute name="version">
+				<value>2005-1</value>
+			</attribute>
+			<attribute name="lang" ns="http://www.w3.org/XML/1998/namespace"/>
+			<element name="head">
+				<oneOrMore>
+					<ref name="meta"/>
+				</oneOrMore>
+			</element>
+			<element name="docTitle">
+				<optional>
+					<attribute name="id">
+						<text/>
+					</attribute>
+				</optional>
+				<ref name="text"/>
+				<optional>
+					<ref name="img"/>
+				</optional>
+			</element>
+			<zeroOrMore>
+				<element name="docAuthor">
+					<optional>
+						<attribute name="id">
+							<text/>
+						</attribute>
+					</optional>
+					<ref name="text"/>
+					<optional>
+						<ref name="img"/>
+					</optional>
+				</element>
+			</zeroOrMore>
+			<element name="navMap">
+				<optional>
+					<attribute name="id">
+						<text/>
+					</attribute>
+				</optional>
+				<zeroOrMore>
+					<ref name="navInfo"/>
+					<ref name="navLabel"/>
+				</zeroOrMore>
+      				<oneOrMore>
+					<ref name="navPoint"/>
+      				</oneOrMore>
+      			</element>
+			<optional>
+				<ref name="pageList"/>
+			</optional>
+			<zeroOrMore>
+				<ref name="navList"/>
+			</zeroOrMore>
+    		</element>
+   	</start>
+
+	<define name="text">
+		<element name="text">
+			<optional>
+				<attribute name="id">
+					<text/>
+				</attribute>
+				<attribute name="class">
+					<text/>
+				</attribute>
+			</optional>
+			<text/>
+		</element>
+	</define>
+
+	<define name="img">
+		<element name="img">
+			<optional>
+				<attribute name="id">
+					<text/>
+				</attribute>
+				<attribute name="class">
+					<text/>
+				</attribute>
+			</optional>
+			<attribute name="src">
+				<text/>
+			</attribute>
+		</element>
+	</define>
+
+	<define name="content">
+		<element name="content">
+			<optional>
+				<attribute name="id">
+					<text/>
+				</attribute>
+			</optional>
+			<attribute name="src">
+				<text/>
+			</attribute>
+		</element>
+	</define>
+
+	<define name="navInfo">
+		<element name="navInfo">
+			<ref name="text"/>
+			<optional>
+				<ref name="img"/>
+			</optional>
+		</element>
+	</define>
+
+	<define name="navLabel">
+		<element name="navLabel">
+			<ref name="text"/>
+			<optional>
+				<ref name="img"/>
+			</optional>
+		</element>
+	</define>
+
+   	<define name="navPoint">
+		<element name="navPoint">
+			<attribute name="id">
+				<text/>
+			</attribute>
+			<optional>
+				<attribute name="class">
+					<text/>
+				</attribute>
+			</optional>
+			<attribute name="playOrder">
+				<text/>
+			</attribute>
+			<oneOrMore>
+				<ref name="navLabel"/>
+			</oneOrMore>
+			<ref name="content"/>
+			<zeroOrMore>
+				<ref name="navPoint"/>
+			</zeroOrMore>
+		</element>
+   	</define>
+
+	<define name="pageList">
+		<element name="pageList">
+			<optional>
+				<attribute name="id">
+					<text/>
+				</attribute>
+				<attribute name="class">
+					<text/>
+				</attribute>
+			</optional>
+			<zeroOrMore>
+				<ref name="navInfo"/>
+				<ref name="navLabel"/>
+			</zeroOrMore>
+			<oneOrMore>
+				<ref name="pageTarget"/>
+			</oneOrMore>
+		</element>
+	</define>
+
+	<define name="navList">
+		<element name="navList">
+			<optional>
+				<attribute name="id">
+					<text/>
+				</attribute>
+				<attribute name="class">
+					<text/>
+				</attribute>
+			</optional>
+			<zeroOrMore>
+				<ref name="navInfo"/>
+			</zeroOrMore>
+			<oneOrMore>
+				<ref name="navLabel"/>
+				<ref name="navTarget"/>
+			</oneOrMore>
+		</element>
+	</define>
+
+	<define name="pageTarget">
+		<element name="pageTarget">
+			<optional>
+				<attribute name="id">
+					<text/>
+				</attribute>
+				<attribute name="value">
+					<text/>
+				</attribute>
+			</optional>
+			<attribute name="type">
+				<text/>
+			</attribute>
+			<optional>
+				<attribute name="class">
+					<text/>
+				</attribute>
+			</optional>
+			<attribute name="playOrder">
+				<text/>
+			</attribute>
+			<oneOrMore>
+				<ref name="navLabel"/>
+			</oneOrMore>
+			<ref name="content"/>
+		</element>
+	</define>
+
+	<define name="navTarget">
+		<element name="navTarget">
+			<attribute name="id">
+				<text/>
+			</attribute>
+			<optional>
+				<attribute name="class">
+					<text/>
+				</attribute>
+				<attribute name="value">
+					<text/>
+				</attribute>
+			</optional>
+			<attribute name="playOrder">
+				<text/>
+			</attribute>
+			<oneOrMore>
+				<ref name="navLabel"/>
+			</oneOrMore>
+			<ref name="content"/>
+		</element>
+	</define>
+
+   	<define name="meta">
+		<element name="meta">
+			<attribute name="name">
+				<text/>
+			</attribute>
+			<attribute name="content">
+				<text/>
+			</attribute>
+			<optional>
+				<attribute name="scheme">
+					<text/>
+				</attribute>
+			</optional>
+		</element>
+	</define>
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/ncx.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/ncx.rng
new file mode 100644
index 0000000..fab43bf
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/ncx.rng
@@ -0,0 +1,304 @@
+<?xml version="1.0"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
+         ns="http://www.daisy.org/z3986/2005/ncx/"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+         
+	<!--
+    Revision history:    
+    	20080107: mgylling: defined i18n attr group, referenced this from 
+    		elements ncx, docTitle, docAuthor, navLabel, navInfo
+    	20080523: mgylling: navList @class and @id made individually optional
+    	20131030: tfischer: change all @id attributes to correct <data type="ID"/> instead of <text/>
+    
+    --> 
+         
+	<start>
+		<element name="ncx">
+			<attribute name="version">
+				<value>2005-1</value>
+			</attribute>
+			<ref name="i18n"/>
+			<element name="head">
+				<oneOrMore>
+					<ref name="meta"/>
+				</oneOrMore>
+			</element>
+			<element name="docTitle">
+				<optional>
+					<attribute name="id">
+						<!-- checks lexical constraints only -->
+						<!-- uniqueness check is done in saxhandler, as the NCX schematron impl uses 1.5, which does not have value-of in reports -->
+						<data type="ID"/>
+					</attribute>
+				</optional>
+				<ref name="text"/>
+				<optional>
+					<ref name="img"/>
+				</optional>
+				<ref name="i18n"/>
+			</element>
+			<zeroOrMore>
+				<element name="docAuthor">
+					<optional>
+						<attribute name="id">
+							<data type="ID"/>
+						</attribute>
+					</optional>
+					<ref name="text"/>
+					<optional>
+						<ref name="img"/>
+					</optional>
+					<ref name="i18n"/>
+				</element>
+			</zeroOrMore>
+			<element name="navMap">
+				<optional>
+					<attribute name="id">
+						<data type="ID"/>
+					</attribute>
+				</optional>
+				<zeroOrMore>
+					<ref name="navInfo"/>
+				</zeroOrMore>
+				<zeroOrMore>
+					<ref name="navLabel"/>
+				</zeroOrMore>
+      			<oneOrMore>
+					<ref name="navPoint"/>
+      			</oneOrMore>
+      		</element>
+			<optional>
+				<ref name="pageList"/>
+			</optional>
+			<zeroOrMore>
+				<ref name="navList"/>
+			</zeroOrMore>
+    		</element>
+   	</start>
+
+	<define name="text">
+		<element name="text">
+			<optional>
+				<attribute name="id">
+					<data type="ID"/>
+				</attribute>
+				<attribute name="class">
+					<text/>
+				</attribute>
+			</optional>
+			<text/>
+		</element>
+	</define>
+
+	<define name="img">
+		<element name="img">
+			<optional>
+				<attribute name="id">
+					<data type="ID"/>
+				</attribute>
+				<attribute name="class">
+					<text/>
+				</attribute>
+			</optional>
+			<attribute name="src">
+				<text/>
+			</attribute>
+		</element>
+	</define>
+
+	<define name="content">
+		<element name="content">
+			<optional>
+				<attribute name="id">
+					<data type="ID"/>
+				</attribute>
+			</optional>
+			<attribute name="src">
+				<text/>
+			</attribute>
+		</element>
+	</define>
+
+	<define name="navInfo">
+		<element name="navInfo">
+			<ref name="text"/>
+			<optional>
+				<ref name="img"/>
+			</optional>
+			<ref name="i18n"/>
+		</element>
+	</define>
+
+	<define name="navLabel">
+		<element name="navLabel">
+			<ref name="text"/>
+			<optional>
+				<ref name="img"/>
+			</optional>
+			<ref name="i18n"/>
+		</element>
+	</define>
+
+   	<define name="navPoint">
+		<element name="navPoint">
+			<attribute name="id">
+				<data type="ID"/>
+			</attribute>
+			<optional>
+				<attribute name="class">
+					<text/>
+				</attribute>
+			</optional>
+			<optional>
+				<attribute name="playOrder">
+					<text/>
+				</attribute>
+			</optional>	
+			<oneOrMore>
+				<ref name="navLabel"/>
+			</oneOrMore>
+			<ref name="content"/>
+			<zeroOrMore>
+				<ref name="navPoint"/>
+			</zeroOrMore>
+		</element>
+   	</define>
+
+	<define name="pageList">
+		<element name="pageList">
+			<optional>
+				<attribute name="id">
+					<data type="ID"/>
+				</attribute>
+				<attribute name="class">
+					<text/>
+				</attribute>
+			</optional>
+			<optional>
+				<ref name="navLabel"/>
+			</optional>
+			<optional>
+				<ref name="navInfo"/>
+			</optional>
+			<oneOrMore>
+				<ref name="pageTarget"/>
+			</oneOrMore>
+		</element>
+	</define>
+
+	<define name="navList">
+		<element name="navList">
+			<optional>
+				<attribute name="id">
+					<data type="ID"/>
+				</attribute>
+			</optional>
+			<optional>
+				<attribute name="class">
+					<text/>
+				</attribute>
+			</optional>
+			<zeroOrMore>
+				<ref name="navInfo"/>
+			</zeroOrMore>
+			<oneOrMore>
+				<ref name="navLabel"/>				
+			</oneOrMore>
+			<oneOrMore>
+				<ref name="navTarget"/>
+			</oneOrMore>
+		</element>
+	</define>
+
+	<define name="pageTarget">
+		<element name="pageTarget">
+			<optional>
+				<attribute name="id">
+					<data type="ID"/>
+				</attribute>
+			</optional>
+			<optional>			
+				<attribute name="value">
+					<text/>
+				</attribute>
+			</optional>
+			<attribute name="type">
+				<text/>
+			</attribute>
+			<optional>
+				<attribute name="class">
+					<text/>
+				</attribute>
+			</optional>
+			<optional>
+				<attribute name="playOrder">
+					<text/>
+				</attribute>
+			</optional>
+			<oneOrMore>
+				<ref name="navLabel"/>
+			</oneOrMore>
+			<ref name="content"/>
+		</element>
+	</define>
+
+	<define name="navTarget">
+		<element name="navTarget">
+			<attribute name="id">
+				<data type="ID"/>
+			</attribute>
+			<optional>
+				<attribute name="class">
+					<text/>
+				</attribute>
+			</optional>			
+			<optional>
+				<attribute name="value">
+					<text/>
+				</attribute>
+			</optional>
+			<optional>
+				<attribute name="playOrder">
+					<text/>
+				</attribute>
+			</optional>	
+			<oneOrMore>
+				<ref name="navLabel"/>
+			</oneOrMore>
+			<ref name="content"/>
+		</element>
+	</define>
+
+   	<define name="meta">
+		<element name="meta">
+			<attribute name="name">
+				<text/>
+			</attribute>
+			<attribute name="content">
+				<text/>
+			</attribute>
+			<optional>
+				<attribute name="scheme">
+					<text/>
+				</attribute>
+			</optional>
+		</element>
+	</define>
+	
+	<define name="i18n">
+		<optional>
+        	<attribute name="lang" ns="http://www.w3.org/XML/1998/namespace">
+      			<data type="language"/>
+			</attribute>
+		</optional>
+     	<optional>
+       		<attribute name="dir">
+         		<choice>
+           			<value>ltr</value>
+           			<value>rtl</value>
+         		</choice>
+       		</attribute>
+     	</optional>
+    </define>
+    
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/opf.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/opf.rng
new file mode 100644
index 0000000..5a9fccc
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/opf.rng
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+         
+<include href="opf20.rng"/>
+<include href="opf12.rng"/>
+
+<start>
+  <choice>
+    <ref name="OPF20.package-element"/>
+    <ref name="OPF12.package-element"/>
+  </choice>
+</start>
+	
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/opf12.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/opf12.rng
new file mode 100644
index 0000000..0c2c585
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/opf12.rng
@@ -0,0 +1,386 @@
+<?xml version="1.0"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://openebook.org/namespaces/oeb-package/1.0/"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+         	
+<define name="OPF12.optional-id-attribute">
+  <optional>
+    <attribute name="id">
+      <data type="ID"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="OPF12.optional-xml-lang-attribute">
+  <optional>
+    <attribute name="lang" ns="http://www.w3.org/XML/1998/namespace">
+      <text/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="OPF12.optional-file-as-attribute">
+  <optional>
+    <attribute name="file-as">
+      <text/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="OPF12.optional-role-attribute">
+  <optional>
+    <attribute name="role">
+      <text/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="OPF12.optional-scheme-attribute">
+  <optional>
+    <attribute name="scheme">
+      <text/>
+    </attribute>
+  </optional>
+</define>
+	
+<define name="OPF12.optional-event-attribute">
+  <optional>
+    <attribute name="event">
+      <text/>
+    </attribute>
+  </optional>
+</define>
+	
+<define name="OPF12.package-element">
+  <element name="package">
+    <attribute name="unique-identifier">
+      <data type="IDREF"/>
+    </attribute>
+    <ref name="OPF12.optional-id-attribute"/>
+    <ref name="OPF12.package-content"/>
+  </element>
+</define>
+
+<define name="OPF12.package-content">
+  <ref name="OPF12.metadata-element"/>
+  <ref name="OPF12.manifest-element"/>
+  <ref name="OPF12.spine-element"/>
+  <optional>
+    <ref name="OPF12.tours-element"/>
+  </optional>
+  <optional>
+    <ref name="OPF12.guide-element"/>
+  </optional>
+</define>
+
+<define name="OPF12.metadata-element">
+  <element name="metadata">
+    <ref name="OPF12.optional-id-attribute"/>
+    <interleave>
+      <ref name="OPF12.dc-metadata-element"/>
+	  <optional>
+        <ref name="OPF12.x-metadata-element"/>
+	  </optional>
+      <ref name="OPF12.metadata-content"/>
+    </interleave>
+  </element>
+</define>
+
+<define name="OPF12.dc-metadata-element">
+  <element name="dc-metadata">
+    <ref name="OPF12.optional-id-attribute"/>
+    <ref name="OPF12.dc-metadata-content"/>
+  </element>
+</define>
+
+<define name="OPF12.x-metadata-element">
+  <element name="x-metadata">
+    <ref name="OPF12.optional-id-attribute"/>
+    <oneOrMore>
+     <element name="meta">
+       <ref name="OPF12.optional-id-attribute"/>
+       <attribute name="name">
+         <text/>
+       </attribute>
+       <attribute name="content">
+         <text/>
+       </attribute>
+       <optional>
+         <attribute name="scheme">
+           <text/>
+         </attribute>
+       </optional>
+     </element>
+   </oneOrMore>
+  </element>
+</define>
+
+<define name="OPF12.dc-metadata-content">
+  <interleave>
+    <oneOrMore>
+      <ref name="DC-D.title-element"/>
+    </oneOrMore>
+    <oneOrMore>
+      <ref name="DC-D.language-element"/>
+    </oneOrMore>
+    <oneOrMore>
+      <ref name="DC-D.identifier-element"/>
+    </oneOrMore>
+	<zeroOrMore>
+	  <ref name="DC-D.optional-metadata-element"/>
+	</zeroOrMore>
+  </interleave>
+</define>
+
+<define name="OPF12.metadata-content">
+  <empty/>
+</define>
+
+<define name="DC-D.identifier-element" ns="http://purl.org/dc/elements/1.1/">
+  <element name="Identifier">
+    <attribute name="id">
+      <data type="ID"/>
+    </attribute>
+    <ref name="OPF12.optional-scheme-attribute"/>
+    <text/>
+    <ref name="DC-D.metadata-common-content"/>
+  </element>
+</define>
+
+<define name="DC-D.title-element" ns="http://purl.org/dc/elements/1.1/">
+  <element name="Title">
+    <ref name="OPF12.optional-id-attribute"/>
+    <ref name="OPF12.optional-xml-lang-attribute"/>
+    <ref name="DC-D.metadata-common-content"/>
+  </element>
+</define>
+
+<define name="DC-D.language-element" ns="http://purl.org/dc/elements/1.1/">
+  <element name="Language">
+    <ref name="OPF12.optional-id-attribute"/>
+    <ref name="DC-D.metadata-common-content"/>
+  </element>
+</define>
+
+<define name="DC-D.optional-metadata-element" ns="http://purl.org/dc/elements/1.1/">
+  <choice>
+    <element name="Contributor">
+      <ref name="OPF12.optional-id-attribute"/>
+      <ref name="OPF12.optional-xml-lang-attribute"/>
+      <ref name="OPF12.optional-file-as-attribute"/>
+      <ref name="OPF12.optional-role-attribute"/>
+      <ref name="DC-D.metadata-common-content"/>
+    </element>
+    <element name="Coverage">
+      <ref name="OPF12.optional-id-attribute"/>
+      <ref name="OPF12.optional-xml-lang-attribute"/>
+      <ref name="DC-D.metadata-common-content"/>
+    </element>
+    <element name="Creator">
+      <ref name="OPF12.optional-id-attribute"/>
+      <ref name="OPF12.optional-xml-lang-attribute"/>
+      <ref name="OPF12.optional-file-as-attribute"/>
+      <ref name="OPF12.optional-role-attribute"/>
+      <ref name="DC-D.metadata-common-content"/>
+    </element>
+    <element name="Date">
+      <ref name="OPF12.optional-id-attribute"/>
+      <ref name="OPF12.optional-event-attribute"/>
+      <ref name="DC-D.metadata-common-content"/>
+    </element>
+    <element name="Description">
+      <ref name="OPF12.optional-id-attribute"/>
+      <ref name="OPF12.optional-xml-lang-attribute"/>
+      <ref name="DC-D.metadata-common-content"/>
+    </element>
+    <element name="Format">
+      <ref name="OPF12.optional-id-attribute"/>
+      <ref name="DC-D.metadata-common-content"/>
+    </element>
+    <element name="Publisher">
+      <ref name="OPF12.optional-id-attribute"/>
+      <ref name="OPF12.optional-xml-lang-attribute"/>
+      <ref name="DC-D.metadata-common-content"/>
+    </element>
+    <element name="Relation">
+      <ref name="OPF12.optional-id-attribute"/>
+      <ref name="OPF12.optional-xml-lang-attribute"/>
+      <ref name="DC-D.metadata-common-content"/>
+    </element>
+    <element name="Rights">
+      <ref name="OPF12.optional-id-attribute"/>
+      <ref name="OPF12.optional-xml-lang-attribute"/>
+      <ref name="DC-D.metadata-common-content"/>
+    </element>
+    <element name="Source">
+      <ref name="OPF12.optional-id-attribute"/>
+      <ref name="OPF12.optional-xml-lang-attribute"/>
+      <ref name="DC-D.metadata-common-content"/>
+    </element>
+    <element name="Subject">
+      <ref name="OPF12.optional-id-attribute"/>
+      <ref name="OPF12.optional-xml-lang-attribute"/>
+      <ref name="DC-D.metadata-common-content"/>
+    </element>
+    <element name="Type">
+      <ref name="OPF12.optional-id-attribute"/>
+      <ref name="DC-D.metadata-common-content"/>
+    </element>
+  </choice>
+</define>
+
+<define name="DC-D.metadata-common-content">
+  <text/>
+</define>
+
+<define name="OPF12.manifest-element">
+  <element name="manifest">
+    <ref name="OPF12.optional-id-attribute"/>
+    <ref name="OPF12.manifest-content"/>
+  </element>
+</define>
+
+<define name="OPF12.manifest-content">
+  <oneOrMore>
+    <ref name="OPF12.item-element"/>
+  </oneOrMore>
+</define>
+
+<define name="OPF12.item-element">
+  <element name="item">
+    <ref name="OPF12.optional-id-attribute"/>
+    <attribute name="href">
+      <text/>
+    </attribute>
+    <attribute name="media-type">
+      <text/>
+    </attribute>
+    <optional>
+      <attribute name="fallback">
+        <data type="IDREF"/>
+      </attribute>
+    </optional>
+    <ref name="OPF12.item-content"/>
+  </element>
+</define>
+
+<define name="OPF12.item-content">
+  <empty/>
+</define>
+
+<define name="OPF12.spine-element">
+  <element name="spine">
+    <ref name="OPF12.optional-id-attribute"/>
+	<ref name="OPF12.spine-content"/>
+  </element>
+</define>
+
+<define name="OPF12.spine-content">
+  <oneOrMore>
+	<ref name="OPF12.itemref-element"/>
+  </oneOrMore>
+</define>
+
+<define name="OPF12.itemref-element">
+  <element name="itemref">
+    <ref name="OPF12.optional-id-attribute"/>
+    <attribute name="idref">
+      <data type="IDREF"/>
+    </attribute>
+    <optional>
+      <attribute name="linear">
+        <choice>
+          <value>yes</value>
+          <value>no</value>
+        </choice>
+      </attribute>
+    </optional>
+    <ref name="OPF12.itemref-content"/>
+  </element>
+</define>
+
+<define name="OPF12.itemref-content">
+  <empty/>
+</define>
+
+<define name="OPF12.tours-element">
+  <element name="tours">
+    <ref name="OPF12.optional-id-attribute"/>
+	<ref name="OPF12.tours-content"/>
+  </element>
+</define>
+
+<define name="OPF12.tours-content">
+  <oneOrMore>
+	<ref name="OPF12.tour-element"/>
+  </oneOrMore>
+</define>
+
+<define name="OPF12.tour-element">
+  <element name="tour">
+    <ref name="OPF12.optional-id-attribute"/>
+    <attribute name="title">
+      <text/>
+    </attribute>
+	<ref name="OPF12.tour-content"/>
+  </element>
+</define>
+
+<define name="OPF12.tour-content">
+  <oneOrMore>
+	<ref name="OPF12.site-element"/>
+  </oneOrMore>
+</define>
+
+<define name="OPF12.site-element">
+  <element name="site">
+    <ref name="OPF12.optional-id-attribute"/>
+    <attribute name="title">
+      <text/>
+    </attribute>
+    <attribute name="href">
+      <text/>
+    </attribute>
+    <ref name="OPF12.site-content"/>
+  </element>
+</define>
+
+<define name="OPF12.site-content">
+  <empty/>
+</define>
+
+<define name="OPF12.guide-element">
+  <element name="guide">
+    <ref name="OPF12.optional-id-attribute"/>
+	<ref name="OPF12.guide-content"/>
+  </element>
+</define>
+
+<define name="OPF12.guide-content">
+  <oneOrMore>
+	<ref name="OPF12.reference-element"/>
+  </oneOrMore>
+</define>
+
+<define name="OPF12.reference-element">
+  <element name="reference">
+    <ref name="OPF12.optional-id-attribute"/>
+    <attribute name="type">
+      <text/>
+    </attribute>
+    <attribute name="href">
+      <text/>
+    </attribute>
+	<optional>
+      <attribute name="title">
+        <text/>
+      </attribute>
+	</optional>
+    <ref name="OPF12.reference-content"/>
+  </element>
+</define>
+
+<define name="OPF12.reference-content">
+  <empty/>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/opf20.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/opf20.rng
new file mode 100644
index 0000000..240b356
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/opf20.rng
@@ -0,0 +1,509 @@
+<?xml version="1.0"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://www.idpf.org/2007/opf"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+<!--
+Title:
+    Relax NG Schema for the Open Packaging
+     Format (OPF) version 2.0
+
+Version:
+    2.0
+
+Revision:
+    20070222
+
+Authors:
+    This Version 2.0 :
+         Peter Sorotokin <psorotok at adobe.com>
+-->
+
+<define name="OPF20.optional-id-attribute">
+  <optional>
+    <attribute name="id">
+      <data type="ID"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="OPF20.optional-xml-lang-attribute">
+  <optional>
+    <attribute name="lang" ns="http://www.w3.org/XML/1998/namespace">
+      <text/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="OPF20.optional-file-as-attribute">
+  <optional>
+    <attribute name="file-as" ns="http://www.idpf.org/2007/opf">
+      <text/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="OPF20.optional-role-attribute">
+  <optional>
+    <attribute name="role" ns="http://www.idpf.org/2007/opf">
+      <text/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="OPF20.optional-scheme-attribute">
+  <optional>
+    <attribute name="scheme" ns="http://www.idpf.org/2007/opf">
+      <text/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="OPF20.optional-event-attribute">
+  <optional>
+    <attribute name="event" ns="http://www.idpf.org/2007/opf">
+      <text/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="OPF20.optional-xsi-type">
+  <optional>
+    <attribute name="type" ns="http://www.w3.org/2001/XMLSchema-instance">
+      <text/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="OPF20.package-element">
+  <element name="package">
+    <attribute name="version">
+      <value>2.0</value>
+    </attribute>
+    <attribute name="unique-identifier">
+      <data type="IDREF"/>
+    </attribute>
+    <ref name="OPF20.optional-id-attribute"/>
+    <ref name="OPF20.package-content"/>
+  </element>
+</define>
+
+<define name="OPF20.package-content">
+  <ref name="OPF20.metadata-element"/>
+  <ref name="OPF20.manifest-element"/>
+  <ref name="OPF20.spine-element"/>
+  <optional>
+    <ref name="OPF20.tours-element"/>
+  </optional>
+  <optional>
+    <ref name="OPF20.guide-element"/>
+  </optional>
+</define>
+
+<define name="OPF20.metadata-element">
+  <element name="metadata">
+    <ref name="OPF20.optional-id-attribute"/>
+    <ref name="OPF20.metadata-content"/>
+  </element>
+</define>
+
+<define name="OPF20.metadata-content">
+  <choice>
+    <interleave>
+      <ref name="OPF20.dc-metadata-element"/>
+      <optional>
+        <ref name="OPF20.x-metadata-element"/>
+      </optional>
+    </interleave>
+    <interleave>
+      <oneOrMore>
+        <ref name="DC.title-element"/>
+      </oneOrMore>
+      <oneOrMore>
+        <ref name="DC.language-element"/>
+      </oneOrMore>
+      <oneOrMore>
+        <ref name="DC.identifier-element"/>
+      </oneOrMore>
+      <zeroOrMore>
+        <ref name="DC.optional-metadata-element"/>
+      </zeroOrMore>
+      <zeroOrMore>
+        <ref name="OPF20.meta-element"/>
+      </zeroOrMore>
+      <zeroOrMore>
+        <ref name="OPF20.any-other-element"/>
+      </zeroOrMore>
+    </interleave>
+  </choice>
+</define>
+
+<define name="OPF20.dc-metadata-element">
+  <element name="dc-metadata">
+    <ref name="OPF20.optional-id-attribute"/>
+    <ref name="OPF20.dc-metadata-content"/>
+  </element>
+</define>
+
+<define name="OPF20.dc-metadata-content">
+  <interleave>
+    <oneOrMore>
+      <ref name="DC.title-element"/>
+    </oneOrMore>
+    <oneOrMore>
+      <ref name="DC.language-element"/>
+    </oneOrMore>
+    <oneOrMore>
+      <ref name="DC.identifier-element"/>
+    </oneOrMore>
+    <zeroOrMore>
+      <ref name="DC.optional-metadata-element"/>
+    </zeroOrMore>
+  </interleave>
+</define>
+
+<define name="DC.identifier-element" ns="http://purl.org/dc/elements/1.1/">
+  <element name="identifier">
+    <optional>
+    <attribute name="id">
+      <data type="ID"/>
+    </attribute>
+    </optional>
+    <ref name="OPF20.optional-xsi-type"/>
+    <ref name="OPF20.optional-scheme-attribute"/>
+    <!-- <ref name="DC.metadata-common-content"/>
+    MG 20111024, see epubcheck Issue 114
+    -->
+    <ref name="DC.metadata-required-content"/>    
+  </element>
+</define>
+
+<define name="DC.title-element" ns="http://purl.org/dc/elements/1.1/">
+  <element name="title">
+    <ref name="OPF20.optional-id-attribute"/>
+    <ref name="OPF20.optional-xml-lang-attribute"/>
+    <ref name="DC.metadata-common-content"/>
+  </element>
+</define>
+
+<define name="DC.language-element" ns="http://purl.org/dc/elements/1.1/">
+  <element name="language">
+    <ref name="OPF20.optional-id-attribute"/>
+    <ref name="OPF20.optional-xsi-type"/>
+    <ref name="DC.metadata-common-content"/>
+  </element>
+</define>
+
+<define name="DC.optional-metadata-element" ns="http://purl.org/dc/elements/1.1/">
+  <choice>
+    <element name="contributor">
+      <ref name="OPF20.optional-id-attribute"/>
+      <ref name="OPF20.optional-xml-lang-attribute"/>
+      <ref name="OPF20.optional-file-as-attribute"/>
+      <ref name="OPF20.optional-role-attribute"/>
+      <ref name="DC.metadata-common-content"/>
+    </element>
+    <element name="coverage">
+      <ref name="OPF20.optional-id-attribute"/>
+      <ref name="OPF20.optional-xml-lang-attribute"/>
+      <ref name="DC.metadata-common-content"/>
+    </element>
+    <element name="creator">
+      <ref name="OPF20.optional-id-attribute"/>
+      <ref name="OPF20.optional-xml-lang-attribute"/>
+      <ref name="OPF20.optional-file-as-attribute"/>
+      <ref name="OPF20.optional-role-attribute"/>
+      <ref name="DC.metadata-common-content"/>
+    </element>
+    <element name="date">
+      <ref name="OPF20.optional-id-attribute"/>
+      <ref name="OPF20.optional-xsi-type"/>
+      <ref name="OPF20.optional-event-attribute"/>
+      <ref name="DC.metadata-common-content"/>
+    </element>
+    <element name="description">
+      <ref name="OPF20.optional-id-attribute"/>
+      <ref name="OPF20.optional-xml-lang-attribute"/>
+      <ref name="DC.metadata-common-content"/>
+    </element>
+    <element name="format">
+      <ref name="OPF20.optional-id-attribute"/>
+      <ref name="OPF20.optional-xsi-type"/>
+      <ref name="DC.metadata-common-content"/>
+    </element>
+    <element name="publisher">
+      <ref name="OPF20.optional-id-attribute"/>
+      <ref name="OPF20.optional-xml-lang-attribute"/>
+      <ref name="DC.metadata-common-content"/>
+    </element>
+    <element name="relation">
+      <ref name="OPF20.optional-id-attribute"/>
+      <ref name="OPF20.optional-xml-lang-attribute"/>
+      <ref name="DC.metadata-common-content"/>
+    </element>
+    <element name="rights">
+      <ref name="OPF20.optional-id-attribute"/>
+      <ref name="OPF20.optional-xml-lang-attribute"/>
+      <ref name="DC.metadata-common-content"/>
+    </element>
+    <element name="source">
+      <ref name="OPF20.optional-id-attribute"/>
+      <ref name="OPF20.optional-xml-lang-attribute"/>
+      <ref name="DC.metadata-common-content"/>
+    </element>
+    <element name="subject">
+      <ref name="OPF20.optional-id-attribute"/>
+      <ref name="OPF20.optional-xml-lang-attribute"/>
+      <ref name="DC.metadata-common-content"/>
+    </element>
+    <element name="type">
+      <ref name="OPF20.optional-id-attribute"/>
+      <ref name="OPF20.optional-xsi-type"/>
+      <ref name="DC.metadata-common-content"/>
+    </element>
+  </choice>
+</define>
+
+<define name="DC.metadata-common-content">
+  <text/>
+</define>
+
+  <define name="DC.metadata-required-content">
+    <data type="token">
+      <param name="minLength">1</param>
+    </data>
+  </define>
+
+<define name="OPF20.x-metadata-element">
+  <element name="x-metadata">
+    <ref name="OPF20.optional-id-attribute"/>
+    <ref name="OPF20.x-metadata-content"/>
+  </element>
+</define>
+
+<define name="OPF20.x-metadata-content">
+  <interleave>
+    <zeroOrMore>
+      <ref name="OPF20.meta-element"/>
+    </zeroOrMore>
+    <zeroOrMore>
+      <ref name="OPF20.any-other-element"/>
+    </zeroOrMore>
+  </interleave>
+</define>
+
+<define name="OPF20.meta-element">
+  <element name="meta">
+    <ref name="OPF20.optional-id-attribute"/>
+    <ref name="OPF20.optional-xml-lang-attribute"/>
+    <attribute name="name">
+      <text/>
+    </attribute>
+    <attribute name="content">
+      <text/>
+    </attribute>
+    <optional>
+      <attribute name="scheme">
+        <text/>
+      </attribute>
+    </optional>
+    <ref name="OPF20.meta-content"/>
+  </element>
+</define>
+
+<define name="OPF20.meta-content">
+  <empty/>
+</define>
+
+<define name="OPF20.manifest-element">
+  <element name="manifest">
+    <ref name="OPF20.optional-id-attribute"/>
+    <ref name="OPF20.manifest-content"/>
+  </element>
+</define>
+
+<define name="OPF20.manifest-content">
+  <oneOrMore>
+    <ref name="OPF20.item-element"/>
+  </oneOrMore>
+</define>
+
+<define name="OPF20.item-element">
+  <element name="item">
+    <attribute name="id">
+      <data type="ID"/>
+    </attribute>
+    <attribute name="href">
+      <text/>
+    </attribute>
+    <attribute name="media-type">
+      <text/>
+    </attribute>
+    <optional>
+      <attribute name="fallback">
+        <data type="IDREF"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="fallback-style">
+        <data type="IDREF"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="required-namespace">
+        <text/>
+      </attribute>
+      <optional>
+        <attribute name="required-modules">
+          <text/>
+        </attribute>
+      </optional>
+    </optional>
+    <ref name="OPF20.item-content"/>
+  </element>
+</define>
+
+<define name="OPF20.item-content">
+  <empty/>
+</define>
+
+<define name="OPF20.spine-element">
+  <element name="spine">
+    <ref name="OPF20.optional-id-attribute"/>
+      <attribute name="toc">
+        <data type="IDREF"/>
+      </attribute>
+        <ref name="OPF20.spine-content"/>
+  </element>
+</define>
+
+<define name="OPF20.spine-content">
+  <oneOrMore>
+	<ref name="OPF20.itemref-element"/>
+  </oneOrMore>
+</define>
+
+<define name="OPF20.itemref-element">
+  <element name="itemref">
+    <ref name="OPF20.optional-id-attribute"/>
+    <attribute name="idref">
+      <data type="IDREF"/>
+    </attribute>
+    <optional>
+      <attribute name="linear">
+        <choice>
+          <value>yes</value>
+          <value>no</value>
+        </choice>
+      </attribute>
+    </optional>
+    <ref name="OPF20.itemref-content"/>
+  </element>
+</define>
+
+<define name="OPF20.itemref-content">
+  <empty/>
+</define>
+
+<define name="OPF20.tours-element">
+  <element name="tours">
+    <ref name="OPF20.optional-id-attribute"/>
+    <ref name="OPF20.tours-content"/>
+  </element>
+</define>
+
+<define name="OPF20.tours-content">
+  <oneOrMore>
+    <ref name="OPF20.tour-element"/>
+  </oneOrMore>
+</define>
+
+<define name="OPF20.tour-element">
+  <element name="tour">
+    <ref name="OPF20.optional-id-attribute"/>
+    <attribute name="title">
+      <text/>
+    </attribute>
+    <ref name="OPF20.tour-content"/>
+  </element>
+</define>
+
+<define name="OPF20.tour-content">
+  <oneOrMore>
+	<ref name="OPF20.site-element"/>
+  </oneOrMore>
+</define>
+
+<define name="OPF20.site-element">
+  <element name="site">
+    <ref name="OPF20.optional-id-attribute"/>
+    <attribute name="title">
+      <text/>
+    </attribute>
+    <attribute name="href">
+      <text/>
+    </attribute>
+    <ref name="OPF20.site-content"/>
+  </element>
+</define>
+
+<define name="OPF20.site-content">
+  <empty/>
+</define>
+
+<define name="OPF20.guide-element">
+  <element name="guide">
+    <ref name="OPF20.optional-id-attribute"/>
+    <ref name="OPF20.guide-content"/>
+  </element>
+</define>
+
+<define name="OPF20.guide-content">
+  <zeroOrMore>
+    <ref name="OPF20.reference-element"/>
+  </zeroOrMore>
+</define>
+
+<define name="OPF20.reference-element">
+  <element name="reference">
+    <ref name="OPF20.optional-id-attribute"/>
+    <attribute name="type">
+      <text/>
+    </attribute>
+    <optional>
+    <attribute name="title">
+      <text/>
+    </attribute>
+    </optional>
+    <attribute name="href">
+      <text/>
+    </attribute>
+    <ref name="OPF20.reference-content"/>
+  </element>
+</define>
+
+<define name="OPF20.reference-content">
+  <empty/>
+</define>
+
+<define name="OPF20.any-other-element">
+  <element>
+    <anyName>
+      <except>
+        <nsName ns="http://www.idpf.org/2007/opf"/>
+        <nsName ns="http://openebook.org/namespaces/oeb-package/1.0/"/>
+        <nsName ns="http://purl.org/dc/elements/1.1/"/>
+      </except>
+    </anyName>
+    <zeroOrMore>
+      <choice>
+        <attribute>
+          <anyName/>
+        </attribute>
+        <text/>
+        <ref name="OPF20.any-other-element"/>
+      </choice>
+    </zeroOrMore>
+  </element>
+</define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/ops/ops-switch.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/ops/ops-switch.rng
new file mode 100644
index 0000000..a1764f7
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/ops/ops-switch.rng
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.idpf.org/2007/ops" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+<a:documentation>
+	OPS conditional processing: switch, case and default elements
+</a:documentation>
+
+<define name="OPS.switch">
+   <element name="switch">
+      <optional>
+         <attribute name="id">
+            <data type="ID"/>
+         </attribute>
+      </optional>
+      <oneOrMore>
+         <element name="case">
+            <optional>
+               <attribute name="id">
+                  <data type="ID"/>
+               </attribute>
+            </optional>
+            <attribute name="required-namespace">
+               <text/>
+            </attribute>
+            <optional>
+               <attribute name="required-modules">
+                  <text/>
+               </attribute>
+            </optional>
+            <zeroOrMore>
+               <ref name="OPS.switch"/>
+            </zeroOrMore>
+         </element>
+      </oneOrMore>
+      <element name="default">
+         <optional>
+            <attribute name="id">
+               <data type="ID"/>
+            </attribute>
+         </optional>
+			<zeroOrMore>
+            <ref name="OPS.switch"/>
+         </zeroOrMore>
+      </element>
+   </element>
+</define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/ops20.nvdl b/src/main/resources/com/adobe/epubcheck/schema/20/rng/ops20.nvdl
new file mode 100644
index 0000000..a422835
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/ops20.nvdl
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rules xmlns="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0"
+       startMode="valid-ops" xmlns:html="http://www.w3.org/1999/xhtml">
+
+<!-- mode that allows any elements -->
+<mode name="anything">
+   <anyNamespace>
+      <allow/>
+   </anyNamespace>
+</mode>
+
+<!-- mode that allows arbitrary XHTML or SVG fragment -->
+<mode name="blessed-xhtml-svg">
+   <namespace ns="http://www.w3.org/2000/svg">
+      <allow/>
+   </namespace>
+   <namespace ns="http://www.w3.org/1999/xhtml">
+      <allow/>
+   </namespace>
+</mode>
+
+<!-- mode that allows any elements -->
+<!-- any XHTML and SVG fragments are attached in place of -->
+<!-- the OPS fragment that invoked this mode -->
+<mode name="xhtml-svg-attach">
+   <namespace ns="http://www.w3.org/1999/xhtml">
+      <attach/>
+   </namespace>
+   <namespace ns="http://www.w3.org/2000/svg">
+	  <attach/>
+   </namespace>
+   <anyNamespace>
+      <allow/>
+   </anyNamespace>
+</mode>
+
+<!-- mode that allows any valid XHTML with SVG islands included -->
+<!-- and OPS switch elements with valid default clause -->
+<mode name="valid-ops">
+   <namespace ns="http://www.w3.org/1999/xhtml">
+      <validate schema="content-xhtml.rng"
+                useMode="xhtml-content"/>
+   </namespace>
+</mode>
+
+<!-- mode that validates SVG and OPS islands inside XHTML -->
+<mode name="xhtml-content">
+   <namespace ns="http://www.w3.org/2000/svg">
+      <attach/>
+   </namespace>
+   <namespace ns="http://www.w3.org/1999/xhtml">
+      <attach/>
+   </namespace>
+   <namespace ns="http://www.idpf.org/2007/ops">
+      <!-- doing two independent thing here -->
+      <!-- first, attach XHTML and SVG islands from default element into the XHTML+SVG -->
+      <!-- tree so that they can be validated in the right context -->
+      <unwrap useMode="xhtml-svg-attach">
+         <context path="case" useMode="anything"/>
+      </unwrap>
+      <!-- next, validate OPS itself (switch element), paying attention to -->
+      <!-- what can go inside case and default elements -->
+      <validate schema="ops20.rng">
+         <context path="case" useMode="anything"/>
+         <context path="default" useMode="blessed-xhtml-svg"/>
+      </validate>
+   </namespace>
+</mode>
+
+</rules>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/ops20.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/ops20.rng
new file mode 100644
index 0000000..c46b99e
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/ops20.rng
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
+         ns="http://www.w3.org/1999/xhtml" 
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         xmlns:xlink="http://www.w3.org/1999/xlink" xml:lang="en" 
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+<!-- OPS module -->
+		
+	<include href="ops/ops-switch.rng"/>
+
+  <start>
+    <ref name="OPS.switch"/>
+  </start>
+	
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/signatures.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/signatures.rng
new file mode 100644
index 0000000..c936061
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/signatures.rng
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
+         ns="urn:oasis:names:tc:opendocument:xmlns:container"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+    <include href="xmldsig-core-schema.rng" />
+  	<start combine="choice">
+ 	 	<element name="signatures">
+			<oneOrMore>
+				<element name="Signature" ns="http://www.w3.org/2000/09/xmldsig#">
+					<ref name="SignatureType" />
+				</element>
+			</oneOrMore>
+		</element>
+	</start>
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-animation.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-animation.rng
new file mode 100644
index 0000000..ad26cc5
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-animation.rng
@@ -0,0 +1,412 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Animation Module
+    file: svg-animation.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-animation.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Animation
+
+        animate, set, animateMotion, animateColor, animateTransform, mpath
+
+    This module declares markup to provide support for animation.
+  </a:documentation>
+
+  <a:documentation>
+    SVG.Animation.class
+  </a:documentation>
+
+  <define name="SVG.Animation.extra.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Animation.class" combine="choice">
+    <choice>
+      <ref name="animate"/>
+      <ref name="set"/>
+      <ref name="animateMotion"/>
+      <ref name="animateColor"/>
+      <ref name="animateTransform"/>
+      <ref name="SVG.Animation.extra.class"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    SVG.Animation.attrib
+  </a:documentation>
+
+  <define name="SVG.Animation.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Animation.attrib">
+    <ref name="SVG.XLink.attrib"/>
+    <ref name="SVG.Animation.extra.attrib"/>
+  </define>
+
+  <a:documentation>
+    SVG.AnimationAttribute.attrib
+  </a:documentation>
+
+  <define name="SVG.AnimationAttribute.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.AnimationAttribute.attrib">
+    <attribute name="attributeName"/>
+    <optional>
+      <attribute name="attributeType"/>
+    </optional>
+    <ref name="SVG.AnimationAttribute.extra.attrib"/>
+  </define>
+
+  <a:documentation>
+    SVG.AnimationTiming.attrib
+  </a:documentation>
+
+  <define name="SVG.AnimationTiming.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.AnimationTiming.attrib">
+    <optional>
+      <attribute name="begin"/>
+    </optional>
+    <optional>
+      <attribute name="dur"/>
+    </optional>
+    <optional>
+      <attribute name="end"/>
+    </optional>
+    <optional>
+      <attribute name="min"/>
+    </optional>
+    <optional>
+      <attribute name="max"/>
+    </optional>
+    <optional>
+      <attribute name="restart" a:defaultValue="always">
+        <choice>
+          <value>always</value>
+          <value>never</value>
+          <value>whenNotActive</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="repeatCount"/>
+    </optional>
+    <optional>
+      <attribute name="repeatDur"/>
+    </optional>
+    <optional>
+      <attribute name="fill" a:defaultValue="remove">
+        <choice>
+          <value>remove</value>
+          <value>freeze</value>
+        </choice>
+      </attribute>
+    </optional>
+    <ref name="SVG.AnimationTiming.extra.attrib"/>
+  </define>
+
+  <a:documentation>
+    SVG.AnimationValue.attrib
+  </a:documentation>
+
+  <define name="SVG.AnimationValue.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.AnimationValue.attrib">
+    <optional>
+      <attribute name="calcMode" a:defaultValue="linear">
+        <choice>
+          <value>discrete</value>
+          <value>linear</value>
+          <value>paced</value>
+          <value>spline</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="values"/>
+    </optional>
+    <optional>
+      <attribute name="keyTimes"/>
+    </optional>
+    <optional>
+      <attribute name="keySplines"/>
+    </optional>
+    <optional>
+      <attribute name="from"/>
+    </optional>
+    <optional>
+      <attribute name="to"/>
+    </optional>
+    <optional>
+      <attribute name="by"/>
+    </optional>
+    <ref name="SVG.AnimationValue.extra.attrib"/>
+  </define>
+
+  <a:documentation>
+    SVG.AnimationAddtion.attrib
+  </a:documentation>
+
+  <define name="SVG.AnimationAddtion.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.AnimationAddtion.attrib">
+    <optional>
+      <attribute name="additive" a:defaultValue="replace">
+        <choice>
+          <value>replace</value>
+          <value>sum</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="accumulate" a:defaultValue="none">
+        <choice>
+          <value>none</value>
+          <value>sum</value>
+        </choice>
+      </attribute>
+    </optional>
+    <ref name="SVG.AnimationAddtion.extra.attrib"/>
+  </define>
+
+  <a:documentation>
+    animate: Animate Element
+  </a:documentation>
+
+  <define name="SVG.animate.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+  </define>
+
+  <define name="animate">
+    <element name="animate">
+      <ref name="attlist.animate"/>
+      <ref name="SVG.animate.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.animate" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.AnimationEvents.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <ref name="SVG.Animation.attrib"/>
+    <ref name="SVG.AnimationAttribute.attrib"/>
+    <ref name="SVG.AnimationTiming.attrib"/>
+    <ref name="SVG.AnimationValue.attrib"/>
+    <ref name="SVG.AnimationAddtion.attrib"/>
+  </define>
+
+  <a:documentation>
+    set: Set Element
+  </a:documentation>
+
+  <define name="SVG.set.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+  </define>
+
+  <define name="set">
+    <element name="set">
+      <ref name="attlist.set"/>
+      <ref name="SVG.set.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.set" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.AnimationEvents.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <ref name="SVG.Animation.attrib"/>
+    <ref name="SVG.AnimationAttribute.attrib"/>
+    <ref name="SVG.AnimationTiming.attrib"/>
+    <optional>
+      <attribute name="to"/>
+    </optional>
+  </define>
+
+  <a:documentation>
+    animateMotion: Animate Motion Element
+  </a:documentation>
+
+  <define name="SVG.animateMotion.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+    <optional>
+      <ref name="mpath"/>
+    </optional>
+  </define>
+
+  <define name="animateMotion">
+    <element name="animateMotion">
+      <ref name="attlist.animateMotion"/>
+      <ref name="SVG.animateMotion.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.animateMotion" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.AnimationEvents.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <ref name="SVG.Animation.attrib"/>
+    <ref name="SVG.AnimationTiming.attrib"/>
+    <ref name="SVG.AnimationAddtion.attrib"/>
+    <optional>
+      <attribute name="calcMode" a:defaultValue="paced">
+        <choice>
+          <value>discrete</value>
+          <value>linear</value>
+          <value>paced</value>
+          <value>spline</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="values"/>
+    </optional>
+    <optional>
+      <attribute name="keyTimes"/>
+    </optional>
+    <optional>
+      <attribute name="keySplines"/>
+    </optional>
+    <optional>
+      <attribute name="from"/>
+    </optional>
+    <optional>
+      <attribute name="to"/>
+    </optional>
+    <optional>
+      <attribute name="by"/>
+    </optional>
+    <optional>
+      <attribute name="path"/>
+    </optional>
+    <optional>
+      <attribute name="keyPoints"/>
+    </optional>
+    <optional>
+      <attribute name="rotate"/>
+    </optional>
+    <optional>
+      <attribute name="origin"/>
+    </optional>
+  </define>
+
+  <a:documentation>
+    animateColor: Animate Color Element
+  </a:documentation>
+
+  <define name="SVG.animateColor.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+  </define>
+
+  <define name="animateColor">
+    <element name="animateColor">
+      <ref name="attlist.animateColor"/>
+      <ref name="SVG.animateColor.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.animateColor" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.AnimationEvents.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <ref name="SVG.Animation.attrib"/>
+    <ref name="SVG.AnimationAttribute.attrib"/>
+    <ref name="SVG.AnimationTiming.attrib"/>
+    <ref name="SVG.AnimationValue.attrib"/>
+    <ref name="SVG.AnimationAddtion.attrib"/>
+  </define>
+
+  <a:documentation>
+    animateTransform: Animate Transform Element
+  </a:documentation>
+
+  <define name="SVG.animateTransform.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+  </define>
+
+  <define name="animateTransform">
+    <element name="animateTransform">
+      <ref name="attlist.animateTransform"/>
+      <ref name="SVG.animateTransform.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.animateTransform" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.AnimationEvents.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <ref name="SVG.Animation.attrib"/>
+    <ref name="SVG.AnimationAttribute.attrib"/>
+    <ref name="SVG.AnimationTiming.attrib"/>
+    <ref name="SVG.AnimationValue.attrib"/>
+    <ref name="SVG.AnimationAddtion.attrib"/>
+    <optional>
+      <attribute name="type" a:defaultValue="translate">
+        <choice>
+          <value>translate</value>
+          <value>scale</value>
+          <value>rotate</value>
+          <value>skewX</value>
+          <value>skewY</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    mpath: Motion Path Element
+  </a:documentation>
+
+  <define name="SVG.mpath.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+  </define>
+
+  <define name="mpath">
+    <element name="mpath">
+      <ref name="attlist.mpath"/>
+      <ref name="SVG.mpath.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.mpath" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.XLinkRequired.attrib"/>
+    <ref name="SVG.External.attrib"/>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-animevents-attrib.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-animevents-attrib.rng
new file mode 100644
index 0000000..8f2579f
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-animevents-attrib.rng
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Animation Events Attribute Module
+    file: svg-animevents-attrib.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-animevents-attrib.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Animation Events Attribute
+
+        onbegin, onend, onrepeat, onload
+
+    This module defines the AnimationEvents attribute set.
+  </a:documentation>
+
+  <define name="SVG.onbegin.attrib">
+    <optional>
+      <attribute name="onbegin">
+        <ref name="SVGScript.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.onend.attrib">
+    <optional>
+      <attribute name="onend">
+        <ref name="SVGScript.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.onrepeat.attrib">
+    <optional>
+      <attribute name="onrepeat">
+        <ref name="SVGScript.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.AnimationEvents.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.AnimationEvents.attrib" combine="interleave">
+    <ref name="SVG.onbegin.attrib"/>
+    <ref name="SVG.onend.attrib"/>
+    <ref name="SVG.onrepeat.attrib"/>
+    <ref name="SVG.onload.attrib"/>
+    <ref name="SVG.AnimationEvents.extra.attrib"/>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-basic-clip.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-basic-clip.rng
new file mode 100644
index 0000000..f506e23
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-basic-clip.rng
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Basic Clip Module
+    file: svg-basic-clip.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-basic-clip.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Basic Clip
+
+        clipPath
+
+    This module declares markup to provide support for clipping.
+  </a:documentation>
+
+  <a:documentation>
+    Datatypes
+  </a:documentation>
+
+  <define name="ClipPathValue.datatype">
+    <data type="string"/>
+  </define>
+
+  <a:documentation>
+    SVG.Clip.attrib
+  </a:documentation>
+
+  <define name="SVG.Clip.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Clip.attrib" combine="interleave">
+    <optional>
+      <attribute name="clip-path">
+        <ref name="ClipPathValue.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="clip-rule">
+        <ref name="ClipFillRule.datatype"/>
+      </attribute>
+    </optional>
+    <ref name="SVG.Clip.extra.attrib"/>
+  </define>
+
+  <a:documentation>
+    SVG.Clip.class
+  </a:documentation>
+
+  <define name="SVG.Clip.extra.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Clip.class" combine="choice">
+    <choice>
+      <ref name="clipPath"/>
+      <ref name="SVG.Clip.extra.class"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    clipPath: Clip Path Element
+  </a:documentation>
+
+  <define name="SVG.clipPath.class">
+      <choice>
+        <ref name="rect"/>
+        <ref name="SVG.Animation.class"/>
+        <ref name="SVG.Use.class"/>
+      </choice>
+  </define>
+
+  <define name="SVG.clipPath.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+    <zeroOrMore>
+      <ref name="SVG.clipPath.class"/>
+    </zeroOrMore>
+  </define>
+
+  <define name="clipPath">
+    <element name="clipPath">
+      <ref name="attlist.clipPath"/>
+      <ref name="SVG.clipPath.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.clipPath" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Text.attrib"/>
+    <ref name="SVG.TextContent.attrib"/>
+    <ref name="SVG.Font.attrib"/>
+    <ref name="SVG.Paint.attrib"/>
+    <ref name="SVG.Color.attrib"/>
+    <ref name="SVG.Opacity.attrib"/>
+    <ref name="SVG.Graphics.attrib"/>
+    <ref name="SVG.Clip.attrib"/>
+    <ref name="SVG.Mask.attrib"/>
+    <ref name="SVG.Filter.attrib"/>
+    <ref name="SVG.Cursor.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="transform">
+        <ref name="TransformList.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="clipPathUnits">
+        <choice>
+          <value>userSpaceOnUse</value>
+          <value>objectBoundingBox</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-basic-filter.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-basic-filter.rng
new file mode 100644
index 0000000..ed798a8
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-basic-filter.rng
@@ -0,0 +1,870 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Basic Filter Module
+    file: svg-basic-filter.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-basic-filter.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Basic Filter
+
+        filter, feBlend, feColorMatrix, feComponentTransfer, feComposite,
+        feFlood, feGaussianBlur, feImage, feMerge, feMergeNode, feOffset,
+        feTile, feFuncR, feFuncG, feFuncB, feFuncA
+
+    This module declares markup to provide support for filter effect.
+  </a:documentation>
+
+  <a:documentation>
+    Datatypes
+  </a:documentation>
+
+  <define name="FilterValue.datatype">
+    <data type="string"/>
+  </define>
+
+  <define name="NumberOptionalNumber.datatype">
+    <data type="string"/>
+  </define>
+
+  <a:documentation>
+    SVG.Filter.attrib
+  </a:documentation>
+
+  <define name="SVG.Filter.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Filter.attrib" combine="interleave">
+    <optional>
+      <attribute name="filter">
+        <ref name="FilterValue.datatype"/>
+      </attribute>
+    </optional>
+    <ref name="SVG.Filter.extra.attrib"/>
+  </define>
+
+  <a:documentation>
+    SVG.FilterColor.attrib
+  </a:documentation>
+
+  <define name="SVG.FilterColor.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.FilterColor.attrib" combine="interleave">
+    <optional>
+      <attribute name="color-interpolation-filters">
+        <choice>
+          <value>auto</value>
+          <value>sRGB</value>
+          <value>linearRGB</value>
+          <value>inherit</value>
+        </choice>
+      </attribute>
+    </optional>
+    <ref name="SVG.FilterColor.extra.attrib"/>
+  </define>
+
+  <a:documentation>
+    SVG.Filter.class
+  </a:documentation>
+
+  <define name="SVG.Filter.extra.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Filter.class" combine="choice">
+    <choice>
+      <ref name="filter"/>
+      <ref name="SVG.Filter.extra.class"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    SVG.FilterPrimitive.class
+  </a:documentation>
+
+  <define name="SVG.FilterPrimitive.extra.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.FilterPrimitive.class">
+    <choice>
+      <ref name="feBlend"/>
+      <ref name="feColorMatrix"/>
+      <ref name="feComponentTransfer"/>
+      <ref name="feComposite"/>
+      <ref name="feFlood"/>
+      <ref name="feGaussianBlur"/>
+      <ref name="feImage"/>
+      <ref name="feMerge"/>
+      <ref name="feOffset"/>
+      <ref name="feTile"/>
+      <ref name="SVG.FilterPrimitive.extra.class"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    SVG.FilterPrimitive.attrib
+  </a:documentation>
+
+  <define name="SVG.FilterPrimitive.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.FilterPrimitive.attrib">
+    <optional>
+      <attribute name="x">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="y">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="width">
+        <ref name="SVGLength.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="height">
+        <ref name="SVGLength.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="result"/>
+    </optional>
+    <ref name="SVG.FilterPrimitive.extra.attrib"/>
+  </define>
+
+  <a:documentation>
+    SVG.FilterPrimitiveWithIn.attrib
+  </a:documentation>
+
+  <define name="SVG.FilterPrimitiveWithIn.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.FilterPrimitiveWithIn.attrib">
+    <ref name="SVG.FilterPrimitive.attrib"/>
+    <optional>
+      <attribute name="in"/>
+    </optional>
+    <ref name="SVG.FilterPrimitiveWithIn.extra.attrib"/>
+  </define>
+
+  <a:documentation>
+    filter: Filter Element
+  </a:documentation>
+
+  <define name="SVG.filter.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+        <ref name="SVG.FilterPrimitive.class"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="filter">
+    <element name="filter">
+      <ref name="attlist.filter"/>
+      <ref name="SVG.filter.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.filter" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Presentation.attrib"/>
+    <ref name="SVG.XLink.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="x">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="y">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="width">
+        <ref name="SVGLength.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="height">
+        <ref name="SVGLength.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="filterRes">
+        <ref name="NumberOptionalNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="filterUnits">
+        <choice>
+          <value>userSpaceOnUse</value>
+          <value>objectBoundingBox</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="primitiveUnits">
+        <choice>
+          <value>userSpaceOnUse</value>
+          <value>objectBoundingBox</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    feBlend: Filter Effect Blend Element
+  </a:documentation>
+
+  <define name="SVG.feBlend.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="feBlend">
+    <element name="feBlend">
+      <ref name="attlist.feBlend"/>
+      <ref name="SVG.feBlend.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.feBlend" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.FilterColor.attrib"/>
+    <ref name="SVG.FilterPrimitiveWithIn.attrib"/>
+    <attribute name="in2"/>
+    <optional>
+      <attribute name="mode" a:defaultValue="normal">
+        <choice>
+          <value>normal</value>
+          <value>multiply</value>
+          <value>screen</value>
+          <value>darken</value>
+          <value>lighten</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    feColorMatrix: Filter Effect Color Matrix Element
+  </a:documentation>
+
+  <define name="SVG.feColorMatrix.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="feColorMatrix">
+    <element name="feColorMatrix">
+      <ref name="attlist.feColorMatrix"/>
+      <ref name="SVG.feColorMatrix.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.feColorMatrix" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.FilterColor.attrib"/>
+    <ref name="SVG.FilterPrimitiveWithIn.attrib"/>
+    <optional>
+      <attribute name="type" a:defaultValue="matrix">
+        <choice>
+          <value>matrix</value>
+          <value>saturate</value>
+          <value>hueRotate</value>
+          <value>luminanceToAlpha</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="values"/>
+    </optional>
+  </define>
+
+  <a:documentation>
+    feComponentTransfer: Filter Effect Component Transfer Element
+  </a:documentation>
+
+  <define name="SVG.feComponentTransfer.content">
+    <optional>
+      <ref name="feFuncR"/>
+    </optional>
+    <optional>
+      <ref name="feFuncG"/>
+    </optional>
+    <optional>
+      <ref name="feFuncB"/>
+    </optional>
+    <optional>
+      <ref name="feFuncA"/>
+    </optional>
+  </define>
+
+  <define name="feComponentTransfer">
+    <element name="feComponentTransfer">
+      <ref name="attlist.feComponentTransfer"/>
+      <ref name="SVG.feComponentTransfer.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.feComponentTransfer" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.FilterColor.attrib"/>
+    <ref name="SVG.FilterPrimitiveWithIn.attrib"/>
+  </define>
+
+  <a:documentation>
+    feComposite: Filter Effect Composite Element
+  </a:documentation>
+
+  <define name="SVG.feComposite.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="feComposite">
+    <element name="feComposite">
+      <ref name="attlist.feComposite"/>
+      <ref name="SVG.feComposite.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.feComposite" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.FilterColor.attrib"/>
+    <ref name="SVG.FilterPrimitiveWithIn.attrib"/>
+    <attribute name="in2"/>
+    <optional>
+      <attribute name="operator" a:defaultValue="over">
+        <choice>
+          <value>over</value>
+          <value>in</value>
+          <value>out</value>
+          <value>atop</value>
+          <value>xor</value>
+          <value>arithmetic</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="k1">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="k2">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="k3">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="k4">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    feFlood: Filter Effect Flood Element
+  </a:documentation>
+
+  <define name="SVG.feFlood.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+        <ref name="animateColor"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="feFlood">
+    <element name="feFlood">
+      <ref name="attlist.feFlood"/>
+      <ref name="SVG.feFlood.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.feFlood" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Color.attrib"/>
+    <ref name="SVG.FilterColor.attrib"/>
+    <ref name="SVG.FilterPrimitiveWithIn.attrib"/>
+    <optional>
+      <attribute name="flood-color">
+        <ref name="SVGColor.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="flood-opacity">
+        <ref name="OpacityValue.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    feGaussianBlur: Filter Effect Gaussian Blur Element
+  </a:documentation>
+
+  <define name="SVG.feGaussianBlur.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="feGaussianBlur">
+    <element name="feGaussianBlur">
+      <ref name="attlist.feGaussianBlur"/>
+      <ref name="SVG.feGaussianBlur.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.feGaussianBlur" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.FilterColor.attrib"/>
+    <ref name="SVG.FilterPrimitiveWithIn.attrib"/>
+    <optional>
+      <attribute name="stdDeviation">
+        <ref name="NumberOptionalNumber.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    feImage: Filter Effect Image Element
+  </a:documentation>
+
+  <define name="SVG.feImage.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+        <ref name="animateTransform"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="feImage">
+    <element name="feImage">
+      <ref name="attlist.feImage"/>
+      <ref name="SVG.feImage.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.feImage" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Presentation.attrib"/>
+    <ref name="SVG.FilterPrimitive.attrib"/>
+    <ref name="SVG.XLinkEmbed.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="preserveAspectRatio" a:defaultValue="xMidYMid meet">
+        <ref name="PreserveAspectRatioSpec.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    feMerge: Filter Effect Merge Element
+  </a:documentation>
+
+  <define name="SVG.feMerge.content">
+    <zeroOrMore>
+      <ref name="feMergeNode"/>
+    </zeroOrMore>
+  </define>
+
+  <define name="feMerge">
+    <element name="feMerge">
+      <ref name="attlist.feMerge"/>
+      <ref name="SVG.feMerge.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.feMerge" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.FilterColor.attrib"/>
+    <ref name="SVG.FilterPrimitive.attrib"/>
+  </define>
+
+  <a:documentation>
+    feMergeNode: Filter Effect Merge Node Element
+  </a:documentation>
+
+  <define name="SVG.feMergeNode.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="feMergeNode">
+    <element name="feMergeNode">
+      <ref name="attlist.feMergeNode"/>
+      <ref name="SVG.feMergeNode.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.feMergeNode" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <optional>
+      <attribute name="in"/>
+    </optional>
+  </define>
+
+  <a:documentation>
+    feOffset: Filter Effect Offset Element
+  </a:documentation>
+
+  <define name="SVG.feOffset.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="feOffset">
+    <element name="feOffset">
+      <ref name="attlist.feOffset"/>
+      <ref name="SVG.feOffset.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.feOffset" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.FilterColor.attrib"/>
+    <ref name="SVG.FilterPrimitiveWithIn.attrib"/>
+    <optional>
+      <attribute name="dx">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="dy">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    feTile: Filter Effect Tile Element
+  </a:documentation>
+
+  <define name="SVG.feTile.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="feTile">
+    <element name="feTile">
+      <ref name="attlist.feTile"/>
+      <ref name="SVG.feTile.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.feTile" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.FilterColor.attrib"/>
+    <ref name="SVG.FilterPrimitiveWithIn.attrib"/>
+  </define>
+
+  <a:documentation>
+    feFuncR: Filter Effect Function Red Element
+  </a:documentation>
+
+  <define name="SVG.feFuncR.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="feFuncR">
+    <element name="feFuncR">
+      <ref name="attlist.feFuncR"/>
+      <ref name="SVG.feFuncR.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.feFuncR" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <attribute name="type">
+      <choice>
+        <value>identity</value>
+        <value>table</value>
+        <value>discrete</value>
+        <value>linear</value>
+        <value>gamma</value>
+      </choice>
+    </attribute>
+    <optional>
+      <attribute name="tableValues"/>
+    </optional>
+    <optional>
+      <attribute name="slope">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="intercept">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="amplitude">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="exponent">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="offset">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    feFuncG: Filter Effect Function Green Element
+  </a:documentation>
+
+  <define name="SVG.feFuncG.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="feFuncG">
+    <element name="feFuncG">
+      <ref name="attlist.feFuncG"/>
+      <ref name="SVG.feFuncG.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.feFuncG" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <attribute name="type">
+      <choice>
+        <value>identity</value>
+        <value>table</value>
+        <value>discrete</value>
+        <value>linear</value>
+        <value>gamma</value>
+      </choice>
+    </attribute>
+    <optional>
+      <attribute name="tableValues"/>
+    </optional>
+    <optional>
+      <attribute name="slope">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="intercept">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="amplitude">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="exponent">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="offset">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    feFuncB: Filter Effect Function Blue Element
+  </a:documentation>
+
+  <define name="SVG.feFuncB.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="feFuncB">
+    <element name="feFuncB">
+      <ref name="attlist.feFuncB"/>
+      <ref name="SVG.feFuncB.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.feFuncB" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <attribute name="type">
+      <choice>
+        <value>identity</value>
+        <value>table</value>
+        <value>discrete</value>
+        <value>linear</value>
+        <value>gamma</value>
+      </choice>
+    </attribute>
+    <optional>
+      <attribute name="tableValues"/>
+    </optional>
+    <optional>
+      <attribute name="slope">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="intercept">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="amplitude">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="exponent">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="offset">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    feFuncA: Filter Effect Function Alpha Element
+  </a:documentation>
+
+  <define name="SVG.feFuncA.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="feFuncA">
+    <element name="feFuncA">
+      <ref name="attlist.feFuncA"/>
+      <ref name="SVG.feFuncA.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.feFuncA" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <attribute name="type">
+      <choice>
+        <value>identity</value>
+        <value>table</value>
+        <value>discrete</value>
+        <value>linear</value>
+        <value>gamma</value>
+      </choice>
+    </attribute>
+    <optional>
+      <attribute name="tableValues"/>
+    </optional>
+    <optional>
+      <attribute name="slope">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="intercept">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="amplitude">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="exponent">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="offset">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-basic-font.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-basic-font.rng
new file mode 100644
index 0000000..6a0bf25
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-basic-font.rng
@@ -0,0 +1,546 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Basic Font Module
+    file: svg-basic-font.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-basic-font.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Basic Font
+
+        font, font-face, glyph, missing-glyph, hkern, vkern, font-face-src,
+        font-face-uri, font-face-name
+
+    This module declares markup to provide support for template.
+  </a:documentation>
+
+  <a:documentation>
+    SVG.Font.class
+  </a:documentation>
+
+  <define name="SVG.Font.extra.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Font.class" combine="choice">
+    <choice>
+      <ref name="font"/>
+      <ref name="font-face"/>
+      <ref name="SVG.Font.extra.class"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    font: Font Element
+  </a:documentation>
+
+  <define name="SVG.font.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+    <!-- copy font-face inline to allow optionality of its content (per spec) -->
+    <element name="font-face">
+      <ref name="attlist.font-face"/>
+      <optional>
+      	<ref name="SVG.font-face.content"/>
+      </optional>
+    </element>
+    <ref name="missing-glyph"/>
+    <zeroOrMore>
+      <choice>
+        <ref name="glyph"/>
+        <ref name="hkern"/>
+        <ref name="vkern"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="font">
+    <element name="font">
+      <ref name="attlist.font"/>
+      <ref name="SVG.font.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.font" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Presentation.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="horiz-origin-x">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="horiz-origin-y">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <attribute name="horiz-adv-x">
+      <ref name="SVGNumber.datatype"/>
+    </attribute>
+    <optional>
+      <attribute name="vert-origin-x">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="vert-origin-y">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="vert-adv-y">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    font-face: Font Face Element
+  </a:documentation>
+
+  <!-- disable as it interfers with the content model;
+  	svg-font.rng populates this class
+   <define name="SVG.font-face.extra.class">
+    <notAllowed/>
+  </define> -->
+
+  <define name="SVG.font-face.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+    <optional>
+      <ref name="font-face-src"/>
+    </optional>
+    <ref name="SVG.font-face.extra.class"/>
+  </define>
+
+  <define name="font-face">
+    <element name="font-face">
+      <ref name="attlist.font-face"/>
+      <ref name="SVG.font-face.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.font-face" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <optional>
+      <attribute name="font-family"/>
+    </optional>
+    <optional>
+      <attribute name="font-style"/>
+    </optional>
+    <optional>
+      <attribute name="font-variant"/>
+    </optional>
+    <optional>
+      <attribute name="font-weight"/>
+    </optional>
+    <optional>
+      <attribute name="font-stretch"/>
+    </optional>
+    <optional>
+      <attribute name="font-size"/>
+    </optional>
+    <optional>
+      <attribute name="unicode-range"/>
+    </optional>
+    <optional>
+      <attribute name="units-per-em">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="panose-1"/>
+    </optional>
+    <optional>
+      <attribute name="stemv">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="stemh">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="slope">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="cap-height">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="x-height">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="accent-height">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="ascent">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="descent">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="widths"/>
+    </optional>
+    <optional>
+      <attribute name="bbox"/>
+    </optional>
+    <optional>
+      <attribute name="ideographic">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="alphabetic">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="mathematical">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="hanging">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="v-ideographic">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="v-alphabetic">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="v-mathematical">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="v-hanging">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="underline-position">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="underline-thickness">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="strikethrough-position">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="strikethrough-thickness">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="overline-position">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="overline-thickness">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    glyph: Glyph Element
+  </a:documentation>
+
+  <define name="SVG.glyph.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.glyph.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+    <zeroOrMore>
+      <ref name="SVG.glyph.class"/>
+    </zeroOrMore>
+  </define>
+
+  <define name="glyph">
+    <element name="glyph">
+      <ref name="attlist.glyph"/>
+      <ref name="SVG.glyph.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.glyph" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Presentation.attrib"/>
+    <optional>
+      <attribute name="unicode"/>
+    </optional>
+    <optional>
+      <attribute name="glyph-name"/>
+    </optional>
+    <optional>
+      <attribute name="d">
+        <ref name="PathData.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="orientation"/>
+    </optional>
+    <optional>
+      <attribute name="arabic-form"/>
+    </optional>
+    <optional>
+      <attribute name="lang">
+        <ref name="LanguageCodes.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="horiz-adv-x">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="vert-origin-x">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="vert-origin-y">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="vert-adv-y">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    missing-glyph: Missing Glyph Element
+  </a:documentation>
+
+  <define name="SVG.missing-glyph.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.missing-glyph.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+    <zeroOrMore>
+      <ref name="SVG.missing-glyph.class"/>
+    </zeroOrMore>
+  </define>
+
+  <define name="missing-glyph">
+    <element name="missing-glyph">
+      <ref name="attlist.missing-glyph"/>
+      <ref name="SVG.missing-glyph.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.missing-glyph" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Presentation.attrib"/>
+    <optional>
+      <attribute name="d">
+        <ref name="PathData.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="horiz-adv-x">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="vert-origin-x">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="vert-origin-y">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="vert-adv-y">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    hkern: Horizontal Kerning Element
+  </a:documentation>
+
+  <define name="SVG.hkern.content">
+    <empty/>
+  </define>
+
+  <define name="hkern">
+    <element name="hkern">
+      <ref name="attlist.hkern"/>
+      <ref name="SVG.hkern.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.hkern" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <optional>
+      <attribute name="u1"/>
+    </optional>
+    <optional>
+      <attribute name="g1"/>
+    </optional>
+    <optional>
+      <attribute name="u2"/>
+    </optional>
+    <optional>
+      <attribute name="g2"/>
+    </optional>
+    <attribute name="k">
+      <ref name="SVGNumber.datatype"/>
+    </attribute>
+  </define>
+
+  <a:documentation>
+    vkern: Vertical Kerning Element
+  </a:documentation>
+
+  <define name="SVG.vkern.content">
+    <empty/>
+  </define>
+
+  <define name="vkern">
+    <element name="vkern">
+      <ref name="attlist.vkern"/>
+      <ref name="SVG.vkern.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.vkern" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <optional>
+      <attribute name="u1"/>
+    </optional>
+    <optional>
+      <attribute name="g1"/>
+    </optional>
+    <optional>
+      <attribute name="u2"/>
+    </optional>
+    <optional>
+      <attribute name="g2"/>
+    </optional>
+    <attribute name="k">
+      <ref name="SVGNumber.datatype"/>
+    </attribute>
+  </define>
+
+  <a:documentation>
+    font-face-src: Font Face Source Element
+  </a:documentation>
+
+  <define name="SVG.font-face-src.content">
+    <oneOrMore>
+      <choice>
+        <ref name="font-face-uri"/>
+        <ref name="font-face-name"/>
+      </choice>
+    </oneOrMore>
+  </define>
+
+  <define name="font-face-src">
+    <element name="font-face-src">
+      <ref name="attlist.font-face-src"/>
+      <ref name="SVG.font-face-src.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.font-face-src" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+  </define>
+
+  <a:documentation>
+    font-face-uri: Font Face URI Element
+  </a:documentation>
+
+  <define name="SVG.font-face-uri.content">
+    <empty/>
+  </define>
+
+  <define name="font-face-uri">
+    <element name="font-face-uri">
+      <ref name="attlist.font-face-uri"/>
+      <ref name="SVG.font-face-uri.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.font-face-uri" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.XLinkRequired.attrib"/>
+  </define>
+
+  <a:documentation>
+    font-face-name: Font Face Name Element
+  </a:documentation>
+
+  <define name="SVG.font-face-name.content">
+    <empty/>
+  </define>
+
+  <define name="font-face-name">
+    <element name="font-face-name">
+      <ref name="attlist.font-face-name"/>
+      <ref name="SVG.font-face-name.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.font-face-name" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <optional>
+      <attribute name="name"/>
+    </optional>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-basic-graphics-attrib.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-basic-graphics-attrib.rng
new file mode 100644
index 0000000..72f7218
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-basic-graphics-attrib.rng
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Basic Graphics Attribute Module
+    file: svg-basic-graphics-attrib.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-basic-graphics-attrib.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Basic Graphics Attribute
+
+        display, visibility
+
+    This module defines the Graphics attribute set.
+  </a:documentation>
+
+  <define name="SVG.display.attrib">
+    <optional>
+      <attribute name="display">
+        <choice>
+          <value>inline</value>
+          <value>block</value>
+          <value>list-item</value>
+          <value>run-in</value>
+          <value>compact</value>
+          <value>marker</value>
+          <value>table</value>
+          <value>inline-table</value>
+          <value>table-row-group</value>
+          <value>table-header-group</value>
+          <value>table-footer-group</value>
+          <value>table-row</value>
+          <value>table-column-group</value>
+          <value>table-column</value>
+          <value>table-cell</value>
+          <value>table-caption</value>
+          <value>none</value>
+          <value>inherit</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.visibility.attrib">
+    <optional>
+      <attribute name="visibility">
+        <choice>
+          <value>visible</value>
+          <value>hidden</value>
+          <value>inherit</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.Graphics.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Graphics.attrib" combine="interleave">
+    <ref name="SVG.display.attrib"/>
+    <ref name="SVG.visibility.attrib"/>
+    <ref name="SVG.Graphics.extra.attrib"/>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-basic-structure.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-basic-structure.rng
new file mode 100644
index 0000000..027ec96
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-basic-structure.rng
@@ -0,0 +1,667 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Basic Structure Module
+    file: svg-basic-structure.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-basic-structure.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Basic Structure
+
+        svg, g, defs, desc, title, metadata, use
+
+    This module declares the major structural elements and their attributes.
+  </a:documentation>
+
+<!-- move to the main schema file
+  <start>
+    <a:documentation>
+      The root element is "svg".
+    </a:documentation>
+    <ref name="svg"/>
+  </start>
+-->
+
+  <div>
+    <a:documentation>
+      Include core set of modules
+    </a:documentation>
+
+    <include href="svg-datatypes.rng">
+      <a:documentation>
+        Datatypes Module
+      </a:documentation>
+    </include>
+
+    <include href="svg-core-attrib.rng">
+      <a:documentation>
+        Core Attribute Module
+      </a:documentation>
+    </include>
+  </div>
+
+  <a:documentation>
+    Content Models (Default)
+  </a:documentation>
+
+  <define name="SVG.Profile.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Gradient.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Pattern.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Clip.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Mask.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Filter.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Cursor.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Marker.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.View.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Script.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Font.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Extensibility.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Conditional.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Image.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Style.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Shape.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Text.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Hyperlink.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Animation.class">
+    <notAllowed/>
+  </define>
+
+  <a:documentation>
+    Attribute Collections (Default)
+  </a:documentation>
+
+  <define name="SVG.Container.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Viewport.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Text.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.TextContent.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Opacity.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Marker.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Profile.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Gradient.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Clip.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Mask.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Filter.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.FilterColor.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Cursor.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.External.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Conditional.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Color.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Paint.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Graphics.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.DocumentEvents.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.GraphicalEvents.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.onload.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.AnimationEvents.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.XLink.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.XLinkRequired.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.XLinkEmbed.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.XLinkReplace.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Style.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Font.attrib">
+    <empty/>
+  </define>
+
+  <a:documentation>
+    SVG.Description.class
+  </a:documentation>
+
+  <define name="SVG.Description.extra.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Description.class">
+    <choice>
+      <ref name="desc"/>
+      <ref name="SVG.title"/>
+      <ref name="metadata"/>
+      <ref name="SVG.Description.extra.class"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    SVG.Use.class
+  </a:documentation>
+
+  <define name="SVG.Use.extra.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Use.class">
+    <choice>
+      <ref name="use"/>
+      <ref name="SVG.Use.extra.class"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    SVG.Structure.class
+  </a:documentation>
+
+  <define name="SVG.Structure.extra.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Structure.class">
+    <choice>
+      <ref name="svg"/>
+      <ref name="g"/>
+      <ref name="defs"/>
+      <ref name="SVG.Use.class"/>
+      <ref name="SVG.Structure.extra.class"/>
+      <ref name="SVG.Extensibility.class"/> <!-- added per Issue 222 -->
+    </choice>
+  </define>
+
+  <a:documentation>
+    SVG.Presentation.attrib
+  </a:documentation>
+
+  <define name="SVG.Presentation.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Presentation.attrib">
+    <ref name="SVG.Container.attrib"/>
+    <ref name="SVG.Viewport.attrib"/>
+    <ref name="SVG.Text.attrib"/>
+    <ref name="SVG.TextContent.attrib"/>
+    <ref name="SVG.Font.attrib"/>
+    <ref name="SVG.Paint.attrib"/>
+    <ref name="SVG.Color.attrib"/>
+    <ref name="SVG.Opacity.attrib"/>
+    <ref name="SVG.Graphics.attrib"/>
+    <ref name="SVG.Marker.attrib"/>
+    <ref name="SVG.Profile.attrib"/>
+    <ref name="SVG.Gradient.attrib"/>
+    <ref name="SVG.Clip.attrib"/>
+    <ref name="SVG.Mask.attrib"/>
+    <ref name="SVG.Filter.attrib"/>
+    <ref name="SVG.FilterColor.attrib"/>
+    <ref name="SVG.Cursor.attrib"/>
+    <optional>
+      <attribute name="flood-color">
+        <ref name="SVGColor.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="flood-opacity">
+        <ref name="OpacityValue.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="lighting-color">
+        <ref name="SVGColor.datatype"/>
+      </attribute>
+    </optional>
+    <ref name="SVG.Presentation.extra.attrib"/>
+  </define>
+
+  <a:documentation>
+    svg: SVG Document Element
+  </a:documentation>
+
+  <define name="SVG.svg.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="SVG.Description.class"/>
+        <ref name="SVG.Animation.class"/>
+        <ref name="SVG.Structure.class"/>
+        <ref name="SVG.Conditional.class"/>
+        <ref name="SVG.Image.class"/>
+        <ref name="SVG.Style.class"/>
+        <ref name="SVG.Shape.class"/>
+        <ref name="SVG.Text.class"/>
+        <ref name="SVG.Marker.class"/>
+        <ref name="SVG.Profile.class"/>
+        <ref name="SVG.Gradient.class"/>
+        <ref name="SVG.Pattern.class"/>
+        <ref name="SVG.Clip.class"/>
+        <ref name="SVG.Mask.class"/>
+        <ref name="SVG.Filter.class"/>
+        <ref name="SVG.Cursor.class"/>
+        <ref name="SVG.Hyperlink.class"/>
+        <ref name="SVG.View.class"/>
+        <ref name="SVG.Script.class"/>
+        <ref name="SVG.Font.class"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="svg">
+    <element name="svg">
+      <ref name="attlist.svg"/>
+      <ref name="SVG.svg.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.svg" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Presentation.attrib"/>
+    <ref name="SVG.DocumentEvents.attrib"/>
+    <ref name="SVG.GraphicalEvents.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="x">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="y">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="width">
+        <ref name="SVGLength.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="height">
+        <ref name="SVGLength.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="viewBox">
+        <ref name="ViewBoxSpec.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="preserveAspectRatio" a:defaultValue="xMidYMid meet">
+        <ref name="PreserveAspectRatioSpec.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="zoomAndPan" a:defaultValue="magnify">
+        <choice>
+          <value>disable</value>
+          <value>magnify</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="version" a:defaultValue="1.1">
+        <value type="string">1.1</value>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="baseProfile">
+        <ref name="SVGText.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="contentScriptType" a:defaultValue="text/ecmascript">
+        <ref name="SVGContentType.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="contentStyleType" a:defaultValue="text/css">
+        <ref name="SVGContentType.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    g: Group Element
+  </a:documentation>
+
+  <define name="SVG.g.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="SVG.Description.class"/>
+        <ref name="SVG.Animation.class"/>
+        <ref name="SVG.Structure.class"/>
+        <ref name="SVG.Conditional.class"/>
+        <ref name="SVG.Image.class"/>
+        <ref name="SVG.Style.class"/>
+        <ref name="SVG.Shape.class"/>
+        <ref name="SVG.Text.class"/>
+        <ref name="SVG.Marker.class"/>
+        <ref name="SVG.Profile.class"/>
+        <ref name="SVG.Gradient.class"/>
+        <ref name="SVG.Pattern.class"/>
+        <ref name="SVG.Clip.class"/>
+        <ref name="SVG.Mask.class"/>
+        <ref name="SVG.Filter.class"/>
+        <ref name="SVG.Cursor.class"/>
+        <ref name="SVG.Hyperlink.class"/>
+        <ref name="SVG.View.class"/>
+        <ref name="SVG.Script.class"/>
+        <ref name="SVG.Font.class"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="g">
+    <element name="g">
+      <ref name="attlist.g"/>
+      <ref name="SVG.g.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.g" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Presentation.attrib"/>
+    <ref name="SVG.GraphicalEvents.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="transform">
+        <ref name="TransformList.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    defs: Definisions Element
+  </a:documentation>
+
+  <define name="SVG.defs.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="SVG.Description.class"/>
+        <ref name="SVG.Animation.class"/>
+        <ref name="SVG.Structure.class"/>
+        <ref name="SVG.Conditional.class"/>
+        <ref name="SVG.Image.class"/>
+        <ref name="SVG.Style.class"/>
+        <ref name="SVG.Shape.class"/>
+        <ref name="SVG.Text.class"/>
+        <ref name="SVG.Marker.class"/>
+        <ref name="SVG.Profile.class"/>
+        <ref name="SVG.Gradient.class"/>
+        <ref name="SVG.Pattern.class"/>
+        <ref name="SVG.Clip.class"/>
+        <ref name="SVG.Mask.class"/>
+        <ref name="SVG.Filter.class"/>
+        <ref name="SVG.Cursor.class"/>
+        <ref name="SVG.Hyperlink.class"/>
+        <ref name="SVG.View.class"/>
+        <ref name="SVG.Script.class"/>
+        <ref name="SVG.Font.class"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="defs">
+    <element name="defs">
+      <ref name="attlist.defs"/>
+      <ref name="SVG.defs.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.defs" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Presentation.attrib"/>
+    <ref name="SVG.GraphicalEvents.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="transform">
+        <ref name="TransformList.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    desc: Description Element
+  </a:documentation>
+
+  <define name="SVG.desc.content">
+    <text/>
+  </define>
+
+  <define name="desc">
+    <element name="desc">
+      <ref name="attlist.desc"/>
+      <ref name="SVG.desc.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.desc" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+  </define>
+
+  <a:documentation>
+    title: Title Element
+  </a:documentation>
+
+  <define name="SVG.title.content">
+    <text/>
+  </define>
+
+  <define name="SVG.title">
+    <element name="title">
+      <ref name="attlist.title"/>
+      <ref name="SVG.title.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.title" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+  </define>
+
+  <a:documentation>
+    metadata: Metadata Element
+  </a:documentation>
+
+  <define name="SVG.metadata.content">
+    <text/>
+  </define>
+
+  <define name="metadata">
+    <element name="metadata">
+      <ref name="attlist.metadata"/>
+      <ref name="SVG.metadata.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.metadata" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+  </define>
+
+  <a:documentation>
+    use: Use Element
+  </a:documentation>
+
+  <define name="SVG.use.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+    <zeroOrMore>
+      <ref name="SVG.Animation.class"/>
+    </zeroOrMore>
+  </define>
+
+  <define name="use">
+    <element name="use">
+      <ref name="attlist.use"/>
+      <ref name="SVG.use.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.use" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Presentation.attrib"/>
+    <ref name="SVG.GraphicalEvents.attrib"/>
+    <ref name="SVG.XLinkEmbed.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="x">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="y">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="width">
+        <ref name="SVGLength.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="height">
+        <ref name="SVGLength.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="transform">
+        <ref name="TransformList.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-basic-text.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-basic-text.rng
new file mode 100644
index 0000000..573be66
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-basic-text.rng
@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Basic Text Module
+    file: svg-basic-text.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-basic-text.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Basic Text
+
+        text, altGlyph, altGlyphDef, glyphRef
+
+    This module declares markup to provide support for text.
+  </a:documentation>
+
+  <a:documentation>
+    Datatypes
+  </a:documentation>
+
+  <define name="FontFamilyValue.datatype">
+    <data type="string"/>
+  </define>
+
+  <define name="FontSizeValue.datatype">
+    <data type="string"/>
+  </define>
+
+  <a:documentation>
+    SVG.Font.attrib
+  </a:documentation>
+
+  <define name="SVG.Font.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Font.attrib" combine="interleave">
+    <optional>
+      <attribute name="font-family">
+        <ref name="FontFamilyValue.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="font-size">
+        <ref name="FontSizeValue.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="font-style">
+        <choice>
+          <value>normal</value>
+          <value>italic</value>
+          <value>oblique</value>
+          <value>inherit</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="font-weight">
+        <choice>
+          <value>normal</value>
+          <value>bold</value>
+          <value>bolder</value>
+          <value>lighter</value>
+          <value>100</value>
+          <value>200</value>
+          <value>300</value>
+          <value>400</value>
+          <value>500</value>
+          <value>600</value>
+          <value>700</value>
+          <value>800</value>
+          <value>900</value>
+          <value>inherit</value>
+        </choice>
+      </attribute>
+    </optional>
+    <ref name="SVG.Font.extra.attrib"/>
+  </define>
+
+  <a:documentation>
+    SVG.Text.class
+  </a:documentation>
+
+  <define name="SVG.Text.extra.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Text.class" combine="choice">
+    <choice>
+      <ref name="text"/>
+      <ref name="SVG.Text.extra.class"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    SVG.TextContent.class
+  </a:documentation>
+
+  <define name="SVG.TextContent.extra.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.TextContent.class">
+    <choice>
+      <ref name="altGlyph"/>
+      <ref name="SVG.TextContent.extra.class"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    text: Text Element
+  </a:documentation>
+
+  <define name="SVG.text.class">
+    <choice>
+      <text/>
+      <ref name="SVG.Description.class"/>
+      <ref name="SVG.Animation.class"/>
+<!--
+      <ref name="SVG.TextContent.extra.class"/>
+-->
+      <ref name="SVG.Hyperlink.class"/>
+    </choice>
+  </define>
+
+  <define name="SVG.text.content">
+    <zeroOrMore>
+      <ref name="SVG.text.class"/>
+    </zeroOrMore>
+  </define>
+
+  <define name="text">
+    <element name="text">
+      <ref name="attlist.text"/>
+      <ref name="SVG.text.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.text" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Font.attrib"/>
+    <ref name="SVG.Paint.attrib"/>
+    <ref name="SVG.Color.attrib"/>
+    <ref name="SVG.Opacity.attrib"/>
+    <ref name="SVG.Graphics.attrib"/>
+    <ref name="SVG.Clip.attrib"/>
+    <ref name="SVG.Mask.attrib"/>
+    <ref name="SVG.Filter.attrib"/>
+    <ref name="SVG.GraphicalEvents.attrib"/>
+    <ref name="SVG.Cursor.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="x">
+        <ref name="Coordinates.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="y">
+        <ref name="Coordinates.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="rotate">
+        <ref name="Numbers.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="transform">
+        <ref name="TransformList.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    altGlyph: Alternate Glyph Element
+  </a:documentation>
+
+  <define name="SVG.altGlyph.content">
+    <text/>
+  </define>
+
+  <define name="altGlyph">
+    <element name="altGlyph">
+      <ref name="attlist.altGlyph"/>
+      <ref name="SVG.altGlyph.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.altGlyph" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Font.attrib"/>
+    <ref name="SVG.Paint.attrib"/>
+    <ref name="SVG.Color.attrib"/>
+    <ref name="SVG.Opacity.attrib"/>
+    <ref name="SVG.Graphics.attrib"/>
+    <ref name="SVG.Clip.attrib"/>
+    <ref name="SVG.Mask.attrib"/>
+    <ref name="SVG.Filter.attrib"/>
+    <ref name="SVG.GraphicalEvents.attrib"/>
+    <ref name="SVG.Cursor.attrib"/>
+    <ref name="SVG.XLink.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="glyphRef"/>
+    </optional>
+    <optional>
+      <attribute name="format"/>
+    </optional>
+  </define>
+
+  <a:documentation>
+    altGlyphDef: Alternate Glyph Definition Element
+  </a:documentation>
+
+  <define name="SVG.altGlyphDef.content">
+    <oneOrMore>
+      <ref name="glyphRef"/>
+    </oneOrMore>
+  </define>
+
+  <define name="altGlyphDef">
+    <element name="altGlyphDef">
+      <ref name="attlist.altGlyphDef"/>
+      <ref name="SVG.altGlyphDef.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.altGlyphDef" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+  </define>
+
+  <a:documentation>
+    glyphRef: Glyph Reference Element
+  </a:documentation>
+
+  <define name="SVG.glyphRef.content">
+    <empty/>
+  </define>
+
+  <define name="glyphRef">
+    <element name="glyphRef">
+      <ref name="attlist.glyphRef"/>
+      <ref name="SVG.glyphRef.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.glyphRef" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Font.attrib"/>
+    <ref name="SVG.XLink.attrib"/>
+    <optional>
+      <attribute name="glyphRef"/>
+    </optional>
+    <optional>
+      <attribute name="format"/>
+    </optional>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-clip.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-clip.rng
new file mode 100644
index 0000000..715b72c
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-clip.rng
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Clip Module
+    file: svg-clip.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-clip.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Clip
+
+        clipPath
+
+    This module declares markup to provide support for clipping.
+  </a:documentation>
+
+  <include href="svg-basic-clip.rng"/>
+
+  <define name="SVG.clipPath.class" combine="choice">
+    <a:documentation>
+      extend content model of clipPath
+    </a:documentation>
+    <choice>
+      <ref name="SVG.Shape.class"/>
+      <ref name="SVG.Text.class"/>
+    </choice>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-conditional.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-conditional.rng
new file mode 100644
index 0000000..ed45ae5
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-conditional.rng
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Conditional Processing Module
+    file: svg-conditional.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-conditional.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Conditional Processing
+
+        switch
+
+    This module declares markup to provide support for conditional processing.
+  </a:documentation>
+
+  <a:documentation>
+    Datatypes
+  </a:documentation>
+
+  <define name="ExtensionList.datatype">
+    <data type="string"/>
+  </define>
+
+  <define name="FeatureList.datatype">
+    <data type="string"/>
+  </define>
+
+  <a:documentation>
+    SVG.Conditional.attrib
+  </a:documentation>
+
+  <define name="SVG.Conditional.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Conditional.attrib" combine="interleave">
+    <optional>
+      <attribute name="requiredFeatures">
+        <ref name="FeatureList.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="requiredExtensions">
+        <ref name="ExtensionList.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="systemLanguage">
+        <ref name="LanguageCodes.datatype"/>
+      </attribute>
+    </optional>
+    <ref name="SVG.Conditional.extra.attrib"/>
+  </define>
+
+  <a:documentation>
+    SVG.Conditional.class
+  </a:documentation>
+
+  <define name="SVG.Conditional.extra.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Conditional.class" combine="choice">
+    <choice>
+      <ref name="switch"/>
+      <ref name="SVG.Conditional.extra.class"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    switch: Switch Element
+  </a:documentation>
+
+  <define name="SVG.switch.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+    <zeroOrMore>
+      <choice>
+        <ref name="svg"/>
+        <ref name="g"/>
+        <ref name="use"/>
+        <ref name="text"/>
+        <ref name="SVG.Animation.class"/>
+        <ref name="SVG.Conditional.class"/>
+        <ref name="SVG.Image.class"/>
+        <ref name="SVG.Shape.class"/>
+        <ref name="SVG.Hyperlink.class"/>
+        <ref name="SVG.Extensibility.class"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="switch">
+    <element name="switch">
+      <ref name="attlist.switch"/>
+      <ref name="SVG.switch.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.switch" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Presentation.attrib"/>
+    <ref name="SVG.GraphicalEvents.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="transform">
+        <ref name="TransformList.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-container-attrib.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-container-attrib.rng
new file mode 100644
index 0000000..6b0bfad
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-container-attrib.rng
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Container Attribute Module
+    file: svg-container-attrib.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-container-attrib.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Container Attribute
+
+        enable-background
+
+    This module defines the Container attribute set.
+  </a:documentation>
+
+  <define name="EnableBackgroundValue.datatype">
+    <a:documentation>
+      'enable-background' property/attribute value (e.g., 'new', 'accumulate')
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+  <define name="SVG.enable-background.attrib">
+    <optional>
+      <attribute name="enable-background">
+        <ref name="EnableBackgroundValue.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.Container.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Container.attrib" combine="interleave">
+    <ref name="SVG.enable-background.attrib"/>
+    <ref name="SVG.Container.extra.attrib"/>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-core-attrib.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-core-attrib.rng
new file mode 100644
index 0000000..f0f8025
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-core-attrib.rng
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Core Attribute Module
+    file: svg-core-attrib.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-core-attrib.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Core Attribute
+
+        id, xml:base, xml:lang, xml:space
+
+    This module defines the core set of attributes that can be present on
+    any element.
+  </a:documentation>
+
+  <define name="SVG.id.attrib">
+    <optional>
+      <attribute name="id">
+        <data type="ID"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.base.attrib">
+    <optional>
+      <attribute name="xml:base">
+        <ref name="SVGURI.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.lang.attrib">
+    <optional>
+      <attribute name="xml:lang">
+        <ref name="SVGLanguageCode.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.space.attrib">
+    <optional>
+      <attribute name="xml:space">
+        <choice>
+          <value>default</value>
+          <value>preserve</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.Core.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Core.attrib">
+    <ref name="SVG.id.attrib"/>
+    <ref name="SVG.base.attrib"/>
+    <ref name="SVG.lang.attrib"/>
+    <ref name="SVG.space.attrib"/>
+    <ref name="SVG.Core.extra.attrib"/>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-cursor.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-cursor.rng
new file mode 100644
index 0000000..b10201c
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-cursor.rng
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Cursor Module
+    file: svg-cursor.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-cursor.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Cursor
+
+        cursor
+
+    This module declares markup to provide support for cursor.
+  </a:documentation>
+
+  <a:documentation>
+    Datatypes
+  </a:documentation>
+
+  <define name="CursorValue.datatype">
+    <data type="string"/>
+  </define>
+
+  <a:documentation>
+    SVG.Cursor.attrib
+  </a:documentation>
+
+  <define name="SVG.Cursor.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Cursor.attrib" combine="interleave">
+    <optional>
+      <attribute name="cursor">
+        <ref name="CursorValue.datatype"/>
+      </attribute>
+    </optional>
+    <ref name="SVG.Cursor.extra.attrib"/>
+  </define>
+
+  <a:documentation>
+    SVG.Cursor.class
+  </a:documentation>
+
+  <define name="SVG.Cursor.extra.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Cursor.class" combine="choice">
+    <choice>
+      <ref name="cursor"/>
+      <ref name="SVG.Cursor.extra.class"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    cursor: Cursor Element
+  </a:documentation>
+
+  <define name="SVG.cursor.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+  </define>
+
+  <define name="cursor">
+    <element name="cursor">
+      <ref name="attlist.cursor"/>
+      <ref name="SVG.cursor.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.cursor" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.XLinkRequired.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="x">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="y">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-datatypes.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-datatypes.rng
new file mode 100644
index 0000000..e838207
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-datatypes.rng
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Datatypes Module
+    file: svg-datatypes.mod
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-datatypes.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Datatypes
+
+    This module declares common data types for properties and attributes.
+  </a:documentation>
+
+  <a:documentation>
+    feature specification
+  </a:documentation>
+
+  <define name="Boolean.datatype">
+    <choice>
+      <value>false</value>
+      <value>true</value>
+    </choice>
+  </define>
+
+  <define name="ClipFillRule.datatype">
+    <a:documentation>
+      'clip-rule' or 'fill-rule' property/attribute value
+    </a:documentation>
+    <choice>
+      <value>nonzero</value>
+      <value>evenodd</value>
+      <value>inherit</value>
+    </choice>
+  </define>
+
+  <define name="SVGContentType.datatype">
+    <a:documentation>
+      media type, as per [RFC2045]
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+  <define name="Coordinate.datatype">
+    <a:documentation>
+      a <coordinate>
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+  <define name="Coordinates.datatype">
+    <a:documentation>
+      a list of <coordinate>s
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+  <define name="Color.datatype">
+    <a:documentation>
+      a <color> value
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+  <define name="Integer.datatype">
+    <a:documentation>
+      a <integer>
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+  <define name="SVGLanguageCode.datatype">
+    <a:documentation>
+      a language code, as per [RFC3066]
+    </a:documentation>
+    <data type="language"/>
+  </define>
+
+  <define name="LanguageCodes.datatype">
+    <a:documentation>
+      comma-separated list of language codes, as per [RFC3066]
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+  <define name="SVGLength.datatype">
+    <a:documentation>
+      a <ength>
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+  <define name="Lengths.datatype">
+    <a:documentation>
+      a list of <length>s
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+  <define name="SVGNumber.datatype">
+    <a:documentation>
+      a <number>
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+  <define name="Numbers.datatype">
+    <a:documentation>
+      a list of <number>s
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+
+  <define name="OpacityValue.datatype">
+    <a:documentation>
+      opacity value (e.g., <number>)
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+  <define name="PathData.datatype">
+    <a:documentation>
+      a path data specification
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+  <define name="PreserveAspectRatioSpec.datatype">
+    <a:documentation>
+      'preserveAspectRatio' attribute specification
+    </a:documentation>
+    <data type="string">
+      <!--
+      <param name="pattern">\s*(none|xMinYMin|xMidYMin|xMaxYMin|xMinYMid|xMidYMid|xMaxYMid|xMinYMax|xMidYMax|xMaxYMax)\s+(meet|slice)?\s*</param>
+        patch below as per http://code.google.com/p/epubcheck/issues/detail?id=126
+      -->
+      <!--
+      <param name="pattern">\s*(none|xMinYMin|xMidYMin|xMaxYMin|xMinYMid|xMidYMid|xMaxYMid|xMinYMax|xMidYMax|xMaxYMax)(\s+(meet|slice))?\s*</param>
+      patch below as per http://code.google.com/p/epubcheck/issues/detail?id=141
+      -->
+      <param name="pattern">\s*(none|xMinYMin|xMidYMin|xMaxYMin|xMinYMid|xMidYMid|xMaxYMid|xMinYMax|xMidYMax|xMaxYMax)(\s+meet|\s+slice)?\s*</param>
+    </data>
+  </define>
+
+  <define name="SVGScript.datatype">
+    <a:documentation>
+      script expression
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+  <define name="SVGColor.datatype">
+    <a:documentation>
+      An SVG color value (RGB plus optional ICC)
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+  <define name="SVGText.datatype">
+    <a:documentation>
+      arbitrary text string
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+  <define name="TransformList.datatype">
+    <a:documentation>
+      list of transforms
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+  <define name="SVGURI.datatype">
+    <a:documentation>
+      a Uniform Resource Identifier, see [URI]
+    </a:documentation>
+    <data type="anyURI"/>
+  </define>
+
+  <define name="ViewBoxSpec.datatype">
+    <a:documentation>
+      'viewBox' attribute specification
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-docevents-attrib.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-docevents-attrib.rng
new file mode 100644
index 0000000..8588d21
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-docevents-attrib.rng
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Document Events Attribute Module
+    file: svg-docevents-attrib.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-docevents-attrib.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Document Events Attribute
+
+        onunload, onabort, onerror, onresize, onscroll, onzoom
+
+    This module defines the DocumentEvents attribute set.
+  </a:documentation>
+
+  <define name="SVG.onunload.attrib">
+    <optional>
+      <attribute name="onunload">
+        <ref name="SVGScript.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.onabort.attrib">
+    <optional>
+      <attribute name="onabort">
+        <ref name="SVGScript.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.onerror.attrib">
+    <optional>
+      <attribute name="onerror">
+        <ref name="SVGScript.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.onresize.attrib">
+    <optional>
+      <attribute name="onresize">
+        <ref name="SVGScript.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.onscroll.attrib">
+    <optional>
+      <attribute name="onscroll">
+        <ref name="SVGScript.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.onzoom.attrib">
+    <optional>
+      <attribute name="onzoom">
+        <ref name="SVGScript.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.DocumentEvents.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.DocumentEvents.attrib" combine="interleave">
+    <ref name="SVG.onunload.attrib"/>
+    <ref name="SVG.onabort.attrib"/>
+    <ref name="SVG.onerror.attrib"/>
+    <ref name="SVG.onresize.attrib"/>
+    <ref name="SVG.onscroll.attrib"/>
+    <ref name="SVG.onzoom.attrib"/>
+    <ref name="SVG.DocumentEvents.extra.attrib"/>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-extensibility.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-extensibility.rng
new file mode 100644
index 0000000..396bc91
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-extensibility.rng
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Extensibility Module
+    file: svg-extensibility.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-extensibility.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+
+</a:documentation>
+
+  <a:documentation>
+    Extensibility
+
+        foreignObject
+
+    This module declares markup to provide support for extensibility.
+  </a:documentation>
+
+  <a:documentation>
+    SVG.Extensibility.class
+  </a:documentation>
+
+  <define name="SVG.Extensibility.extra.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Extensibility.class" combine="choice">
+    <choice>
+      <ref name="foreignObject"/>
+      <ref name="SVG.Extensibility.extra.class"/>
+    </choice>
+  </define>
+
+  <define name="SVG.ForeignObjectContent.class">
+	<ref name="svg"/>
+  </define>
+  
+  <a:documentation>
+    foreignObject: Foreign Object Element
+  </a:documentation>
+
+  <define name="SVG.foreignObject.content">
+    <zeroOrMore>
+<!--
+      <choice>
+        <text/>
+		<ref name="svg"/>
+		<ref name="foreignElement"/>
+      </choice>
+-->
+		<ref name="SVG.ForeignObjectContent.class"/>
+    </zeroOrMore>
+  </define>
+
+  <define name="foreignObject">
+    <element name="foreignObject">
+      <ref name="attlist.foreignObject"/>
+      <ref name="SVG.foreignObject.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.foreignObject" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Presentation.attrib"/>
+    <ref name="SVG.GraphicalEvents.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="x">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="y">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <attribute name="width">
+      <ref name="SVGLength.datatype"/>
+    </attribute>
+    <attribute name="height">
+      <ref name="SVGLength.datatype"/>
+    </attribute>
+    <optional>
+      <attribute name="transform">
+        <ref name="TransformList.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="foreignElement">
+    <a:documentation>
+      any element in foreign namespace
+    </a:documentation>
+    <element>
+      <anyName>
+        <except>
+          <nsName/>
+        </except>
+      </anyName>
+      <zeroOrMore>
+        <choice>
+          <attribute>
+            <anyName>
+              <except>
+                <nsName/>
+              </except>
+            </anyName>
+          </attribute>
+          <text/>
+          <ref name="foreignElement"/>
+        </choice>
+      </zeroOrMore>
+    </element>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-extresources-attrib.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-extresources-attrib.rng
new file mode 100644
index 0000000..c7698d2
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-extresources-attrib.rng
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 External Resources Attribute Module
+    file: svg-extresources-attrib.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-extresources-attrib.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    External Resources Attribute
+
+        externalResourcesRequired
+
+    This module defines the External attribute set.
+  </a:documentation>
+
+  <define name="SVG.externalResourcesRequired.attrib">
+    <optional>
+      <attribute name="externalResourcesRequired">
+        <ref name="Boolean.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.External.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.External.attrib" combine="interleave">
+    <ref name="SVG.externalResourcesRequired.attrib"/>
+    <ref name="SVG.External.extra.attrib"/>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-filter.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-filter.rng
new file mode 100644
index 0000000..2a4c400
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-filter.rng
@@ -0,0 +1,512 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Filter Module
+    file: svg-filter.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-filter.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Filter
+
+        filter, feBlend, feColorMatrix, feComponentTransfer, feComposite,
+        feConvolveMatrix, feDiffuseLighting, feDisplacementMap, feFlood,
+        feGaussianBlur, feImage, feMerge, feMergeNode, feMorphology, feOffset,
+        feSpecularLighting, feTile, feTurbulence, feDistantLight, fePointLight,
+        feSpotLight, feFuncR, feFuncG, feFuncB, feFuncA
+
+    This module declares markup to provide support for filter effect.
+  </a:documentation>
+
+  <include href="svg-basic-filter.rng"/>
+
+  <define name="SVG.FilterPrimitive.class" combine="choice">
+    <a:documentation>
+      extend SVG.FilterPrimitive.class
+    </a:documentation>
+    <choice>
+      <ref name="feConvolveMatrix"/>
+      <ref name="feDiffuseLighting"/>
+      <ref name="feDisplacementMap"/>
+      <ref name="feMorphology"/>
+      <ref name="feSpecularLighting"/>
+      <ref name="feTurbulence"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    feConvolveMatrix: Filter Effect Convolve Matrix Element
+  </a:documentation>
+
+  <define name="SVG.feConvolveMatrix.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="feConvolveMatrix">
+    <element name="feConvolveMatrix">
+      <ref name="attlist.feConvolveMatrix"/>
+      <ref name="SVG.feConvolveMatrix.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.feConvolveMatrix" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.FilterColor.attrib"/>
+    <ref name="SVG.FilterPrimitiveWithIn.attrib"/>
+    <attribute name="order">
+      <ref name="NumberOptionalNumber.datatype"/>
+    </attribute>
+    <attribute name="kernelMatrix"/>
+    <optional>
+      <attribute name="divisor">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="bias">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="targetX">
+        <ref name="Integer.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="targetY">
+        <ref name="Integer.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="edgeMode" a:defaultValue="duplicate">
+        <choice>
+          <value>duplicate</value>
+          <value>wrap</value>
+          <value>none</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="kernelUnitLength">
+        <ref name="NumberOptionalNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="preserveAlpha">
+        <ref name="Boolean.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    feDiffuseLighting: Filter Effect Diffuse Lighting Element
+  </a:documentation>
+
+  <define name="SVG.feDiffuseLighting.content">
+    <choice>
+      <ref name="feDistantLight"/>
+      <ref name="fePointLight"/>
+      <ref name="feSpotLight"/>
+    </choice>
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+        <ref name="animateColor"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="feDiffuseLighting">
+    <element name="feDiffuseLighting">
+      <ref name="attlist.feDiffuseLighting"/>
+      <ref name="SVG.feDiffuseLighting.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.feDiffuseLighting" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Color.attrib"/>
+    <ref name="SVG.FilterColor.attrib"/>
+    <ref name="SVG.FilterPrimitiveWithIn.attrib"/>
+    <optional>
+      <attribute name="lighting-color">
+        <ref name="SVGColor.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="surfaceScale">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="diffuseConstant">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="kernelUnitLength">
+        <ref name="NumberOptionalNumber.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    feDisplacementMap: Filter Effect Displacement Map Element
+  </a:documentation>
+
+  <define name="SVG.feDisplacementMap.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="feDisplacementMap">
+    <element name="feDisplacementMap">
+      <ref name="attlist.feDisplacementMap"/>
+      <ref name="SVG.feDisplacementMap.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.feDisplacementMap" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.FilterColor.attrib"/>
+    <ref name="SVG.FilterPrimitiveWithIn.attrib"/>
+    <attribute name="in2"/>
+    <optional>
+      <attribute name="scale">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="xChannelSelector" a:defaultValue="A">
+        <choice>
+          <value>R</value>
+          <value>G</value>
+          <value>B</value>
+          <value>A</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="yChannelSelector" a:defaultValue="A">
+        <choice>
+          <value>R</value>
+          <value>G</value>
+          <value>B</value>
+          <value>A</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    feMorphology: Filter Effect Morphology Element
+  </a:documentation>
+
+  <define name="SVG.feMorphology.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="feMorphology">
+    <element name="feMorphology">
+      <ref name="attlist.feMorphology"/>
+      <ref name="SVG.feMorphology.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.feMorphology" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.FilterColor.attrib"/>
+    <ref name="SVG.FilterPrimitiveWithIn.attrib"/>
+    <optional>
+      <attribute name="operator" a:defaultValue="erode">
+        <choice>
+          <value>erode</value>
+          <value>dilate</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="radius">
+        <ref name="NumberOptionalNumber.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    feSpecularLighting: Filter Effect Specular Lighting Element
+  </a:documentation>
+
+  <define name="SVG.feSpecularLighting.content">
+    <choice>
+      <ref name="feDistantLight"/>
+      <ref name="fePointLight"/>
+      <ref name="feSpotLight"/>
+    </choice>
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+        <ref name="animateColor"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="feSpecularLighting">
+    <element name="feSpecularLighting">
+      <ref name="attlist.feSpecularLighting"/>
+      <ref name="SVG.feSpecularLighting.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.feSpecularLighting" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Color.attrib"/>
+    <ref name="SVG.FilterColor.attrib"/>
+    <ref name="SVG.FilterPrimitiveWithIn.attrib"/>
+    <optional>
+      <attribute name="lighting-color">
+        <ref name="SVGColor.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="surfaceScale">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="specularConstant">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="specularExponent">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="kernelUnitLength">
+        <ref name="NumberOptionalNumber.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    feTurbulence: Filter Effect Turbulence Element
+  </a:documentation>
+
+  <define name="SVG.feTurbulence.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="feTurbulence">
+    <element name="feTurbulence">
+      <ref name="attlist.feTurbulence"/>
+      <ref name="SVG.feTurbulence.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.feTurbulence" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.FilterColor.attrib"/>
+    <ref name="SVG.FilterPrimitive.attrib"/>
+    <optional>
+      <attribute name="baseFrequency">
+        <ref name="NumberOptionalNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="numOctaves">
+        <ref name="Integer.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="seed">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="stitchTiles" a:defaultValue="noStitch">
+        <choice>
+          <value>stitch</value>
+          <value>noStitch</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="type" a:defaultValue="turbulence">
+        <choice>
+          <value>fractalNoise</value>
+          <value>turbulence</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    feDistantLight: Filter Effect Distant Light Element
+  </a:documentation>
+
+  <define name="SVG.feDistantLight.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="feDistantLight">
+    <element name="feDistantLight">
+      <ref name="attlist.feDistantLight"/>
+      <ref name="SVG.feDistantLight.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.feDistantLight" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <optional>
+      <attribute name="azimuth">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="elevation">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    fePointLight: Filter Effect Point Light Element
+  </a:documentation>
+
+  <define name="SVG.fePointLight.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="fePointLight">
+    <element name="fePointLight">
+      <ref name="attlist.fePointLight"/>
+      <ref name="SVG.fePointLight.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.fePointLight" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <optional>
+      <attribute name="x">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="y">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="z">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    feSpotLight: Filter Effect Spot Light Element
+  </a:documentation>
+
+  <define name="SVG.feSpotLight.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="feSpotLight">
+    <element name="feSpotLight">
+      <ref name="attlist.feSpotLight"/>
+      <ref name="SVG.feSpotLight.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.feSpotLight" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <optional>
+      <attribute name="x">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="y">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="z">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="pointsAtX">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="pointsAtY">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="pointsAtZ">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="specularExponent">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="limitingConeAngle">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-font.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-font.rng
new file mode 100644
index 0000000..3f9e355
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-font.rng
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Font Module
+    file: svg-font.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-font.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Font
+
+        font, font-face, glyph, missing-glyph, hkern, vkern, font-face-src,
+        font-face-uri, font-face-format, font-face-name, definition-src
+
+    This module declares markup to provide support for template.
+  </a:documentation>
+
+  <include href="svg-basic-font.rng"/>
+
+  <a:documentation>
+    font-face: Font Face Element
+  </a:documentation>
+
+  <define name="SVG.font-face.extra.class" combine="interleave">
+    <optional>
+      <ref name="definition-src"/>
+    </optional>
+  </define>
+
+  <a:documentation>
+    glyph: Glyph Element
+  </a:documentation>
+
+  <define name="SVG.glyph.class" combine="choice">
+    <choice>
+      <ref name="SVG.Animation.class"/>
+      <ref name="SVG.Structure.class"/>
+      <ref name="SVG.Conditional.class"/>
+      <ref name="SVG.Image.class"/>
+      <ref name="SVG.Style.class"/>
+      <ref name="SVG.Shape.class"/>
+      <ref name="SVG.Text.class"/>
+      <ref name="SVG.Marker.class"/>
+      <ref name="SVG.Profile.class"/>
+      <ref name="SVG.Gradient.class"/>
+      <ref name="SVG.Pattern.class"/>
+      <ref name="SVG.Clip.class"/>
+      <ref name="SVG.Mask.class"/>
+      <ref name="SVG.Filter.class"/>
+      <ref name="SVG.Cursor.class"/>
+      <ref name="SVG.Hyperlink.class"/>
+      <ref name="SVG.View.class"/>
+      <ref name="SVG.Script.class"/>
+      <ref name="SVG.Font.class"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    missing-glyph: Missing Glyph Element
+  </a:documentation>
+
+  <define name="SVG.missing-glyph.class" combine="choice">
+    <choice>
+      <ref name="SVG.Animation.class"/>
+      <ref name="SVG.Structure.class"/>
+      <ref name="SVG.Conditional.class"/>
+      <ref name="SVG.Image.class"/>
+      <ref name="SVG.Style.class"/>
+      <ref name="SVG.Shape.class"/>
+      <ref name="SVG.Text.class"/>
+      <ref name="SVG.Marker.class"/>
+      <ref name="SVG.Profile.class"/>
+      <ref name="SVG.Gradient.class"/>
+      <ref name="SVG.Pattern.class"/>
+      <ref name="SVG.Clip.class"/>
+      <ref name="SVG.Mask.class"/>
+      <ref name="SVG.Filter.class"/>
+      <ref name="SVG.Cursor.class"/>
+      <ref name="SVG.Hyperlink.class"/>
+      <ref name="SVG.View.class"/>
+      <ref name="SVG.Script.class"/>
+      <ref name="SVG.Font.class"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    font-face-uri: Font Face URI Element
+  </a:documentation>
+
+  <define name="SVG.font-face-uri.content" combine="choice">
+    <zeroOrMore>
+      <ref name="font-face-format"/>
+    </zeroOrMore>
+  </define>
+
+  <a:documentation>
+    font-face-format: Font Face Format Element
+  </a:documentation>
+
+  <define name="SVG.font-face-format.content">
+    <empty/>
+  </define>
+
+  <define name="font-face-format">
+    <element name="font-face-format">
+      <ref name="attlist.font-face-format"/>
+      <ref name="SVG.font-face-format.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.font-face-format" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <optional>
+      <attribute name="string"/>
+    </optional>
+  </define>
+
+  <a:documentation>
+    definition-src: Definition Source Element
+  </a:documentation>
+
+  <define name="SVG.definition-src.content">
+    <empty/>
+  </define>
+
+  <define name="definition-src">
+    <element name="definition-src">
+      <ref name="attlist.definition-src"/>
+      <ref name="SVG.definition-src.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.definition-src" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.XLinkRequired.attrib"/>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-gradient.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-gradient.rng
new file mode 100644
index 0000000..a7826e7
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-gradient.rng
@@ -0,0 +1,259 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Gradient Module
+    file: svg-gradient.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-gradient.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Gradient
+
+        linearGradient, radialGradient, stop
+
+    This module declares markup to provide support for gradient fill.
+  </a:documentation>
+
+  <a:documentation>
+    Datatypes
+  </a:documentation>
+
+  <define name="NumberOrPercentage.datatype">
+    <data type="string"/>
+  </define>
+
+  <a:documentation>
+    SVG.Gradient.attrib
+  </a:documentation>
+
+  <define name="SVG.Gradient.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Gradient.attrib" combine="interleave">
+    <optional>
+      <attribute name="stop-color">
+        <ref name="SVGColor.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="stop-opacity">
+        <ref name="OpacityValue.datatype"/>
+      </attribute>
+    </optional>
+    <ref name="SVG.Gradient.extra.attrib"/>
+  </define>
+
+  <a:documentation>
+    SVG.Gradient.class
+  </a:documentation>
+
+  <define name="SVG.Gradient.extra.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Gradient.class" combine="choice">
+    <choice>
+      <ref name="linearGradient"/>
+      <ref name="radialGradient"/>
+      <ref name="SVG.Gradient.extra.class"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    linearGradient: Linear Gradient Element
+  </a:documentation>
+
+  <define name="SVG.linearGradient.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+    <zeroOrMore>
+      <choice>
+        <ref name="stop"/>
+        <ref name="animate"/>
+        <ref name="set"/>
+        <ref name="animateTransform"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="linearGradient">
+    <element name="linearGradient">
+      <ref name="attlist.linearGradient"/>
+      <ref name="SVG.linearGradient.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.linearGradient" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Color.attrib"/>
+    <ref name="SVG.Gradient.attrib"/>
+    <ref name="SVG.XLink.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="x1">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="y1">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="x2">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="y2">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="gradientUnits">
+        <choice>
+          <value>userSpaceOnUse</value>
+          <value>objectBoundingBox</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="gradientTransform">
+        <ref name="TransformList.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="spreadMethod">
+        <choice>
+          <value>pad</value>
+          <value>reflect</value>
+          <value>repeat</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    radialGradient: Radial Gradient Element
+  </a:documentation>
+
+  <define name="SVG.radialGradient.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+    <zeroOrMore>
+      <choice>
+        <ref name="stop"/>
+        <ref name="animate"/>
+        <ref name="set"/>
+        <ref name="animateTransform"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="radialGradient">
+    <element name="radialGradient">
+      <ref name="attlist.radialGradient"/>
+      <ref name="SVG.radialGradient.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.radialGradient" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Color.attrib"/>
+    <ref name="SVG.Gradient.attrib"/>
+    <ref name="SVG.XLink.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="cx">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="cy">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="r">
+        <ref name="SVGLength.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="fx">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="fy">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="gradientUnits">
+        <choice>
+          <value>userSpaceOnUse</value>
+          <value>objectBoundingBox</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="gradientTransform">
+        <ref name="TransformList.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="spreadMethod">
+        <choice>
+          <value>pad</value>
+          <value>reflect</value>
+          <value>repeat</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    stop: Stop Element
+  </a:documentation>
+
+  <define name="SVG.stop.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+        <ref name="animateColor"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="stop">
+    <element name="stop">
+      <ref name="attlist.stop"/>
+      <ref name="SVG.stop.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.stop" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Color.attrib"/>
+    <ref name="SVG.Gradient.attrib"/>
+    <attribute name="offset">
+      <ref name="NumberOrPercentage.datatype"/>
+    </attribute>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-graphevents-attrib.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-graphevents-attrib.rng
new file mode 100644
index 0000000..8daecef
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-graphevents-attrib.rng
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Graphical Element Events Attribute Module
+    file: svg-graphevents-attrib.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-graphevents-attrib.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Graphical Element Events Attribute
+
+        onfocusin, onfocusout, onactivate, onclick, onmousedown, onmouseup,
+        onmouseover, onmousemove, onmouseout, onload
+
+    This module defines the GraphicalEvents attribute set.
+  </a:documentation>
+
+  <define name="SVG.onfocusin.attrib">
+    <optional>
+      <attribute name="onfocusin">
+        <ref name="SVGScript.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.onfocusout.attrib">
+    <optional>
+      <attribute name="onfocusout">
+        <ref name="SVGScript.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.onactivate.attrib">
+    <optional>
+      <attribute name="onactivate">
+        <ref name="SVGScript.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.onclick.attrib">
+    <optional>
+      <attribute name="onclick">
+        <ref name="SVGScript.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.onmousedown.attrib">
+    <optional>
+      <attribute name="onmousedown">
+        <ref name="SVGScript.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.onmouseup.attrib">
+    <optional>
+      <attribute name="onmouseup">
+        <ref name="SVGScript.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.onmouseover.attrib">
+    <optional>
+      <attribute name="onmouseover">
+        <ref name="SVGScript.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.onmousemove.attrib">
+    <optional>
+      <attribute name="onmousemove">
+        <ref name="SVGScript.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.onmouseout.attrib">
+    <optional>
+      <attribute name="onmouseout">
+        <ref name="SVGScript.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.onload.attrib" combine="interleave">
+    <optional>
+      <attribute name="onload">
+        <ref name="SVGScript.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.GraphicalEvents.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.GraphicalEvents.attrib" combine="interleave">
+    <ref name="SVG.onfocusin.attrib"/>
+    <ref name="SVG.onfocusout.attrib"/>
+    <ref name="SVG.onactivate.attrib"/>
+    <ref name="SVG.onclick.attrib"/>
+    <ref name="SVG.onmousedown.attrib"/>
+    <ref name="SVG.onmouseup.attrib"/>
+    <ref name="SVG.onmouseover.attrib"/>
+    <ref name="SVG.onmousemove.attrib"/>
+    <ref name="SVG.onmouseout.attrib"/>
+    <ref name="SVG.onload.attrib"/>
+    <ref name="SVG.GraphicalEvents.extra.attrib"/>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-graphics-attrib.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-graphics-attrib.rng
new file mode 100644
index 0000000..2ce97ea
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-graphics-attrib.rng
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Graphics Attribute Module
+    file: svg-graphics-attrib.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-graphics-attrib.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Graphics Attribute
+
+        display, image-rendering, pointer-events, shape-rendering,
+        text-rendering, visibility
+
+    This module defines the Graphics attribute set.
+  </a:documentation>
+
+  <include href="svg-basic-graphics-attrib.rng"/>
+
+  <define name="SVG.image-rendering.attrib">
+    <optional>
+      <attribute name="image-rendering">
+        <choice>
+          <value>auto</value>
+          <value>optimizeSpeed</value>
+          <value>optimizeQuality</value>
+          <value>inherit</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.pointer-events.attrib">
+    <optional>
+      <attribute name="pointer-events">
+        <choice>
+          <value>visiblePainted</value>
+          <value>visibleFill</value>
+          <value>visibleStroke</value>
+          <value>visible</value>
+          <value>painted</value>
+          <value>fill</value>
+          <value>stroke</value>
+          <value>all</value>
+          <value>none</value>
+          <value>inherit</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.shape-rendering.attrib">
+    <optional>
+      <attribute name="shape-rendering">
+        <choice>
+          <value>auto</value>
+          <value>optimizeSpeed</value>
+          <value>crispEdges</value>
+          <value>geometricPrecision</value>
+          <value>inherit</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.text-rendering.attrib">
+    <optional>
+      <attribute name="text-rendering">
+        <choice>
+          <value>auto</value>
+          <value>optimizeSpeed</value>
+          <value>optimizeLegibility</value>
+          <value>geometricPrecision</value>
+          <value>inherit</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.Graphics.attrib" combine="interleave">
+    <ref name="SVG.image-rendering.attrib"/>
+    <ref name="SVG.pointer-events.attrib"/>
+    <ref name="SVG.shape-rendering.attrib"/>
+    <ref name="SVG.text-rendering.attrib"/>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-hyperlink.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-hyperlink.rng
new file mode 100644
index 0000000..bc7d67c
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-hyperlink.rng
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Hyperlinking Module
+    file: svg-hyperlink.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-hyperlink.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Hyperlinking
+
+        a
+
+    This module declares markup to provide support for hyper linking.
+  </a:documentation>
+
+  <define name="LinkTarget.datatype">
+    <a:documentation>
+      link to this target
+    </a:documentation>
+    <data type="NMTOKEN"/>
+  </define>
+
+  <a:documentation>
+    SVG.Hyperlink.class
+  </a:documentation>
+
+  <define name="SVG.Hyperlink.extra.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Hyperlink.class" combine="choice">
+    <choice>
+      <ref name="SVG.a"/>
+      <ref name="SVG.Hyperlink.extra.class"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    a: Anchor Element
+  </a:documentation>
+
+  <define name="SVG.a.content">
+    <zeroOrMore>
+      <choice>
+        <text/>
+        <ref name="SVG.Description.class"/>
+        <ref name="SVG.Animation.class"/>
+        <ref name="SVG.Structure.class"/>
+        <ref name="SVG.Conditional.class"/>
+        <ref name="SVG.Image.class"/>
+        <ref name="SVG.Style.class"/>
+        <ref name="SVG.Shape.class"/>
+        <ref name="SVG.Text.class"/>
+        <ref name="SVG.Marker.class"/>
+        <ref name="SVG.Profile.class"/>
+        <ref name="SVG.Gradient.class"/>
+        <ref name="SVG.Pattern.class"/>
+        <ref name="SVG.Clip.class"/>
+        <ref name="SVG.Mask.class"/>
+        <ref name="SVG.Filter.class"/>
+        <ref name="SVG.Cursor.class"/>
+        <ref name="SVG.Hyperlink.class"/>
+        <ref name="SVG.View.class"/>
+        <ref name="SVG.Script.class"/>
+        <ref name="SVG.Font.class"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="SVG.a">
+    <element name="a">
+      <ref name="attlist.a"/>
+      <ref name="SVG.a.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.a" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Presentation.attrib"/>
+    <ref name="SVG.GraphicalEvents.attrib"/>
+    <ref name="SVG.XLinkReplace.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="transform">
+        <ref name="TransformList.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="target">
+        <ref name="LinkTarget.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-image.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-image.rng
new file mode 100644
index 0000000..011312e
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-image.rng
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Image Module
+    file: svg-image.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-image.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Image
+
+        image
+
+    This module declares markup to provide support for image.
+  </a:documentation>
+
+  <a:documentation>
+    SVG.Image.class
+  </a:documentation>
+
+  <define name="SVG.Image.extra.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Image.class" combine="choice">
+    <choice>
+      <ref name="image"/>
+      <ref name="SVG.Image.extra.class"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    image: Image Element
+  </a:documentation>
+
+  <define name="SVG.image.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+    <zeroOrMore>
+      <ref name="SVG.Animation.class"/>
+    </zeroOrMore>
+  </define>
+
+  <define name="image">
+    <element name="image">
+      <ref name="attlist.image"/>
+      <ref name="SVG.image.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.image" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Viewport.attrib"/>
+    <ref name="SVG.Color.attrib"/>
+    <ref name="SVG.Opacity.attrib"/>
+    <ref name="SVG.Graphics.attrib"/>
+    <ref name="SVG.Profile.attrib"/>
+    <ref name="SVG.Clip.attrib"/>
+    <ref name="SVG.Mask.attrib"/>
+    <ref name="SVG.Filter.attrib"/>
+    <ref name="SVG.GraphicalEvents.attrib"/>
+    <ref name="SVG.Cursor.attrib"/>
+    <ref name="SVG.XLinkEmbed.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="x">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="y">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <attribute name="width">
+      <ref name="SVGLength.datatype"/>
+    </attribute>
+    <attribute name="height">
+      <ref name="SVGLength.datatype"/>
+    </attribute>
+    <optional>
+      <attribute name="preserveAspectRatio" a:defaultValue="xMidYMid meet">
+        <ref name="PreserveAspectRatioSpec.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="transform">
+        <ref name="TransformList.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-marker.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-marker.rng
new file mode 100644
index 0000000..beaad1c
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-marker.rng
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Marker Module
+    file: svg-marker.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-marker.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Marker
+
+        marker
+
+    This module declares markup to provide support for marker.
+  </a:documentation>
+
+  <a:documentation>
+    Datatypes
+  </a:documentation>
+
+  <define name="MarkerValue.datatype">
+    <data type="string"/>
+  </define>
+
+  <a:documentation>
+    SVG.Marker.attrib
+  </a:documentation>
+
+  <define name="SVG.Marker.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Marker.attrib" combine="interleave">
+    <optional>
+      <attribute name="marker-start">
+        <ref name="MarkerValue.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="marker-mid">
+        <ref name="MarkerValue.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="marker-end">
+        <ref name="MarkerValue.datatype"/>
+      </attribute>
+    </optional>
+    <ref name="SVG.Marker.extra.attrib"/>
+  </define>
+
+  <a:documentation>
+    SVG.Marker.class
+  </a:documentation>
+
+  <define name="SVG.Marker.extra.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Marker.class" combine="choice">
+    <choice>
+      <ref name="marker"/>
+      <ref name="SVG.Marker.extra.class"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    marker: Marker Element
+  </a:documentation>
+
+  <define name="SVG.marker.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="SVG.Description.class"/>
+        <ref name="SVG.Animation.class"/>
+        <ref name="SVG.Structure.class"/>
+        <ref name="SVG.Conditional.class"/>
+        <ref name="SVG.Image.class"/>
+        <ref name="SVG.Style.class"/>
+        <ref name="SVG.Shape.class"/>
+        <ref name="SVG.Text.class"/>
+        <ref name="SVG.Marker.class"/>
+        <ref name="SVG.Profile.class"/>
+        <ref name="SVG.Gradient.class"/>
+        <ref name="SVG.Pattern.class"/>
+        <ref name="SVG.Clip.class"/>
+        <ref name="SVG.Mask.class"/>
+        <ref name="SVG.Filter.class"/>
+        <ref name="SVG.Cursor.class"/>
+        <ref name="SVG.Hyperlink.class"/>
+        <ref name="SVG.View.class"/>
+        <ref name="SVG.Script.class"/>
+        <ref name="SVG.Font.class"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="marker">
+    <element name="marker">
+      <ref name="attlist.marker"/>
+      <ref name="SVG.marker.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.marker" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Presentation.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="refX">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="refY">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="markerUnits">
+        <choice>
+          <value>strokeWidth</value>
+          <value>userSpaceOnUse</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="markerWidth">
+        <ref name="SVGLength.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="markerHeight">
+        <ref name="SVGLength.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="orient"/>
+    </optional>
+    <optional>
+      <attribute name="viewBox">
+        <ref name="ViewBoxSpec.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="preserveAspectRatio" a:defaultValue="xMidYMid meet">
+        <ref name="PreserveAspectRatioSpec.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-mask.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-mask.rng
new file mode 100644
index 0000000..3071b91
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-mask.rng
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Mask Module
+    file: svg-mask.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-mask.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Mask
+
+        mask
+
+    This module declares markup to provide support for masking.
+  </a:documentation>
+
+
+  <a:documentation>
+    Datatypes
+  </a:documentation>
+
+  <define name="MaskValue.datatype">
+    <data type="string"/>
+  </define>
+
+  <a:documentation>
+    SVG.Mask.attrib
+  </a:documentation>
+
+  <define name="SVG.Mask.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Mask.attrib" combine="interleave">
+    <optional>
+      <attribute name="mask">
+        <ref name="MaskValue.datatype"/>
+      </attribute>
+    </optional>
+    <ref name="SVG.Mask.extra.attrib"/>
+  </define>
+
+  <a:documentation>
+    SVG.Mask.class
+  </a:documentation>
+
+  <define name="SVG.Mask.extra.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Mask.class" combine="choice">
+    <choice>
+      <ref name="mask"/>
+      <ref name="SVG.Mask.extra.class"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    mask: Mask Element
+  </a:documentation>
+
+  <define name="SVG.mask.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="SVG.Description.class"/>
+        <ref name="SVG.Animation.class"/>
+        <ref name="SVG.Structure.class"/>
+        <ref name="SVG.Conditional.class"/>
+        <ref name="SVG.Image.class"/>
+        <ref name="SVG.Style.class"/>
+        <ref name="SVG.Shape.class"/>
+        <ref name="SVG.Text.class"/>
+        <ref name="SVG.Marker.class"/>
+        <ref name="SVG.Profile.class"/>
+        <ref name="SVG.Gradient.class"/>
+        <ref name="SVG.Pattern.class"/>
+        <ref name="SVG.Clip.class"/>
+        <ref name="SVG.Mask.class"/>
+        <ref name="SVG.Filter.class"/>
+        <ref name="SVG.Cursor.class"/>
+        <ref name="SVG.Hyperlink.class"/>
+        <ref name="SVG.View.class"/>
+        <ref name="SVG.Script.class"/>
+        <ref name="SVG.Font.class"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="mask">
+    <element name="mask">
+      <ref name="attlist.mask"/>
+      <ref name="SVG.mask.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.mask" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Presentation.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="x">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="y">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="width">
+        <ref name="SVGLength.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="height">
+        <ref name="SVGLength.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="maskUnits">
+        <choice>
+          <value>userSpaceOnUse</value>
+          <value>objectBoundingBox</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="maskContentUnits">
+        <choice>
+          <value>userSpaceOnUse</value>
+          <value>objectBoundingBox</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-opacity-attrib.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-opacity-attrib.rng
new file mode 100644
index 0000000..50e0c15
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-opacity-attrib.rng
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Paint Opacity Attribute Module
+    file: svg-opacity-attrib.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-opacity-attrib.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Paint Opacity Attribute
+
+        opacity, fill-opacity, stroke-opacity
+
+    This module defines the Opacity attribute set.
+  </a:documentation>
+
+  <define name="SVG.opacity.attrib">
+    <optional>
+      <attribute name="opacity">
+        <ref name="OpacityValue.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.fill-opacity.attrib">
+    <optional>
+      <attribute name="fill-opacity">
+        <ref name="OpacityValue.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.stroke-opacity.attrib">
+    <optional>
+      <attribute name="stroke-opacity">
+        <ref name="OpacityValue.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.Opacity.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Opacity.attrib" combine="interleave">
+    <ref name="SVG.opacity.attrib"/>
+    <ref name="SVG.fill-opacity.attrib"/>
+    <ref name="SVG.stroke-opacity.attrib"/>
+    <ref name="SVG.Opacity.extra.attrib"/>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-paint-attrib.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-paint-attrib.rng
new file mode 100644
index 0000000..ec7dbd6
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-paint-attrib.rng
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Paint Attribute Module
+    file: svg-paint-attrib.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-paint-attrib.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Paint Attribute
+
+        fill, fill-rule, stroke, stroke-dasharray, stroke-dashoffset,
+        stroke-linecap, stroke-linejoin, stroke-miterlimit, stroke-width, color,
+        color-interpolation, color-rendering
+
+    This module defines the Paint and Color attribute sets.
+  </a:documentation>
+
+  <define name="Paint.datatype">
+    <a:documentation>
+      a 'fill' or 'stroke' property/attribute value: <paint>
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+  <define name="StrokeDashArrayValue.datatype">
+    <a:documentation>
+      'stroke-dasharray' property/attribute value
+      (e.g., 'none', list of <number>s)
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+  <define name="StrokeDashOffsetValue.datatype">
+    <a:documentation>
+      'stroke-dashoffset' property/attribute value (e.g., 'none', <legnth>)
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+  <define name="StrokeMiterLimitValue.datatype">
+    <a:documentation>
+      'stroke-miterlimit' property/attribute value (e.g., <number>)
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+  <define name="StrokeWidthValue.datatype">
+    <a:documentation>
+      'stroke-width' property/attribute value (e.g., <length>)
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+  <define name="SVG.fill.attrib">
+    <optional>
+      <attribute name="fill">
+        <ref name="Paint.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.fill-rule.attrib">
+    <optional>
+      <attribute name="fill-rule">
+        <ref name="ClipFillRule.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.stroke.attrib">
+    <optional>
+      <attribute name="stroke">
+        <ref name="Paint.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.stroke-dasharray.attrib">
+    <optional>
+      <attribute name="stroke-dasharray">
+        <ref name="StrokeDashArrayValue.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.stroke-dashoffset.attrib">
+    <optional>
+      <attribute name="stroke-dashoffset">
+        <ref name="StrokeDashOffsetValue.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.stroke-linecap.attrib">
+    <optional>
+      <attribute name="stroke-linecap">
+        <choice>
+          <value>butt</value>
+          <value>round</value>
+          <value>square</value>
+          <value>inherit</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.stroke-linejoin.attrib">
+    <optional>
+      <attribute name="stroke-linejoin">
+        <choice>
+          <value>miter</value>
+          <value>round</value>
+          <value>bevel</value>
+          <value>inherit</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.stroke-miterlimit.attrib">
+    <optional>
+      <attribute name="stroke-miterlimit">
+        <ref name="StrokeMiterLimitValue.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.stroke-width.attrib">
+    <optional>
+      <attribute name="stroke-width">
+        <ref name="StrokeWidthValue.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.Paint.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Paint.attrib" combine="interleave">
+    <ref name="SVG.fill.attrib"/>
+    <ref name="SVG.fill-rule.attrib"/>
+    <ref name="SVG.stroke.attrib"/>
+    <ref name="SVG.stroke-dasharray.attrib"/>
+    <ref name="SVG.stroke-dashoffset.attrib"/>
+    <ref name="SVG.stroke-linecap.attrib"/>
+    <ref name="SVG.stroke-linejoin.attrib"/>
+    <ref name="SVG.stroke-miterlimit.attrib"/>
+    <ref name="SVG.stroke-width.attrib"/>
+    <ref name="SVG.Paint.extra.attrib"/>
+  </define>
+
+  <define name="SVG.color.attrib">
+    <optional>
+      <attribute name="color">
+        <ref name="Color.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.color-interpolation.attrib">
+    <optional>
+      <attribute name="color-interpolation">
+        <choice>
+          <value>auto</value>
+          <value>sRGB</value>
+          <value>linearRGB</value>
+          <value>inherit</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.color-rendering.attrib">
+    <optional>
+      <attribute name="color-rendering">
+        <choice>
+          <value>auto</value>
+          <value>optimizeSpeed</value>
+          <value>optimizeQuality</value>
+          <value>inherit</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.Color.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Color.attrib" combine="interleave">
+    <ref name="SVG.color.attrib"/>
+    <ref name="SVG.color-interpolation.attrib"/>
+    <ref name="SVG.color-rendering.attrib"/>
+    <ref name="SVG.Color.extra.attrib"/>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-pattern.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-pattern.rng
new file mode 100644
index 0000000..07a17b1
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-pattern.rng
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Pattern Module
+    file: svg-pattern.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-pattern.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+   Pattern
+
+        pattern
+
+    This module declares markup to provide support for pattern fill.
+  </a:documentation>
+
+  <a:documentation>
+    SVG.Pattern.class
+  </a:documentation>
+
+  <define name="SVG.Pattern.extra.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Pattern.class" combine="choice">
+    <choice>
+      <ref name="pattern"/>
+      <ref name="SVG.Pattern.extra.class"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    pattern: Pattern Element
+  </a:documentation>
+
+  <define name="SVG.pattern.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="SVG.Description.class"/>
+        <ref name="SVG.Animation.class"/>
+        <ref name="SVG.Structure.class"/>
+        <ref name="SVG.Conditional.class"/>
+        <ref name="SVG.Image.class"/>
+        <ref name="SVG.Style.class"/>
+        <ref name="SVG.Shape.class"/>
+        <ref name="SVG.Text.class"/>
+        <ref name="SVG.Marker.class"/>
+        <ref name="SVG.Profile.class"/>
+        <ref name="SVG.Gradient.class"/>
+        <ref name="SVG.Pattern.class"/>
+        <ref name="SVG.Clip.class"/>
+        <ref name="SVG.Mask.class"/>
+        <ref name="SVG.Filter.class"/>
+        <ref name="SVG.Cursor.class"/>
+        <ref name="SVG.Hyperlink.class"/>
+        <ref name="SVG.View.class"/>
+        <ref name="SVG.Script.class"/>
+        <ref name="SVG.Font.class"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="pattern">
+    <element name="pattern">
+      <ref name="attlist.pattern"/>
+      <ref name="SVG.pattern.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.pattern" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Presentation.attrib"/>
+    <ref name="SVG.XLink.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="x">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="y">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="width">
+        <ref name="SVGLength.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="height">
+        <ref name="SVGLength.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="patternUnits">
+        <choice>
+          <value>userSpaceOnUse</value>
+          <value>objectBoundingBox</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="patternContentUnits">
+        <choice>
+          <value>userSpaceOnUse</value>
+          <value>objectBoundingBox</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="patternTransform">
+        <ref name="TransformList.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="viewBox">
+        <ref name="ViewBoxSpec.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="preserveAspectRatio" a:defaultValue="xMidYMid meet">
+        <ref name="PreserveAspectRatioSpec.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-profile.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-profile.rng
new file mode 100644
index 0000000..feb0104
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-profile.rng
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Color Profile Module
+    file: svg-profile.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-profile.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Color Profile
+
+        color-profile
+
+    This module declares markup to provide support for color profile.
+  </a:documentation>
+
+  <a:documentation>
+    SVG.Profile.attrib
+  </a:documentation>
+
+  <define name="SVG.Profile.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Profile.attrib" combine="interleave">
+    <optional>
+      <attribute name="color-profile"/>
+    </optional>
+    <ref name="SVG.Profile.extra.attrib"/>
+  </define>
+
+  <a:documentation>
+    SVG.Profile.class
+  </a:documentation>
+
+  <define name="SVG.Profile.extra.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Profile.class" combine="choice">
+    <choice>
+      <ref name="color-profile"/>
+      <ref name="SVG.Profile.extra.class"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    color-profile: Color Profile Element
+  </a:documentation>
+
+  <define name="SVG.color-profile.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+  </define>
+
+  <define name="color-profile">
+    <element name="color-profile">
+      <ref name="attlist.color-profile"/>
+      <ref name="SVG.color-profile.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.color-profile" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.XLink.attrib"/>
+    <optional>
+      <attribute name="local"/>
+    </optional>
+    <attribute name="name"/>
+    <optional>
+      <attribute name="rendering-intent" a:defaultValue="auto">
+        <choice>
+          <value>auto</value>
+          <value>perceptual</value>
+          <value>relative-colorimetric</value>
+          <value>saturation</value>
+          <value>absolute-colorimetric</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-qname.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-qname.rng
new file mode 100644
index 0000000..e4a9e19
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-qname.rng
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" xmlns="http://relaxng.org/ns/structure/1.0" xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns:xlink="http://www.w3.org/1999/xlink" ns="http://www.w3.org/2000/svg">
+<!-- ....................................................................... -->
+<!-- SVG 1.1 Qualified Name Module ......................................... -->
+<!-- file: svg-qname.mod
+
+     This is SVG, a language for describing two-dimensional graphics in XML.
+     Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+     Revision: $Id: svg-qname.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//ENTITIES SVG 1.1 Qualified Name//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-qname.mod"
+
+     ....................................................................... -->
+<!-- Qualified Name
+
+     This module is contained in two parts, labeled Section 'A' and 'B':
+
+        Section A declares parameter entities to support namespace-
+        qualified names, namespace declarations, and name prefixing
+        for SVG and extensions.
+
+        Section B declares parameter entities used to provide
+        namespace-qualified names for all SVG element types:
+-->
+<!-- Section A: SVG XML Namespace Framework :::::::::::::::::::::: -->
+<!-- 1. Declare a %SVG.prefixed; conditional section keyword, used
+        to activate namespace prefixing. The default value should
+        inherit '%NS.prefixed;' from the DTD driver, so that unless
+        overridden, the default behaviour follows the overall DTD
+        prefixing scheme.
+-->
+<!-- 2. Declare a parameter entity (eg., %SVG.xmlns;) containing
+        the URI reference used to identify the SVG namespace:
+-->
+<!-- 3. Declare parameter entities (eg., %SVG.prefix;) containing
+        the default namespace prefix string(s) to use when prefixing
+        is enabled. This may be overridden in the DTD driver or the
+        internal subset of an document instance. If no default prefix
+        is desired, this may be declared as an empty string.
+-->
+<!-- 4. Declare parameter entities (eg., %SVG.pfx;) containing the
+        colonized prefix(es) (eg., '%SVG.prefix;:') used when
+        prefixing is active, an empty string when it is not.
+-->
+<!-- 5. The parameter entity %SVG.xmlns.extra.attrib; may be
+        redeclared to contain any non-SVG namespace declaration
+        attributes for namespaces embedded in SVG. The default
+        is an empty string.
+-->
+<!-- Declare a parameter entity XLINK.xmlns.attrib containing
+     the XML Namespace declarations for XLink.
+-->
+  <define name="XLINK.xmlns.attrib">
+    <empty/>
+  </define>
+<!-- Declare a parameter entity %NS.decl.attrib; containing
+     all XML Namespace declarations used in the DTD, plus the
+     xmlns declaration for SVG, its form dependent on whether
+     prefixing is active.
+-->
+<!-- Declare a parameter entity %SVG.xmlns.attrib; containing
+     all XML namespace declaration attributes used by SVG,
+     including a default xmlns attribute when prefixing is
+     inactive.
+-->
+  <define name="SVG.xmlns.attrib">
+    <empty/>
+    <ref name="XLINK.xmlns.attrib"/>
+  </define>
+<!-- Section B: SVG Qualified Names :::::::::::::::::::::::::::::: -->
+<!-- 6. This section declares parameter entities used to provide
+        namespace-qualified names for all SVG element types.
+-->
+<!-- module: svg-structure.mod ......................... -->
+<!-- module: svg-conditional.mod ....................... -->
+<!-- module: svg-image.mod ............................. -->
+<!-- module: svg-style.mod ............................. -->
+<!-- module: svg-shape.mod ............................. -->
+<!-- module: svg-text.mod .............................. -->
+<!-- module: svg-marker.mod ............................ -->
+<!-- module: svg-profile.mod ........................... -->
+<!-- module: svg-gradient.mod .......................... -->
+<!-- module: svg-pattern.mod ........................... -->
+<!-- module: svg-clip.mod .............................. -->
+<!-- module: svg-mask.mod .............................. -->
+<!-- module: svg-filter.mod ............................ -->
+<!-- module: svg-cursor.mod ............................ -->
+<!-- module: svg-hyperlink.mod ......................... -->
+<!-- module: svg-view.mod .............................. -->
+<!-- module: svg-script.mod ............................ -->
+<!-- module: svg-animation.mod ......................... -->
+<!-- module: svg-font.mod .............................. -->
+<!-- module: svg-extensibility.mod ..................... -->
+<!-- end of svg-qname.mod -->
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-script.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-script.rng
new file mode 100644
index 0000000..6427ffc
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-script.rng
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Scripting Module
+    file: svg-script.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-script.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Scripting
+
+        script
+
+    This module declares markup to provide support for scripting.
+  </a:documentation>
+
+  <a:documentation>
+    SVG.Script.class
+  </a:documentation>
+
+  <define name="SVG.Script.extra.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Script.class" combine="choice">
+    <choice>
+      <ref name="SVG.script"/>
+      <ref name="SVG.Script.extra.class"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    script: Script Element
+  </a:documentation>
+
+  <define name="SVG.script.content">
+    <text/>
+  </define>
+
+  <define name="SVG.script">
+    <element name="script">
+      <ref name="attlist.script"/>
+      <ref name="SVG.script.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.script" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.XLink.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <attribute name="type">
+      <ref name="SVGContentType.datatype"/>
+    </attribute>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-shape.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-shape.rng
new file mode 100644
index 0000000..bdc8683
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-shape.rng
@@ -0,0 +1,433 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Shape Module
+    file: svg-shape.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-shape.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Shape
+
+        path, rect, circle, line, ellipse, polyline, polygon
+
+    This module declares markup to provide support for graphical shapes.
+  </a:documentation>
+
+  <define name="Points.datatype">
+    <a:documentation>
+      a list of points
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+  <a:documentation>
+    SVG.Shape.class
+  </a:documentation>
+
+  <define name="SVG.Shape.extra.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Shape.class" combine="choice">
+    <choice>
+      <ref name="path"/>
+      <ref name="rect"/>
+      <ref name="circle"/>
+      <ref name="line"/>
+      <ref name="ellipse"/>
+      <ref name="polyline"/>
+      <ref name="polygon"/>
+      <ref name="SVG.Shape.extra.class"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    path: Path Element
+  </a:documentation>
+
+  <define name="SVG.path.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+    <zeroOrMore>
+      <ref name="SVG.Animation.class"/>
+    </zeroOrMore>
+  </define>
+
+  <define name="path">
+    <element name="path">
+      <ref name="attlist.path"/>
+      <ref name="SVG.path.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.path" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Paint.attrib"/>
+    <ref name="SVG.Color.attrib"/>
+    <ref name="SVG.Opacity.attrib"/>
+    <ref name="SVG.Graphics.attrib"/>
+    <ref name="SVG.Marker.attrib"/>
+    <ref name="SVG.Clip.attrib"/>
+    <ref name="SVG.Mask.attrib"/>
+    <ref name="SVG.Filter.attrib"/>
+    <ref name="SVG.GraphicalEvents.attrib"/>
+    <ref name="SVG.Cursor.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <attribute name="d">
+      <ref name="PathData.datatype"/>
+    </attribute>
+    <optional>
+      <attribute name="pathLength">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="transform">
+        <ref name="TransformList.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    rect: Rectangle Element
+  </a:documentation>
+
+  <define name="SVG.rect.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+    <zeroOrMore>
+      <ref name="SVG.Animation.class"/>
+    </zeroOrMore>
+  </define>
+
+  <define name="rect">
+    <element name="rect">
+      <ref name="attlist.rect"/>
+      <ref name="SVG.rect.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.rect" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Paint.attrib"/>
+    <ref name="SVG.Color.attrib"/>
+    <ref name="SVG.Opacity.attrib"/>
+    <ref name="SVG.Graphics.attrib"/>
+    <ref name="SVG.Clip.attrib"/>
+    <ref name="SVG.Mask.attrib"/>
+    <ref name="SVG.Filter.attrib"/>
+    <ref name="SVG.GraphicalEvents.attrib"/>
+    <ref name="SVG.Cursor.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="x">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="y">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <attribute name="width">
+      <ref name="SVGLength.datatype"/>
+    </attribute>
+    <attribute name="height">
+      <ref name="SVGLength.datatype"/>
+    </attribute>
+    <optional>
+      <attribute name="rx">
+        <ref name="SVGLength.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="ry">
+        <ref name="SVGLength.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="transform">
+        <ref name="TransformList.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    circle: Circle Element
+  </a:documentation>
+
+  <define name="SVG.circle.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+    <zeroOrMore>
+      <ref name="SVG.Animation.class"/>
+    </zeroOrMore>
+  </define>
+
+  <define name="circle">
+    <element name="circle">
+      <ref name="attlist.circle"/>
+      <ref name="SVG.circle.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.circle" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Paint.attrib"/>
+    <ref name="SVG.Color.attrib"/>
+    <ref name="SVG.Opacity.attrib"/>
+    <ref name="SVG.Graphics.attrib"/>
+    <ref name="SVG.Clip.attrib"/>
+    <ref name="SVG.Mask.attrib"/>
+    <ref name="SVG.Filter.attrib"/>
+    <ref name="SVG.GraphicalEvents.attrib"/>
+    <ref name="SVG.Cursor.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="cx">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="cy">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <attribute name="r">
+      <ref name="SVGLength.datatype"/>
+    </attribute>
+    <optional>
+      <attribute name="transform">
+        <ref name="TransformList.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    line: Line Element
+  </a:documentation>
+
+  <define name="SVG.line.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+    <zeroOrMore>
+      <ref name="SVG.Animation.class"/>
+    </zeroOrMore>
+  </define>
+
+  <define name="line">
+    <element name="line">
+      <ref name="attlist.line"/>
+      <ref name="SVG.line.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.line" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Paint.attrib"/>
+    <ref name="SVG.Color.attrib"/>
+    <ref name="SVG.Opacity.attrib"/>
+    <ref name="SVG.Graphics.attrib"/>
+    <ref name="SVG.Marker.attrib"/>
+    <ref name="SVG.Clip.attrib"/>
+    <ref name="SVG.Mask.attrib"/>
+    <ref name="SVG.Filter.attrib"/>
+    <ref name="SVG.GraphicalEvents.attrib"/>
+    <ref name="SVG.Cursor.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="x1">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="y1">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="x2">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="y2">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="transform">
+        <ref name="TransformList.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    ellipse: Ellipse Element
+  </a:documentation>
+
+  <define name="SVG.ellipse.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+    <zeroOrMore>
+      <ref name="SVG.Animation.class"/>
+    </zeroOrMore>
+  </define>
+
+  <define name="ellipse">
+    <element name="ellipse">
+      <ref name="attlist.ellipse"/>
+      <ref name="SVG.ellipse.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.ellipse" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Paint.attrib"/>
+    <ref name="SVG.Color.attrib"/>
+    <ref name="SVG.Opacity.attrib"/>
+    <ref name="SVG.Graphics.attrib"/>
+    <ref name="SVG.Clip.attrib"/>
+    <ref name="SVG.Mask.attrib"/>
+    <ref name="SVG.Filter.attrib"/>
+    <ref name="SVG.GraphicalEvents.attrib"/>
+    <ref name="SVG.Cursor.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="cx">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="cy">
+        <ref name="Coordinate.datatype"/>
+      </attribute>
+    </optional>
+    <attribute name="rx">
+      <ref name="SVGLength.datatype"/>
+    </attribute>
+    <attribute name="ry">
+      <ref name="SVGLength.datatype"/>
+    </attribute>
+    <optional>
+      <attribute name="transform">
+        <ref name="TransformList.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    polyline: Polyline Element
+  </a:documentation> 
+
+  <define name="SVG.polyline.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+    <zeroOrMore>
+      <ref name="SVG.Animation.class"/>
+    </zeroOrMore>
+  </define>
+
+  <define name="polyline">
+    <element name="polyline">
+      <ref name="attlist.polyline"/>
+      <ref name="SVG.polyline.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.polyline" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Paint.attrib"/>
+    <ref name="SVG.Color.attrib"/>
+    <ref name="SVG.Opacity.attrib"/>
+    <ref name="SVG.Graphics.attrib"/>
+    <ref name="SVG.Marker.attrib"/>
+    <ref name="SVG.Clip.attrib"/>
+    <ref name="SVG.Mask.attrib"/>
+    <ref name="SVG.Filter.attrib"/>
+    <ref name="SVG.GraphicalEvents.attrib"/>
+    <ref name="SVG.Cursor.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <attribute name="points">
+      <ref name="Points.datatype"/>
+    </attribute>
+    <optional>
+      <attribute name="transform">
+        <ref name="TransformList.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    polygon: Polygon Element
+  </a:documentation>
+
+  <define name="SVG.polygon.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+    <zeroOrMore>
+      <ref name="SVG.Animation.class"/>
+    </zeroOrMore>
+  </define>
+
+  <define name="polygon">
+    <element name="polygon">
+      <ref name="attlist.polygon"/>
+      <ref name="SVG.polygon.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.polygon" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Paint.attrib"/>
+    <ref name="SVG.Color.attrib"/>
+    <ref name="SVG.Opacity.attrib"/>
+    <ref name="SVG.Graphics.attrib"/>
+    <ref name="SVG.Marker.attrib"/>
+    <ref name="SVG.Clip.attrib"/>
+    <ref name="SVG.Mask.attrib"/>
+    <ref name="SVG.Filter.attrib"/>
+    <ref name="SVG.GraphicalEvents.attrib"/>
+    <ref name="SVG.Cursor.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <attribute name="points">
+      <ref name="Points.datatype"/>
+    </attribute>
+    <optional>
+      <attribute name="transform">
+        <ref name="TransformList.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-structure.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-structure.rng
new file mode 100644
index 0000000..e3b7e2e
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-structure.rng
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Structure Module
+    file: svg-structure.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-structure.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Structure
+
+        svg, g, defs, desc, title, metadata, symbol, use
+
+    This module declares the major structural elements and their attributes.
+  </a:documentation>
+
+  <include href="svg-basic-structure.rng"/>
+
+  <define name="SVG.Structure.class" combine="choice">
+    <a:documentation>
+      extend SVG.Structure.class
+    </a:documentation>
+    <choice>
+      <ref name="symbol"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    symbol: Symbol Element
+  </a:documentation>
+
+  <define name="SVG.symbol.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="SVG.Description.class"/>
+        <ref name="SVG.Animation.class"/>
+        <ref name="SVG.Structure.class"/>
+        <ref name="SVG.Conditional.class"/>
+        <ref name="SVG.Image.class"/>
+        <ref name="SVG.Style.class"/>
+        <ref name="SVG.Shape.class"/>
+        <ref name="SVG.Text.class"/>
+        <ref name="SVG.Marker.class"/>
+        <ref name="SVG.Profile.class"/>
+        <ref name="SVG.Gradient.class"/>
+        <ref name="SVG.Pattern.class"/>
+        <ref name="SVG.Clip.class"/>
+        <ref name="SVG.Mask.class"/>
+        <ref name="SVG.Filter.class"/>
+        <ref name="SVG.Cursor.class"/>
+        <ref name="SVG.Hyperlink.class"/>
+        <ref name="SVG.View.class"/>
+        <ref name="SVG.Script.class"/>
+        <ref name="SVG.Font.class"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="symbol">
+    <element name="symbol">
+      <ref name="attlist.symbol"/>
+      <ref name="SVG.symbol.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.symbol" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.Presentation.attrib"/>
+    <ref name="SVG.GraphicalEvents.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="viewBox">
+        <ref name="ViewBoxSpec.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="preserveAspectRatio" a:defaultValue="xMidYMid meet">
+        <ref name="PreserveAspectRatioSpec.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-style.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-style.rng
new file mode 100644
index 0000000..e1ffe17
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-style.rng
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Style Module
+    file: svg-style.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-style.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Style
+
+        style
+
+    This module declares markup to provide support for stylesheet.
+  </a:documentation>
+
+  <a:documentation>
+    Datatypes
+  </a:documentation>
+
+  <define name="ClassList.datatype">
+    <data type="NMTOKENS"/>
+  </define>
+
+  <define name="StyleSheet.datatype">
+    <data type="string"/>
+  </define>
+
+  <define name="SVGMediaDesc.datatype">
+    <a:documentation>
+      comma-separated list of media descriptors.
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+  <a:documentation>
+    SVG.Style.attrib
+  </a:documentation>
+
+  <define name="SVG.Style.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Style.attrib" combine="interleave">
+    <optional>
+      <attribute name="style">
+        <ref name="StyleSheet.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="class">
+        <ref name="ClassList.datatype"/>
+      </attribute>
+    </optional>
+    <ref name="SVG.Style.extra.attrib"/>
+  </define>
+
+  <a:documentation>
+    SVG.Style.class
+  </a:documentation>
+
+  <define name="SVG.Style.extra.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.Style.class" combine="choice">
+    <choice>
+      <ref name="SVG.style"/>
+      <ref name="SVG.Style.extra.class"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    style: Style Element
+  </a:documentation>
+
+  <define name="SVG.style.content">
+    <text/>
+  </define>
+
+  <define name="SVG.style">
+    <element name="style">
+      <ref name="attlist.style"/>
+      <ref name="SVG.style.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.style" combine="interleave">
+    <optional>
+      <attribute name="xml:space" a:defaultValue="preserve">
+        <value>preserve</value>
+      </attribute>
+    </optional>
+    <ref name="SVG.id.attrib"/>
+    <ref name="SVG.base.attrib"/>
+    <ref name="SVG.lang.attrib"/>
+    <ref name="SVG.Core.extra.attrib"/>
+    <attribute name="type">
+      <ref name="SVGContentType.datatype"/>
+    </attribute>
+    <optional>
+      <attribute name="media">
+        <ref name="SVGMediaDesc.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="title">
+        <ref name="SVGText.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-text.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-text.rng
new file mode 100644
index 0000000..19b7d98
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-text.rng
@@ -0,0 +1,627 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Text Module
+    file: svg-text.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-text.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Text
+
+        text, tspan, tref, textPath, altGlyph, altGlyphDef, altGlyphItem,
+        glyphRef
+
+    This module declares markup to provide support for alternate glyph.
+  </a:documentation>
+
+  <include href="svg-basic-text.rng"/>
+
+  <a:documentation>
+    Datatypes
+  </a:documentation>
+
+  <define name="BaselineShiftValue.datatype">
+    <data type="string"/>
+  </define>
+
+  <define name="FontSizeAdjustValue.datatype">
+    <data type="string"/>
+  </define>
+
+  <define name="GlyphOrientationHorizontalValue.datatype">
+    <data type="string"/>
+  </define>
+
+  <define name="GlyphOrientationVerticalValue.datatype">
+    <data type="string"/>
+  </define>
+
+  <define name="KerningValue.datatype">
+    <data type="string"/>
+  </define>
+
+  <define name="SpacingValue.datatype">
+    <data type="string"/>
+  </define>
+
+  <define name="TextDecorationValue.datatype">
+    <data type="string"/>
+  </define>
+
+  <a:documentation>
+    SVG.Text.attrib
+  </a:documentation>
+
+  <define name="SVG.Text.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Text.attrib" combine="interleave">
+    <optional>
+      <attribute name="writing-mode">
+        <choice>
+          <value>lr-tb</value>
+          <value>rl-tb</value>
+          <value>tb-rl</value>
+          <value>lr</value>
+          <value>rl</value>
+          <value>tb</value>
+          <value>inherit</value>
+        </choice>
+      </attribute>
+    </optional>
+    <ref name="SVG.Text.extra.attrib"/>
+  </define>
+
+  <a:documentation>
+    SVG.TextContent.attrib
+  </a:documentation>
+
+  <define name="SVG.TextContent.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.TextContent.attrib" combine="interleave">
+    <optional>
+      <attribute name="alignment-baseline">
+        <choice>
+          <value>auto</value>
+          <value>baseline</value>
+          <value>before-edge</value>
+          <value>text-before-edge</value>
+          <value>middle</value>
+          <value>central</value>
+          <value>after-edge</value>
+          <value>text-after-edge</value>
+          <value>ideographic</value>
+          <value>alphabetic</value>
+          <value>hanging</value>
+          <value>mathematical</value>
+          <value>inherit</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="baseline-shift">
+        <ref name="BaselineShiftValue.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="direction">
+        <choice>
+          <value>ltr</value>
+          <value>rtl</value>
+          <value>inherit</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="dominant-baseline">
+        <choice>
+          <value>auto</value>
+          <value>use-script</value>
+          <value>no-change</value>
+          <value>reset-size</value>
+          <value>ideographic</value>
+          <value>alphabetic</value>
+          <value>hanging</value>
+          <value>mathematical</value>
+          <value>central</value>
+          <value>middle</value>
+          <value>text-after-edge</value>
+          <value>text-before-edge</value>
+          <value>inherit</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="glyph-orientation-horizontal">
+        <ref name="GlyphOrientationHorizontalValue.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="glyph-orientation-vertical">
+        <ref name="GlyphOrientationVerticalValue.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="kerning">
+        <ref name="KerningValue.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="letter-spacing">
+        <ref name="SpacingValue.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="text-anchor">
+        <choice>
+          <value>start</value>
+          <value>middle</value>
+          <value>end</value>
+          <value>inherit</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="text-decoration">
+        <ref name="TextDecorationValue.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="unicode-bidi">
+        <choice>
+          <value>normal</value>
+          <value>embed</value>
+          <value>bidi-override</value>
+          <value>inherit</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="word-spacing">
+        <ref name="SpacingValue.datatype"/>
+      </attribute>
+    </optional>
+    <ref name="SVG.TextContent.extra.attrib"/>
+  </define>
+
+  <define name="SVG.Font.attrib" combine="interleave">
+    <optional>
+      <attribute name="font-size-adjust">
+        <ref name="FontSizeAdjustValue.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="font-stretch">
+        <choice>
+          <value>normal</value>
+          <value>wider</value>
+          <value>narrower</value>
+          <value>ultra-condensed</value>
+          <value>extra-condensed</value>
+          <value>condensed</value>
+          <value>semi-condensed</value>
+          <value>semi-expanded</value>
+          <value>expanded</value>
+          <value>extra-expanded</value>
+          <value>ultra-expanded</value>
+          <value>inherit</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="font-variant">
+        <choice>
+          <value>normal</value>
+          <value>small-caps</value>
+          <value>inherit</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.Text.class" combine="choice">
+    <a:documentation>
+      extend SVG.Text.class
+    </a:documentation>
+    <choice>
+      <ref name="altGlyphDef"/>
+    </choice>
+  </define>
+
+  <define name="SVG.TextContent.class" combine="choice">
+    <a:documentation>
+      extend SVG.TextContent.class
+    </a:documentation>
+    <choice>
+      <ref name="tspan"/>
+      <ref name="tref"/>
+      <ref name="textPath"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    text: Text Element
+  </a:documentation>
+
+  <define name="SVG.text.class" combine="choice">
+    <choice>
+      <ref name="SVG.TextContent.class"/>
+    </choice>
+  </define>
+
+  <define name="attlist.text" combine="interleave">
+    <ref name="SVG.Text.attrib"/>
+    <ref name="SVG.TextContent.attrib"/>
+    <optional>
+      <attribute name="dx">
+        <ref name="Lengths.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="dy">
+        <ref name="Lengths.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="textLength">
+        <ref name="SVGLength.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="lengthAdjust">
+        <choice>
+          <value>spacing</value>
+          <value>spacingAndGlyphs</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    tspan: Text Span Element
+  </a:documentation>
+
+  <define name="SVG.tspan.content">
+    <zeroOrMore>
+      <choice>
+        <text/>
+        <ref name="tspan"/>
+        <ref name="tref"/>
+        <ref name="altGlyph"/>
+        <ref name="animate"/>
+        <ref name="set"/>
+        <ref name="animateColor"/>
+        <ref name="SVG.Description.class"/>
+        <ref name="SVG.Hyperlink.class"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="tspan">
+    <element name="tspan">
+      <ref name="attlist.tspan"/>
+      <ref name="SVG.tspan.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.tspan" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.TextContent.attrib"/>
+    <ref name="SVG.Font.attrib"/>
+    <ref name="SVG.Paint.attrib"/>
+    <ref name="SVG.Color.attrib"/>
+    <ref name="SVG.Opacity.attrib"/>
+    <ref name="SVG.Graphics.attrib"/>
+    <ref name="SVG.Clip.attrib"/>
+    <ref name="SVG.Mask.attrib"/>
+    <ref name="SVG.Filter.attrib"/>
+    <ref name="SVG.GraphicalEvents.attrib"/>
+    <ref name="SVG.Cursor.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="x">
+        <ref name="Coordinates.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="y">
+        <ref name="Coordinates.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="dx">
+        <ref name="Lengths.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="dy">
+        <ref name="Lengths.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="rotate">
+        <ref name="Numbers.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="textLength">
+        <ref name="SVGLength.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="lengthAdjust">
+        <choice>
+          <value>spacing</value>
+          <value>spacingAndGlyphs</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    tref: Text Reference Element
+  </a:documentation>
+
+  <define name="SVG.tref.content">
+    <zeroOrMore>
+      <choice>
+        <ref name="animate"/>
+        <ref name="set"/>
+        <ref name="animateColor"/>
+        <ref name="SVG.Description.class"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="tref">
+    <element name="tref">
+      <ref name="attlist.tref"/>
+      <ref name="SVG.tref.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.tref" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.TextContent.attrib"/>
+    <ref name="SVG.Font.attrib"/>
+    <ref name="SVG.Paint.attrib"/>
+    <ref name="SVG.Color.attrib"/>
+    <ref name="SVG.Opacity.attrib"/>
+    <ref name="SVG.Graphics.attrib"/>
+    <ref name="SVG.Clip.attrib"/>
+    <ref name="SVG.Mask.attrib"/>
+    <ref name="SVG.Filter.attrib"/>
+    <ref name="SVG.GraphicalEvents.attrib"/>
+    <ref name="SVG.Cursor.attrib"/>
+    <ref name="SVG.XLinkRequired.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="x">
+        <ref name="Coordinates.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="y">
+        <ref name="Coordinates.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="dx">
+        <ref name="Lengths.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="dy">
+        <ref name="Lengths.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="rotate">
+        <ref name="Numbers.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="textLength">
+        <ref name="SVGLength.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="lengthAdjust">
+        <choice>
+          <value>spacing</value>
+          <value>spacingAndGlyphs</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    textPath: Text Path Element
+  </a:documentation>
+
+  <define name="SVG.textPath.content">
+    <zeroOrMore>
+      <choice>
+        <text/>
+        <ref name="tspan"/>
+        <ref name="tref"/>
+        <ref name="altGlyph"/>
+        <ref name="animate"/>
+        <ref name="set"/>
+        <ref name="animateColor"/>
+        <ref name="SVG.Description.class"/>
+        <ref name="SVG.Hyperlink.class"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="textPath">
+    <element name="textPath">
+      <ref name="attlist.textPath"/>
+      <ref name="SVG.textPath.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.textPath" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.Conditional.attrib"/>
+    <ref name="SVG.Style.attrib"/>
+    <ref name="SVG.TextContent.attrib"/>
+    <ref name="SVG.Font.attrib"/>
+    <ref name="SVG.Paint.attrib"/>
+    <ref name="SVG.Color.attrib"/>
+    <ref name="SVG.Opacity.attrib"/>
+    <ref name="SVG.Graphics.attrib"/>
+    <ref name="SVG.Clip.attrib"/>
+    <ref name="SVG.Mask.attrib"/>
+    <ref name="SVG.Filter.attrib"/>
+    <ref name="SVG.GraphicalEvents.attrib"/>
+    <ref name="SVG.Cursor.attrib"/>
+    <ref name="SVG.XLinkRequired.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="startOffset">
+        <ref name="SVGLength.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="textLength">
+        <ref name="SVGLength.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="lengthAdjust">
+        <choice>
+          <value>spacing</value>
+          <value>spacingAndGlyphs</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="method">
+        <choice>
+          <value>align</value>
+          <value>stretch</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="spacing">
+        <choice>
+          <value>auto</value>
+          <value>exact</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    altGlyph: Alternate Glyph Element
+  </a:documentation>
+
+  <define name="attlist.altGlyph" combine="interleave">
+    <ref name="SVG.TextContent.attrib"/>
+    <optional>
+      <attribute name="x">
+        <ref name="Coordinates.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="y">
+        <ref name="Coordinates.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="dx">
+        <ref name="Lengths.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="dy">
+        <ref name="Lengths.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="rotate">
+        <ref name="Numbers.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <a:documentation>
+    altGlyphDef: Alternate Glyph Definition Element
+  </a:documentation>
+
+  <define name="SVG.altGlyphDef.content" combine="choice">
+    <choice>
+      <oneOrMore>
+        <ref name="altGlyphItem"/>
+      </oneOrMore>
+    </choice>
+  </define>
+
+  <a:documentation>
+    altGlyphItem: Alternate Glyph Item Element
+  </a:documentation>
+
+  <define name="SVG.altGlyphItem.content">
+    <oneOrMore>
+      <ref name="glyphRef"/>
+    </oneOrMore>
+  </define>
+
+  <define name="altGlyphItem">
+    <element name="altGlyphItem">
+      <ref name="attlist.altGlyphItem"/>
+      <ref name="SVG.altGlyphItem.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.altGlyphItem" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+  </define>
+
+  <a:documentation>
+    glyphRef: Glyph Reference Element
+  </a:documentation>
+
+  <define name="attlist.glyphRef" combine="interleave">
+    <optional>
+      <attribute name="x">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="y">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="dx">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="dy">
+        <ref name="SVGNumber.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-view.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-view.rng
new file mode 100644
index 0000000..bf548cf
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-view.rng
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 View Module
+    file: svg-view.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-view.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    View
+
+        view
+
+    This module declares markup to provide support for view.
+  </a:documentation>
+
+  <a:documentation>
+    SVG.View.class
+  </a:documentation>
+
+  <define name="SVG.View.extra.class">
+    <notAllowed/>
+  </define>
+
+  <define name="SVG.View.class" combine="choice">
+    <choice>
+      <ref name="view"/>
+      <ref name="SVG.View.extra.class"/>
+    </choice>
+  </define>
+
+  <a:documentation>
+    view: View Element
+  </a:documentation>
+
+  <define name="SVG.view.content">
+    <zeroOrMore>
+      <ref name="SVG.Description.class"/>
+    </zeroOrMore>
+  </define>
+
+  <define name="view">
+    <element name="view">
+      <ref name="attlist.view"/>
+      <ref name="SVG.view.content"/>
+    </element>
+  </define>
+
+  <define name="attlist.view" combine="interleave">
+    <ref name="SVG.Core.attrib"/>
+    <ref name="SVG.External.attrib"/>
+    <optional>
+      <attribute name="viewBox">
+        <ref name="ViewBoxSpec.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="preserveAspectRatio" a:defaultValue="xMidYMid meet">
+        <ref name="PreserveAspectRatioSpec.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="zoomAndPan" a:defaultValue="magnify">
+        <choice>
+          <value>disable</value>
+          <value>magnify</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="viewTarget"/>
+    </optional>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-viewport-attrib.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-viewport-attrib.rng
new file mode 100644
index 0000000..2e970ba
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-viewport-attrib.rng
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 Viewport Attribute Module
+    file: svg-viewport-attrib.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-viewport-attrib.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    Viewport Attribute
+
+        clip, overflow
+
+    This module defines the Viewport attribute set.
+  </a:documentation>
+
+  <define name="ClipValue.datatype">
+    <a:documentation>
+      'clip' property/attribute value (e.g., 'auto', rect(...))
+    </a:documentation>
+    <data type="string"/>
+  </define>
+
+  <define name="SVG.clip.attrib">
+    <optional>
+      <attribute name="clip">
+        <ref name="ClipValue.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.overflow.attrib">
+    <optional>
+      <attribute name="overflow">
+        <choice>
+          <value>visible</value>
+          <value>hidden</value>
+          <value>scroll</value>
+          <value>auto</value>
+          <value>inherit</value>
+        </choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="SVG.Viewport.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.Viewport.attrib" combine="interleave">
+    <ref name="SVG.clip.attrib"/>
+    <ref name="SVG.overflow.attrib"/>
+    <ref name="SVG.Viewport.extra.attrib"/>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-xlink-attrib.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-xlink-attrib.rng
new file mode 100644
index 0000000..1b13df3
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg/svg-xlink-attrib.rng
@@ -0,0 +1,194 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:xlink="http://www.w3.org/1999/xlink"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    SVG 1.1 XLink Attribute Module
+    file: svg-xlink-attrib.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+    Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+
+    $Id: svg-xlink-attrib.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+  </a:documentation>
+
+  <a:documentation>
+    XLink Attribute
+
+       type, href, role, arcrole, title, show, actuate
+
+    This module defines the XLink, XLinkRequired, XLinkEmbed, and
+    XLinkReplace attribute set.
+  </a:documentation>
+
+  <define name="SVG.XLink.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.XLink.attrib" combine="interleave">
+    <optional>
+      <attribute name="xlink:type" a:defaultValue="simple">
+        <value>simple</value>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="xlink:href">
+        <ref name="SVGURI.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="xlink:role">
+        <ref name="SVGURI.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="xlink:arcrole">
+        <ref name="SVGURI.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="xlink:title"/>
+    </optional>
+    <optional>
+      <attribute name="xlink:show" a:defaultValue="other">
+        <choice>
+          <value>other</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="xlink:actuate" a:defaultValue="onLoad">
+        <value>onLoad</value>
+      </attribute>
+    </optional>
+    <ref name="SVG.XLink.extra.attrib"/>
+  </define>
+
+  <define name="SVG.XLinkRequired.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.XLinkRequired.attrib" combine="interleave">
+    <optional>
+      <attribute name="xlink:type" a:defaultValue="simple">
+        <value>simple</value>
+      </attribute>
+    </optional>
+    <attribute name="xlink:href">
+      <ref name="SVGURI.datatype"/>
+    </attribute>
+    <optional>
+      <attribute name="xlink:role">
+        <ref name="SVGURI.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="xlink:arcrole">
+        <ref name="SVGURI.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="xlink:title"/>
+    </optional>
+    <optional>
+      <attribute name="xlink:show" a:defaultValue="other">
+        <choice>
+          <value>other</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="xlink:actuate" a:defaultValue="onLoad">
+        <value>onLoad</value>
+      </attribute>
+    </optional>
+    <ref name="SVG.XLinkRequired.extra.attrib"/>
+  </define>
+
+  <define name="SVG.XLinkEmbed.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.XLinkEmbed.attrib" combine="interleave">
+    <optional>
+      <attribute name="xlink:type" a:defaultValue="simple">
+        <value>simple</value>
+      </attribute>
+    </optional>
+    <attribute name="xlink:href">
+      <ref name="SVGURI.datatype"/>
+    </attribute>
+    <optional>
+      <attribute name="xlink:role">
+        <ref name="SVGURI.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="xlink:arcrole">
+        <ref name="SVGURI.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="xlink:title"/>
+    </optional>
+    <optional>
+      <attribute name="xlink:show" a:defaultValue="embed">
+        <choice>
+          <value>embed</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="xlink:actuate" a:defaultValue="onLoad">
+        <value>onLoad</value>
+      </attribute>
+    </optional>
+    <ref name="SVG.XLinkEmbed.extra.attrib"/>
+  </define>
+
+  <define name="SVG.XLinkReplace.extra.attrib">
+    <empty/>
+  </define>
+
+  <define name="SVG.XLinkReplace.attrib" combine="interleave">
+    <optional>
+      <attribute name="xlink:type" a:defaultValue="simple">
+        <value>simple</value>
+      </attribute>
+    </optional>
+    <attribute name="xlink:href">
+      <ref name="SVGURI.datatype"/>
+    </attribute>
+    <optional>
+      <attribute name="xlink:role">
+        <ref name="SVGURI.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="xlink:arcrole">
+        <ref name="SVGURI.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="xlink:title"/>
+    </optional>
+    <optional>
+      <attribute name="xlink:show" a:defaultValue="replace">
+        <choice>
+          <value>new</value>
+          <value>replace</value>
+        </choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="xlink:actuate" a:defaultValue="onRequest">
+        <value>onRequest</value>
+      </attribute>
+    </optional>
+    <ref name="SVG.XLinkReplace.extra.attrib"/>
+  </define>
+
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg11.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg11.rng
new file mode 100644
index 0000000..27530f9
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/svg11.rng
@@ -0,0 +1,231 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://www.w3.org/2000/svg" xml:lang="en"
+         xmlns="http://relaxng.org/ns/structure/1.0"
+         xmlns:xlink="http://www.w3.org/1999/xlink"
+         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+  <a:documentation>
+    RELAX NG schema for SVG 1.1
+    file: svg11.rng
+
+    This is SVG, a language for describing two-dimensional graphics in XML.
+
+    The Scalable Vector Graphics (SVG)
+    Copyright 2001, 2002 World Wide Web Consortium
+       (Massachusetts Institute of Technology, Institut National de
+        Recherche en Informatique et en Automatique, Keio University).
+        All Rights Reserved.
+
+    Permission to use, copy, modify and distribute this RELAX NG schema
+    for SVG and its accompanying documentation for any purpose and without
+    fee is hereby granted in perpetuity, provided that the above copyright
+    notice and this paragraph appear in all copies.  The copyright holders
+    nor the author make no representation about the suitability of this
+    RELAX NG schema for any purpose.
+
+    It is provided "as is" without expressed or implied warranty.
+
+        Author: Masayasu Ishikawa (mimasa at w3.org)
+        $Id: svg11.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
+
+    This is the driver file for version 1.1 of the SVG RELAX NG schema.
+
+    The DTD version is identified by the PUBLIC and SYSTEM identifiers:
+
+        PUBLIC "-//W3C//DTD SVG 1.1//EN"
+        SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"
+
+    Use this URI to identify the default namespace:
+
+        "http://www.w3.org/2000/svg"
+  </a:documentation>
+
+  <include href="svg/svg-container-attrib.rng">
+    <a:documentation>
+      Container Attribute Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-viewport-attrib.rng">
+    <a:documentation>
+      Viewport Attribute Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-paint-attrib.rng">
+    <a:documentation>
+      Paint Attribute Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-opacity-attrib.rng">
+    <a:documentation>
+      Paint Opacity Attribute Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-graphics-attrib.rng">
+    <a:documentation>
+      Graphics Attribute Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-docevents-attrib.rng">
+    <a:documentation>
+      Document Events Attribute Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-graphevents-attrib.rng">
+    <a:documentation>
+      Graphical Element Events Attribute Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-animevents-attrib.rng">
+    <a:documentation>
+      Animation Events Attribute Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-xlink-attrib.rng">
+    <a:documentation>
+      XLink Attribute Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-extresources-attrib.rng">
+    <a:documentation>
+      External Resources Attribute Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-structure.rng">
+    <a:documentation>
+      Structure Module (required)
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-conditional.rng">
+    <a:documentation>
+      Conditional Processing Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-image.rng">
+    <a:documentation>
+      Image Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-style.rng">
+    <a:documentation>
+      Style Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-shape.rng">
+    <a:documentation>
+      Shape Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-text.rng">
+    <a:documentation>
+      Text Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-marker.rng">
+    <a:documentation>
+      Marker Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-profile.rng">
+    <a:documentation>
+      Color Profile Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-gradient.rng">
+    <a:documentation>
+      Gradient Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-pattern.rng">
+    <a:documentation>
+      Pattern Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-clip.rng">
+    <a:documentation>
+      Clip Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-mask.rng">
+    <a:documentation>
+      Mask Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-filter.rng">
+    <a:documentation>
+      Filter Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-cursor.rng">
+    <a:documentation>
+      Cursor Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-hyperlink.rng">
+    <a:documentation>
+      Hyperlinking Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-view.rng">
+    <a:documentation>
+      View Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-script.rng">
+    <a:documentation>
+      Scripting Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-animation.rng">
+    <a:documentation>
+      Animation Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-font.rng">
+    <a:documentation>
+      Font Module
+    </a:documentation>
+  </include>
+
+  <include href="svg/svg-extensibility.rng">
+    <a:documentation>
+      Extensibility Module
+    </a:documentation>
+  </include>
+  
+  <start>
+    <a:documentation>
+      The root element is "svg".
+    </a:documentation>
+    <ref name="svg"/>
+  </start>
+  
+</grammar>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xenc-schema.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xenc-schema.rng
new file mode 100644
index 0000000..e952b1e
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xenc-schema.rng
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- http://www.xml.com/lpt/a/2002/01/23/relaxng.html -->
+<!-- http://www.oasis-open.org/committees/relax-ng/tutorial-20011203.html -->
+<!-- http://www.zvon.org/xxl/XMLSchemaTutorial/Output/ser_wildcards_st8.html -->
+<!-- http://lists.oasis-open.org/archives/relax-ng-comment/200206/maillist.html -->
+
+<grammar xmlns='http://relaxng.org/ns/structure/1.0'
+        xmlns:ds='http://www.w3.org/2000/09/xmldsig#'
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        ns="http://www.w3.org/2001/04/xmlenc#"
+        datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+    <include href="xmldsig-core-schema.rng">
+    <!-- Used for DigestMethod, KeyInfoType and anyThing -->
+    <!-- Since xmldsig-core also has a start, I have to include it
+        in the include for redefinition. -->
+        <!--
+        <start combine="choice">
+            <choice>
+                 We get to define the permissible root elements! 
+                <element name="EncryptedData"><ref name="EncryptedDataType"/></element>
+                <element name="EncryptedKey"><ref name="EncryptedKeyType"/></element>
+            </choice>
+        </start>  
+        --> 
+        
+        <define name='anyThing'>
+            <zeroOrMore>
+                <choice>
+                    <text/>
+                    <element>
+                        <anyName>
+                            <except>
+                                <nsName/>
+                                <nsName ns='http://www.w3.org/2000/09/xmldsig#'/>
+                            </except>
+                        </anyName>
+                        <ref name='anyThing'/>
+                        <zeroOrMore>
+                            <attribute>
+                              <anyName/>
+                            </attribute>
+                        </zeroOrMore>
+                    </element>
+                </choice>
+            </zeroOrMore>
+            </define>
+        
+        
+    </include>
+    
+        <!-- Import definitions from the xmldsig rng -->
+
+        <define name="KeyInfoType" combine="interleave">
+            <zeroOrMore>
+                <choice>
+                    <element name="EncryptedKey"><ref name="EncryptedKeyType"/></element>
+                    <element name="AgreementMethod"><ref name="AgreementMethodType"/></element>
+                </choice>
+            </zeroOrMore>    
+        </define>
+
+        <define name="DigestMethodType" combine="choice">
+            <notAllowed/>
+         </define>
+
+        <define name="TransformType" combine="choice">
+            <notAllowed/>
+         </define>
+
+    <!-- Now redefined in the include statement
+        <define name="anyThing" combine="choice">
+            <notAllowed/>
+         </define>
+    -->
+
+    <!-- End import -->
+        
+  
+    <define name="EncryptedDataType">
+          <ref name="EncryptedType"/>
+    </define>
+  
+  
+    <define name="EncryptedKeyType">
+            <ref name="EncryptedType"/>
+            <optional><element name='ReferenceList'>
+                <ref name="ReferenceListType"/></element>
+            </optional>
+            <optional><element name='CarriedKeyName'><data type="string"/></element></optional>
+            <optional><attribute name='Recipient'> <data type="string"/></attribute></optional>
+    </define>
+
+    
+     <define name="EncryptedType">
+        <element name="EncryptionMethod"><ref name="EncryptionMethodType"/></element>
+        <optional>
+            <element name="KeyInfo" ns="http://www.w3.org/2000/09/xmldsig#">
+                <ref name="KeyInfoType"/>
+            </element>
+        </optional>
+        <optional>
+            <element name="CipherData"><ref name="CipherDataType"/></element>
+        </optional> 
+        <optional>
+             <element name="EncryptionProperties"><ref name="EncryptionPropertiesType"/></element>
+        </optional>
+        <optional><attribute name="Id"><data type="ID"/></attribute></optional>
+        <optional><attribute name="Type"><data type="anyURI"/></attribute></optional>
+        <optional><attribute name="MimeType"><data type="string"/></attribute></optional>
+        <optional><attribute name="Encoding"><data type="anyURI"/></attribute></optional>
+        <optional><attribute name='xsi:schemaLocation'/></optional>
+    </define> 
+
+    <define name="EncryptionMethodType">
+        <zeroOrMore>
+            <choice>
+                <element name="KeySize">
+                    <data type="integer"/>
+                </element>
+                <element name="OAEPparams">
+                    <data type="base64Binary"/>
+                </element>
+                <text/>
+                <element name='DigestMethod' ns="http://www.w3.org/2000/09/xmldsig#">
+                    <ref name="DigestMethodType"/>
+                </element>
+            </choice>
+        </zeroOrMore>
+        <attribute name="Algorithm"><data type="anyURI"/></attribute>
+    </define>
+
+            
+    <define name="AgreementMethodType">
+        <zeroOrMore>
+            <choice>
+                <element name="KA-Nonce">
+                    <data type="base64Binary"/>
+                </element>
+                <element name='DigestMethod' ns="http://www.w3.org/2000/09/xmldsig#">
+                    <ref name="DigestMethodType"/>
+                </element>
+                <text/>
+                <element>
+                    <nsName ns="http://www.w3.org/2000/09/xmldsig#"/>
+                    <ref name="anyThing"/>
+                </element>
+                <element name="OriginatorKeyInfo"><ref name="KeyInfoType"/></element>
+                <element name="RecipientKeyInfo"><ref name="KeyInfoType"/></element>
+            </choice>
+        </zeroOrMore>
+        <attribute name="Algorithm"><data type="anyURI"/></attribute>
+    </define>            
+            
+            
+    <define name="ReferenceListType">
+        <oneOrMore>
+            <choice>
+                <element name="DataReference">
+                    <text/>
+                    <attribute name="URI"><data type="anyURI"/></attribute>
+                </element>
+                <element name="KeyReference">
+                    <text/>
+                    <attribute name="URI"><data type="anyURI"/></attribute>
+                </element>
+            </choice>
+        </oneOrMore>
+    </define>
+    
+    
+    <define name="CipherDataType">
+        <choice>
+            <element name="CipherValue"><data type="base64Binary"/></element>
+            <element name="CipherReference">
+                <optional> <!-- spec says it's optional -->
+                	<element name="Transforms">
+                  		<oneOrMore>
+	                   		<element name='Transform' ns="http://www.w3.org/2000/09/xmldsig#">
+                          		<ref name='TransformType'/>
+                        	</element>
+                    	</oneOrMore>
+                	</element>
+                </optional>
+                <attribute name="URI">
+                    <data type="anyURI"/>
+                </attribute>      
+            </element>
+        </choice>
+    </define>
+    
+    
+    <define name="EncryptionPropertiesType">        
+        <element name="EncryptionProperty">
+          <zeroOrMore>
+                <element>
+                    <anyName/>
+                    <text/>
+                </element>
+            </zeroOrMore>
+            <optional>
+                <attribute name="Target">
+                    <data type="anyURI"/>
+                </attribute>  
+            </optional>
+            <optional>                
+                <attribute name="Id">
+                    <data type="ID"/>
+                </attribute>    
+            </optional>
+        </element>
+        
+        <optional>
+            <attribute name="Id">
+                <data type="ID"/>
+            </attribute>    
+        </optional>
+        <zeroOrMore>
+            <attribute><nsName ns="http://www.w3.org/XML/1998/namespace"/></attribute>
+        </zeroOrMore>
+    </define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/applet.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/applet.rng
new file mode 100644
index 0000000..22baa50
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/applet.rng
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Applet Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="applet">
+  <element name="applet">
+    <ref name="applet.attlist"/>
+    <!-- No restrictions on mixed content in TREX. -->
+    <zeroOrMore>
+      <ref name="param"/>
+    </zeroOrMore>
+    <ref name="Flow.model"/>
+  </element>
+</define>
+
+<define name="applet.attlist">
+  <ref name="Core.attrib"/>
+  <attribute name="alt">
+    <ref name="Text.datatype"/>
+  </attribute>
+  <optional>
+    <attribute name="archive"/>
+  </optional>
+  <optional>
+    <attribute name="code"/>
+  </optional>
+  <optional>
+    <attribute name="codebase">
+      <ref name="URI.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="object"/>
+  </optional>
+  <attribute name="height">
+    <ref name="Length.datatype"/>
+  </attribute>
+  <attribute name="width">
+    <ref name="Length.datatype"/>
+  </attribute>
+</define>
+
+<define name="Inline.class" combine="choice">
+  <ref name="applet"/>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/attribs.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/attribs.rng
new file mode 100644
index 0000000..68dc2a5
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/attribs.rng
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Common Attributes Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="id.attrib">
+  <optional>
+    <attribute name="id">
+      <ref name="ID.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="class.attrib">
+  <optional>
+    <attribute name="class">
+      <ref name="Text.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="title.attrib">
+  <optional>
+    <attribute name="title">
+      <ref name="Text.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="Core.attrib">
+  <ref name="id.attrib"/>
+  <ref name="class.attrib"/>
+  <ref name="title.attrib"/>
+</define>
+
+<define name="lang.attrib">
+  <optional>
+    <attribute name="xml:lang">
+      <ref name="LanguageCode.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="lang">
+      <ref name="LanguageCode.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="I18n.attrib">
+  <ref name="lang.attrib"/>
+</define>
+
+<define name="Common.attrib">
+  <ref name="Core.attrib"/>
+  <ref name="I18n.attrib"/>
+</define>
+
+<define name="CommonIdRequired.attrib">
+  <attribute name="id">
+    <ref name="ID.datatype"/>
+  </attribute>
+  <ref name="class.attrib"/>
+  <ref name="title.attrib"/>
+  <ref name="I18n.attrib"/>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/base.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/base.rng
new file mode 100644
index 0000000..c9ade45
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/base.rng
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Base Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="base">
+  <element name="base">
+    <ref name="base.attlist"/>
+  </element>
+</define>
+
+<define name="base.attlist">
+  <attribute name="href">
+    <ref name="URI.datatype"/>
+  </attribute>
+</define>
+
+<define name="head.content" combine="interleave">
+  <optional>
+    <ref name="base"/>
+  </optional>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/basic-form.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/basic-form.rng
new file mode 100644
index 0000000..b8f8afb
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/basic-form.rng
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Simplified Forms Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="form">
+  <element name="form">
+    <ref name="form.attlist"/>
+    <!-- Don't use Block.model, because this gets redefined by the
+	 legacy module. -->
+    <oneOrMore>
+      <ref name="Block.class"/>
+    </oneOrMore>
+  </element>
+</define>
+
+<define name="form.attlist">
+  <ref name="Common.attrib"/>
+  <attribute name="action">
+    <ref name="URI.datatype"/>
+  </attribute>
+  <optional>
+    <attribute name="method">
+      <choice>
+	<value>get</value>
+	<value>post</value>
+      </choice>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="enctype">
+      <ref name="ContentType.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="label">
+  <element name="label">
+    <ref name="label.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="label.attlist">
+  <ref name="Common.attrib"/>
+  <optional>
+    <attribute name="for">
+      <ref name="IDREF.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="accesskey">
+      <ref name="Character.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="input">
+  <element name="input">
+    <ref name="input.attlist"/>
+  </element>
+</define>
+
+<define name="input.attlist">
+  <ref name="Common.attrib"/>
+  <optional>
+    <attribute name="type">
+      <ref name="InputType.class"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="name"/>
+  </optional>
+  <optional>
+    <attribute name="value"/>
+  </optional>
+  <optional>
+    <attribute name="checked">
+      <value>checked</value>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="size"/>
+  </optional>
+  <optional>
+    <attribute name="maxlength">
+      <ref name="Number.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="src">
+       <ref name="URI.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="accesskey">
+      <ref name="Character.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="InputType.class">
+  <choice>
+    <value>text</value>
+    <value>password</value>
+    <value>checkbox</value>
+    <value>radio</value>
+    <value>submit</value>
+    <value>reset</value>
+    <value>hidden</value>
+  </choice>
+</define>
+
+<define name="select">
+  <element name="select">
+    <ref name="select.attlist"/>
+    <oneOrMore>
+      <ref name="option"/>
+    </oneOrMore>
+  </element>
+</define>
+
+<define name="select.attlist">
+  <ref name="Common.attrib"/>
+  <optional>
+    <attribute name="name"/>
+  </optional>
+  <optional>
+    <attribute name="size">
+      <ref name="Number.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="multiple">
+      <value>multiple</value>
+    </attribute>
+  </optional>
+</define>
+   
+<define name="option">
+  <element name="option">
+    <ref name="Common.attrib"/>
+    <optional>
+      <attribute name="selected">
+        <value>selected</value>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="value"/>
+    </optional>
+    <text/>
+  </element>
+</define>
+
+<define name="textarea">
+  <element name="textarea">
+    <ref name="textarea.attlist"/>
+  </element>
+</define>
+
+<define name="textarea.attlist">
+  <ref name="Common.attrib"/>
+  <optional>
+    <attribute name="name"/>
+  </optional>
+  <attribute name="rows">
+    <ref name="Number.datatype"/>
+  </attribute>
+  <attribute name="cols">
+    <ref name="Number.datatype"/>
+  </attribute>
+  <optional>
+    <attribute name="accesskey">
+      <ref name="Character.datatype"/>
+    </attribute>
+  </optional>
+  <text/>
+</define>
+
+<define name="Form.class">
+  <ref name="form"/>
+</define>
+
+<define name="Formctrl.class">
+  <choice>
+    <ref name="input"/>
+    <ref name="label"/>
+    <ref name="select"/>
+    <ref name="textarea"/>
+  </choice>
+</define>
+
+<define name="Block.class" combine="choice">
+  <ref name="Form.class"/>
+</define>
+
+<define name="Inline.class" combine="choice">
+  <ref name="Formctrl.class"/>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/basic-table.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/basic-table.rng
new file mode 100644
index 0000000..db9a534
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/basic-table.rng
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Basic Tables Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="table">
+  <element name="table">
+    <ref name="table.attlist"/>
+    <optional>
+      <ref name="caption"/>
+    </optional>
+    <oneOrMore>
+      <ref name="tr"/>
+    </oneOrMore>
+  </element>
+</define>
+
+<define name="table.attlist">
+  <ref name="Common.attrib"/>
+  <optional>
+    <attribute name="summary">
+      <ref name="Text.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="caption">
+  <element name="caption">
+    <ref name="caption.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="caption.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="tr">
+  <element name="tr">
+    <ref name="tr.attlist"/>
+    <oneOrMore>
+      <choice>
+        <ref name="th"/>
+        <ref name="td"/>
+      </choice>
+    </oneOrMore>
+  </element>
+</define>
+
+<define name="tr.attlist">
+  <ref name="Common.attrib"/>
+  <ref name="CellHAlign.attrib"/>
+  <ref name="CellVAlign.attrib"/>
+</define>
+
+<define name="th">
+  <element name="th">
+    <ref name="th.attlist"/>
+    <ref name="Flow.model"/>
+  </element>
+</define>
+
+<define name="th.attlist">
+  <ref name="Cell.attrib"/>
+</define>
+
+<define name="td">
+  <element name="td">
+    <ref name="td.attlist"/>
+    <ref name="Flow.model"/>
+  </element>
+</define>
+
+<define name="td.attlist">
+  <ref name="Cell.attrib"/>
+</define>
+
+<define name="Cell.attrib">
+  <ref name="Common.attrib"/>
+  <optional>
+    <attribute name="abbr">
+      <ref name="Text.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="axis"/>
+  </optional>
+  <optional>
+    <attribute name="headers">
+      <ref name="IDREFS.datatype"/>
+    </attribute>
+  </optional>
+  <ref name="scope.attrib"/>
+  <optional>
+    <attribute name="rowspan">
+      <ref name="Number.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="colspan">
+      <ref name="Number.datatype"/>
+    </attribute>
+  </optional>
+  <ref name="CellHAlign.attrib"/>
+  <ref name="CellVAlign.attrib"/>
+</define>
+
+<define name="CellHAlign.attrib">
+  <optional>
+    <attribute name="align">
+      <choice>
+	<value>left</value>
+	<value>center</value>
+	<value>right</value>
+      </choice>
+    </attribute>
+  </optional>
+</define>
+
+<define name="CellVAlign.attrib">
+  <optional>
+    <attribute name="valign">
+      <choice>
+	<value>top</value>
+	<value>middle</value>
+	<value>bottom</value>
+      </choice>
+    </attribute>
+  </optional>
+</define>
+
+<define name="scope.attrib">
+  <optional>
+    <attribute name="scope">
+      <choice>
+	<value>row</value>
+	<value>col</value>
+      </choice>
+    </attribute>
+  </optional>
+</define>
+
+<define name="Block.class" combine="choice">
+  <ref name="table"/>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/bdo.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/bdo.rng
new file mode 100644
index 0000000..2742f3a
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/bdo.rng
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Bi-directional Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="bdo">
+  <element name="bdo">
+    <ref name="bdo.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="bdo.attlist">
+  <ref name="Core.attrib"/>
+  <ref name="lang.attrib"/>
+  <ref name="dir.attrib"/>
+</define>
+
+<define name="dir.attrib">
+  <attribute name="dir">
+    <choice>
+      <value>ltr</value>
+      <value>rtl</value>
+    </choice>
+  </attribute>
+</define>
+
+<define name="I18n.attrib" combine="interleave">
+  <optional>
+    <ref name="dir.attrib"/>
+  </optional>
+</define>
+
+<define name="Inline.class" combine="choice">
+  <ref name="bdo"/>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/csismap.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/csismap.rng
new file mode 100644
index 0000000..7ad9833
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/csismap.rng
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Client-side Image Map Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="area">
+  <element name="area">
+    <ref name="area.attlist"/>
+  </element>
+</define>
+
+<define name="area.attlist">
+  <ref name="Common.attrib"/>
+  <optional>
+    <attribute name="href">
+      <ref name="URI.datatype"/>
+    </attribute>
+  </optional>
+  <ref name="shape.attrib"/>
+  <ref name="coords.attrib"/>
+  <optional>
+    <attribute name="nohref">
+      <value>nohref</value>
+    </attribute>
+  </optional>
+  <attribute name="alt">
+    <ref name="Text.datatype"/>
+  </attribute>
+  <optional>
+    <attribute name="tabindex">
+      <ref name="Number.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="accesskey">
+      <ref name="Character.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="map">
+  <element name="map">
+    <ref name="map.attlist"/>
+    <oneOrMore>
+      <choice>
+        <!-- This does not use Block.mix
+             because loose.dtd doesn't use %Flow; -->
+        <ref name="Block.class"/>
+        <ref name="area"/>
+      </choice>
+    </oneOrMore>
+  </element>
+</define>
+
+<define name="map.attlist">
+  <ref name="CommonIdRequired.attrib"/>
+</define>
+
+<define name="a.attlist" combine="interleave">
+  <ref name="shape.attrib"/>
+  <ref name="coords.attrib"/>
+</define>
+
+<define name="img.attlist" combine="interleave">
+  <ref name="usemap.attlist"/>
+</define>
+
+<define name="object.attlist" combine="interleave">
+  <ref name="usemap.attlist"/>
+</define>
+
+<define name="usemap.attlist">
+  <optional>
+    <attribute name="usemap">
+      <ref name="IDREF.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="shape.attrib">
+  <optional>
+    <attribute name="shape">
+      <choice>
+        <value>rect</value>
+        <value>circle</value>
+        <value>poly</value>
+        <value>default</value>
+      </choice>
+    </attribute>
+  </optional>
+</define>
+
+<define name="coords.attrib">
+  <optional>
+    <attribute name="coords"/>
+  </optional>
+</define>
+
+<define name="Inline.class" combine="choice">
+  <ref name="map"/>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/datatypes.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/datatypes.rng
new file mode 100644
index 0000000..d62631a
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/datatypes.rng
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Datatypes Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+<!-- Length defined for cellpadding/cellspacing -->
+
+<!-- nn for pixels or nn% for percentage length -->
+<define name="Length.datatype">
+  <text/>
+</define>
+
+<!-- space-separated list of link types -->
+<define name="LinkTypes.datatype">
+  <ref name="NMTOKENS.datatype"/>
+</define>
+
+<!-- single or comma-separated list of media descriptors -->
+<define name="MediaDesc.datatype">
+  <text/>
+</define>
+
+<!-- pixel, percentage, or relative -->
+<define name="MultiLength.datatype">
+  <text/>
+</define>
+
+<!-- one or more digits (NUMBER) -->
+<define name="Number.datatype">
+  <text/>
+</define>
+
+<!-- integer representing length in pixels -->
+<define name="Pixels.datatype">
+  <text/>
+</define>
+
+<!-- script expression -->
+<define name="Script.datatype">
+  <text/>
+</define>
+
+<!-- textual content -->
+<define name="Text.datatype">
+  <text/>
+</define>
+
+<!-- Imported Datatypes ................................ -->
+
+<!-- a single character from [ISO10646] -->
+<define name="Character.datatype">
+  <text/>
+</define>
+
+<!-- a character encoding, as per [RFC2045] -->
+<define name="Charset.datatype">
+  <text/>
+</define>
+
+<!-- a space separated list of character encodings, as per [RFC2045] -->
+<define name="Charsets.datatype">
+  <text/>
+</define>
+
+<!-- media type, as per [RFC2045] -->
+<define name="ContentType.datatype">
+  <text/>
+</define>
+
+<!-- comma-separated list of media types, as per [RFC2045] -->
+<define name="ContentTypes.datatype">
+  <text/>
+</define>
+
+<!-- date and time information. ISO date format -->
+<define name="Datetime.datatype">
+  <text/>
+</define>
+
+<!-- formal public identifier, as per [ISO8879] -->
+<define name="FPI.datatype">
+  <text/>
+</define>
+
+<!-- a language code, as per [RFC1766] -->
+<define name="LanguageCode.datatype">
+  <data type="language"/>
+</define>
+
+<!-- a Uniform Resource Identifier, see [URI] -->
+<define name="URI.datatype">
+  <data type="anyURI"/>
+</define>
+
+<!-- a space-separated list of Uniform Resource Identifiers, see [URI] -->
+<define name="URIs.datatype">
+  <text/>
+</define>
+
+<define name="NMTOKEN.datatype">
+  <data type="NMTOKEN"/>
+</define>
+
+<define name="NMTOKENS.datatype">
+  <data type="NMTOKENS"/>
+</define>
+
+<define name="ID.datatype">
+  <data type="ID"/>
+</define>
+
+<define name="IDREF.datatype">
+  <data type="IDREF"/>
+</define>
+
+<define name="IDREFS.datatype">
+  <data type="IDREFS"/>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/edit.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/edit.rng
new file mode 100644
index 0000000..ad98c89
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/edit.rng
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Edit Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="del">
+  <element name="del">
+    <ref name="del.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="del.attlist">
+  <ref name="Edit.attrib"/>
+</define>
+
+<define name="ins">
+  <element name="ins">
+    <ref name="ins.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="ins.attlist">
+  <ref name="Edit.attrib"/>
+</define>
+
+<define name="Edit.attrib">
+  <optional>
+    <attribute name="cite">
+      <ref name="URI.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="datetime">
+      <ref name="Datetime.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="Edit.class">
+  <choice>
+    <ref name="del"/>
+    <ref name="ins"/>
+  </choice>
+</define>
+
+<define name="Inline.class" combine="choice">
+  <ref name="Edit.class"/>
+</define>
+
+<define name="Block.class" combine="choice">
+  <ref name="Edit.class"/>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/events.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/events.rng
new file mode 100644
index 0000000..e13432f
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/events.rng
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Events Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="a.attlist" combine="interleave">
+  <optional>
+    <attribute name="onblur">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="onfocus">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="area.attlist" combine="interleave">
+  <optional>
+    <attribute name="onblur">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="onfocus">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="form.attlist" combine="interleave">
+  <optional>
+    <attribute name="onreset">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="onsubmit">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="body.attlist" combine="interleave">
+  <optional>
+    <attribute name="onload">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="onunload">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="label.attlist" combine="interleave">
+  <optional>
+    <attribute name="onblur">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="onfocus">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="input.attlist" combine="interleave">
+  <optional>
+    <attribute name="onblur">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="onchange">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="onfocus">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="onselect">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="select.attlist" combine="interleave">
+  <optional>
+    <attribute name="onblur">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="onchange">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="onfocus">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="textarea.attlist" combine="interleave">
+  <optional>
+    <attribute name="onblur">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="onchange">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="onfocus">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="onselect">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="button.attlist" combine="interleave">
+  <optional>
+    <attribute name="onblur">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="onfocus">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="Events.attrib">
+  <optional>
+    <attribute name="onclick">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="ondblclick">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="onmousedown">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="onmouseup">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="onmouseover">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="onmousemove">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="onmouseout">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="onkeypress">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="onkeydown">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="onkeyup">
+      <ref name="Script.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="Common.attrib" combine="interleave">
+  <ref name="Events.attrib"/>
+</define>
+
+<define name="CommonIdRequired.attrib" combine="interleave">
+  <ref name="Events.attrib"/>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/form.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/form.rng
new file mode 100644
index 0000000..3189678
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/form.rng
@@ -0,0 +1,209 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Forms Module -->
+<!-- Unlike the DTD implementation, this builds on the basic-form module --><grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<include href="basic-form.rng">
+
+  <define name="select">
+    <element name="select">
+      <ref name="select.attlist"/>
+      <oneOrMore>
+	<choice>
+	  <ref name="option"/>
+	  <ref name="optgroup"/>
+	</choice>
+      </oneOrMore>
+    </element>
+  </define>
+
+</include>
+
+<define name="form.attlist" combine="interleave">
+  <optional>
+    <attribute name="accept-charset">
+      <ref name="Charsets.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="accept">
+      <ref name="ContentTypes.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="input.attlist" combine="interleave">
+  <optional>
+    <attribute name="disabled">
+      <value>disabled</value>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="readonly">
+      <value>readonly</value>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="alt"/>
+  </optional>
+  <optional>
+    <attribute name="tabindex">
+      <ref name="Number.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="accept">
+      <ref name="ContentTypes.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="InputType.class" combine="choice">
+  <choice>
+    <value>image</value>
+    <value>button</value>
+  </choice>
+</define>
+
+<define name="select.attlist" combine="interleave">
+  <optional>
+    <attribute name="disabled">
+      <value>disabled</value>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="tabindex">
+      <ref name="Number.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="option.attlist" combine="interleave">
+  <optional>
+    <attribute name="disabled">
+      <value>disabled</value>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="label">
+      <ref name="Text.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="optgroup">
+  <element name="optgroup">
+    <ref name="optgroup.attlist"/>
+    <oneOrMore>
+      <ref name="option"/>
+    </oneOrMore>
+  </element>
+</define>
+
+<define name="optgroup.attlist">
+  <ref name="Common.attrib"/>
+  <optional>
+    <attribute name="disabled">
+      <value>disabled</value>
+    </attribute>
+  </optional>
+  <attribute name="label">
+    <ref name="Text.datatype"/>
+  </attribute>
+</define>
+
+<define name="textarea.attlist" combine="interleave">
+  <optional>
+    <attribute name="disabled">
+      <value>disabled</value>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="readonly">
+      <value>readonly</value>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="tabindex">
+      <ref name="Number.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="fieldset">
+  <element name="fieldset">
+    <ref name="fieldset.attlist"/>
+    <ref name="legend"/>
+    <ref name="Flow.model"/>
+  </element>
+</define>
+
+<define name="fieldset.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="button">
+  <element name="button">
+    <ref name="button.attlist"/>
+    <ref name="Flow.model"/>
+  </element>
+</define>
+
+<define name="button.attlist">
+  <ref name="Common.attrib"/>
+  <optional>
+    <attribute name="name"/>
+  </optional>
+  <optional>
+    <attribute name="value"/>
+  </optional>
+  <optional>
+    <attribute name="type">
+      <choice>
+        <value>button</value>
+        <value>submit</value>
+        <value>reset</value>
+      </choice>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="disabled">
+      <value>disabled</value>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="tabindex">
+      <ref name="Number.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="accesskey">
+      <ref name="Character.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="legend">
+  <element name="legend">
+    <ref name="legend.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="legend.attlist">
+  <ref name="Common.attrib"/>
+  <optional>
+    <attribute name="accesskey">
+      <ref name="Character.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="Form.class" combine="choice">
+  <ref name="fieldset"/>
+</define>
+
+<define name="Formctrl.class" combine="choice">
+  <ref name="button"/>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/frames.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/frames.rng
new file mode 100644
index 0000000..7b97353
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/frames.rng
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Frames Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<include href="struct.rng">
+
+  <define name="html">
+    <element name="html">
+      <ref name="html.attlist"/>
+      <ref name="head"/>
+      <ref name="frameset"/>
+    </element>
+  </define>
+
+</include>
+
+<define name="frameset">
+  <element name="frameset">
+    <ref name="frameset.attlist"/>
+    <interleave>
+      <oneOrMore>
+	<choice>
+	  <ref name="frameset"/>
+	  <ref name="frame"/>
+	</choice>
+      </oneOrMore>
+      <optional>
+	<ref name="noframes"/>
+      </optional>
+    </interleave>
+  </element>
+</define>
+
+<define name="frameset.attlist">
+  <ref name="Core.attrib"/>
+  <optional>
+    <attribute name="cols">
+      <ref name="MultiLength.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="rows">
+      <ref name="MultiLength.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="frame">
+  <element name="frame">
+    <ref name="frame.attlist"/>
+  </element>
+</define>
+
+<define name="frame.attlist">
+  <ref name="Core.attrib"/>
+  <optional>
+    <attribute name="longdesc">
+      <ref name="URI.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="src">
+      <ref name="URI.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="frameborder">
+      <choice>
+        <value>1</value>
+        <value>0</value>
+      </choice>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="marginwidth">
+      <ref name="Pixels.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="marginheight">
+      <ref name="Pixels.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="noresize">
+      <value>noresize</value>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="scrolling">
+      <choice>
+        <value>yes</value>
+        <value>no</value>
+        <value>auto</value>
+      </choice>
+    </attribute>
+  </optional>
+</define>
+
+<define name="noframes">
+  <element name="noframes">
+    <ref name="noframes.attlist"/>
+    <ref name="body"/>
+  </element>
+</define>
+
+<define name="noframes.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/hypertext.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/hypertext.rng
new file mode 100644
index 0000000..fb90d95
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/hypertext.rng
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Hypertext Module -->
+<!-- Depends on text module. -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="a">
+  <element name="a">
+    <ref name="a.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="a.attlist">
+  <ref name="Common.attrib"/>
+  <optional>
+    <attribute name="href">
+      <ref name="URI.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="charset">
+      <ref name="Charset.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="type">
+      <ref name="ContentType.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="hreflang">
+      <ref name="LanguageCode.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="rel">
+      <ref name="LinkTypes.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="rev">
+      <ref name="LinkTypes.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="accesskey">
+      <ref name="Character.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="tabindex">
+      <ref name="Number.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="Inline.class" combine="choice">
+  <ref name="a"/>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/iframe.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/iframe.rng
new file mode 100644
index 0000000..3763854
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/iframe.rng
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Iframe Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="iframe">
+  <element name="iframe">
+    <ref name="iframe.attlist"/>
+    <ref name="Flow.model"/>
+  </element>
+</define>
+
+<define name="iframe.attlist">
+  <ref name="Core.attrib"/>
+  <optional>
+    <attribute name="longdesc">
+      <ref name="URI.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="src">
+      <ref name="URI.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="frameborder">
+      <choice>
+        <value>1</value>
+        <value>0</value>
+      </choice>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="width">
+      <ref name="Length.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="height">
+      <ref name="Length.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="marginwidth">
+      <ref name="Pixels.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="marginheight">
+      <ref name="Pixels.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="scrolling">
+      <choice>
+        <value>yes</value>
+        <value>no</value>
+        <value>auto</value>
+      </choice>
+    </attribute>
+  </optional>
+</define>
+
+<define name="Inline.class" combine="choice">
+  <ref name="iframe"/>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/image.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/image.rng
new file mode 100644
index 0000000..1f313f6
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/image.rng
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Image Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="img">
+  <element name="img">
+    <ref name="img.attlist"/>
+  </element>
+</define>
+
+<define name="img.attlist">
+  <ref name="Common.attrib"/>
+  <attribute name="src">
+    <ref name="URI.datatype"/>
+  </attribute>
+  <attribute name="alt">
+    <ref name="Text.datatype"/>
+  </attribute>
+  <optional>
+    <attribute name="longdesc">
+      <ref name="URI.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="height">
+      <ref name="Length.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="width">
+      <ref name="Length.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="Inline.class" combine="choice">
+  <ref name="img"/>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/inlstyle.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/inlstyle.rng
new file mode 100644
index 0000000..70d728a
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/inlstyle.rng
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Inline Style Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="Core.attrib" combine="interleave">
+  <optional>
+    <attribute name="style"/>
+  </optional>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/legacy.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/legacy.rng
new file mode 100644
index 0000000..87a7205
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/legacy.rng
@@ -0,0 +1,502 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Legacy Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="lang.attrib" combine="interleave">
+  <optional>
+    <attribute name="lang">
+      <ref name="LanguageCode.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="basefont">
+  <element name="basefont">
+    <ref name="basefont.attlist"/>
+  </element>
+</define>
+
+<define name="basefont.attlist">
+  <ref name="id.attrib"/>
+  <ref name="Font.attrib"/>
+</define>
+
+<define name="center">
+  <element name="center">
+    <ref name="center.attlist"/>
+    <ref name="Flow.model"/>
+  </element>
+</define>
+
+<define name="center.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="font">
+  <element name="font">
+    <ref name="font.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="font.attlist">
+  <ref name="Core.attrib"/>
+  <ref name="I18n.attrib"/>
+  <ref name="Font.attrib"/>
+</define>
+
+<define name="Font.attrib">
+  <optional>
+    <attribute name="size"/>
+  </optional>
+  <optional>
+    <attribute name="color">
+      <ref name="Color.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="face"/>
+  </optional>
+</define>
+
+<define name="s">
+  <element name="s">
+    <ref name="s.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="s.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="strike">
+  <element name="strike">
+    <ref name="strike.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="strike.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="u">
+  <element name="u">
+    <ref name="u.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="u.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="dir">
+  <element name="dir">
+    <ref name="dir.attlist"/>
+    <oneOrMore>
+      <ref name="li.noblock"/>
+    </oneOrMore>
+  </element>
+</define>
+
+<define name="dir.attlist">
+  <ref name="Common.attrib"/>
+  <optional>
+    <attribute name="compact">
+      <value>compact</value>
+    </attribute>
+  </optional>
+</define>
+
+<define name="menu">
+  <element name="menu">
+    <ref name="menu.attlist"/>
+    <oneOrMore>
+      <ref name="li.noblock"/>
+    </oneOrMore>
+  </element>
+</define>
+
+<define name="menu.attlist">
+  <ref name="Common.attrib"/>
+  <optional>
+    <attribute name="compact">
+      <value>compact</value>
+    </attribute>
+  </optional>
+</define>
+
+<define name="li.noblock">
+  <element name="li">
+    <ref name="li.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="isindex">
+  <element name="isindex">
+    <ref name="isindex.attlist"/>
+  </element>
+</define>
+
+<define name="isindex.attlist">
+  <ref name="Core.attrib"/>
+  <ref name="I18n.attrib"/>
+  <optional>
+    <attribute name="prompt">
+      <ref name="Text.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="applet.attlist" combine="interleave">
+  <optional>
+    <attribute name="align">
+      <choice>
+	<value>top</value>
+	<value>middle</value>
+	<value>bottom</value>
+	<value>left</value>
+	<value>right</value>
+      </choice>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="hspace">
+      <ref name="Pixels.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="vspace">
+      <ref name="Pixels.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="body.attlist" combine="interleave">
+  <optional>
+    <attribute name="background">
+      <ref name="URI.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="bgcolor">
+      <ref name="Color.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="text">
+      <ref name="Color.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="link">
+      <ref name="Color.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="vlink">
+      <ref name="Color.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="alink">
+      <ref name="Color.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="br.attlist" combine="interleave">
+  <optional>
+    <attribute name="clear">
+      <choice>
+	<value>left</value>
+	<value>all</value>
+	<value>right</value>
+	<value>none</value>
+      </choice>
+    </attribute>
+  </optional>
+</define>
+
+<define name="caption.attlist" combine="interleave">
+  <ref name="align.attrib"/>
+</define>
+
+<define name="div.attlist" combine="interleave">
+  <ref name="align.attrib"/>
+</define>
+
+<!-- Not in the CR, but surely an error. -->
+
+<define name="dl.attlist" combine="interleave">
+  <optional>
+    <attribute name="compact">
+      <value>compact</value>
+    </attribute>
+  </optional>
+</define>
+
+<define name="Heading.attrib" combine="interleave">
+  <ref name="align.attrib"/>
+</define>
+
+<define name="hr.attlist" combine="interleave">
+  <optional>
+    <attribute name="align">
+      <choice>
+	<value>left</value>
+	<value>center</value>
+	<value>right</value>
+      </choice>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="noshade">
+      <value>noshade</value>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="size">
+      <ref name="Pixels.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="width">
+      <ref name="Pixels.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="img.attlist" combine="interleave">
+  <optional>
+    <attribute name="align">
+      <choice>
+	<value>top</value>
+	<value>middle</value>
+	<value>bottom</value>
+	<value>left</value>
+	<value>right</value>
+      </choice>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="border">
+      <ref name="Pixels.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="hspace">
+      <ref name="Pixels.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="vspace">
+      <ref name="Pixels.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="input.attlist" combine="interleave">
+  <ref name="align.attrib"/>
+</define>
+
+<define name="legend.attlist" combine="interleave">
+  <optional>
+    <attribute name="align">
+      <choice>
+	<value>top</value>
+	<value>bottom</value>
+	<value>left</value>
+	<value>right</value>
+      </choice>
+    </attribute>
+  </optional>
+</define>
+
+<define name="li.attlist" combine="interleave">
+  <optional>
+    <attribute name="type"/>
+  </optional>
+  <optional>
+    <attribute name="value"/>
+  </optional>
+</define>
+
+<define name="object.attlist" combine="interleave">
+  <optional>
+    <attribute name="align">
+      <choice>
+	<value>top</value>
+	<value>middle</value>
+	<value>bottom</value>
+	<value>left</value>
+	<value>right</value>
+      </choice>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="border">
+      <ref name="Pixels.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="hspace">
+      <ref name="Pixels.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="vspace">
+      <ref name="Pixels.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="ol.attlist" combine="interleave">
+  <optional>
+    <attribute name="type"/>
+  </optional>
+  <optional>
+    <attribute name="compact">
+      <value>compact</value>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="start"/>
+  </optional>
+</define>
+
+<define name="p.attlist" combine="interleave">
+  <ref name="align.attrib"/>
+</define>
+
+<define name="pre.attlist" combine="interleave">
+  <optional>
+    <attribute name="width">
+      <ref name="Length.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="script.attlist" combine="interleave">
+  <optional>
+    <attribute name="language">
+      <ref name="ContentType.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="table.attlist" combine="interleave">
+  <ref name="align.attrib"/>
+  <optional>
+    <attribute name="bgcolor">
+      <ref name="Color.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="tr.attlist" combine="interleave">
+  <optional>
+    <attribute name="bgcolor">
+      <ref name="Color.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="Cell.attrib" combine="interleave">
+  <optional>
+    <attribute name="nowrap">
+      <value>nowrap</value>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="bgcolor">
+      <ref name="Color.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="width">
+      <ref name="Pixels.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="height">
+      <ref name="Pixels.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="ul.attlist" combine="interleave">
+  <optional>
+    <attribute name="type"/>
+  </optional>
+  <optional>
+    <attribute name="compact">
+      <value>compact</value>
+    </attribute>
+  </optional>
+</define>
+
+<define name="align.attrib">
+  <optional>
+    <attribute name="align">
+      <choice>
+	<value>left</value>
+	<value>all</value>
+	<value>right</value>
+	<value>none</value>
+      </choice>
+    </attribute>
+  </optional>
+</define>
+
+<define name="Color.datatype">
+  <text/>
+</define>
+
+<define name="Inline.class" combine="choice">
+  <choice>
+    <ref name="font"/>
+    <ref name="basefont"/>
+    <ref name="s"/>
+    <ref name="strike"/>
+    <ref name="u"/>
+  </choice>
+</define>
+
+<define name="Block.class" combine="choice">
+  <choice>
+    <ref name="center"/>
+    <ref name="isindex"/>
+  </choice>
+</define>
+
+<define name="List.class" combine="choice">
+  <choice>
+    <ref name="dir"/>
+    <ref name="menu"/>
+  </choice>
+</define>
+
+<define name="head.content" combine="interleave">
+  <optional>
+    <ref name="isindex"/>
+  </optional>
+</define>
+
+<define name="Block.mix" combine="choice">
+  <choice>
+    <text/>
+    <ref name="Inline.class"/>
+  </choice>
+</define>
+
+<!-- With the legacy module and the frames modules, the html
+     element can contain either body or frameset. -->
+<define name="frameset" combine="choice">
+  <ref name="body"/>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/link.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/link.rng
new file mode 100644
index 0000000..3cce22d
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/link.rng
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Link Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="link">
+  <element name="link">
+    <ref name="link.attlist"/>
+  </element>
+</define>
+
+<define name="link.attlist">
+  <ref name="Common.attrib"/>
+  <optional>
+    <attribute name="charset">
+      <ref name="Charset.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="href">
+      <ref name="URI.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="hreflang">
+      <ref name="LanguageCode.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="type">
+      <ref name="ContentType.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="rel">
+      <ref name="LinkTypes.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="rev">
+      <ref name="LinkTypes.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="media">
+      <ref name="MediaDesc.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="head.content" combine="interleave">
+  <zeroOrMore>
+    <ref name="link"/>
+  </zeroOrMore>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/list.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/list.rng
new file mode 100644
index 0000000..eb81c1c
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/list.rng
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- List Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="dl">
+  <element name="dl">
+    <ref name="dl.attlist"/>
+    <oneOrMore>
+      <choice>
+	<ref name="dt"/>
+	<ref name="dd"/>
+      </choice>
+    </oneOrMore>
+  </element>
+</define>
+
+<define name="dl.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="dt">
+  <element name="dt">
+    <ref name="dt.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="dt.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="dd">
+  <element name="dd">
+    <ref name="dd.attlist"/>
+    <ref name="Flow.model"/>
+  </element>
+</define>
+
+<define name="dd.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="ol">
+  <element name="ol">
+    <ref name="ol.attlist"/>
+    <oneOrMore>
+      <ref name="li"/>
+    </oneOrMore>
+  </element>
+</define>
+
+<define name="ol.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="ul">
+  <element name="ul">
+    <ref name="ul.attlist"/>
+    <oneOrMore>
+      <ref name="li"/>
+    </oneOrMore>
+  </element>
+</define>
+
+<define name="ul.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="li">
+  <element name="li">
+    <ref name="li.attlist"/>
+    <ref name="Flow.model"/>
+  </element>
+</define>  
+
+<define name="li.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="List.class">
+  <choice>
+    <ref name="ul"/>
+    <ref name="ol"/>
+    <ref name="dl"/>
+  </choice>
+</define>
+
+<define name="Block.class" combine="choice">
+  <ref name="List.class"/>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/meta.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/meta.rng
new file mode 100644
index 0000000..fbccc94
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/meta.rng
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Meta Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="meta">
+  <element name="meta">
+    <ref name="meta.attlist"/>
+  </element>
+</define>
+
+<define name="meta.attlist">
+  <ref name="I18n.attrib"/>
+  <optional>
+    <attribute name="http-equiv">
+      <ref name="NMTOKEN.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="name">
+      <ref name="NMTOKEN.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="content"/>
+  </optional>
+  <optional>
+    <attribute name="scheme"/>
+  </optional>
+</define>
+
+<define name="head.content" combine="interleave">
+  <zeroOrMore>
+    <ref name="meta"/>
+  </zeroOrMore>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/nameident.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/nameident.rng
new file mode 100644
index 0000000..dcd8633
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/nameident.rng
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Name Identification Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="a.attlist" combine="interleave">
+  <ref name="name.attlist"/>
+</define>
+
+<define name="applet.attlist" combine="interleave">
+  <ref name="name.attlist"/>
+</define>
+
+<define name="form.attlist" combine="interleave">
+  <ref name="name.attlist"/>
+</define>
+
+<define name="frame.attrib" combine="interleave">
+  <ref name="name.attlist"/>
+</define>
+
+<define name="iframe.attlist" combine="interleave">
+  <ref name="name.attlist"/>
+</define>
+
+<define name="img.attlist" combine="interleave">
+  <ref name="name.attlist"/>
+</define>
+
+<define name="map.attlist" combine="interleave">
+  <ref name="name.attlist"/>
+</define>
+
+<define name="name.attlist">
+  <optional>
+    <attribute name="name"/>
+  </optional>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/object.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/object.rng
new file mode 100644
index 0000000..3f5ef9a
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/object.rng
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Object Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="object">
+  <element name="object">
+    <ref name="object.attlist"/>
+    <!-- No restrictions on mixed content in TREX. -->
+    <zeroOrMore>
+      <ref name="param"/>
+    </zeroOrMore>
+    <ref name="Flow.model"/>
+  </element>
+</define>
+
+<define name="object.attlist">
+  <ref name="Common.attrib"/>
+  <optional>
+    <attribute name="declare">
+      <value>declare</value>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="classid">
+      <ref name="URI.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="codebase">
+      <ref name="URI.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="data">
+      <ref name="URI.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="type">
+      <ref name="ContentType.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="codetype">
+      <ref name="ContentType.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="archive">
+      <ref name="URIs.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="standby">
+      <ref name="Text.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="height">
+      <ref name="Length.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="width">
+      <ref name="Length.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="name"/>
+  </optional>
+  <optional>
+    <attribute name="tabindex">
+      <ref name="Number.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="Inline.class" combine="choice">
+  <ref name="object"/>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/param.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/param.rng
new file mode 100644
index 0000000..20a7a82
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/param.rng
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Param Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="param">
+  <element name="param">
+    <ref name="param.attlist"/>
+  </element>
+</define>
+
+<define name="param.attlist">
+  <ref name="id.attrib"/>
+  <attribute name="name"/>
+  <optional>
+    <attribute name="value"/>
+  </optional>
+  <optional>
+    <attribute name="valuetype">
+      <choice>
+	<value>data</value>
+	<value>ref</value>
+	<value>object</value>
+      </choice>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="type">
+      <ref name="ContentType.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/pres.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/pres.rng
new file mode 100644
index 0000000..8526d16
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/pres.rng
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="hr">
+  <element name="hr">
+    <ref name="hr.attlist"/>
+  </element>
+</define>
+
+<define name="hr.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="Block.class" combine="choice">
+  <ref name="hr"/>
+</define>
+
+<define name="b">
+  <element name="b">
+    <ref name="b.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="b.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="big">
+  <element name="big">
+    <ref name="big.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="big.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="i">
+  <element name="i">
+    <ref name="i.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="i.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="small">
+  <element name="small">
+    <ref name="small.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="small.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="sub">
+  <element name="sub">
+    <ref name="sub.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="sub.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="sup">
+  <element name="sup">
+    <ref name="sup.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="sup.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="tt">
+  <element name="tt">
+    <ref name="tt.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="tt.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="Inline.class" combine="choice">
+  <choice>
+    <ref name="b"/>
+    <ref name="big"/>
+    <ref name="i"/>
+    <ref name="small"/>
+    <ref name="sub"/>
+    <ref name="sup"/>
+    <ref name="tt"/>
+  </choice>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/ruby.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/ruby.rng
new file mode 100644
index 0000000..cc154a5
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/ruby.rng
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="ruby">
+  <element name="ruby">
+    <ref name="ruby.attlist"/>
+    <choice>
+      <group>
+        <ref name="rb"/>
+        <choice>
+          <ref name="rt"/>
+          <group>
+            <ref name="rp"/>
+            <ref name="rt"/>
+            <ref name="rp"/>
+          </group>
+        </choice>
+      </group>
+      <group>
+        <ref name="rbc"/>
+        <ref name="rtc"/>
+        <optional>
+          <ref name="rtc"/>
+        </optional>
+      </group>
+    </choice>
+  </element>
+</define>
+
+<define name="ruby.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="rbc">
+  <element name="rbc">
+    <ref name="rbc.attlist"/>
+    <oneOrMore>
+      <ref name="rb"/>
+    </oneOrMore>
+  </element>
+</define>
+
+<define name="rbc.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="rtc">
+  <element name="rtc">
+    <ref name="rtc.attlist"/>
+    <oneOrMore>
+      <ref name="rt"/>
+    </oneOrMore>
+  </element>
+</define>
+
+<define name="rtc.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="rb">
+  <element name="rb">
+    <ref name="rb.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="rb.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="rt">
+  <element name="rt">
+    <ref name="rt.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="rt.attlist">
+  <ref name="Common.attrib"/>
+  <optional>
+    <attribute name="rt">
+      <ref name="Number.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="rp">
+  <element name="rp">
+    <ref name="rp.attlist"/>
+    <text/>
+  </element>
+</define>
+
+<define name="rp.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="Inline.class" combine="choice">
+  <ref name="ruby"/>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/script.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/script.rng
new file mode 100644
index 0000000..16c200a
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/script.rng
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Script Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="script">
+  <element name="script">
+    <ref name="script.attlist"/>
+    <text/>
+  </element>
+</define>
+
+<define name="script.attlist">
+  <optional>
+    <attribute name="charset">
+      <ref name="Charset.datatype"/>
+    </attribute>
+  </optional>
+  <attribute name="type">
+    <ref name="ContentType.datatype"/>
+  </attribute>
+  <optional>
+    <attribute name="src">
+      <ref name="URI.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="defer">
+      <value>defer</value>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="xml:space">
+      <value>preserve</value>
+    </attribute>
+  </optional>
+</define>
+
+<define name="noscript">
+  <element name="noscript">
+    <ref name="noscript.attlist"/>
+    <ref name="Block.model"/>
+  </element>
+</define>
+
+<define name="noscript.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="head.content" combine="interleave">
+  <zeroOrMore>
+    <ref name="script"/>
+  </zeroOrMore>
+</define>
+
+<define name="Script.class">
+  <choice>
+    <ref name="noscript"/>
+    <ref name="script"/>
+  </choice>
+</define>
+
+<define name="Inline.class" combine="choice">
+  <ref name="Script.class"/>
+</define>
+
+<define name="Block.class" combine="choice">
+  <ref name="Script.class"/>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/ssismap.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/ssismap.rng
new file mode 100644
index 0000000..3aa9fce
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/ssismap.rng
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Server-side Image Map Module -->
+<!-- Depends on image module. -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="img.attlist" combine="interleave">
+  <optional>
+    <attribute name="ismap">
+      <value>ismap</value>
+    </attribute>
+  </optional>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/struct.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/struct.rng
new file mode 100644
index 0000000..bcfdcb7
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/struct.rng
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Structure Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<!--
+<start>
+  <ref name="html"/>
+</start>
+-->
+
+<define name="title">
+  <element name="title">
+    <ref name="title.attlist"/>
+    <text/>
+  </element>
+</define>
+
+<define name="title.attlist">
+  <ref name="I18n.attrib"/>
+</define>
+
+<define name="head">
+  <element name="head">
+    <ref name="head.attlist"/>
+    <ref name="head.content"/>
+  </element>
+</define>
+
+<define name="head.attlist">
+  <ref name="I18n.attrib"/>
+  <ref name="profile.attlist"/>
+</define>
+
+<define name="head.content">
+  <ref name="title"/>
+</define>
+
+<define name="profile.attlist">
+  <optional>
+    <attribute name="profile">
+      <ref name="URI.datatype"/>
+    </attribute>     
+  </optional>
+</define>
+
+<define name="body">
+  <element name="body">
+    <ref name="body.attlist"/>
+    <ref name="Block.model"/>
+  </element>
+</define>
+
+<define name="body.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="html">
+  <element name="html">
+    <ref name="html.attlist"/>
+    <ref name="head"/>
+    <ref name="body"/>
+  </element>
+</define>
+
+<define name="html.attlist">
+  <ref name="XHTML.version.attrib"/>
+  <ref name="I18n.attrib"/>
+</define>
+
+<define name="XHTML.version.attrib">
+  <optional>
+    <attribute name="version">
+      <ref name="FPI.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/style.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/style.rng
new file mode 100644
index 0000000..484722d
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/style.rng
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Style Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="style">
+  <element name="style">
+    <ref name="style.attlist"/>
+    <text/>
+  </element>
+</define>
+
+<define name="style.attlist">
+  <ref name="title.attrib"/>
+  <ref name="I18n.attrib"/>
+  <attribute name="type">
+    <ref name="ContentType.datatype"/>
+  </attribute>
+  <optional>
+    <attribute name="media">
+      <ref name="MediaDesc.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="xml:space">
+      <value>preserve</value>
+    </attribute>
+  </optional>
+</define>
+
+<define name="head.content" combine="interleave">
+  <zeroOrMore>
+    <ref name="style"/>
+  </zeroOrMore>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/table.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/table.rng
new file mode 100644
index 0000000..7e10e4e
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/table.rng
@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Tables Module -->
+<!-- This builds on the basic tables module, unlike with the DTD
+implementation. -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<include href="basic-table.rng">
+
+  <define name="table">
+    <element name="table">
+      <ref name="table.attlist"/>
+      <optional>
+	<ref name="caption"/>
+      </optional>
+      <choice>
+	<zeroOrMore>
+	  <ref name="col"/>
+	</zeroOrMore>
+	<zeroOrMore>
+	  <ref name="colgroup"/>
+	</zeroOrMore>
+      </choice>
+      <choice>
+	<group>
+	  <optional>
+	    <ref name="thead"/>
+	  </optional>
+	  <optional>
+	    <ref name="tfoot"/>
+	  </optional>
+	  <oneOrMore>
+	    <ref name="tbody"/>
+	  </oneOrMore>
+	</group>
+	<oneOrMore>
+	  <ref name="tr"/>
+	</oneOrMore>
+      </choice>
+    </element>
+  </define>
+
+  <define name="th">
+    <element name="th">
+      <ref name="th.attlist"/>
+      <ref name="Flow.model"/>
+    </element>
+  </define>
+
+  <define name="td">
+    <element name="td">
+      <ref name="td.attlist"/>
+      <ref name="Flow.model"/>
+    </element>
+  </define>
+
+  <define name="CellHAlign.attrib">
+    <optional>
+      <attribute name="align">
+	<choice>
+	  <value>left</value>
+	  <value>center</value>
+	  <value>right</value>
+	  <value>justify</value>
+	  <value>char</value>
+	</choice>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="char">
+	<ref name="Character.datatype"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="charoff">
+	<ref name="Length.datatype"/>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="CellVAlign.attrib">
+    <optional>
+      <attribute name="valign">
+	<choice>
+	  <value>top</value>
+	  <value>middle</value>
+	  <value>bottom</value>
+	  <value>baseline</value>
+	</choice>
+      </attribute>
+    </optional>
+  </define>
+
+  <define name="scope.attrib">
+    <optional>
+      <attribute name="scope">
+	<choice>
+	  <value>row</value>
+	  <value>col</value>
+	  <value>rowgroup</value>
+	  <value>colgroup</value>
+	</choice>
+      </attribute>
+    </optional>
+  </define>
+
+</include>
+
+<define name="table.attlist" combine="interleave">
+  <optional>
+    <attribute name="width">
+      <ref name="Length.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="border">
+      <ref name="Pixels.datatype"/>
+    </attribute>
+  </optional>
+  <ref name="frame.attrib"/>
+  <ref name="rules.attrib"/>
+  <optional>
+    <attribute name="cellspacing">
+      <ref name="Length.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="cellpadding">
+      <ref name="Length.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="col">
+  <element name="col">
+    <ref name="col.attlist"/>
+  </element>
+</define>
+
+<define name="col.attlist">
+  <ref name="Common.attrib"/>
+  <optional>
+    <attribute name="span">
+      <ref name="Number.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="width">
+      <ref name="MultiLength.datatype"/>
+    </attribute>
+  </optional>
+  <ref name="CellHAlign.attrib"/>
+  <ref name="CellVAlign.attrib"/>
+</define>
+
+<define name="colgroup">
+  <element name="colgroup">
+    <ref name="colgroup.attlist"/>
+    <zeroOrMore>
+      <ref name="col"/>
+    </zeroOrMore>
+  </element>
+</define>
+
+<define name="colgroup.attlist">
+  <ref name="Common.attrib"/>
+  <optional>
+    <attribute name="span">
+      <ref name="Number.datatype"/>
+    </attribute>
+  </optional>
+  <optional>
+    <attribute name="width">
+      <ref name="MultiLength.datatype"/>
+    </attribute>
+  </optional>
+  <ref name="CellHAlign.attrib"/>
+  <ref name="CellVAlign.attrib"/>
+</define>
+
+<define name="tbody">
+  <element name="tbody">
+    <ref name="tbody.attlist"/>
+    <oneOrMore>
+      <ref name="tr"/>
+    </oneOrMore>
+  </element>
+</define>
+
+<define name="tbody.attlist">
+  <ref name="Common.attrib"/>
+  <ref name="CellHAlign.attrib"/>
+  <ref name="CellVAlign.attrib"/>
+</define>
+
+<define name="thead">
+  <element name="thead">
+    <ref name="thead.attlist"/>
+    <oneOrMore>
+      <ref name="tr"/>
+    </oneOrMore>
+  </element>
+</define>
+
+<define name="thead.attlist">
+  <ref name="Common.attrib"/>
+  <ref name="CellHAlign.attrib"/>
+  <ref name="CellVAlign.attrib"/>
+</define>
+
+<define name="tfoot">
+  <element name="tfoot">
+    <ref name="tfoot.attlist"/>
+    <oneOrMore>
+      <ref name="tr"/>
+    </oneOrMore>
+  </element>
+</define>
+
+<define name="tfoot.attlist">
+  <ref name="Common.attrib"/>
+  <ref name="CellHAlign.attrib"/>
+  <ref name="CellVAlign.attrib"/>
+</define>
+
+<define name="frame.attrib">
+  <optional>
+    <attribute name="frame">
+      <choice>
+        <value>void</value>
+        <value>above</value>
+        <value>below</value>
+        <value>hsides</value>
+        <value>lhs</value>
+        <value>rhs</value>
+        <value>vsides</value>
+        <value>box</value>
+        <value>border</value>
+      </choice>
+    </attribute>
+  </optional>
+</define>
+
+<define name="rules.attrib">
+  <optional>
+    <attribute name="rules">
+      <choice>
+        <value>none</value>
+        <value>groups</value>
+        <value>rows</value>
+        <value>cols</value>
+        <value>all</value>
+      </choice>
+    </attribute>
+  </optional>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/target.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/target.rng
new file mode 100644
index 0000000..b13f4ca
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/target.rng
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Target Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="a.attlist" combine="interleave">
+  <ref name="target.attrib"/>
+</define>
+
+<define name="area.attlist" combine="interleave">
+  <ref name="target.attrib"/>
+</define>
+
+<define name="base.attlist" combine="interleave">
+  <ref name="target.attrib"/>
+</define>
+
+<define name="link.attrib" combine="interleave">
+  <ref name="target.attrib"/>
+</define>
+
+<define name="form.attlist" combine="interleave">
+  <ref name="target.attrib"/>
+</define>
+
+<define name="target.attrib">
+  <optional>
+    <attribute name="target"/>
+  </optional>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/text.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/text.rng
new file mode 100644
index 0000000..c380a7c
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xhtml/text.rng
@@ -0,0 +1,338 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Text Module -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+
+<define name="br">
+  <element name="br">
+    <ref name="br.attlist"/>
+    <empty/>
+  </element>
+</define>
+
+<define name="br.attlist">
+  <ref name="Core.attrib"/>
+</define>
+
+<define name="span">
+  <element name="span">
+    <ref name="span.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="span.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="abbr">
+  <element name="abbr">
+    <ref name="abbr.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="abbr.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="acronym">
+  <element name="acronym">
+    <ref name="acronym.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="acronym.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="cite">
+  <element name="cite">
+    <ref name="cite.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="cite.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="code">
+  <element name="code">
+    <ref name="code.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="code.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="dfn">
+  <element name="dfn">
+    <ref name="dfn.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="dfn.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="em">
+  <element name="em">
+    <ref name="em.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="em.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="kbd">
+  <element name="kbd">
+    <ref name="kbd.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="kbd.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="q">
+  <element name="q">
+    <ref name="q.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="q.attlist">
+  <ref name="Common.attrib"/>
+  <optional>
+    <attribute name="cite">
+      <ref name="URI.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="samp">
+  <element name="samp">
+    <ref name="samp.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="samp.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="strong">
+  <element name="strong">
+    <ref name="strong.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="strong.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="var">
+  <element name="var">
+    <ref name="var.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="var.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="div">
+  <element name="div">
+    <ref name="div.attlist"/>
+    <ref name="Flow.model"/>
+  </element>
+</define>
+
+<define name="div.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="p">
+  <element name="p">
+    <ref name="p.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="p.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="address">
+  <element name="address">
+    <ref name="address.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="address.attlist">
+  <ref name="Common.attrib"/>
+</define>
+
+<define name="blockquote">
+  <element name="blockquote">
+    <ref name="blockquote.attlist"/>
+    <ref name="Block.model"/>
+  </element>
+</define>
+
+<define name="blockquote.attlist">
+  <ref name="Common.attrib"/>
+  <optional>
+    <attribute name="cite">
+      <ref name="URI.datatype"/>
+    </attribute>
+  </optional>
+</define>
+
+<define name="pre">
+  <element name="pre">
+    <ref name="pre.attlist"/>
+    <ref name="Inline.model"/>
+  </element>
+</define>
+
+<define name="pre.attlist">
+  <ref name="Common.attrib"/>
+  <optional>
+    <attribute name="xml:space">
+      <value>preserve</value>
+    </attribute>
+  </optional>
+</define>
+
+<define name="h1">
+  <element name="h1">
+    <ref name="Heading.attrib"/>
+    <ref name="Heading.content"/>
+  </element>
+</define>
+ 
+<define name="h2">
+  <element name="h2">
+    <ref name="Heading.attrib"/>
+    <ref name="Heading.content"/>
+  </element>
+</define>
+ 
+<define name="h3">
+  <element name="h3">
+    <ref name="Heading.attrib"/>
+    <ref name="Heading.content"/>
+  </element>
+</define>
+ 
+<define name="h4">
+  <element name="h4">
+    <ref name="Heading.attrib"/>
+    <ref name="Heading.content"/>
+  </element>
+</define>
+ 
+<define name="h5">
+  <element name="h5">
+    <ref name="Heading.attrib"/>
+    <ref name="Heading.content"/>
+  </element>
+</define>
+
+<define name="h6">
+  <element name="h6">
+    <ref name="Heading.attrib"/>
+    <ref name="Heading.content"/>
+  </element>
+</define>
+
+<define name="Heading.attrib">
+  <ref name="Common.attrib"/>
+</define>
+ 
+<define name="Heading.content">
+  <ref name="Inline.model"/>
+</define>
+
+<define name="Heading.class">
+  <choice>
+    <ref name="h1"/>
+    <ref name="h2"/>
+    <ref name="h3"/>
+    <ref name="h4"/>
+    <ref name="h5"/>
+    <ref name="h6"/>
+  </choice>
+</define>
+
+<define name="Block.class">
+  <choice>
+    <ref name="address"/>
+    <ref name="blockquote"/>
+    <ref name="div"/>
+    <ref name="p"/>
+    <ref name="pre"/>
+    <ref name="Heading.class"/>
+  </choice>
+</define>
+
+<define name="Inline.class">
+  <choice>
+    <ref name="abbr"/>
+    <ref name="acronym"/>
+    <ref name="br"/>
+    <ref name="cite"/>
+    <ref name="code"/>
+    <ref name="dfn"/>
+    <ref name="em"/>
+    <ref name="kbd"/>
+    <ref name="q"/>
+    <ref name="samp"/>
+    <ref name="span"/>
+    <ref name="strong"/>
+    <ref name="var"/>
+  </choice>
+</define>
+
+<define name="Inline.model">
+  <zeroOrMore>
+    <choice>
+      <text/>
+      <ref name="Inline.class"/>
+    </choice>
+  </zeroOrMore>
+</define>
+
+<!-- This is redefined by the legacy module to include inlines. -->
+<define name="Block.mix">
+  <ref name="Block.class"/>
+</define>
+
+<define name="Block.model">
+  <oneOrMore>
+    <ref name="Block.mix"/>
+  </oneOrMore>
+</define>
+
+<define name="Flow.model">
+  <zeroOrMore>
+    <choice>
+      <text/>
+      <ref name="Inline.class"/>
+      <ref name="Block.class"/>
+    </choice>
+  </zeroOrMore>
+</define>
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/rng/xmldsig-core-schema.rng b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xmldsig-core-schema.rng
new file mode 100644
index 0000000..99db430
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/rng/xmldsig-core-schema.rng
@@ -0,0 +1,341 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- http://www.xml.com/lpt/a/2002/01/23/relaxng.html -->
+<!-- http://www.oasis-open.org/committees/relax-ng/tutorial-20011203.html -->
+<!-- http://www.zvon.org/xxl/XMLSchemaTutorial/Output/ser_wildcards_st8.html -->
+<!-- http://lists.oasis-open.org/archives/relax-ng-comment/200206/maillist.html -->
+
+<grammar xmlns='http://relaxng.org/ns/structure/1.0'
+        xmlns:ds='http://www.w3.org/2000/09/xmldsig#'
+        xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
+        ns='http://www.w3.org/2000/09/xmldsig#'
+        datatypeLibrary='http://www.w3.org/2001/XMLSchema-datatypes'>
+
+<!--
+    <start combine="choice">
+            <element name='Signature'><ref name='SignatureType'/></element>
+    </start>   
+   -->
+    
+    <define name='CryptoBinary'>
+        <data type='base64Binary'/>
+    </define>
+    
+    <define name='SignatureType'>
+        <element name='SignedInfo'><ref name='SignedInfoType'/></element>
+        <element name='SignatureValue'><ref name='SignatureValueType'/></element>
+        <optional><element name='KeyInfo'><ref name='KeyInfoType'/></element></optional>
+        <zeroOrMore><element name='Object'><ref name='ObjectType'/></element></zeroOrMore>
+        <optional><attribute name='Id'><data type='ID'/></attribute></optional>
+        <optional><attribute name='xsi:schemaLocation'/></optional>
+    </define>
+
+    <define name='SignatureValueType'>
+        <data type='base64Binary'/>
+        <optional><attribute name='Id'><data type='ID'/></attribute></optional>
+    </define>
+    
+<!-- Start SignedInfo -->
+    
+    <define name='SignedInfoType'>
+        <element name='CanonicalizationMethod'><ref name='CanonicalizationMethodType'/></element>
+        <element name='SignatureMethod'><ref name='SignatureMethodType'/></element>
+        <optional><element name='KeyInfo'><ref name='KeyInfoType'/></element></optional>
+        <oneOrMore><element name='Reference'><ref name='ReferenceType'/></element></oneOrMore>
+        <optional><attribute name='Id'><data type='ID'/></attribute></optional>
+    </define>    
+
+    <define name='CanonicalizationMethodType'>
+        <zeroOrMore><ref name='anyThing'/></zeroOrMore>
+        <optional><attribute name='Algorithm'><data type='anyURI'/></attribute></optional>
+    </define>    
+
+
+    <define name='SignatureMethodType'>
+        <optional><element name='HMACOutputLength'><data type='integer'/></element></optional>
+        <zeroOrMore><ref name='anyThing'/></zeroOrMore>
+        <optional><attribute name='Algorithm'><data type='anyURI'/></attribute></optional>
+    </define>    
+        
+<!-- Start Reference -->
+    
+    <define name='ReferenceType'>
+        <optional><element name='Transforms'><ref name='TransformsType'/></element></optional>
+        <element name='DigestMethod'><ref name='DigestMethodType'/></element>
+        <element name='DigestValue'><ref name='DigestValueType'/></element>
+        <optional><attribute name='Type'><data type='anyURI'/></attribute></optional>
+        <optional><attribute name='URI'><data type='anyURI'/></attribute></optional>
+        <optional><attribute name='Id'><data type='ID'/></attribute></optional>
+     </define>
+
+    <define name='TransformsType'>
+        <oneOrMore><element name='Transform'><ref name='TransformType'/></element></oneOrMore>
+    </define>
+
+    <define name='TransformType'>
+        <optional><element name='XPath'><data type='string'/></element></optional>
+        <zeroOrMore><ref name='anyThing'/></zeroOrMore>
+        <attribute name='Algorithm'><data type='anyURI'/></attribute>
+    </define>    
+
+<!-- End Reference -->
+
+    <define name='DigestMethodType'>
+        <zeroOrMore><ref name='anyThing'/></zeroOrMore>
+        <attribute name='Algorithm'><data type='anyURI'/></attribute>
+    </define>   
+
+    <define name='DigestValueType'>
+        <data type='base64Binary'/>
+    </define>  
+    
+<!-- End SignedInfo -->
+
+<!-- Start KeyInfo -->
+    
+    <define name='KeyInfoType'>
+        <oneOrMore>
+            <choice>
+                <element name='KeyName'><data type='string'/></element>
+                <element name='KeyValue'><ref name='KeyValueType'/></element>
+                <element name='RetrievalMethod'><ref name='RetrievalMethodType'/></element>
+                <element name='X509Data'><ref name='X509DataType'/></element>
+                <element name='PGPData'><ref name='PGPDataType'/></element>
+                <element name='SPKIData'><ref name='SPKIDataType'/></element>
+                <element name='MgmtData'><data type='string'/></element>
+                <ref name='anyThing'/>
+            </choice>
+        </oneOrMore>
+        <optional><attribute name='Id'><data type='ID'/></attribute></optional>
+</define>
+
+    <define name='KeyValueType'>
+            <choice>
+                <text/>
+                <element name='DSAKeyValue'><ref name='DSAKeyValueType'/></element>
+                <element name='RSAKeyValue'><ref name='RSAKeyValueType'/></element>
+                <ref name='anyThing'/>
+            </choice>
+    </define>
+
+    <define name='RetrievalMethodType'>
+        <optional><element name='Transforms'><ref name='TransformsType'/></element></optional>
+        <optional><attribute name='Type'><data type='anyURI'/></attribute></optional>
+        <optional><attribute name='URI'><data type='anyURI'/></attribute></optional>
+    </define>
+
+<!-- Start X509Data -->
+
+    <define name='X509DataType'>
+        <oneOrMore>
+            <choice>
+                <element name='X509IssuerSerial'>
+                    <element name='X509IssuerName'>
+                        <data type='string'/>
+                    </element>
+                    <element name='X509SerialNumber'>
+                        <data type='integer'/>
+                    </element>
+                </element>
+                <element name='X509SKI'>
+                    <data type='base64Binary'/>
+                </element>
+                <element name='X509SubjectName'>
+                    <data type='string'/>
+                </element>
+                <element name='X509Certificate'>
+                    <data type='base64Binary'/>
+                </element>
+                <element name='X509CRL'>
+                    <data type='base64Binary'/>
+                </element>
+                <ref name='anyThing'/>
+            </choice>
+        </oneOrMore>
+    </define>
+
+<!-- End X509Data -->
+
+<!-- Begin PGPData -->
+
+    <define name='PGPDataType'>
+        <choice>
+            <group>
+                <element name='PGPKeyID'>
+                    <data type='base64Binary'/>
+                </element>
+                <optional>
+                    <element name='PGPKeyPacket'>
+                        <data type='base64Binary'/>
+                    </element>
+                </optional>
+                <zeroOrMore>
+                    <ref name='anyThing'/>
+                </zeroOrMore>
+            </group>
+            <group>
+                <element name='PGPKeyPacket'>
+                    <data type='base64Binary'/>
+                </element>
+                <zeroOrMore>
+                    <ref name='anyThing'/>
+                </zeroOrMore>
+            </group>
+        </choice>
+    </define>
+
+<!-- End PGPData -->
+
+<!-- Begin SPKIData -->
+
+    <define name='SPKIDataType'>
+        <oneOrMore>
+            <element name='SPKISexp'>
+                <data type='base64Binary'/>
+            </element>
+            <optional>
+                <ref name='anyThing'/>
+            </optional>
+        </oneOrMore>
+    </define>
+    
+<!-- End SPKIData -->
+
+<!-- End KeyInfo -->
+
+
+<!-- Start Object (Manifest, SignatureProperty) -->
+
+    <define name='ObjectType'>
+        <zeroOrMore>
+            <choice>
+                <element name='Manifest'><ref name='ManifestType'/></element>
+                <element name='SignatureProperties'><ref name='SignaturePropertiesType'/></element>                
+                <ref name='anyThing'/>
+            </choice>
+        </zeroOrMore>
+        <optional>
+            <attribute name='Encoding'>
+                <data type='anyURI'/>
+            </attribute>
+        </optional>
+        <optional>
+            <attribute name='MimeType'>
+                <data type='string'/>
+            </attribute>
+        </optional>
+        <optional>
+            <attribute name='Id'>
+                <data type='ID'/>
+            </attribute>
+        </optional>
+    </define>
+
+    <define name='ManifestType'>
+        <oneOrMore>
+            <element name='Reference'><ref name='ReferenceType'/></element>
+        </oneOrMore>
+        <optional><attribute name='Id'><data type='ID'/></attribute></optional>
+    </define>
+
+    <define name='SignaturePropertiesType'>
+        <oneOrMore>
+            <element name='SignatureProperty'><ref name='SignaturePropertyType'/></element>
+        </oneOrMore>
+        <optional>
+            <attribute name='Id'>
+                <data type='ID'/>
+            </attribute>
+        </optional>
+    </define>
+
+    <define name='SignaturePropertyType'>
+        <oneOrMore><ref name='anyThing'/></oneOrMore>
+        <optional>
+            <attribute name='Id'>
+                <data type='ID'/>
+            </attribute>
+        </optional>
+        <attribute name='Target'>
+            <data type='anyURI'/>
+        </attribute>
+    </define>
+
+<!-- End Object (Manifest, SignatureProperty) -->
+
+
+<!-- Start KeyValue Element-types -->
+
+    <define name='DSAKeyValueType'>
+        <optional>
+            <element name='P'>
+                <ref name='CryptoBinary'/>
+            </element>
+            <element name='Q'>
+                <ref name='CryptoBinary'/>
+            </element>
+        </optional>
+        <optional>
+            <element name='G'>
+                <ref name='CryptoBinary'/>
+            </element>
+        </optional>
+        <element name='Y'>
+            <ref name='CryptoBinary'/>
+        </element>
+        <optional>
+            <element name='J'>
+                <ref name='CryptoBinary'/>
+            </element>
+        </optional>
+        <optional>
+            <element name='Seed'>
+                <ref name='CryptoBinary'/>
+            </element>
+            <element name='PgenCounter'>
+                <ref name='CryptoBinary'/>
+            </element>
+        </optional>
+    </define>
+
+    <define name='RSAKeyValueType'>
+        <element name='Modulus'>
+            <ref name='CryptoBinary'/>
+        </element>
+        <element name='Exponent'>
+            <ref name='CryptoBinary'/>
+        </element>
+    </define>
+
+
+<!-- End KeyValue Element-types -->
+
+<!-- End Signature -->
+
+
+        <!-- This should emulate the ANY content model under lax validation -->
+        <define name='anyThing'>
+            <zeroOrMore>
+                <choice>
+                    <text/>
+                    <element>
+                        <!-- "except" provided for DTD compatibility -->
+                        <!-- [1] ns='http://www.oasis-open.org/committees/relax-ng/compatibility.html#id' -->
+                        <anyName>
+                            <except>
+                                <nsName/>
+                                <!--  <nsName ns='http://www.w3.org/2001/04/xmlenc#'/>  -->
+                            </except>
+                        </anyName>
+                        <ref name='anyThing'/>
+                        <zeroOrMore>
+                            <attribute>
+                              <anyName/>
+                            </attribute>
+                        </zeroOrMore>
+                    </element>
+                </choice>
+            </zeroOrMore>
+            </define>
+            
+
+</grammar>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/sch/id-unique.sch b/src/main/resources/com/adobe/epubcheck/schema/20/sch/id-unique.sch
new file mode 100644
index 0000000..202b6aa
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/sch/id-unique.sch
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://purl.oclc.org/dsdl/schematron">
+	<pattern id="id-unique" xmlns="http://purl.oclc.org/dsdl/schematron">
+	    <!-- note: assumes that NCName lexical constraints are tested elsewhere -->
+	    <let name="id-set" value="//*[@id]"/>
+	    <rule context="*[@id]">
+	        <assert test="count($id-set[@id = current()/@id]) = 1"
+	            >Duplicate ID '<value-of select="current()/@id"/>'</assert>
+	    </rule>
+	</pattern>
+</schema>    
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/sch/ncx.sch b/src/main/resources/com/adobe/epubcheck/schema/20/sch/ncx.sch
new file mode 100644
index 0000000..a4f4e5d
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/sch/ncx.sch
@@ -0,0 +1,88 @@
+<sch:schema xmlns:sch="http://www.ascc.net/xml/schematron">
+  <!-- 
+  	A Schematron schema for NCX version 2005-1
+  	
+  	Adopted from Z3986 conformance validator ("ZedVal") schema
+  	available in original at http://daisymfc.svn.sourceforge.net/viewvc/daisymfc/trunk/dmfc/src/org/daisy/util/xml/catalog/z39862005/ncx-2005-1.rng?view=log 
+  	
+  	This schema uses Schematron 1.5 for integration with Jing, and
+  	to get line/column locators in reported errors, as implemented
+  	by James Clark. It may be upgraded to ISO Schematron in the future.
+  	
+	Latest edit: mgylling 20111220
+	  
+  -->
+  
+  <sch:ns prefix="ncx" uri="http://www.daisy.org/z3986/2005/ncx/"/>
+    
+  <sch:pattern name="ncx_pageTargUniqValTypeComb" id="ncx_pageTargUniqValTypeComb">
+      <!-- pageTarget combination of value and type attributes is unique -->
+      <sch:rule context="ncx:pageList/ncx:pageTarget[@value]">
+        <sch:assert test="count(//ncx:pageTarget[@value=current()/@value and @type=current()/@type])=1">
+          pageTarget combination of value and type is not unique
+        </sch:assert>        
+      </sch:rule>
+  </sch:pattern>
+  
+  <sch:pattern name="ncx_playOrderOrigin" id="ncx_playOrderOrigin">
+      <!-- The sequence of play orders includes one with the value 1 -->
+      <sch:rule context="ncx:ncx//*[@playOrder]">
+        <sch:assert test="count(//*[@playOrder='1'])>0">
+          the first playOrder value is not 1
+        </sch:assert>
+      </sch:rule>
+  </sch:pattern>
+
+  <sch:pattern name="ncx_multiNavLabel" id="ncx_multiNavLabel">
+      <!-- multiple navLabels within an NCX node must have unique xml:lang values -->
+      <sch:rule context="ncx:navLabel">
+      <sch:assert test="count(../ncx:navLabel[@xml:lang=current()/@xml:lang])<2">
+          Multiple navLabels with same xml:lang attribute within an NCX node
+        </sch:assert>        
+      </sch:rule>
+  </sch:pattern>
+  
+	<sch:pattern name="ncx_multiNavInfo" id="ncx_multiNavInfo">
+	  <!-- multiple navInfos within an NCX node must have unique xml:lang values -->
+	  <sch:rule context="ncx:navInfo">
+	    <sch:assert test="count(../ncx:navInfo[@xml:lang=current()/@xml:lang])<2">
+	      Multiple navInfos with same xml:lang attribute within an NCX node
+	    </sch:assert>        
+	  </sch:rule>
+	</sch:pattern>
+        
+    <sch:pattern name="ncx_playOrderNoGaps" id="ncx_playOrderNoGaps">
+      <!-- The sequence of playOrder must have no gaps -->
+      <sch:rule context="//*[number(@playOrder) > 1]">
+        <sch:assert test="count(//*[@playOrder][number(@playOrder) = number(current()/@playOrder)-1])>0"> 
+          playOrder sequence has gaps
+        </sch:assert>        
+      </sch:rule>
+    </sch:pattern>
+
+    <sch:pattern name="ncx_playOrderMatch2" id="ncx_playOrderMatch2">
+      <!-- navPoints, navTargets, and pageTargets that have identical playOrder values must point to same target -->
+      <sch:rule context="//*[@playOrder]">
+        <sch:assert test="count(//*[@playOrder][number(@playOrder)=number(current()/@playOrder)]/ncx:content[@src != current()/ncx:content/@src])=0">
+          identical playOrder values for navPoint/navTarget/pageTarget that do not refer to same target
+        </sch:assert>        
+      </sch:rule>
+    </sch:pattern>
+
+    <sch:pattern name="ncx_playOrderMatch" id="ncx_playOrderMatch">
+      <!-- navPoints, navTargets, and pageTargets that point to same target must have identical playOrder values -->
+      <sch:rule context="//*[@playOrder][ncx:content]">
+        <sch:assert test="count(//*[@playOrder][ncx:content][ncx:content/@src=current()/ncx:content/@src][number(@playOrder)!=number(current()/@playOrder)])=0">
+          different playOrder values for navPoint/navTarget/pageTarget that refer to same target
+        </sch:assert>        
+      </sch:rule>
+    </sch:pattern>
+    
+    <sch:pattern name="ncx_idAttrUnique" id="ncx_idAttrUnique">      
+      <sch:rule context="//*[@id]">
+         <sch:assert test="count(//@id[. = current()/@id]) = 1"
+           >The "id" attribute does not have a unique value</sch:assert> 
+      </sch:rule>
+  </sch:pattern>
+  
+</sch:schema>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/20/sch/opf.sch b/src/main/resources/com/adobe/epubcheck/schema/20/sch/opf.sch
new file mode 100644
index 0000000..a705eec
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/20/sch/opf.sch
@@ -0,0 +1,14 @@
+<sch:schema xmlns:sch="http://www.ascc.net/xml/schematron">
+  
+  <sch:ns prefix="dc" uri="http://purl.org/dc/elements/1.1/" />
+  <sch:ns prefix="opf" uri="http://www.idpf.org/2007/opf" />
+   
+  <sch:pattern name="opf_idAttrUnique" id="opf_idAttrUnique">
+      <!-- id attribute value must be unique for any id attribute in opf file-->
+      <sch:rule context="//*[@id]">
+         <sch:assert test="count(//@id[. = current()/@id]) = 1"
+           >The "id" attribute does not have a unique value</sch:assert> 
+      </sch:rule>
+  </sch:pattern>
+    
+</sch:schema>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/LICENSE b/src/main/resources/com/adobe/epubcheck/schema/30/LICENSE
new file mode 100644
index 0000000..95366ff
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/LICENSE
@@ -0,0 +1,23 @@
+Unless explicitly overridden by other license statements in child
+directories of this directory, the following license statement
+holds for all files in this directory and its subdirectories.
+
+Copyright (c) 2010-2011 International Digital Publishing Forum 
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/collection-do-30.sch b/src/main/resources/com/adobe/epubcheck/schema/30/collection-do-30.sch
new file mode 100644
index 0000000..65140be
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/collection-do-30.sch
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://purl.oclc.org/dsdl/schematron" queryBinding="xslt2">
+	<ns uri="http://www.idpf.org/2007/opf" prefix="opf"/>
+	<ns uri="http://purl.org/dc/elements/1.1/" prefix="dc"/>
+	
+	<pattern id="do.collection">
+		<rule context="opf:collection[tokenize(@role,'\s+')='distributable-object']">
+			<assert test="child::opf:metadata">A
+				distributable-object collection must include a child metadata element.</assert>
+			<report test="count(child::opf:collection[@role='manifest']) > 1">A
+				distributable-object collection must not contain more than one child manifest
+				collection.</report>
+			<assert test="count(child::opf:link) > 0">A
+				distributable-object collection must include at least one child link
+				element.</assert>
+		</rule>
+		<rule context="opf:collection[tokenize(@role,'\s+')='distributable-object']/opf:metadata">
+			<assert test="count(child::dc:identifier)=1">The distributable-object metadata must
+				include exactly one identifier (dc:identifier).</assert>
+			<assert test="child::dc:title">The distributable-object metadata must include at least
+				one title (dc:title).</assert>
+			<assert test="child::dc:language">The distributable-object metadata must include at
+				least one language declaration (dc:language).</assert>
+		</rule>
+	</pattern>
+
+</schema>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/collection-manifest-30.sch b/src/main/resources/com/adobe/epubcheck/schema/30/collection-manifest-30.sch
new file mode 100644
index 0000000..150d8eb
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/collection-manifest-30.sch
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://purl.oclc.org/dsdl/schematron" queryBinding="xslt2">
+	<ns uri="http://www.idpf.org/2007/opf" prefix="opf"/>
+	<ns uri="http://purl.org/dc/elements/1.1/" prefix="dc"/>
+
+	<pattern id="manifest.collection">
+		<rule context="opf:collection[tokenize(@role,'\s+')='manifest']">
+			<assert test="empty(opf:metadata|opf:collection)">A manifest collection must only
+				contain child link elements.</assert>
+			<assert test="count(child::opf:link) > 0">A manifest collection must include at least
+				one child link element.</assert>
+			<assert test="parent::opf:collection">A manifest collection must be the child of another
+				collection.</assert>
+		</rule>
+	</pattern>
+
+</schema>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/edupub/edu-headings.sch b/src/main/resources/com/adobe/epubcheck/schema/30/edupub/edu-headings.sch
new file mode 100644
index 0000000..f0d7c92
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/edupub/edu-headings.sch
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://purl.oclc.org/dsdl/schematron" queryBinding="xslt2">
+	<ns uri="http://www.idpf.org/2007/ops" prefix="epub"/>
+	<ns uri="http://www.w3.org/1999/xhtml" prefix="html"/>
+
+	<pattern id="edupub.headings">
+		<rule context="html:body[exists(html:* except (html:section|html:aside|html:article|html:nav))]">
+			<let name="arialabel-len" value="string-length(normalize-space(@aria-label))"/>
+			<let name="headings" value="//(html:h1|html:h2|html:h3|html:h4|html:h5|html:h6)[empty(ancestor::html:section|ancestor::html:aside|ancestor::html:article|ancestor::html:nav)]"/>
+			
+			<report test="@aria-label and $arialabel-len = 0">Empty aria-label attribute found.</report>
+			
+			<assert test="$arialabel-len > 0 or count($headings) > 0">The body element requires a heading when it is used as an implied section.</assert>
+			
+			<!-- <report test="$arialabel-len > 0 and count($headings) > 0">The aria-label attribute must not be mixed with ranked headings.</report> -->
+			
+			<report test="count($headings) > 1">More than one ranked heading found as direct descendant of body.</report>
+			
+			<report test="count($headings) = 1 and string-length(normalize-space($headings)) = 0">Empty ranked heading detected.</report>
+		</rule>
+		
+		
+		<rule context="html:section">
+			<let name="arialabel-len" value="string-length(normalize-space(@aria-label))"/>
+			<let name="headings" value=".//(html:h1|html:h2|html:h3|html:h4|html:h5|html:h6)[(ancestor::html:section|ancestor::html:article|ancestor::html:aside|ancestor::html:nav)[1]=current()]"/> 
+			
+			<report test="@aria-label and $arialabel-len = 0">Empty aria-label attribute found.</report>
+			
+			<assert test="$arialabel-len > 0 or count($headings) > 0">Section does not have a heading.</assert>
+			
+			<!-- <report test="$arialabel-len > 0 and count($headings) > 0">The aria-label attribute must not be mixed with ranked headings.</report> -->
+			
+			<report test="count($headings) > 1">More than one ranked heading found as direct descendant of section.</report>
+			
+			<report test="count($headings) = 1 and string-length(normalize-space($headings)) = 0">Empty ranked heading detected.</report>
+		</rule>
+		
+		
+		<rule context="html:article">
+			<let name="arialabel-len" value="string-length(normalize-space(@aria-label))"/>
+			<let name="headings" value=".//(html:h1|html:h2|html:h3|html:h4|html:h5|html:h6)[(ancestor::html:section|ancestor::html:article|ancestor::html:aside|ancestor::html:nav)[1]=current()]"/> 
+			
+			<report test="@aria-label and $arialabel-len = 0">Empty aria-label attribute found.</report>
+			
+			<assert test="$arialabel-len > 0 or count($headings) > 0">Article does not have a heading.</assert>
+			
+			<!-- <report test="$arialabel-len > 0 and count($headings) > 0">The aria-label attribute must not be mixed with ranked headings.</report> -->
+			
+			<report test="count($headings) > 1">More than one ranked heading found as direct descendant of article.</report>
+			
+			<report test="count($headings) = 1 and string-length(normalize-space($headings)) = 0">Empty ranked heading detected.</report>
+		</rule>
+		
+		
+		<rule context="html:h1|html:h2|html:h3|html:h4|html:h5|html:h6">
+			<let name="current-rank" value="number(substring(name(current()),2))"/>
+			<let name="topmost-heading" value="ancestor::html:body//(html:h1|html:h2|html:h3|html:h4|html:h5|html:h6)[1]"/>
+			<let name="topmost-rank" value="number(substring(name($topmost-heading[1]),2))"/>
+			<let name="topmost-nest" value="number(empty($topmost-heading[1]/(ancestor::html:section|ancestor::html:article|ancestor::html:nav)))"/>
+			<let name="current-nesting" value="count(ancestor::html:section|ancestor::html:article|ancestor::html:aside|ancestor::html:nav)"/>
+			<let name="expected-rank" value="$topmost-rank - $topmost-nest + $current-nesting"/>
+			
+			<report test="$expected-rank < 7 and not($current-rank = $expected-rank)">The heading rank h<value-of select="$current-rank"/> does match the current nesting level (<value-of select="$expected-rank"/>).</report>
+			
+			<report test="$expected-rank > 5 and $current-rank < 6">The current heading rank should be h6.</report>
+		</rule>
+	</pattern>
+</schema>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/edupub/edu-opf.sch b/src/main/resources/com/adobe/epubcheck/schema/30/edupub/edu-opf.sch
new file mode 100644
index 0000000..907e7be
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/edupub/edu-opf.sch
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://purl.oclc.org/dsdl/schematron" queryBinding="xslt2">
+	<ns uri="http://www.idpf.org/2007/opf" prefix="opf"/>
+	
+	<pattern id="edu.a11y">
+		<rule context="opf:metadata">
+			<assert test="child::opf:meta[@property='schema:accessibilityFeature']">At least one
+				schema:accessibilityFeature declaration is required.</assert>
+		</rule>
+	</pattern>
+
+</schema>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/edupub/edu-semantics.sch b/src/main/resources/com/adobe/epubcheck/schema/30/edupub/edu-semantics.sch
new file mode 100644
index 0000000..15cbe60
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/edupub/edu-semantics.sch
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://purl.oclc.org/dsdl/schematron" queryBinding="xslt2">
+	<ns uri="http://www.idpf.org/2007/ops" prefix="epub"/>
+	<ns uri="http://www.w3.org/1999/xhtml" prefix="html"/>
+
+	<pattern id="edupub.structure.answers">
+		<rule context="*[@epub:type='answers']">
+			<assert test="child::html:li or descendant::*[@epub:type='answer']">If the answers term
+				is not defined on an HTML ol or ul element, the element requires at least one
+				descendant element that carries the answer term.</assert>
+		</rule>
+	</pattern>
+
+	<pattern id="edupub.structure.assessments">
+		<rule context="*[@epub:type='assessments']">
+			<assert test="child::html:li or descendant::*[@epub:type='assessment']">If the
+				assessments term is not defined on an HTML ol or ul element, the element requires at
+				least one descendant element that carries the assessment term.</assert>
+		</rule>
+	</pattern>
+
+	<pattern id="edupub.structure.biblio">
+		<rule context="*[@epub:type='bibliography']">
+			<assert test="descendant::*[@epub:type='biblioentry']">An element carrying the
+				bibliography term requires at least one descendant element that carries the
+				biblioentry term.</assert>
+		</rule>
+	</pattern>
+
+	<pattern id="edupub.structure.credits">
+		<rule context="*[@epub:type='credits']">
+			<assert test="child::html:li or descendant::*[@epub:type='credit']">If the credits term
+				is not defined on an HTML ol or ul element, the element requires at least one
+				descendant element that carries the credit term.</assert>
+		</rule>
+	</pattern>
+
+	<pattern id="edupub.structure.fill-in-the-blank-problem">
+		<rule context="*[@epub:type='fill-in-the-blank-problem']">
+			<assert test="count(descendant::*[@epub:type='question'])=1">An element carrying the
+				fill-in-the-blank-problem term requires at least one descendant element that carries
+				the question term.</assert>
+			<assert test="count(descendant::*[@epub:type='answer']) < 2">An element carrying the
+				fill-in-the-blank-problem term must not contain more than one descendant element
+				that carries the answer term.</assert>
+		</rule>
+	</pattern>
+
+	<pattern id="edupub.structure.footnotes">
+		<rule context="*[@epub:type='footnotes']">
+			<assert test="child::html:li or descendant::*[@epub:type='footnote']">If the footnotes
+				term is not defined on an HTML ol or ul element, the element requires at least one
+				descendant element that carries the footnote term.</assert>
+		</rule>
+	</pattern>
+
+	<pattern id="edupub.structure.general-problem">
+		<rule context="*[@epub:type='general-problem']">
+			<assert test="count(descendant::*[@epub:type='question'])=1">An element carrying the
+				general-problem term requires at least one descendant element that carries the
+				question term.</assert>
+			<assert test="count(descendant::*[@epub:type='answer']) < 2">An element carrying the
+				general-problem term must not contain more than one descendant element that carries
+				the answer term.</assert>
+		</rule>
+	</pattern>
+
+	<pattern id="edupub.structure.keywords">
+		<rule context="*[@epub:type='keywords']">
+			<assert test="child::html:li or descendant::*[@epub:type='keyword']">If the keywords
+				term is not defined on an HTML ol or ul element, the element requires at least one
+				descendant element that carries the keyword term.</assert>
+		</rule>
+	</pattern>
+
+	<pattern id="edupub.structure.learning-objectives">
+		<rule context="*[@epub:type='learning-objectives']">
+			<assert test="child::html:li or descendant::*[@epub:type='learning-objective']">If the
+				learning-objectives term is not defined on an HTML ol or ul element, the element
+				requires at least one descendant element that carries the learning-objective
+				term.</assert>
+		</rule>
+	</pattern>
+
+	<pattern id="edupub.structure.learning-outcomes">
+		<rule context="*[@epub:type='learning-outcomes']">
+			<assert test="child::html:li or descendant::*[@epub:type='learning-outcome']">If the
+				learning-outcomes term is not defined on an HTML ol or ul element, the element
+				requires at least one descendant element that carries the learning-outcome
+				term.</assert>
+		</rule>
+	</pattern>
+
+	<pattern id="edupub.structure.learning-resources">
+		<rule context="*[@epub:type='learning-resources']">
+			<assert test="child::html:li or descendant::*[@epub:type='learning-resource']">If the
+				learning-resources term is not defined on an HTML ol or ul element, the element
+				requires at least one descendant element that carries the learning-resource
+				term.</assert>
+		</rule>
+	</pattern>
+
+	<pattern id="edupub.structure.learning-standards">
+		<rule context="*[@epub:type='learning-standards']">
+			<assert test="child::html:li or descendant::*[@epub:type='learning-standard']">If the
+				learning-standards term is not defined on an HTML ol or ul element, the element
+				requires at least one descendant element that carries the learning-standard
+				term.</assert>
+		</rule>
+	</pattern>
+
+	<pattern id="edupub.structure.match-problem">
+		<rule context="*[@epub:type='match-problem']">
+			<assert test="count(descendant::*[@epub:type='question'])=1">An element carrying the
+				match-problem term requires at least one descendant element that carries the
+				question term.</assert>
+			<assert test="count(descendant::*[@epub:type='answer']) < 2">An element carrying the
+				match-problem term must not contain more than one descendant element that carries
+				the answer term.</assert>
+		</rule>
+	</pattern>
+
+	<pattern id="edupub.structure.multiple-choice-problem">
+		<rule context="*[@epub:type='multiple-choice']">
+			<assert test="count(descendant::*[@epub:type='question'])=1">An element carrying the
+				multiple-choice-problem term requires at least one descendant element that carries
+				the question term.</assert>
+			<assert test="count(descendant::*[@epub:type='answer']) < 2">An element carrying the
+				multiple-choice-problem term must not contain more than one descendant element that
+				carries the answer term.</assert>
+		</rule>
+	</pattern>
+
+	<pattern id="edupub.structure.ordinal">
+		<rule context="*[@epub:type='ordinal']">
+			<report test="descendant::*[@epub:type='ordinal']">An element that carries the ordinal
+				term must not have descendants that also carry the ordinal term.</report>
+		</rule>
+	</pattern>
+
+	<pattern id="edupub.structure.practices">
+		<rule context="*[@epub:type='practices']">
+			<assert test="child::html:li or descendant::*[@epub:type='practice']">If the practies
+				term is not defined on an HTML ol or ul element, the element requires at least one
+				descendant element that carries the practice term.</assert>
+		</rule>
+	</pattern>
+
+	<pattern id="edupub.structure.rearnotes">
+		<rule context="*[@epub:type='rearnotes']">
+			<assert test="child::html:li or descendant::*[@epub:type='rearnote']">If the rearnotes
+				term is not defined on an HTML ol or ul element, the element requires at least one
+				descendant element that carries the rearnote term.</assert>
+		</rule>
+	</pattern>
+
+	<pattern id="edupub.structure.true-false-problem">
+		<rule context="*[@epub:type='true-false-problem']">
+			<assert test="count(descendant::*[@epub:type='question'])=1">An element carrying the
+				true-false-problem term requires at least one descendant element that carries the
+				question term.</assert>
+			<assert test="count(descendant::*[@epub:type='answer']) < 2">An element carrying the
+				true-false-problem term must not contain more than one descendant element that
+				carries the answer term.</assert>
+		</rule>
+	</pattern>
+
+</schema>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/epub-nav-30-PREP.sch b/src/main/resources/com/adobe/epubcheck/schema/30/epub-nav-30-PREP.sch
new file mode 100644
index 0000000..060f823
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/epub-nav-30-PREP.sch
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?><schema xmlns="http://purl.oclc.org/dsdl/schematron">
+
+    <ns uri="http://www.w3.org/1999/xhtml" prefix="html"/>
+    <ns uri="http://www.idpf.org/2007/ops" prefix="epub"/>
+
+    <pattern id="nav-ocurrence">
+        <rule context="html:body">
+            <assert test="count(.//html:nav[@epub:type='toc']) = 1">Exactly one 'toc' nav element
+                must be present</assert>
+            <assert test="count(.//html:nav[@epub:type='page-list']) < 2">Multiple occurrences of
+                the 'page-list' nav element</assert>
+            <assert test="count(.//html:nav[@epub:type='landmarks']) < 2">Multiple occurrences of
+                the 'landmarks' nav element</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="span-no-sublist">
+        <rule context="html:body//html:nav//html:span">
+            <assert test="count(.//ol) = 0"> The span element must only be used as heading for flat
+                sublists (not hierarchical navigation structures) </assert>
+        </rule>
+    </pattern>
+
+    <pattern id="landmarks">
+        <rule context="html:nav[@epub:type='landmarks']//html:ol//html:a">
+            <assert test="@epub:type">Missing epub:type attribute on anchor inside 'landmarks' nav
+                element</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="link-labels">
+        <rule context="html:nav//html:ol//html:a">
+            <assert test="string-length(normalize-space(string(.))) > 0">Anchors within nav elements
+                must contain text</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="span-labels">
+        <rule context="html:nav//html:ol//html:span">
+            <assert test="string-length(normalize-space(string(.))) > 0">Spans within nav elements
+                must contain text</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="req-heading">
+        <rule context="html:nav[not(@epub:type = 'toc') and not (@epub:type = 'page-list') and not (@epub:type = 'landmarks')]">
+            <let name="fc" value="local-name(./*[1])"/>
+            <assert test="(starts-with($fc,'h') and string-length($fc) = 2) or ($fc = 'hgroup')">nav
+                elements other than 'toc', 'page-list' and 'landmarks' must contain a heading as the
+                first child</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="heading-content">
+        <rule context="html:h1|html:h2|html:h3|html:h4|html:h5|html:h6|html:hgroup">
+            <assert test="string-length(normalize-space(string(.))) > 0">Heading elements must
+                contain text</assert>
+        </rule>
+    </pattern>
+
+
+    <!-- warnings mode <pattern id="page-list-flat">
+        <rule context="html:body//html:nav[@epub:type='page-list']">
+        <assert test="count(.//html:ol) = 1">The page-list navigation structure should be a
+        list, not a nested hierarchy</assert>
+        </rule>
+        </pattern> 
+    -->
+
+</schema>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/epub-nav-30.nvdl b/src/main/resources/com/adobe/epubcheck/schema/30/epub-nav-30.nvdl
new file mode 100644
index 0000000..586740a
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/epub-nav-30.nvdl
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rules xmlns="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0" startMode="html">
+  <mode name="html">
+    <namespace ns="http://www.w3.org/1999/xhtml">
+      <validate schema="epub-nav-30.rnc" schemaType="application/relax-ng-compact-syntax"
+        useMode="attach"/>
+      <validate schema="epub-xhtml-30.sch" useMode="attach"/>
+      <validate schema="epub-nav-30.sch" useMode="attach"/>
+    </namespace>
+  </mode>
+  <mode name="attach">
+    <anyNamespace>
+      <attach/>
+    </anyNamespace>
+  </mode>
+</rules>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/epub-nav-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/epub-nav-30.rnc
new file mode 100644
index 0000000..7e09a2b
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/epub-nav-30.rnc
@@ -0,0 +1,10 @@
+
+
+   default namespace = "http://www.w3.org/1999/xhtml"
+   namespace epub = "http://www.idpf.org/2007/ops"
+      
+   include "epub-xhtml-30.rnc" {   
+        html5.nav.content = html5.headings.class?, html5.ol     
+        html5.oli.content = html5.a.phrasing | ((html5.a.phrasing | html5.span), html5.ol)
+   }
+   
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/epub-nav-30.sch b/src/main/resources/com/adobe/epubcheck/schema/30/epub-nav-30.sch
new file mode 100644
index 0000000..a06a22d
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/epub-nav-30.sch
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://purl.oclc.org/dsdl/schematron">
+
+    <ns uri="http://www.w3.org/1999/xhtml" prefix="html"/>
+    <ns uri="http://www.idpf.org/2007/ops" prefix="epub"/>
+
+    <pattern id="nav-ocurrence">
+        <rule context="html:body">
+            <assert test="count(.//html:nav[@epub:type='toc']) = 1">Exactly one 'toc' nav element
+                must be present</assert>
+            <assert test="count(.//html:nav[@epub:type='page-list']) < 2">Multiple occurrences of
+                the 'page-list' nav element</assert>
+            <assert test="count(.//html:nav[@epub:type='landmarks']) < 2">Multiple occurrences of
+                the 'landmarks' nav element</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="span-no-sublist">
+        <rule context="html:body//html:nav//html:span">
+            <assert test="count(.//ol) = 0"> The span element must only be used as heading for flat
+                sublists (not hierarchical navigation structures) </assert>
+        </rule>
+    </pattern>
+
+    <pattern id="landmarks">
+        <rule context="html:nav[@epub:type='landmarks']//html:ol//html:a">
+            <assert test="@epub:type">Missing epub:type attribute on anchor inside 'landmarks' nav
+                element</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="link-labels">
+        <rule context="html:nav//html:ol//html:a">
+            <assert test="string-length(normalize-space(string(.))) > 0">Anchors within nav elements
+                must contain text</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="span-labels">
+        <rule context="html:nav//html:ol//html:span">
+            <assert test="string-length(normalize-space(string(.))) > 0">Spans within nav elements
+                must contain text</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="req-heading">
+        <rule
+            context="html:nav[not(@epub:type = 'toc') and not (@epub:type = 'page-list') and not (@epub:type = 'landmarks')]">
+            <let name="fc" value="local-name(./*[1])"/>
+            <assert test="(starts-with($fc,'h') and string-length($fc) = 2) or ($fc = 'hgroup')">nav
+                elements other than 'toc', 'page-list' and 'landmarks' must contain a heading as the
+                first child</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="heading-content">
+        <rule context="html:h1|html:h2|html:h3|html:h4|html:h5|html:h6|html:hgroup">
+            <assert test="string-length(normalize-space(string(.))) > 0">Heading elements must
+                contain text</assert>
+        </rule>
+    </pattern>
+
+
+    <!-- warnings mode <pattern id="page-list-flat">
+        <rule context="html:body//html:nav[@epub:type='page-list']">
+        <assert test="count(.//html:ol) = 1">The page-list navigation structure should be a
+        list, not a nested hierarchy</assert>
+        </rule>
+        </pattern> 
+    -->
+
+</schema>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/epub-svg-30-PREP.sch b/src/main/resources/com/adobe/epubcheck/schema/30/epub-svg-30-PREP.sch
new file mode 100644
index 0000000..d57baad
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/epub-svg-30-PREP.sch
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?><schema xmlns="http://purl.oclc.org/dsdl/schematron">    
+    
+    <ns uri="http://www.w3.org/2000/svg" prefix="svg"/>
+    
+    <pattern id="id-unique">
+    <!-- note: assumes that NCName lexical constraints are tested elsewhere -->
+    <let name="id-set" value="//*[@id]"/>
+    <rule context="*[@id]">
+        <assert test="count($id-set[@id = current()/@id]) = 1">Duplicate ID '<value-of select="current()/@id"/>'</assert>
+    </rule>
+</pattern>
+    <pattern id="svg-fo-re">    
+    <rule context="svg:foreignObject[@requiredExtensions]">
+        <assert test="@requiredExtensions = 'http://www.idpf.org/2007/ops'">Invalid value (expecting: 'http://www.idpf.org/2007/ops')</assert>
+    </rule>
+</pattern>
+        
+</schema>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/epub-svg-30.nvdl b/src/main/resources/com/adobe/epubcheck/schema/30/epub-svg-30.nvdl
new file mode 100644
index 0000000..6e1ef81
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/epub-svg-30.nvdl
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rules xmlns="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0" startMode="svg">
+  <mode name="svg">
+    <namespace ns="http://www.w3.org/2000/svg">
+      <validate schema="epub-svg-30.rnc" schemaType="application/relax-ng-compact-syntax"
+        useMode="attach"/>
+      <validate schema="epub-svg-30.sch" useMode="attach"/>
+    </namespace>
+  </mode>
+  <mode name="attach">
+    <anyNamespace>
+      <attach/>
+    </anyNamespace>
+  </mode>
+</rules>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/epub-svg-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/epub-svg-30.rnc
new file mode 100644
index 0000000..42def25
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/epub-svg-30.rnc
@@ -0,0 +1,15 @@
+
+   namespace x = "http://www.w3.org/1999/xhtml"
+
+   include "./mod/html5/html5-grouping-30.rnc" inherit = x
+   include "./mod/html5/html5-phrasing-30.rnc" inherit = x  
+   include "./mod/html5/html5-sections-30.rnc" inherit = x
+   include "./mod/html5/html5-style-30.rnc" inherit = x
+   include "./mod/epub-ssml-attrs.rnc"
+
+   include "./mod/html5/html5-attrib-30.rnc"
+
+   include "./mod/datatypes.rnc"
+   include "./mod/html5/html5-models-30.rnc"
+
+   start = external "mod/epub-svg11-30.rnc"
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/epub-svg-30.sch b/src/main/resources/com/adobe/epubcheck/schema/30/epub-svg-30.sch
new file mode 100644
index 0000000..af3c91f
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/epub-svg-30.sch
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://purl.oclc.org/dsdl/schematron">    
+    
+    <ns uri="http://www.w3.org/2000/svg" prefix="svg" />
+    
+    <include href="./mod/id-unique.sch"/>
+    <include href="./mod/epub-svg11-re.sch"/>
+        
+</schema>
+
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/epub-xhtml-30-PREP.sch b/src/main/resources/com/adobe/epubcheck/schema/30/epub-xhtml-30-PREP.sch
new file mode 100644
index 0000000..1ac573d
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/epub-xhtml-30-PREP.sch
@@ -0,0 +1,354 @@
+<?xml version="1.0" encoding="UTF-8"?><schema xmlns="http://purl.oclc.org/dsdl/schematron" queryBinding="xslt2">
+                        
+    <ns uri="http://www.w3.org/1999/xhtml" prefix="h"/>
+    <ns uri="http://www.idpf.org/2007/ops" prefix="epub"/>
+    <ns uri="http://www.w3.org/1998/Math/MathML" prefix="math"/>
+    <ns uri="http://www.w3.org/2001/10/synthesis" prefix="ssml"/>
+    <ns uri="http://www.w3.org/2001/xml-events" prefix="ev"/>
+    <ns uri="http://www.w3.org/2000/svg" prefix="svg"/>
+    
+    <let name="id-set" value="//*[@id]"/>
+    
+    <pattern id="ancestor-area-map">
+        <rule context="h:area">            
+            <assert test="ancestor::h:map">The <value-of select="replace('h:area','h:','')"/> element must have an ancestor <value-of select="replace('h:map','h:','')"/> element.</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="ancestor-imgismap-ahref">
+        <rule context="h:img[@ismap]">            
+            <assert test="ancestor::h:a[@href]">The <value-of select="replace('h:img[@ismap]','h:','')"/> element must have an ancestor <value-of select="replace('h:a[@href]','h:','')"/> element.</assert>
+        </rule>
+    </pattern>
+    
+    <pattern id="descendant-a-interactive">
+        <rule context="h:a|h:audio[@controls]|h:button|h:details|h:embed|h:iframe|h:img[@usemap]|h:input[not(@type='hidden')]             |h:keygen|h:label|h:menu[@type='toolbar']|h:object[@usemap]|h:select|h:textarea|h:video[@controls]">
+            <report test="ancestor::h:a">The <name/> element must not appear inside <value-of select="local-name(ancestor::h:a)"/> elements.</report>            
+        </rule>
+    </pattern>
+    
+    <pattern id="descendant-button-interactive">
+        <rule context="h:a|h:audio[@controls]|h:button|h:details|h:embed|h:iframe|h:img[@usemap]|h:input[not(@type='hidden')]             |h:keygen|h:label|h:menu[@type='toolbar']|h:object[@usemap]|h:select|h:textarea|h:video[@controls]">
+            <report test="ancestor::h:button">The <name/> element must not appear inside <value-of select="local-name(ancestor::h:button)"/> elements.</report>            
+        </rule>
+    </pattern>
+    
+    <pattern id="descendant-audio-audio">
+        <rule context="h:audio">
+            <report test="ancestor::h:audio">The <name/> element must not appear inside <value-of select="local-name(ancestor::h:audio)"/> elements.</report>            
+        </rule>
+    </pattern>
+    
+    <pattern id="descendant-audio-video">
+        <rule context="h:video">
+            <report test="ancestor::h:audio">The <name/> element must not appear inside <value-of select="local-name(ancestor::h:audio)"/> elements.</report>            
+        </rule>
+    </pattern>
+    
+    <pattern id="descendant-video-video">
+        <rule context="h:video">
+            <report test="ancestor::h:video">The <name/> element must not appear inside <value-of select="local-name(ancestor::h:video)"/> elements.</report>            
+        </rule>
+    </pattern>
+    
+    <pattern id="descendant-video-audio">
+        <rule context="h:audio">
+            <report test="ancestor::h:video">The <name/> element must not appear inside <value-of select="local-name(ancestor::h:video)"/> elements.</report>            
+        </rule>
+    </pattern>
+    
+    <pattern id="descendant-address-address">
+        <rule context="h:address">
+            <report test="ancestor::h:address">The <name/> element must not appear inside <value-of select="local-name(ancestor::h:address)"/> elements.</report>            
+        </rule>
+    </pattern>
+    
+    <pattern id="descendant-address-header">
+        <rule context="h:header">
+            <report test="ancestor::h:address">The <name/> element must not appear inside <value-of select="local-name(ancestor::h:address)"/> elements.</report>            
+        </rule>
+    </pattern>
+    
+    <pattern id="descendant-address-footer">
+        <rule context="h:footer">
+            <report test="ancestor::h:address">The <name/> element must not appear inside <value-of select="local-name(ancestor::h:address)"/> elements.</report>            
+        </rule>
+    </pattern>
+
+    <pattern id="descendant-form-form">
+        <rule context="h:form">
+            <report test="ancestor::h:form">The <name/> element must not appear inside <value-of select="local-name(ancestor::h:form)"/> elements.</report>            
+        </rule>
+    </pattern>
+
+    <pattern id="descendant-progress-progress">
+        <rule context="h:progress">
+            <report test="ancestor::h:progress">The <name/> element must not appear inside <value-of select="local-name(ancestor::h:progress)"/> elements.</report>            
+        </rule>
+    </pattern>
+
+    <pattern id="descendant-meter-meter">
+        <rule context="h:meter">
+            <report test="ancestor::h:meter">The <name/> element must not appear inside <value-of select="local-name(ancestor::h:meter)"/> elements.</report>            
+        </rule>
+    </pattern>
+
+    <pattern id="descendant-dfn-dfn">
+        <rule context="h:dfn">
+            <report test="ancestor::h:dfn">The <name/> element must not appear inside <value-of select="local-name(ancestor::h:dfn)"/> elements.</report>            
+        </rule>
+    </pattern>
+
+    <pattern id="descendant-time-time">
+        <rule context="h:time">
+            <report test="ancestor::h:time">The <name/> element must not appear inside <value-of select="local-name(ancestor::h:time)"/> elements.</report>            
+        </rule>
+    </pattern>
+
+    <pattern id="descendant-caption-table">
+        <rule context="h:table">
+            <report test="ancestor::h:caption">The <name/> element must not appear inside <value-of select="local-name(ancestor::h:caption)"/> elements.</report>            
+        </rule>
+    </pattern>
+    
+    <pattern id="descendant-header-header">
+        <rule context="h:header">
+            <report test="ancestor::h:header">The <name/> element must not appear inside <value-of select="local-name(ancestor::h:header)"/> elements.</report>            
+        </rule>
+    </pattern>
+    
+    <pattern id="descendant-header-footer">
+        <rule context="h:footer">
+            <report test="ancestor::h:header">The <name/> element must not appear inside <value-of select="local-name(ancestor::h:header)"/> elements.</report>            
+        </rule>
+    </pattern>
+    
+    <pattern id="descendant-footer-footer">
+        <rule context="h:footer">
+            <report test="ancestor::h:footer">The <name/> element must not appear inside <value-of select="local-name(ancestor::h:footer)"/> elements.</report>            
+        </rule>
+    </pattern>
+    
+    <pattern id="descendant-footer-header">
+        <rule context="h:header">
+            <report test="ancestor::h:footer">The <name/> element must not appear inside <value-of select="local-name(ancestor::h:footer)"/> elements.</report>            
+        </rule>
+    </pattern>
+    
+    <pattern id="descendant-label-label">
+        <rule context="h:label">
+            <report test="ancestor::h:label">The <name/> element must not appear inside <value-of select="local-name(ancestor::h:label)"/> elements.</report>            
+        </rule>
+    </pattern>
+    
+    <pattern id="descendant-annotation-xml-math">
+        <rule context="math:*">
+            <report test="ancestor::math:annotation-xml[@encoding='application/xhtml+xml' and @name='alternate-representation']">The <name/> element must not appear inside <value-of select="local-name(ancestor::math:annotation-xml[@encoding='application/xhtml+xml' and @name='alternate-representation'])"/> elements.</report>            
+        </rule>
+    </pattern>
+    
+    <pattern id="descendant-svgtitle-svg">
+        <rule context="svg:*">
+            <report test="ancestor::svg:title">The <name/> element must not appear inside <value-of select="local-name(ancestor::svg:title)"/> elements.</report>            
+        </rule>
+    </pattern>
+    
+    <pattern id="bdo-dir">
+        <rule context="h:bdo">
+            <assert test="@dir">The <name/> element must have a <value-of select="'dir'"/> attribute.</assert>            
+        </rule>
+    </pattern>
+
+    <pattern id="idrefs-aria-describedby">
+        <rule context="*[@aria-describedby]">            
+            <assert test="every $idref in tokenize(@aria-describedby,'\s+') satisfies (some $elem in $id-set satisfies ($elem/@id eq $idref))">The <name path="@aria-describedby"/> attribute must refer to elements in the same document (target ID missing)</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="idrefs-output-for">
+        <rule context="h:output[@for]">            
+            <assert test="every $idref in tokenize(@for,'\s+') satisfies (some $elem in $id-set satisfies ($elem/@id eq $idref))">The <name path="@for"/> attribute must refer to elements in the same document (target ID missing)</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="idrefs-aria-flowto">
+        <rule context="*[@aria-flowto]">            
+            <assert test="every $idref in tokenize(@aria-flowto,'\s+') satisfies (some $elem in $id-set satisfies ($elem/@id eq $idref))">The <name path="@aria-flowto"/> attribute must refer to elements in the same document (target ID missing)</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="idrefs-aria-labelledby">
+        <rule context="*[@aria-labelledby]">            
+            <assert test="every $idref in tokenize(@aria-labelledby,'\s+') satisfies (some $elem in $id-set satisfies ($elem/@id eq $idref))">The <name path="@aria-labelledby"/> attribute must refer to elements in the same document (target ID missing)</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="idrefs-aria-owns">
+        <rule context="*[@aria-owns]">            
+            <assert test="every $idref in tokenize(@aria-owns,'\s+') satisfies (some $elem in $id-set satisfies ($elem/@id eq $idref))">The <name path="@aria-owns"/> attribute must refer to elements in the same document (target ID missing)</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="idrefs-aria-controls">
+        <rule context="*[@aria-controls]">            
+            <assert test="every $idref in tokenize(@aria-controls,'\s+') satisfies (some $elem in $id-set satisfies ($elem/@id eq $idref))">The <name path="@aria-controls"/> attribute must refer to elements in the same document (target ID missing)</assert>
+        </rule>
+    </pattern>
+    
+    <pattern id="idref-mathml-xref">
+        <rule context="math:*[@xref]">
+            <assert test="some $elem in $id-set satisfies $elem/@id eq current()/@xref">The <name path="@xref"/> attribute must refer to an element in the same document (the ID '<value-of select="current()/@xref"/>' does not exist).</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="idref-mathml-indenttarget">
+        <rule context="math:*[@indenttarget]">
+            <assert test="some $elem in $id-set satisfies $elem/@id eq current()/@indenttarget">The <name path="@indenttarget"/> attribute must refer to an element in the same document (the ID '<value-of select="current()/@indenttarget"/>' does not exist).</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="idref-contextmenu">
+        <rule context="h:*[@contextmenu]">            
+            <assert test="//h:menu[@id = current()/@contextmenu]">The <name path="@contextmenu"/> attribute does not refer to an allowed target element (expecting: <value-of select="replace('h:menu','h:','')"/>).</assert>
+        </rule>
+    </pattern>
+    
+    <pattern id="idref-input-list">
+        <rule context="h:input[@list]">            
+            <assert test="//h:datalist[@id = current()/@list]">The <name path="@list"/> attribute does not refer to an allowed target element (expecting: <value-of select="replace('h:datalist','h:','')"/>).</assert>
+        </rule>
+    </pattern>
+    
+    <pattern id="idref-forms-form">
+        <rule context="h:*[@form]">            
+            <assert test="//h:form[@id = current()/@form]">The <name path="@form"/> attribute does not refer to an allowed target element (expecting: <value-of select="replace('h:form','h:','')"/>).</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="idref-aria-activedescendant">
+        <rule context="*[@aria-activedescendant]">
+            <assert test="descendant::*[@id = current()/@aria-activedescendant]">The aria-activedescendant attribute must refer to a descendant element.</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="idref-label-for">        
+        <rule context="h:label[@for]">
+            <assert test="some $elem in $id-set satisfies $elem/@id eq current()/@for and                     (local-name($elem) eq 'button'                   or (local-name($elem) eq 'input' and not($elem/@type='hidden'))                  or local-name($elem) eq 'keygen'                   or local-name($elem) eq 'meter'                  or local-name($elem) eq 'output'                   or local-name($elem) eq 'progress'                   or local-name($elem) eq 'select'                 [...]
+        </rule>
+    </pattern>
+            
+    <pattern id="idrefs-headers">        
+        <rule context="h:*[@headers]">    
+            <let name="table" value="ancestor::h:table"/>
+            <assert test="every $idref in tokenize(@headers, '\s+') satisfies (some $elem in $table//h:th satisfies ($elem/@id eq $idref))">The headers attribute must refer to th elements in the same table.</assert>            
+        </rule>
+    </pattern> 
+    
+    <pattern id="idref-trigger-observer">
+        <rule context="epub:trigger[@ev:observer]">
+            <assert test="some $elem in $id-set satisfies $elem/@id eq current()/@ev:observer">The <name path="@ev:observer"/> attribute must refer to an element in the same document (the ID '<value-of select="current()/@ev:observer"/>' does not exist).</assert>
+        </rule>
+    </pattern>
+    
+    <pattern id="idref-trigger-ref">
+        <rule context="epub:trigger[@ref]">
+            <assert test="some $elem in $id-set satisfies $elem/@id eq current()/@ref">The <name path="@ref"/> attribute must refer to an element in the same document (the ID '<value-of select="current()/@ref"/>' does not exist).</assert>
+        </rule>
+    </pattern>
+    
+    <pattern id="map.name">
+        <rule context="h:map[@name]">   
+            <let name="name-set" value="//h:map[@name]"/>
+            <assert test="count($name-set[@name = current()/@name]) = 1">Duplicate map name '<value-of select="current()/@name"/>'</assert>
+        </rule>
+    </pattern>
+    
+    <pattern id="map.id">
+        <rule context="h:map[@id and @name]">
+            <assert test="@id = @name">The id attribute on the map element must have the same value as the name attribute.</assert>
+        </rule>        
+    </pattern>
+    
+    <pattern id="lang-xmllang">
+        <rule context="h:*[@lang and @xml:lang]">
+            <assert test="lower-case(@xml:lang) = lower-case(@lang)">The lang and xml:lang attributes must have the same value.</assert>                
+        </rule>
+    </pattern>
+    
+    <pattern id="id-unique">
+        <rule context="*[@id]">
+            <assert test="count($id-set[@id = current()/@id]) = 1">Duplicate ID '<value-of select="current()/@id"/>'</assert>
+        </rule>
+    </pattern>
+    
+    <pattern id="select-multiple">
+        <rule context="h:select[not(@multiple)]">
+            <report test="count(descendant::h:option[@selected]) > 1">A select element whose multiple attribute is not specified must not have more than one descendant option element with its selected attribute set.</report>
+        </rule>
+    </pattern> 
+    
+    <pattern id="track">                
+        <rule context="h:track">
+            <report test="@label and normalize-space(@label) = ''">The track element label attribute value must not be the empty string.</report>
+            <report test="@default and preceding-sibling::h:track[@default]">There must not be more than one track child of a media element element with the default attribute specified.</report>            
+        </rule>
+    </pattern>
+    
+    <pattern id="ssml-ph">        
+        <rule context="*[@ssml:ph]">
+            <report test="ancestor::*[@ssml:ph]">The ssml:ph attribute must not be specified on a descendant of an element that also carries this attribute.</report>
+        </rule>            
+    </pattern>
+            
+    <pattern id="style-scoped">
+        <rule context="h:style[ancestor::h:body]">
+            <assert test="every $elem in preceding-sibling::* satisfies local-name($elem) eq 'style'">The scoped style element must occur before any other flow content other than other style elements and inter-element whitespace.</assert>
+        </rule>
+    </pattern>
+        
+    <pattern id="link-sizes">
+        <rule context="h:link[@sizes]">
+            <assert test="@rel='icon'">The sizes attribute must not be specified on link elements that do not have a rel attribute that specifies the icon keyword.</assert>
+        </rule>
+    </pattern>   
+    
+    <pattern id="meta-charset">
+        <rule context="h:meta[@charset]">
+            <assert test="count(preceding-sibling::h:meta[@charset]) = 0">There must not be more than one meta element with a charset attribute per document.</assert>
+        </rule>
+    </pattern>
+    
+    <pattern id="article-pubdate">
+        <rule context="h:article[h:time]">
+            <assert test="count(./h:time[@pubdate]) < 2">For each article element, there must be no more than one time element child with a pubdate attribute</assert>
+        </rule>
+    </pattern>
+    
+    <pattern id="document-pubdate">
+        <rule context="h:time[not (ancestor::h:article)]">
+            <assert test="count(//h:time[@pubdate and not (ancestor::h:article)]) < 2">For each Document, there must be no more than one time element with a pubdate 
+                attribute that does not have an ancestor article element.</assert>
+        </rule>
+    </pattern>
+
+    
+
+    
+
+    
+
+    
+
+    
+    
+    
+    
+    
+    
+    <pattern id="svg-fo-re">    
+    <rule context="svg:foreignObject[@requiredExtensions]">
+        <assert test="@requiredExtensions = 'http://www.idpf.org/2007/ops'">Invalid value (expecting: 'http://www.idpf.org/2007/ops')</assert>
+    </rule>
+</pattern>
+    
+</schema>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/epub-xhtml-30.nvdl b/src/main/resources/com/adobe/epubcheck/schema/30/epub-xhtml-30.nvdl
new file mode 100644
index 0000000..82a04c1
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/epub-xhtml-30.nvdl
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rules xmlns="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0" startMode="html">
+  <mode name="html">
+    <namespace ns="http://www.w3.org/1999/xhtml">
+      <validate schema="epub-xhtml-30.rnc" schemaType="application/relax-ng-compact-syntax"
+        useMode="attach"/>
+      <validate schema="epub-xhtml-30.sch" useMode="attach"/>
+    </namespace>
+  </mode>
+  <mode name="attach">
+    <anyNamespace>
+      <attach/>
+    </anyNamespace>
+  </mode>
+</rules>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/epub-xhtml-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/epub-xhtml-30.rnc
new file mode 100644
index 0000000..1c7fdd2
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/epub-xhtml-30.rnc
@@ -0,0 +1,39 @@
+
+
+
+   default namespace = "http://www.w3.org/1999/xhtml"
+   
+   include "./mod/html5/html5-document-30.rnc"
+      
+   include "./mod/html5/html5-sections-30.rnc"
+   include "./mod/html5/html5-grouping-30.rnc"
+   include "./mod/html5/html5-phrasing-30.rnc"   
+   include "./mod/html5/html5-embed-30.rnc"
+      
+   include "./mod/html5/html5-edit-30.rnc"
+   include "./mod/html5/html5-style-30.rnc"
+   include "./mod/html5/html5-script-30.rnc"
+   include "./mod/html5/html5-interactive-30.rnc"
+   include "./mod/html5/html5-forms-30.rnc"
+      
+   include "./mod/html5/html5-attrib-30.rnc"
+   include "./mod/html5/html5-aria-30.rnc"
+   include "./mod/html5/html5-rdfa.rnc"
+   include "./mod/html5/html5-md.rnc"
+           
+   include "./mod/datatypes.rnc"
+   include "./mod/html5/html5-models-30.rnc"
+   
+   include "./mod/epub-xhtml-mathml3-30.rnc"
+   include "./mod/epub-xhtml-svg11-30.rnc"
+   
+   include "./mod/epub-trigger.rnc"
+   include "./mod/epub-switch.rnc"
+   
+   include "./mod/epub-type-attr.rnc"         
+   include "./mod/epub-prefix-attr.rnc"      
+   include "./mod/epub-ssml-attrs.rnc"
+   
+   start = html5.html
+      
+   
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/epub-xhtml-30.sch b/src/main/resources/com/adobe/epubcheck/schema/30/epub-xhtml-30.sch
new file mode 100644
index 0000000..240672a
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/epub-xhtml-30.sch
@@ -0,0 +1,401 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://purl.oclc.org/dsdl/schematron" queryBinding="xslt2">
+                        
+    <ns uri="http://www.w3.org/1999/xhtml" prefix="h"/>
+    <ns uri="http://www.idpf.org/2007/ops" prefix="epub"/>
+    <ns uri="http://www.w3.org/1998/Math/MathML" prefix="math"/>
+    <ns uri="http://www.w3.org/2001/10/synthesis" prefix="ssml"/>
+    <ns uri="http://www.w3.org/2001/xml-events" prefix="ev"/>
+    <ns uri="http://www.w3.org/2000/svg" prefix="svg" />
+    
+    <let name="id-set" value="//*[@id]"/>
+    
+    <pattern id="ancestor-area-map" is-a="required-ancestor">        
+        <param name="descendant" value="h:area"/>
+        <param name="ancestor" value="h:map"/>        
+    </pattern>
+
+    <pattern id="ancestor-imgismap-ahref" is-a="required-ancestor">        
+        <param name="descendant" value="h:img[@ismap]"/>
+        <param name="ancestor" value="h:a[@href]"/>        
+    </pattern>
+    
+    <pattern id="descendant-a-interactive" is-a="no-interactive-content-descendants">        
+        <param name="ancestor" value="h:a"/>       
+    </pattern>
+    
+    <pattern id="descendant-button-interactive" is-a="no-interactive-content-descendants">        
+        <param name="ancestor" value="h:button"/>       
+    </pattern>
+    
+    <pattern id="descendant-audio-audio" is-a="disallowed-descendants">        
+        <param name="ancestor" value="h:audio"/>
+        <param name="descendant" value="h:audio"/>        
+    </pattern>
+    
+    <pattern id="descendant-audio-video" is-a="disallowed-descendants">        
+        <param name="ancestor" value="h:audio"/>
+        <param name="descendant" value="h:video"/>        
+    </pattern>
+    
+    <pattern id="descendant-video-video" is-a="disallowed-descendants">        
+        <param name="ancestor" value="h:video"/>
+        <param name="descendant" value="h:video"/>        
+    </pattern>
+    
+    <pattern id="descendant-video-audio" is-a="disallowed-descendants">        
+        <param name="ancestor" value="h:video"/>
+        <param name="descendant" value="h:audio"/>        
+    </pattern>
+    
+    <pattern id="descendant-address-address" is-a="disallowed-descendants">        
+        <param name="ancestor" value="h:address"/>
+        <param name="descendant" value="h:address"/>        
+    </pattern>
+    
+    <pattern id="descendant-address-header" is-a="disallowed-descendants">        
+        <param name="ancestor" value="h:address"/>
+        <param name="descendant" value="h:header"/>        
+    </pattern>
+    
+    <pattern id="descendant-address-footer" is-a="disallowed-descendants">        
+        <param name="ancestor" value="h:address"/>
+        <param name="descendant" value="h:footer"/>        
+    </pattern>
+
+    <pattern id="descendant-form-form" is-a="disallowed-descendants">        
+        <param name="ancestor" value="h:form"/>
+        <param name="descendant" value="h:form"/>        
+    </pattern>
+
+    <pattern id="descendant-progress-progress" is-a="disallowed-descendants">        
+        <param name="ancestor" value="h:progress"/>
+        <param name="descendant" value="h:progress"/>        
+    </pattern>
+
+    <pattern id="descendant-meter-meter" is-a="disallowed-descendants">        
+        <param name="ancestor" value="h:meter"/>
+        <param name="descendant" value="h:meter"/>        
+    </pattern>
+
+    <pattern id="descendant-dfn-dfn" is-a="disallowed-descendants">        
+        <param name="ancestor" value="h:dfn"/>
+        <param name="descendant" value="h:dfn"/>        
+    </pattern>
+
+    <pattern id="descendant-time-time" is-a="disallowed-descendants">        
+        <param name="ancestor" value="h:time"/>
+        <param name="descendant" value="h:time"/>        
+    </pattern>
+
+    <pattern id="descendant-caption-table" is-a="disallowed-descendants">        
+        <param name="ancestor" value="h:caption"/>
+        <param name="descendant" value="h:table"/>        
+    </pattern>
+    
+    <pattern id="descendant-header-header" is-a="disallowed-descendants">        
+        <param name="ancestor" value="h:header"/>
+        <param name="descendant" value="h:header"/>        
+    </pattern>
+    
+    <pattern id="descendant-header-footer" is-a="disallowed-descendants">        
+        <param name="ancestor" value="h:header"/>
+        <param name="descendant" value="h:footer"/>        
+    </pattern>
+    
+    <pattern id="descendant-footer-footer" is-a="disallowed-descendants">        
+        <param name="ancestor" value="h:footer"/>
+        <param name="descendant" value="h:footer"/>        
+    </pattern>
+    
+    <pattern id="descendant-footer-header" is-a="disallowed-descendants">        
+        <param name="ancestor" value="h:footer"/>
+        <param name="descendant" value="h:header"/>        
+    </pattern>
+    
+    <pattern id="descendant-label-label" is-a="disallowed-descendants">        
+        <param name="ancestor" value="h:label"/>
+        <param name="descendant" value="h:label"/>        
+    </pattern>
+    
+    <pattern id="descendant-annotation-xml-math" is-a="disallowed-descendants">        
+        <param name="ancestor" value="math:annotation-xml[@encoding='application/xhtml+xml' and @name='alternate-representation']"/>
+        <param name="descendant" value="math:*"/>        
+    </pattern>
+    
+    <pattern id="descendant-svgtitle-svg" is-a="disallowed-descendants">        
+        <param name="ancestor" value="svg:title"/>
+        <param name="descendant" value="svg:*"/>        
+    </pattern>
+    
+    <pattern id="bdo-dir" is-a="required-attr">
+        <param name="elem" value="h:bdo"/>
+        <param name="attr" value="dir"/>
+    </pattern>
+
+    <pattern id="idrefs-aria-describedby" is-a="idrefs-any">
+        <param name="element" value="*"/>
+        <param name="idrefs-attr-name" value="aria-describedby"/>
+    </pattern>
+
+    <pattern id="idrefs-output-for" is-a="idrefs-any">
+        <param name="element" value="h:output"/>
+        <param name="idrefs-attr-name" value="for"/>
+    </pattern>
+
+    <pattern id="idrefs-aria-flowto" is-a="idrefs-any">
+        <param name="element" value="*"/>
+        <param name="idrefs-attr-name" value="aria-flowto"/>
+    </pattern>
+
+    <pattern id="idrefs-aria-labelledby" is-a="idrefs-any">
+        <param name="element" value="*"/>
+        <param name="idrefs-attr-name" value="aria-labelledby"/>
+    </pattern>
+
+    <pattern id="idrefs-aria-owns" is-a="idrefs-any">
+        <param name="element" value="*"/>
+        <param name="idrefs-attr-name" value="aria-owns"/>
+    </pattern>
+
+    <pattern id="idrefs-aria-controls" is-a="idrefs-any">
+        <param name="element" value="*"/>
+        <param name="idrefs-attr-name" value="aria-controls"/>
+    </pattern>
+    
+    <pattern id="idref-mathml-xref" is-a="idref-any">
+        <param name="element" value="math:*"/>
+        <param name="idref-attr-name" value="xref"/>
+    </pattern>
+
+    <pattern id="idref-mathml-indenttarget" is-a="idref-any">
+        <param name="element" value="math:*"/>
+        <param name="idref-attr-name" value="indenttarget"/>
+    </pattern>
+
+    <pattern id="idref-contextmenu" is-a="idref-named">
+        <param name="element" value="h:*"/>
+        <param name="idref-attr-name" value="contextmenu"/>
+        <param name="target-name" value="h:menu"/>
+    </pattern>
+    
+    <pattern id="idref-input-list" is-a="idref-named">
+        <param name="element" value="h:input"/>
+        <param name="idref-attr-name" value="list"/>
+        <param name="target-name" value="h:datalist"/>
+    </pattern>
+    
+    <pattern id="idref-forms-form" is-a="idref-named">
+        <param name="element" value="h:*"/>
+        <param name="idref-attr-name" value="form"/>
+        <param name="target-name" value="h:form"/>
+    </pattern>
+
+    <pattern id="idref-aria-activedescendant">
+        <rule context="*[@aria-activedescendant]">
+            <assert test="descendant::*[@id = current()/@aria-activedescendant]"
+                >The aria-activedescendant attribute must refer to a descendant element.</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="idref-label-for">        
+        <rule context="h:label[@for]">
+            <assert
+                test="some $elem in $id-set satisfies $elem/@id eq current()/@for and 
+                   (local-name($elem) eq 'button' 
+                 or (local-name($elem) eq 'input' and not($elem/@type='hidden'))
+                 or local-name($elem) eq 'keygen' 
+                 or local-name($elem) eq 'meter'
+                 or local-name($elem) eq 'output' 
+                 or local-name($elem) eq 'progress' 
+                 or local-name($elem) eq 'select' 
+                 or local-name($elem) eq 'textarea')"
+                >The for attribute does not refer to an allowed target element (expecting: button|keygen|meter|output|progress|select|textarea|input[not(@type='hidden')]).</assert>
+        </rule>
+    </pattern>
+            
+    <pattern id="idrefs-headers">        
+        <rule context="h:*[@headers]">    
+            <let name="table" value="ancestor::h:table"/>
+            <assert test="every $idref in tokenize(@headers, '\s+') satisfies (some $elem in $table//h:th satisfies ($elem/@id eq $idref))"
+                >The headers attribute must refer to th elements in the same table.</assert>            
+        </rule>
+    </pattern> 
+    
+    <pattern id="idref-trigger-observer" is-a="idref-any">
+        <param name="element" value="epub:trigger"/>
+        <param name="idref-attr-name" value="ev:observer"/>
+    </pattern>
+    
+    <pattern id="idref-trigger-ref" is-a="idref-any">
+        <param name="element" value="epub:trigger"/>
+        <param name="idref-attr-name" value="ref"/>
+    </pattern>
+    
+    <pattern id="map.name" >
+        <rule context='h:map[@name]'>   
+            <let name="name-set" value="//h:map[@name]"/>
+            <assert test="count($name-set[@name = current()/@name]) = 1">Duplicate map name '<value-of
+                select="current()/@name"/>'</assert>
+        </rule>
+    </pattern>
+    
+    <pattern id="map.id" >
+        <rule context='h:map[@id and @name]'>
+            <assert test='@id = @name'
+                >The id attribute on the map element must have the same value as the name attribute.</assert>
+        </rule>        
+    </pattern>
+    
+    <pattern id='lang-xmllang'>
+        <rule context='h:*[@lang and @xml:lang]'>
+            <assert test="lower-case(@xml:lang) = lower-case(@lang)"
+                >The lang and xml:lang attributes must have the same value.</assert>                
+        </rule>
+    </pattern>
+    
+    <pattern id="id-unique">
+        <rule context="*[@id]">
+            <assert test="count($id-set[@id = current()/@id]) = 1">Duplicate ID '<value-of
+                select="current()/@id"/>'</assert>
+        </rule>
+    </pattern>
+    
+    <pattern id="select-multiple">
+        <rule context="h:select[not(@multiple)]">
+            <report test='count(descendant::h:option[@selected]) > 1'
+                >A select element whose multiple attribute is not specified must not have more than one descendant option element with its selected attribute set.</report>
+        </rule>
+    </pattern> 
+    
+    <pattern id="track">                
+        <rule context="h:track">
+            <report test="@label and normalize-space(@label) = ''"
+                >The track element label attribute value must not be the empty string.</report>
+            <report test="@default and preceding-sibling::h:track[@default]"
+                >There must not be more than one track child of a media element element with the default attribute specified.</report>            
+        </rule>
+    </pattern>
+    
+    <pattern id="ssml-ph">        
+        <rule context="*[@ssml:ph]">
+            <report test="ancestor::*[@ssml:ph]"
+                >The ssml:ph attribute must not be specified on a descendant of an element that also carries this attribute.</report>
+        </rule>            
+    </pattern>
+            
+    <pattern id="style-scoped">
+        <rule context="h:style[ancestor::h:body]">
+            <!-- Note: this sch test is at risk as it is fragile and doesnt fully cover the 
+            	rules of http://dev.w3.org/html5/spec/single-page.html#attr-style-scoped. 
+            	See also https://www.w3.org/Bugs/Public/show_bug.cgi?id=13102 -->
+            <assert test="every $elem in preceding-sibling::* satisfies (local-name($elem) eq 'style') or (local-name($elem) eq 'figcaption') "
+                >The scoped style element must occur before any other flow content other than other style elements and inter-element whitespace.</assert>
+        </rule>
+    </pattern>
+        
+    <pattern id="link-sizes">
+        <rule context="h:link[@sizes]">
+            <assert test="@rel='icon'"
+                >The sizes attribute must not be specified on link elements that do not have a rel attribute that specifies the icon keyword.</assert>
+        </rule>
+    </pattern>   
+    
+    <pattern id="meta-charset">
+        <rule context="h:meta[@charset]">
+            <assert test="count(preceding-sibling::h:meta[@charset]) = 0"
+                >There must not be more than one meta element with a charset attribute per document.</assert>
+        </rule>
+    </pattern>
+    
+    <pattern id="article-pubdate">
+        <rule context="h:article[h:time]">
+            <assert test="count(./h:time[@pubdate]) < 2"
+                >For each article element, there must be no more than one time element child with a pubdate attribute</assert>
+        </rule>
+    </pattern>
+    
+    <pattern id="document-pubdate">
+        <rule context="h:time[not (ancestor::h:article)]">
+            <assert test="count(//h:time[@pubdate and not (ancestor::h:article)]) < 2"
+                >For each Document, there must be no more than one time element with a pubdate 
+                attribute that does not have an ancestor article element.</assert>
+        </rule>
+    </pattern>
+
+	<pattern id="md-a-area">
+        <rule context="h:a[@itemprop] | h:area[@itemprop]">
+            <assert test="@href"
+                >If the itemprop is specified on an a element, then the href attribute must also be specified.</assert>
+        </rule>
+    </pattern>
+
+	<pattern id="md-iframe-embed-object">
+        <rule context="h:iframe[@itemprop] | h:embed[@itemprop] | h:object[@itemprop]">
+            <assert test="@data"
+                >If the itemprop is specified on an iframe, embed or object element, then the data attribute must also be specified.</assert>
+        </rule>
+    </pattern>
+    
+    <pattern id="md-media">
+        <rule context="h:audio[@itemprop] | h:video[@itemprop]">
+            <assert test="@src"
+                >If the itemprop is specified on an video or audio element, then the src attribute must also be specified.</assert>
+        </rule>
+    </pattern>
+
+    <pattern abstract="true" id="idref-any">
+        <rule context="$element[@$idref-attr-name]">
+            <assert test="some $elem in $id-set satisfies $elem/@id eq current()/@$idref-attr-name"
+                >The <name path="@$idref-attr-name"/> attribute must refer to an element in the same document (the ID '<value-of 
+                    select="current()/@$idref-attr-name"/>' does not exist).</assert>
+        </rule>
+    </pattern>
+
+    <pattern abstract="true" id="idrefs-any">
+        <rule context="$element[@$idrefs-attr-name]">            
+            <assert test="every $idref in tokenize(@$idrefs-attr-name,'\s+') satisfies (some $elem in $id-set satisfies ($elem/@id eq $idref))"
+                >The <name path="@$idrefs-attr-name"/> attribute must refer to elements in the same document (target ID missing)</assert>
+        </rule>
+    </pattern>
+
+    <pattern abstract="true" id="idref-named">
+        <rule context="$element[@$idref-attr-name]">            
+            <assert test="//$target-name[@id = current()/@$idref-attr-name]">The <name
+                    path="@$idref-attr-name"/> attribute does not refer to an allowed target element (expecting: <value-of 
+                    select="replace('$target-name','h:','')"/>).</assert>
+        </rule>
+    </pattern>
+
+    <pattern abstract="true" id="required-attr">
+        <rule context="$elem">
+            <assert test="@$attr"
+                >The <name/> element must have a <value-of select="'$attr'"/> attribute.</assert>            
+        </rule>
+    </pattern>
+
+    <pattern abstract="true" id="disallowed-descendants">
+        <rule context="$descendant">
+            <report test="ancestor::$ancestor"
+                >The <name/> element must not appear inside <value-of select="local-name(ancestor::$ancestor)"/> elements.</report>            
+        </rule>
+    </pattern>
+    
+    <pattern abstract="true" id="required-ancestor">
+        <rule context='$descendant'>            
+            <assert test='ancestor::$ancestor'
+                >The <value-of select="replace('$descendant','h:','')"/> element must have an ancestor <value-of select="replace('$ancestor','h:','')"/> element.</assert>
+        </rule>
+    </pattern>
+    
+    <pattern abstract="true" id="no-interactive-content-descendants">
+        <rule context="h:a|h:audio[@controls]|h:button|h:details|h:embed|h:iframe|h:img[@usemap]|h:input[not(@type='hidden')]
+            |h:keygen|h:label|h:menu[@type='toolbar']|h:object[@usemap]|h:select|h:textarea|h:video[@controls]">
+            <report test="ancestor::$ancestor"
+                >The <name/> element must not appear inside <value-of select="local-name(ancestor::$ancestor)"/> elements.</report>            
+        </rule>
+    </pattern>
+    
+    <include href="./mod/epub-svg11-re.sch"/>
+    
+</schema>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/epub30-catalog.xml b/src/main/resources/com/adobe/epubcheck/schema/30/epub30-catalog.xml
new file mode 100644
index 0000000..123f098
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/epub30-catalog.xml
@@ -0,0 +1,335 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
+   <system systemId="http://www.idpf.org/epub/30/schema/epub-nav-30.nvdl"
+           uri="epub-nav-30.nvdl"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/epub-nav-30.rnc"
+           uri="epub-nav-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/epub-nav-30.sch"
+           uri="epub-nav-30.sch"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/epub-svg-30.nvdl"
+           uri="epub-svg-30.nvdl"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/epub-svg-30.rnc"
+           uri="epub-svg-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/epub-svg-30.sch"
+           uri="epub-svg-30.sch"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/epub-xhtml-30.nvdl"
+           uri="epub-xhtml-30.nvdl"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/epub-xhtml-30.rnc"
+           uri="epub-xhtml-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/epub-xhtml-30.sch"
+           uri="epub-xhtml-30.sch"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/media-overlay-30.nvdl"
+           uri="media-overlay-30.nvdl"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/media-overlay-30.rnc"
+           uri="media-overlay-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/media-overlay-30.sch"
+           uri="media-overlay-30.sch"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/datatypes.rnc"
+           uri="mod/datatypes.rnc"/>
+   <system systemId="datatypes.rnc" uri="mod/datatypes.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/epub-mathml3-30.rnc"
+           uri="mod/epub-mathml3-30.rnc"/>
+   <system systemId="epub-mathml3-30.rnc" uri="mod/epub-mathml3-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/epub-prefix-attr.rnc"
+           uri="mod/epub-prefix-attr.rnc"/>
+   <system systemId="epub-prefix-attr.rnc" uri="mod/epub-prefix-attr.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/epub-ssml-attrs.rnc"
+           uri="mod/epub-ssml-attrs.rnc"/>
+   <system systemId="epub-ssml-attrs.rnc" uri="mod/epub-ssml-attrs.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/epub-svg11-30.rnc"
+           uri="mod/epub-svg11-30.rnc"/>
+   <system systemId="epub-svg11-30.rnc" uri="mod/epub-svg11-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/epub-svg11-re.sch"
+           uri="mod/epub-svg11-re.sch"/>
+   <system systemId="epub-svg11-re.sch" uri="mod/epub-svg11-re.sch"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/epub-switch.rnc"
+           uri="mod/epub-switch.rnc"/>
+   <system systemId="epub-switch.rnc" uri="mod/epub-switch.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/epub-trigger.rnc"
+           uri="mod/epub-trigger.rnc"/>
+   <system systemId="epub-trigger.rnc" uri="mod/epub-trigger.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/epub-type-attr.rnc"
+           uri="mod/epub-type-attr.rnc"/>
+   <system systemId="epub-type-attr.rnc" uri="mod/epub-type-attr.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/epub-xhtml-mathml3-30.rnc"
+           uri="mod/epub-xhtml-mathml3-30.rnc"/>
+   <system systemId="epub-xhtml-mathml3-30.rnc" uri="mod/epub-xhtml-mathml3-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/epub-xhtml-svg11-30.rnc"
+           uri="mod/epub-xhtml-svg11-30.rnc"/>
+   <system systemId="epub-xhtml-svg11-30.rnc" uri="mod/epub-xhtml-svg11-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/html5/html5-aria-30.rnc"
+           uri="mod/html5/html5-aria-30.rnc"/>
+   <system systemId="html5/html5-aria-30.rnc" uri="mod/html5/html5-aria-30.rnc"/>
+   <system systemId="html5-aria-30.rnc" uri="mod/html5/html5-aria-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/html5/html5-attrib-30.rnc"
+           uri="mod/html5/html5-attrib-30.rnc"/>
+   <system systemId="html5/html5-attrib-30.rnc" uri="mod/html5/html5-attrib-30.rnc"/>
+   <system systemId="html5-attrib-30.rnc" uri="mod/html5/html5-attrib-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/html5/html5-document-30.rnc"
+           uri="mod/html5/html5-document-30.rnc"/>
+   <system systemId="html5/html5-document-30.rnc" uri="mod/html5/html5-document-30.rnc"/>
+   <system systemId="html5-document-30.rnc" uri="mod/html5/html5-document-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/html5/html5-edit-30.rnc"
+           uri="mod/html5/html5-edit-30.rnc"/>
+   <system systemId="html5/html5-edit-30.rnc" uri="mod/html5/html5-edit-30.rnc"/>
+   <system systemId="html5-edit-30.rnc" uri="mod/html5/html5-edit-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/html5/html5-embed-30.rnc"
+           uri="mod/html5/html5-embed-30.rnc"/>
+   <system systemId="html5/html5-embed-30.rnc" uri="mod/html5/html5-embed-30.rnc"/>
+   <system systemId="html5-embed-30.rnc" uri="mod/html5/html5-embed-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/html5/html5-forms-30.rnc"
+           uri="mod/html5/html5-forms-30.rnc"/>
+   <system systemId="html5/html5-forms-30.rnc" uri="mod/html5/html5-forms-30.rnc"/>
+   <system systemId="html5-forms-30.rnc" uri="mod/html5/html5-forms-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/html5/html5-grouping-30.rnc"
+           uri="mod/html5/html5-grouping-30.rnc"/>
+   <system systemId="html5/html5-grouping-30.rnc" uri="mod/html5/html5-grouping-30.rnc"/>
+   <system systemId="html5-grouping-30.rnc" uri="mod/html5/html5-grouping-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/html5/html5-interactive-30.rnc"
+           uri="mod/html5/html5-interactive-30.rnc"/>
+   <system systemId="html5/html5-interactive-30.rnc"
+           uri="mod/html5/html5-interactive-30.rnc"/>
+   <system systemId="html5-interactive-30.rnc" uri="mod/html5/html5-interactive-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/html5/html5-models-30.rnc"
+           uri="mod/html5/html5-models-30.rnc"/>
+   <system systemId="html5/html5-models-30.rnc" uri="mod/html5/html5-models-30.rnc"/>
+   <system systemId="html5-models-30.rnc" uri="mod/html5/html5-models-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/html5/html5-phrasing-30.rnc"
+           uri="mod/html5/html5-phrasing-30.rnc"/>
+   <system systemId="html5/html5-phrasing-30.rnc" uri="mod/html5/html5-phrasing-30.rnc"/>
+   <system systemId="html5-phrasing-30.rnc" uri="mod/html5/html5-phrasing-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/html5/html5-script-30.rnc"
+           uri="mod/html5/html5-script-30.rnc"/>
+   <system systemId="html5/html5-script-30.rnc" uri="mod/html5/html5-script-30.rnc"/>
+   <system systemId="html5-script-30.rnc" uri="mod/html5/html5-script-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/html5/html5-sections-30.rnc"
+           uri="mod/html5/html5-sections-30.rnc"/>
+   <system systemId="html5/html5-sections-30.rnc" uri="mod/html5/html5-sections-30.rnc"/>
+   <system systemId="html5-sections-30.rnc" uri="mod/html5/html5-sections-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/html5/html5-style-30.rnc"
+           uri="mod/html5/html5-style-30.rnc"/>
+   <system systemId="html5/html5-style-30.rnc" uri="mod/html5/html5-style-30.rnc"/>
+   <system systemId="html5-style-30.rnc" uri="mod/html5/html5-style-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/id-unique.sch"
+           uri="mod/id-unique.sch"/>
+   <system systemId="id-unique.sch" uri="mod/id-unique.sch"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/mathml/mathml3-common.rnc"
+           uri="mod/mathml/mathml3-common.rnc"/>
+   <system systemId="mathml/mathml3-common.rnc" uri="mod/mathml/mathml3-common.rnc"/>
+   <system systemId="mathml3-common.rnc" uri="mod/mathml/mathml3-common.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/mathml/mathml3-content.rnc"
+           uri="mod/mathml/mathml3-content.rnc"/>
+   <system systemId="mathml/mathml3-content.rnc" uri="mod/mathml/mathml3-content.rnc"/>
+   <system systemId="mathml3-content.rnc" uri="mod/mathml/mathml3-content.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/mathml/mathml3-presentation.rnc"
+           uri="mod/mathml/mathml3-presentation.rnc"/>
+   <system systemId="mathml/mathml3-presentation.rnc"
+           uri="mod/mathml/mathml3-presentation.rnc"/>
+   <system systemId="mathml3-presentation.rnc" uri="mod/mathml/mathml3-presentation.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/mathml/mathml3-strict-content.rnc"
+           uri="mod/mathml/mathml3-strict-content.rnc"/>
+   <system systemId="mathml/mathml3-strict-content.rnc"
+           uri="mod/mathml/mathml3-strict-content.rnc"/>
+   <system systemId="mathml3-strict-content.rnc"
+           uri="mod/mathml/mathml3-strict-content.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/security/Lenient-Encryption11-ghc.rnc"
+           uri="mod/security/Lenient-Encryption11-ghc.rnc"/>
+   <system systemId="security/Lenient-Encryption11-ghc.rnc"
+           uri="mod/security/Lenient-Encryption11-ghc.rnc"/>
+   <system systemId="Lenient-Encryption11-ghc.rnc"
+           uri="mod/security/Lenient-Encryption11-ghc.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/security/Lenient-Encryption11.rnc"
+           uri="mod/security/Lenient-Encryption11.rnc"/>
+   <system systemId="security/Lenient-Encryption11.rnc"
+           uri="mod/security/Lenient-Encryption11.rnc"/>
+   <system systemId="Lenient-Encryption11.rnc" uri="mod/security/Lenient-Encryption11.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/security/Lenient-Signature-exclusiveC14N.rnc"
+           uri="mod/security/Lenient-Signature-exclusiveC14N.rnc"/>
+   <system systemId="security/Lenient-Signature-exclusiveC14N.rnc"
+           uri="mod/security/Lenient-Signature-exclusiveC14N.rnc"/>
+   <system systemId="Lenient-Signature-exclusiveC14N.rnc"
+           uri="mod/security/Lenient-Signature-exclusiveC14N.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/security/Lenient-Signature11-properties-exclusiveC14N.rnc"
+           uri="mod/security/Lenient-Signature11-properties-exclusiveC14N.rnc"/>
+   <system systemId="security/Lenient-Signature11-properties-exclusiveC14N.rnc"
+           uri="mod/security/Lenient-Signature11-properties-exclusiveC14N.rnc"/>
+   <system systemId="Lenient-Signature11-properties-exclusiveC14N.rnc"
+           uri="mod/security/Lenient-Signature11-properties-exclusiveC14N.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/security/Lenient-Signature11-properties.rnc"
+           uri="mod/security/Lenient-Signature11-properties.rnc"/>
+   <system systemId="security/Lenient-Signature11-properties.rnc"
+           uri="mod/security/Lenient-Signature11-properties.rnc"/>
+   <system systemId="Lenient-Signature11-properties.rnc"
+           uri="mod/security/Lenient-Signature11-properties.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/security/Lenient-Signature11.rnc"
+           uri="mod/security/Lenient-Signature11.rnc"/>
+   <system systemId="security/Lenient-Signature11.rnc"
+           uri="mod/security/Lenient-Signature11.rnc"/>
+   <system systemId="Lenient-Signature11.rnc" uri="mod/security/Lenient-Signature11.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/security/Strict-Encryption.rnc"
+           uri="mod/security/Strict-Encryption.rnc"/>
+   <system systemId="security/Strict-Encryption.rnc"
+           uri="mod/security/Strict-Encryption.rnc"/>
+   <system systemId="Strict-Encryption.rnc" uri="mod/security/Strict-Encryption.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/security/Strict-Signature.rnc"
+           uri="mod/security/Strict-Signature.rnc"/>
+   <system systemId="security/Strict-Signature.rnc"
+           uri="mod/security/Strict-Signature.rnc"/>
+   <system systemId="Strict-Signature.rnc" uri="mod/security/Strict-Signature.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/security/exc-c14n.rnc"
+           uri="mod/security/exc-c14n.rnc"/>
+   <system systemId="security/exc-c14n.rnc" uri="mod/security/exc-c14n.rnc"/>
+   <system systemId="exc-c14n.rnc" uri="mod/security/exc-c14n.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/security/security_any.rnc"
+           uri="mod/security/security_any.rnc"/>
+   <system systemId="security/security_any.rnc" uri="mod/security/security_any.rnc"/>
+   <system systemId="security_any.rnc" uri="mod/security/security_any.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/security/xenc-allowAnyForeign.rnc"
+           uri="mod/security/xenc-allowAnyForeign.rnc"/>
+   <system systemId="security/xenc-allowAnyForeign.rnc"
+           uri="mod/security/xenc-allowAnyForeign.rnc"/>
+   <system systemId="xenc-allowAnyForeign.rnc" uri="mod/security/xenc-allowAnyForeign.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/security/xenc-schema-11.rnc"
+           uri="mod/security/xenc-schema-11.rnc"/>
+   <system systemId="security/xenc-schema-11.rnc" uri="mod/security/xenc-schema-11.rnc"/>
+   <system systemId="xenc-schema-11.rnc" uri="mod/security/xenc-schema-11.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/security/xenc-schema.rnc"
+           uri="mod/security/xenc-schema.rnc"/>
+   <system systemId="security/xenc-schema.rnc" uri="mod/security/xenc-schema.rnc"/>
+   <system systemId="xenc-schema.rnc" uri="mod/security/xenc-schema.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/security/xenc11-allowAnyForeign.rnc"
+           uri="mod/security/xenc11-allowAnyForeign.rnc"/>
+   <system systemId="security/xenc11-allowAnyForeign.rnc"
+           uri="mod/security/xenc11-allowAnyForeign.rnc"/>
+   <system systemId="xenc11-allowAnyForeign.rnc"
+           uri="mod/security/xenc11-allowAnyForeign.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/security/xmldsig-allowAnyForeign.rnc"
+           uri="mod/security/xmldsig-allowAnyForeign.rnc"/>
+   <system systemId="security/xmldsig-allowAnyForeign.rnc"
+           uri="mod/security/xmldsig-allowAnyForeign.rnc"/>
+   <system systemId="xmldsig-allowAnyForeign.rnc"
+           uri="mod/security/xmldsig-allowAnyForeign.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/security/xmldsig-core-schema.rnc"
+           uri="mod/security/xmldsig-core-schema.rnc"/>
+   <system systemId="security/xmldsig-core-schema.rnc"
+           uri="mod/security/xmldsig-core-schema.rnc"/>
+   <system systemId="xmldsig-core-schema.rnc" uri="mod/security/xmldsig-core-schema.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/security/xmldsig-filter2.rnc"
+           uri="mod/security/xmldsig-filter2.rnc"/>
+   <system systemId="security/xmldsig-filter2.rnc" uri="mod/security/xmldsig-filter2.rnc"/>
+   <system systemId="xmldsig-filter2.rnc" uri="mod/security/xmldsig-filter2.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/security/xmldsig-properties-schema.rnc"
+           uri="mod/security/xmldsig-properties-schema.rnc"/>
+   <system systemId="security/xmldsig-properties-schema.rnc"
+           uri="mod/security/xmldsig-properties-schema.rnc"/>
+   <system systemId="xmldsig-properties-schema.rnc"
+           uri="mod/security/xmldsig-properties-schema.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/security/xmldsig11-allowAnyForeign.rnc"
+           uri="mod/security/xmldsig11-allowAnyForeign.rnc"/>
+   <system systemId="security/xmldsig11-allowAnyForeign.rnc"
+           uri="mod/security/xmldsig11-allowAnyForeign.rnc"/>
+   <system systemId="xmldsig11-allowAnyForeign.rnc"
+           uri="mod/security/xmldsig11-allowAnyForeign.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/security/xmldsig11-schema.rnc"
+           uri="mod/security/xmldsig11-schema.rnc"/>
+   <system systemId="security/xmldsig11-schema.rnc"
+           uri="mod/security/xmldsig11-schema.rnc"/>
+   <system systemId="xmldsig11-schema.rnc" uri="mod/security/xmldsig11-schema.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/security/xmlsec-ghc-allowAnyForeign.rnc"
+           uri="mod/security/xmlsec-ghc-allowAnyForeign.rnc"/>
+   <system systemId="security/xmlsec-ghc-allowAnyForeign.rnc"
+           uri="mod/security/xmlsec-ghc-allowAnyForeign.rnc"/>
+   <system systemId="xmlsec-ghc-allowAnyForeign.rnc"
+           uri="mod/security/xmlsec-ghc-allowAnyForeign.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/security/xmlsec-ghc-schema.rnc"
+           uri="mod/security/xmlsec-ghc-schema.rnc"/>
+   <system systemId="security/xmlsec-ghc-schema.rnc"
+           uri="mod/security/xmlsec-ghc-schema.rnc"/>
+   <system systemId="xmlsec-ghc-schema.rnc" uri="mod/security/xmlsec-ghc-schema.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/mod/svg11/svg11-flat.rnc"
+           uri="mod/svg11/svg11-flat.rnc"/>
+   <system systemId="svg11/svg11-flat.rnc" uri="mod/svg11/svg11-flat.rnc"/>
+   <system systemId="svg11-flat.rnc" uri="mod/svg11/svg11-flat.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/ocf-container-30.rnc"
+           uri="ocf-container-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/ocf-encryption-30.rnc"
+           uri="ocf-encryption-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/ocf-signatures-30.rnc"
+           uri="ocf-signatures-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/package-30.nvdl"
+           uri="package-30.nvdl"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/package-30.rnc"
+           uri="package-30.rnc"/>
+                        
+   <system systemId="http://www.idpf.org/epub/30/schema/package-30.sch"
+           uri="package-30.sch"/>
+                        
+</catalog>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/media-overlay-30-PREP.sch b/src/main/resources/com/adobe/epubcheck/schema/30/media-overlay-30-PREP.sch
new file mode 100644
index 0000000..9b12873
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/media-overlay-30-PREP.sch
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?><schema xmlns="http://purl.oclc.org/dsdl/schematron">
+          
+    <ns uri="http://www.idpf.org/2007/ops" prefix="epub"/>
+    <ns uri="http://www.w3.org/ns/SMIL" prefix="s"/>
+          
+    <pattern id="id-unique">
+    <!-- note: assumes that NCName lexical constraints are tested elsewhere -->
+    <let name="id-set" value="//*[@id]"/>
+    <rule context="*[@id]">
+        <assert test="count($id-set[@id = current()/@id]) = 1">Duplicate ID '<value-of select="current()/@id"/>'</assert>
+    </rule>
+</pattern>     
+            
+</schema>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/media-overlay-30.nvdl b/src/main/resources/com/adobe/epubcheck/schema/30/media-overlay-30.nvdl
new file mode 100644
index 0000000..7658b39
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/media-overlay-30.nvdl
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rules xmlns="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0" startMode="smil">
+    <mode name="smil">
+        <namespace ns="http://www.w3.org/ns/SMIL">
+            <validate schema="media-overlay-30.rnc" schemaType="application/relax-ng-compact-syntax"/>
+            <validate schema="media-overlay-30.sch"/>
+        </namespace>
+    </mode>
+    <mode name="attach">
+        <anyNamespace>
+            <attach/>
+        </anyNamespace>
+    </mode>
+</rules>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/media-overlay-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/media-overlay-30.rnc
new file mode 100644
index 0000000..a0ed39b
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/media-overlay-30.rnc
@@ -0,0 +1,46 @@
+   default namespace = "http://www.w3.org/ns/SMIL"
+   namespace epub = "http://www.idpf.org/2007/ops"
+
+   include "./mod/epub-type-attr.rnc"
+   include "./mod/epub-prefix-attr.rnc"   
+   include "./mod/datatypes.rnc"
+
+   start = element smil { smil.attlist & smil.content }
+   smil.attlist = smil.version.attr & smil.id.attr? & epub.prefix.attr.ns?
+   smil.content = smil.head?, smil.body 
+   
+   smil.head = element head { smil.metadata? }  
+   
+   smil.metadata = element metadata { smil.metadata.content }    
+   smil.metadata.content = anyElement*
+   
+   smil.body = element body { smil.body.attlist & smil.body.content }   
+   smil.body.attlist = smil.tc.attrs & epub.textref.attr?
+   smil.body.content = (smil.seq | smil.par)+
+   
+   smil.seq = element seq { smil.seq.attlist & smil.seq.content }
+   smil.seq.attlist = smil.tc.attrs & epub.textref.attr
+   smil.seq.content = (smil.seq | smil.par)+
+   
+   smil.par = element par {smil.par.attlist & smil.par.content }
+   smil.par.attlist = smil.tc.attrs
+   smil.par.content = smil.text, smil.audio?
+   
+   smil.text = element \text { smil.text.attlist }
+   smil.text.attlist = smil.id.attr? & smil.src.attr
+   
+   smil.audio = element audio { smil.audio.attlist }
+   smil.audio.attlist = smil.id.attr? & attribute clipBegin { datatype.smil.npt }? & attribute clipEnd { datatype.smil.npt }? & smil.src.attr
+   
+   smil.tc.attrs = epub.type.attr? & smil.id.attr?
+   smil.src.attr = attribute src { datatype.URI }
+   smil.id.attr = attribute id { datatype.ID }
+   smil.i18n.attrs = smil.xml.lang.attr? & smil.dir.attr?
+   smil.xml.lang.attr = attribute xml:lang { datatype.languagecode }
+   smil.dir.attr = attribute dir { 'ltr' | 'rtl' }
+   smil.version.attr = attribute version { '3.0' }
+   epub.textref.attr = attribute epub:textref { datatype.URI }
+   smil.name.attr = attribute name { datatype.string }
+   smil.content.attr = attribute content {datatype.string }
+   
+   anyElement = element * { (attribute * { text } | text | anyElement)* }
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/media-overlay-30.sch b/src/main/resources/com/adobe/epubcheck/schema/30/media-overlay-30.sch
new file mode 100644
index 0000000..090c952
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/media-overlay-30.sch
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://purl.oclc.org/dsdl/schematron">
+          
+    <ns uri="http://www.idpf.org/2007/ops" prefix="epub"/>
+    <ns uri="http://www.w3.org/ns/SMIL" prefix="s"/>
+          
+    <include href="./mod/id-unique.sch"/>     
+            
+</schema>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/datatypes.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/datatypes.rnc
new file mode 100644
index 0000000..151992a
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/datatypes.rnc
@@ -0,0 +1,145 @@
+[ xml:id = "datatypes-common" ]
+div {
+  datatype.ID = datatype.ID.lexical
+  datatype.IDREF = datatype.IDREF.lexical
+  datatype.IDREFS = datatype.IDREFS.lexical
+    
+  datatype.languagecode = datatype.BCP47
+  # http://www.w3.org/TR/xmlschema11-2/#language
+  datatype.BCP47 = xsd:language { pattern = "[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*" }
+  # http://www.w3.org/TR/xmlschema11-2/#ID  
+  datatype.ID.xsd = xsd:ID
+  # http://www.w3.org/TR/xmlschema11-2/#NCName
+  datatype.IDREF.lexical = xsd:NCName
+  datatype.IDREFS.lexical = list { datatype.IDREF.lexical+ }
+  datatype.ID.lexical = xsd:NCName
+  # http://www.w3.org/TR/xmlschema11-2/#IDREF
+  datatype.IDREF.xsd = xsd:IDREF
+  # http://www.w3.org/TR/xmlschema11-2/#IDREFS
+  datatype.IDREFS.xsd = xsd:IDREFS  
+  # http://www.w3.org/TR/xmlschema11-2/#NMTOKEN
+  datatype.NMTOKEN = xsd:NMTOKEN
+  # http://www.w3.org/TR/xmlschema11-2/#NMTOKENS  
+  datatype.NMTOKENS = xsd:NMTOKENS
+  # http://www.w3.org/TR/xmlschema11-2/#string
+  datatype.string = xsd:string
+  datatype.string.nonempty = xsd:token { minLength='1' }    
+  datatype.text = text
+  # http://www.w3.org/TR/xmlschema11-2/#nt-dateRep
+  datatype.date = xsd:date
+  # http://www.w3.org/TR/xmlschema11-2/#nt-dateTimeRep
+  datatype.dateTime = xsd:dateTime
+  # http://www.w3.org/TR/xmlschema11-2/#nt-timeRep
+  datatype.date.or.dateTime = datatype.date | datatype.dateTime     
+  datatype.LEIRI = xsd:anyURI
+  # http://www.w3.org/TR/xmlschema11-2/#anyURI
+  # http://tools.ietf.org/html/rfc3986#appendix-B
+  # http://www.w3.org/TR/html5/urls.html#valid-url-potentially-surrounded-by-spaces  
+  datatype.URI = xsd:anyURI
+  datatype.URI.absolute = xsd:anyURI
+  datatype.IRI = datatype.URI  
+  datatype.character.encoding = datatype.iana.charset
+  datatype.iana.charset = xsd:NMTOKEN  
+  # http://www.w3.org/TR/html5/infrastructure.html#valid-mime-type
+  # http://tools.ietf.org/html/rfc4288#section-4.2
+  # http://tools.ietf.org/html/rfc2616#section-3.7
+  datatype.mimetype = xsd:string { pattern='[a-zA-Z0-9!#$&+\-\^_]+/[a-zA-Z0-9!#$&+\-\^_]+.*' }  
+  datatype.mimetype.nocharset = datatype.mimetype
+  # http://www.w3.org/TR/xmlschema11-2/#nonNegativeInteger
+  # http://www.w3.org/TR/html5/common-microsyntaxes.html#non-negative-integers
+  datatype.non-negative.integer = xsd:nonNegativeInteger
+  # http://www.w3.org/TR/xmlschema11-2/#positiveInteger
+  datatype.positive.integer = xsd:positiveInteger
+  # http://www.w3.org/TR/xmlschema11-2/#integer  
+  datatype.integer = xsd:integer
+  # http://www.w3.org/TR/xmlschema11-2/#nt-floatRep
+  # http://www.w3.org/TR/html5/common-microsyntaxes.html#real-numbers
+  datatype.float = xsd:float
+  datatype.float.positive = xsd:float { minExclusive = '0'}
+  datatype.float.non-negative = xsd:float { minInclusive = '0' }
+  datatype.token = xsd:string { pattern = '[^\s]+' }
+  datatype.space.separated.tokens = list { datatype.token* }
+  
+}
+[ xml:id = "datatypes-smil" ]
+div {
+  # http://www.w3.org/TR/smil/smil-timing.html#TimingSyntax-Full-clock-value
+  # http://www.w3.org/TR/smil/smil-timing.html#TimingSyntax-Partial-clock-value
+  # http://www.w3.org/TR/smil/smil-timing.html#TimingSyntax-Timecount-value
+  datatype.smil.npt =
+    xsd:string { pattern = "(\s*)[0-9]+:[0-5][0-9]:[0-5][0-9](\.[0-9]+)?(\s*)" }
+  | xsd:string { pattern = "(\s*)[0-5][0-9]:[0-5][0-9](\.[0-9]+)?(\s*)" }
+  | xsd:string { pattern = "(\s*)[0-9]+(\.[0-9]+)?(h|min|s|ms)?(\s*)" }          
+}
+
+[ xml:id = "datatypes-vocab" ]
+div {
+  datatype.property = xsd:NMTOKEN
+  datatype.properties = xsd:NMTOKENS
+  datatype.prefixdecl = text  #\s*([\i-[:]][\c-[:]]*: +[^ ]+)(\s+[\i-[:]][\c-[:]]*: +[^ ]+)*\s*
+}
+
+[ xml:id = "datatypes-ssml" ]
+div {
+  # http://www.w3.org/TR/speech-synthesis11/#edef_phoneme
+  datatype.ssml.PhoneticExpression = xsd:string
+  datatype.ssml.PhoneticAlphabet = xsd:string { pattern = "(ipa|x-.+)" }
+}
+
+[ xml:id = "datatypes-html5" ]
+div {
+  datatype.html5.browsing.context.name.or.keyword = xsd:string { pattern = "()|([^_].*)|(_[bB][lL][aA][nN][kK])|(_[sS][eE][lL][fF])|(_[pP][aA][rR][eE][nN][tT])|(_[tT][oO][pP])" }
+  datatype.html5.browsing.context.name = xsd:string { pattern = "()|([^_].*)" }  
+  datatype.html5.token = xsd:string { pattern = '[^\s]+' }
+  # http://www.w3.org/TR/html5/common-microsyntaxes.html#space-separated-tokens
+  datatype.html5.space.separated.tokens = list { datatype.html5.token* }
+  datatype.html5.ordered.set.unique.tokens = datatype.html5.space.separated.tokens  
+  datatype.html5.URL.spaces = datatype.URI
+  # http://dev.w3.org/csswg/css3-mediaqueries/#syntax
+  # http://www.w3.org/TR/html5/common-microsyntaxes.html#mq
+  datatype.html5.media.query = xsd:string
+  datatype.html5.name = xsd:string
+  datatype.html5.name.reference = xsd:string { pattern = "#.+" }
+  
+  # http://www.w3.org/TR/html5/common-microsyntaxes.html#months
+  datatype.html5.month = xsd:token { pattern ='([0-9]{4,})-([0-9]{2})' }  
+  # http://www.w3.org/TR/html5/common-microsyntaxes.html#dates
+  datatype.html5.date = xsd:token { pattern ='([0-9]{4,})-([0-9]{2})-([0-9]{2})'}
+  # http://www.w3.org/TR/html5/common-microsyntaxes.html#times
+  datatype.html5.time = xsd:token { pattern ='([0-9]{2}):([0-9]{2})(:[0-9]{2}(\.[0-9]+)?)?'}
+  # http://www.w3.org/TR/html5/common-microsyntaxes.html#local-dates-and-times
+  datatype.html5.datetime.local = xsd:token { pattern = '([0-9]{4,})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2})(:[0-9]{2}(\.[0-9]+)?)?' }
+  # http://www.w3.org/TR/html5/common-microsyntaxes.html#global-dates-and-times
+  datatype.html5.datetime.global = xsd:token { pattern = '([0-9]{4,})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2})(:[0-9]{2}(\.[0-9]+)?)?(Z|((\+|-)([0-9]{2}):([0-9]{2})))' }  
+  datatype.html5.datetime = datatype.html5.datetime.global
+  # http://www.w3.org/TR/html5/common-microsyntaxes.html#vaguer-moments-in-time
+  datatype.html5.date.or.time = datatype.html5.date | datatype.html5.time | datatype.html5.datetime.global
+  # http://www.w3.org/TR/html5/common-microsyntaxes.html#vaguer-moments-in-time
+  datatype.html5.date.optional.time = datatype.html5.date | datatype.html5.datetime.global
+  datatype.html5.week = xsd:token { pattern ='([0-9]{4,})-W([0-9]{2})' }
+  
+  datatype.html5.accesskey = datatype.html5.ordered.set.unique.tokens
+  datatype.html5.coords.rectangle = xsd:token { pattern = "-?[0-9]+,-?[0-9]+,-?[0-9]+,-?[0-9]+" }
+  datatype.html5.coords.circle = xsd:token { pattern = "-?[0-9]+,-?[0-9]+,[0-9]+" }
+  datatype.html5.coords.poly = xsd:token { pattern = "-?[0-9]+,-?[0-9]+,-?[0-9]+,-?[0-9]+,-?[0-9]+,-?[0-9]+(,-?[0-9]+,-?[0-9]+)*" }
+  datatype.html5.js = xsd:string
+  datatype.html5.script = xsd:string
+  datatype.html5.script.documentation = xsd:string
+  datatype.html5.iframe.srcdoc.xml = xsd:string
+  datatype.style = xsd:string
+  datatype.html5.sizes = list { xsd:string { pattern = "[1-9][0-9]*x[1-9][0-9]*" }+ }
+  datatype.html5.emailaddress = xsd:string { pattern = "[^@]+@[^@]+" }
+  datatype.html5.emailaddresslist = xsd:string { pattern = "([^@]+@[^@]+,)*([^@]+@[^@]+)" }
+  # http://www.w3.org/TR/html5/common-microsyntaxes.html#colors
+  datatype.html5.color = xsd:string { pattern = '#([A-Fa-f0-9]{6})' }
+}
+
+[ xml:id = "datatypes-html5forms" ]
+div {
+  datatype.html5.forms.mimetypelist = xsd:string
+  # http://www.w3.org/TR/html5/forms.html#attr-form-accept-charset
+  datatype.html5.forms.charsetlist = list { datatype.character.encoding+ }
+  datatype.html5.forms.pattern = xsd:string  
+  datatype.html5.forms.string.nolinebreaks = xsd:string 
+}
+
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-mathml3-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-mathml3-30.rnc
new file mode 100644
index 0000000..f3c24c6
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-mathml3-30.rnc
@@ -0,0 +1,74 @@
+
+
+   default namespace m = "http://www.w3.org/1998/Math/MathML"
+   namespace local = ""
+   namespace x = "http://www.w3.org/1999/xhtml"
+   namespace ev = "http://www.w3.org/2001/xml-events"
+   namespace ssml = "http://www.w3.org/2001/10/synthesis"
+
+   include "mathml/mathml3-common.rnc" {
+      start = element math { math.attributes & MathExpression+ }
+    
+      # redefine annotation-xml to point to ops specialization and allow validation of content mathml
+      annotation-xml =
+         element annotation-xml {
+            html5.annotation.xml.attlist & html5.annotation.xml.content
+      }
+        
+      # redefine to refer to datatype proxy and remove deprecated attributes
+      CommonAtt =
+         attribute id { parent datatype.ID }?,
+         attribute xref { parent datatype.IDREF }?,
+         attribute class { parent datatype.NMTOKENS }?,
+         attribute style { parent datatype.string }?,
+         attribute href { parent datatype.URI }?,
+         NonMathMLAtt*
+
+      CommonAtt &= parent epub.ssml.ph.attr?
+
+      # remove deprecated attributes
+      math.deprecatedattributes = empty
+      semantics.attributes = CommonAtt
+    
+      # extend to circumvent datatype collisions
+      NonMathMLAtt =
+         attribute * - (local:* | m:* | xml:* | x:* | ev:* | ssml:*) {
+            parent datatype.string
+         }
+   }
+
+   html5.annotation.xml.attlist =
+      CommonAtt
+         & attribute cd { "mathmlkeys" }?
+         & attribute name { "contentequiv" | "alternate-representation" }?
+         & attribute definitionURL { parent datatype.URI }?
+    
+      # The choice pattern for combinations of values of @encoding and actual xml annotation content.
+      html5.annotation.xml.content |=
+         (attribute encoding { "application/mathml-content+xml" | "MathML-Content" },
+         (src | ContExp+))
+         | (attribute encoding { "application/mathml-presentation+xml" | "MathML-Presentation" },
+         (src | MathExpression+))
+         | (attribute encoding { "application/xhtml+xml" },
+         parent html5.flow.model)
+                       
+         # add xml:base
+         CommonAtt &= parent html5.xml.base.attr?
+
+   include "mathml/mathml3-presentation.rnc" {
+      # redefine to refer to datatype proxy
+      idref = parent datatype.IDREF
+    
+      # remove deprecated
+      mglyph.deprecatedattributes = empty
+      DeprecatedTokenAtt = empty
+      mstyle.deprecatedattributes = empty
+   }
+
+   include "mathml/mathml3-content.rnc" {
+      # as ops allows presentation mathml only at top level, kill the contribution to MathExpression
+      MathExpression |= notAllowed
+    
+      # remove deprecated
+      DeprecatedContExp = empty
+}
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-prefix-attr.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-prefix-attr.rnc
new file mode 100644
index 0000000..9941e93
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-prefix-attr.rnc
@@ -0,0 +1,8 @@
+
+
+   namespace epub = "http://www.idpf.org/2007/ops"
+      
+   html5.html.attlist &=  epub.prefix.attr.ns?
+      
+   epub.prefix.attr = attribute prefix { datatype.prefixdecl }   
+   epub.prefix.attr.ns = attribute epub:prefix { datatype.prefixdecl }
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-ssml-attrs.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-ssml-attrs.rnc
new file mode 100644
index 0000000..0e4603c
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-ssml-attrs.rnc
@@ -0,0 +1,11 @@
+
+
+  namespace ssml = "http://www.w3.org/2001/10/synthesis"
+  
+  
+  html5.global.common.attrs &= epub.ssml.ph.attr? & epub.ssml.alphabet.attr?
+    
+  #TODO determine injection in SVG
+               
+  epub.ssml.ph.attr = attribute ssml:ph { datatype.ssml.PhoneticExpression }
+  epub.ssml.alphabet.attr = attribute ssml:alphabet { datatype.ssml.PhoneticAlphabet }
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-svg11-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-svg11-30.rnc
new file mode 100644
index 0000000..8254334
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-svg11-30.rnc
@@ -0,0 +1,14 @@
+# $Id: epub-svg11-30.rnc 3093 2011-08-22 18:33:36Z markus.gylling at gmail.com $
+# Contributors: MURATA Makoto and Markus Gylling
+   namespace epub = "http://www.idpf.org/2007/ops"
+   
+   include "svg11/svg11-flat.rnc" {
+      start = svg
+      SVG.id.attrib = attribute id { parent datatype.ID }?
+      SVG.AnimationEvents.attrib = notAllowed
+      SVG.Animation.class = notAllowed
+      SVG.foreignObject.extra.content = parent html5.flow.class      
+      SVG.title.extra.content = parent html5.phrasing.class
+      SVG.Core.extra.attrib &= attribute epub:type { parent datatype.properties }?  
+   }
+
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-svg11-re.sch b/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-svg11-re.sch
new file mode 100644
index 0000000..ac550d4
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-svg11-re.sch
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<pattern id="svg-fo-re" xmlns="http://purl.oclc.org/dsdl/schematron">    
+    <rule context="svg:foreignObject[@requiredExtensions]">
+        <assert test="@requiredExtensions = 'http://www.idpf.org/2007/ops'"
+            >Invalid value (expecting: 'http://www.idpf.org/2007/ops')</assert>
+    </rule>
+</pattern>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-switch.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-switch.rnc
new file mode 100644
index 0000000..2649628
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-switch.rnc
@@ -0,0 +1,32 @@
+
+   namespace epub = "http://www.idpf.org/2007/ops"
+         
+   html5.flow.class |= epub.switch.flow
+   html5.phrasing.class |= epub.switch.phrasing
+
+   epub.switch.flow = element epub:switch { epub.switch.attlist, epub.switch.case.flow+, epub.switch.default.flow }
+   epub.switch.phrasing = element epub:switch { epub.switch.attlist, epub.switch.case.phrasing+, epub.switch.default.phrasing }
+      
+   epub.switch.case.flow = element epub:case { epub.case.attlist & epub.case.flow.content }
+   epub.switch.case.phrasing = element epub:case { epub.case.attlist & epub.case.phrasing.content }
+   epub.switch.default.flow = element epub:default { epub.default.attlist & epub.default.flow.content }
+   epub.switch.default.phrasing = element epub:default { epub.default.attlist & epub.default.phrasing.content }
+   
+   epub.case.flow.content = epub.switch.any 
+   epub.case.phrasing.content = epub.switch.any
+   epub.switch.any = (anyElement | text)*
+   
+   epub.default.flow.content = html5.flow.model
+   epub.default.phrasing.content = html5.phrasing.model
+   
+   epub.switch.attlist &= html5.id.attr?
+   epub.case.attlist &= html5.id.attr? & epub.case.rn.attr
+   epub.default.attlist &= html5.id.attr?
+   
+   epub.case.rn.attr = attribute required-namespace { datatype.URI }
+ 
+   anyElement = element * {
+      (attribute * { text }
+      | text
+      | anyElement)*
+   }   
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-trigger.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-trigger.rnc
new file mode 100644
index 0000000..64ea173
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-trigger.rnc
@@ -0,0 +1,22 @@
+
+   namespace epub = "http://www.idpf.org/2007/ops"
+   namespace ev = "http://www.w3.org/2001/xml-events"
+   
+   html5.metadata.class |= epub.trigger 
+   html5.flow.class |= epub.trigger
+
+
+   epub.trigger = element epub:trigger { epub.trigger.attlist & epub.trigger.content }
+   epub.trigger.attlist = html5.id.attr? & epub.trigger.action.attr & epub.trigger.ref.attr 
+   	& xml.events.event.attr & xml.events.observer.attr & xml.events.defaultAction.attr? 
+   	& xml.events.phase.attr? & xml.events.propagate.attr?
+   
+   epub.trigger.action.attr = attribute action { 'show'|'hide'|'play'|'pause'|'resume'|'mute'|'unmute' }
+   epub.trigger.ref.attr = attribute ref { datatype.IDREF }
+   xml.events.event.attr = attribute ev:event { datatype.NMTOKEN }
+   xml.events.observer.attr = attribute ev:observer { datatype.IDREF }
+   xml.events.defaultAction.attr = attribute ev:defaultAction { 'cancel' | 'perform' }
+   xml.events.phase.attr = attribute ev:phase { 'capture' | 'default' }
+   xml.events.propagate.attr = attribute ev:propagate { 'stop' | 'continue' }
+   
+   epub.trigger.content = empty
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-type-attr.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-type-attr.rnc
new file mode 100644
index 0000000..0de4ed0
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-type-attr.rnc
@@ -0,0 +1,7 @@
+
+
+   namespace epub = "http://www.idpf.org/2007/ops"
+   
+   html5.global.xml.attrs &= epub.type.attr?
+
+   epub.type.attr = attribute epub:type { datatype.properties }
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-xhtml-mathml3-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-xhtml-mathml3-30.rnc
new file mode 100644
index 0000000..6437b9f
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-xhtml-mathml3-30.rnc
@@ -0,0 +1,5 @@
+
+
+   html5.phrasing.class |= math
+   html5.flow.class |= math
+   math = external "epub-mathml3-30.rnc"
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-xhtml-svg11-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-xhtml-svg11-30.rnc
new file mode 100644
index 0000000..c905112
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/epub-xhtml-svg11-30.rnc
@@ -0,0 +1,6 @@
+# $Id: epub-xhtml-svg11-30.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# Contributors: MURATA Makoto and Markus Gylling
+
+   html5.phrasing.class |= svg
+   html5.flow.class |= svg
+   svg = external "epub-svg11-30.rnc"
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/LICENSE b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/LICENSE
new file mode 100644
index 0000000..794fa17
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/LICENSE
@@ -0,0 +1,23 @@
+The license statement herein applies to all files in this directory.
+
+Copyright (c) 2005-2007 Elika J. Etemad (fantasai) and Henri Sivonen (hsivonen)
+Copyright (c) 2007-2008 Mozilla Foundation
+Copyright (c) 2010-2011 International Digital Publishing Forum
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/README b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/README
new file mode 100644
index 0000000..30a9c42
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/README
@@ -0,0 +1,21 @@
+
+The modules in this directory are part of the schema that defines 
+a vocabulary and grammar for EPUB3 XHTML Content Documents [1], 
+based on W3C XHTML5 [2], with IDPF/EPUB extensions. 
+
+The modules are derived from the schemas used in the validator.nu 
+service [3].
+
+The schema for for EPUB3 XHTML Content Documents is not continuously 
+updated to reflect the latest version of the W3C HTML5 specification; 
+it is a static representation of the EPUB3 XHTML Content Document 
+definition, and changes to it occur only in conjunction with new 
+releases of the EPUB3 specification.
+
+Note - as the W3C HTML5 specification becomes a Final Recommendation, 
+it is anticipated that IDPF will no longer maintain its own complete 
+schema.
+
+[1] http://idpf.org/epub/30/spec/epub30-contentdocs.html#sec-xhtml
+[2] http://www.w3.org/TR/html5/
+[3] https://bitbucket.org/validator/syntax/ 
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-aria-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-aria-30.rnc
new file mode 100644
index 0000000..92e3c2f
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-aria-30.rnc
@@ -0,0 +1,106 @@
+
+
+   html5.global.common.attrs &= aria
+   
+   aria = aria.role.attr? & aria.global & aria.widget.excl & aria.relationship.excl
+   	& aria.describedat.attr?
+        
+   aria.role.attr = attribute role { datatype.NMTOKENS }
+   aria.describedat.attr = attribute aria-describedat { datatype.html5.URL.spaces }
+      
+   # Global States and Properties
+   # http://www.w3.org/WAI/PF/aria/states_and_properties#global_states
+   aria.global = aria.prop.atomic? & aria.state.busy? & aria.prop.controls?
+      & aria.prop.describedby? & aria.state.disabled? & aria.prop.dropeffect?
+      & aria.prop.flowto? & aria.state.grabbed? & aria.prop.haspopup?
+      & aria.state.hidden? & aria.state.invalid? & aria.prop.label?
+      & aria.prop.labelledby? & aria.prop.live? & aria.prop.owns?
+      & aria.prop.relevant?
+   
+   # exclusive widget, not in global
+   # http://www.w3.org/WAI/PF/aria/states_and_properties#attrs_widgets
+   aria.widget.excl = aria.prop.autocomplete? & aria.state.checked?
+      & aria.state.expanded? & aria.prop.level? & aria.prop.multiline? 
+      & aria.prop.multiselectable? & aria.prop.orientation? & aria.state.pressed?
+      & aria.prop.readonly? & aria.prop.required? & aria.state.selected? 
+      & aria.prop.sort? & aria.prop.valuemax? & aria.prop.valuemin? 
+      & aria.prop.valuenow? & aria.prop.valuetext?
+
+   # exclusive relationship, not in global
+   # http://www.w3.org/WAI/PF/aria/states_and_properties#attrs_relationships
+   aria.relationship.excl = aria.prop.activedescendant? & aria.prop.posinset? 
+      & aria.prop.setsize?
+
+
+   aria.state.busy = attribute aria-busy { 'true' | 'false' }
+   aria.state.checked = attribute aria-checked { 'true' | 'false' | 'mixed' | 'undefined' }
+   aria.state.disabled = attribute aria-disabled { 'true' | 'false' }   
+   aria.state.expanded = attribute aria-expanded { 'true' | 'false' | 'undefined' }
+   aria.state.grabbed = attribute aria-grabbed { 'true' | 'false' | 'undefined' }
+   aria.state.hidden = attribute aria-hidden { 'true' | 'false' }
+   aria.state.invalid = attribute aria-invalid { 'true' | 'false' | 'grammar' | 'spelling' }
+   aria.state.pressed = attribute aria-pressed  { 'true' | 'false' | 'mixed' | "undefined" }
+   aria.state.selected = attribute aria-selected { 'true' | 'false' | 'undefined' }
+
+   aria.prop.activedescendant = attribute aria-activedescendant { datatype.IDREF } 
+   aria.prop.atomic = attribute aria-atomic { 'true' | 'false' }	
+   aria.prop.autocomplete = attribute aria-autocomplete { 'inline' | 'list' | 'both' | 'none' }
+   aria.prop.controls = attribute aria-controls { datatype.IDREFS } 
+   aria.prop.describedby = attribute aria-describedby { datatype.IDREFS }
+   aria.prop.dropeffect = attribute aria-dropeffect
+   { token 'none' | token "popup" | token "execute" 
+     | list {('copy'), ('execute')? } | list { ('move'), ('execute')?}
+     | list { ('reference'), ('execute')? } | list { ('execute') , ('copy') }
+     | list { ('execute') , ('move')} | list { ('execute' ), ('reference') }
+   }
+   aria.prop.flowto = attribute aria-flowto { datatype.IDREFS }
+   aria.prop.haspopup = attribute aria-haspopup { 'true' | 'false' }	
+   aria.prop.label = attribute aria-label { datatype.string }
+   aria.prop.labelledby = attribute aria-labelledby { datatype.IDREFS } 
+   aria.prop.level = attribute aria-level { datatype.positive.integer }
+   aria.prop.live = attribute aria-live { 'off' | 'polite' | 'assertive' }	
+   aria.prop.multiline = attribute aria-multiline { 'true' | 'false' }	
+   aria.prop.multiselectable = attribute aria-multiselectable { 'true' | 'false' }
+   aria.prop.orientation = attribute aria-orientation { 'vertical' | 'horizontal' }
+   aria.prop.owns = attribute aria-owns { datatype.IDREFS }
+   aria.prop.posinset = attribute aria-posinset { datatype.positive.integer }
+   aria.prop.readonly = attribute aria-readonly { 'true' | 'false' }	
+   aria.prop.relevant = attribute aria-relevant 
+      { token "all" 
+         | list { ( 'additions' ), ( 'removals' )? , ( 'text' )? }
+         | list { ( 'additions' ), ( 'text' )?, ( 'removals' )? }
+         | list { ( 'removals' ), ( 'additions' )?, ( 'text' )? }
+         | list { ( 'removals' ), ( 'text' )?, ( 'additions' )? }
+         | list { ( 'text' ), ( 'additions' )?, ( 'removals' )? }
+         | list { ( 'text' ), ( 'removals' )? , ( 'additions' )? }
+      }	
+   aria.prop.required = attribute aria-required { 'true' | 'false' }	
+   aria.prop.setsize = attribute aria-setsize { datatype.non-negative.integer }
+   aria.prop.sort = attribute aria-sort { 'ascending '| 'descending' | 'none'  | 'other' }	
+   aria.prop.valuemax = attribute aria-valuemax { datatype.float }
+   aria.prop.valuemin = attribute aria-valuemin { datatype.float }
+   aria.prop.valuenow = attribute aria-valuenow { datatype.float }
+   aria.prop.valuetext = attribute aria-valuetext { datatype.string }
+
+
+   aria.roles = aria.widget.roles & aria.structure.roles & aria.landmark.roles
+
+   aria.widget.roles = 'alert' | 'alertdialog' | 'button' | 'checkbox' | 'dialog' |
+      'gridcell' | 'link' | 'log' | 'marquee' | 'menuitem' | 'menuitemcheckbox' |
+      'menuitemradio' | 'option' | 'progressbar' | 'radio' | 'scrollbar' | 'slider' |
+      'spinbutton' | 'status' | 'tab' | 'tabpanel' | 'textbox' | 'timer' | 'tooltip' |
+      'treeitem' | 'combobox' | 'grid' | 'listbox' | 'menu' | 'menubar' | 'radiogroup' |
+      'tablist' | 'tree' | 'treegrid' 
+      
+   aria.structure.roles = 'article' | 'columnheader' | 'definition' | 'directory' |
+      'document' | 'group' | 'heading' | 'img' | 'list' | 'listitem' | 'math' |
+      'note' | 'presentation' | 'region' | 'row' | 'rowheader' | 'separator' | 
+      'toolbar' 
+      
+   aria.landmark.roles = 'application' | 'banner' | 'complementary' | 'contentinfo' |
+      'form' | 'main' | 'navigation' | 'search' 
+   
+   aria.abstract.roles = 'command' | 'composite' | 'input' | 'landmark' | 'range' 
+      | 'roletype' | 'section' | 'sectionhead' | 'select' | 'structure' | 'widget' |
+      'window'
+      
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-attrib-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-attrib-30.rnc
new file mode 100644
index 0000000..ce3cfd8
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-attrib-30.rnc
@@ -0,0 +1,44 @@
+
+
+
+   html5.global.attrs &= html5.global.common.attrs & html5.global.xml.attrs
+   html5.i18n.attrs = html5.xml.lang.attr? & html5.lang.attr? & html5.dir.attr?
+       
+   html5.global.xml.attrs &= html5.xml.lang.attr? & html5.xml.base.attr? & html5.xml.space.attr?   
+   html5.global.common.attrs &= html5.lang.attr? & html5.id.attr? & html5.title.attr? & html5.dir.attr? & html5.class.attr?
+   
+   
+   
+   html5.lang.attr = attribute lang { datatype.languagecode }
+   html5.xml.lang.attr = attribute xml:lang { datatype.languagecode }       
+   html5.dir.attr = attribute dir { 'ltr' | 'rtl' | 'auto' }  
+   html5.id.attr = attribute id { datatype.ID }   
+   html5.title.attr = attribute title { string }   
+   html5.class.attr = attribute class { datatype.html5.space.separated.tokens }   
+   html5.xml.base.attr = attribute xml:base { datatype.LEIRI }
+   html5.xml.space.attr = attribute xml:space { 'preserve' | 'default' }
+   
+   html5.href.attr = attribute href { datatype.html5.URL.spaces }
+   html5.hreflang.attr = attribute hreflang { datatype.languagecode }      
+   html5.target.attr = attribute target { datatype.html5.browsing.context.name.or.keyword } 
+   html5.rel.attr = attribute rel { datatype.html5.space.separated.tokens }  
+   html5.media.attr = attribute media { datatype.html5.media.query }   
+   
+   html5.type.mime.attr = attribute type { datatype.mimetype }
+   html5.type.mime.nocharset.attr = attribute type { datatype.mimetype.nocharset }
+   
+   html5.charset.attr = attribute charset { datatype.character.encoding }
+   
+   html5.src.attr = attribute src { datatype.html5.URL.spaces }
+   html5.usemap.attr = attribute usemap {datatype.html5.name.reference}
+   
+   html5.cite.attr = attribute cite { datatype.html5.URL.spaces }   
+   html5.alt.attr = attribute alt { datatype.string }
+   
+   html5.name.context.attr = attribute name { datatype.html5.browsing.context.name }
+   html5.name.id.attr = attribute name { datatype.html5.name } 
+   
+   html5.dimension.attrs &= html5.width.attr? & html5.height.attr?      
+   html5.width.attr = attribute width { datatype.non-negative.integer }       
+   html5.height.attr = attribute height { datatype.non-negative.integer }
+      
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-document-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-document-30.rnc
new file mode 100644
index 0000000..5644eba
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-document-30.rnc
@@ -0,0 +1,45 @@
+
+
+   html5.html = element html { html5.html.attlist, html5.head, html5.body }       
+   html5.html.attlist &= html5.global.attrs 
+
+
+   html5.head = element head { html5.head.attlist & html5.head.content } 
+   html5.head.attlist &= html5.global.attrs    
+   html5.head.content = html5.title? & html5.base? & html5.metadata.class*
+   html5.metadata.class |= html5.link | html5.meta
+
+
+   html5.body = element body { html5.body.attlist & html5.body.content }      
+   html5.body.attlist &= html5.global.attrs                            
+   html5.body.content = html5.section.model
+
+
+     
+   html5.base =  element base { html5.base.attlist }
+   html5.base.attlist &= html5.global.attrs & 
+      ((html5.href.attr & html5.target.attr?) | html5.target.attr)   
+                  
+   html5.link = element link { html5.link.attlist }
+   html5.link.attlist &= html5.global.common.attrs & html5.global.xml.attrs &  
+      html5.media.attr? & html5.hreflang.attr? &
+      html5.type.mime.attr? & html5.link.sizes.attr? & html5.link.choice
+   html5.link.choice = html5.rel.attr & html5.href.attr            
+   html5.link.sizes.attr = attribute sizes { 'any' | datatype.html5.sizes } 
+        
+   html5.meta = element meta { html5.meta.attlist }
+   html5.meta.attlist &= html5.global.common.attrs & html5.global.xml.attrs & html5.meta.attrs.choice
+   html5.meta.attrs.choice = (html5.meta.name.attr & html5.meta.content.attr)
+     | (html5.meta.http-equiv.attr & html5.meta.content.attr)
+     | html5.charset.attr        
+   html5.meta.name.attr = attribute name { datatype.string }     
+   html5.meta.http-equiv.attr = attribute http-equiv { html5.meta.http-equiv.attr.content }
+   html5.meta.http-equiv.attr.content = xsd:string { pattern = "([Dd][Ee][Ff][Aa][Uu][Ll][Tt]\-[Ss][Tt][Yy][Ll][Ee])|([Rr][Ee][Ff][Rr][Ee][Ss][Hh])" }
+   html5.meta.content.attr = attribute content { datatype.string }  
+   
+   html5.title = element title { html5.title.attlist & html5.title.content }
+   html5.title.attlist &= html5.global.attrs
+   html5.title.content = datatype.text
+
+
+
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-edit-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-edit-30.rnc
new file mode 100644
index 0000000..8f7c28f
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-edit-30.rnc
@@ -0,0 +1,24 @@
+
+
+   html5.flow.class |= html5.edit.flow.class
+   html5.phrasing.class |= html5.edit.phrasing.class
+   
+   html5.edit.flow.class |= html5.ins.flow | html5.del.flow
+   html5.edit.phrasing.class |= html5.ins.phrasing | html5.del.phrasing	
+   
+   				
+   html5.ins.flow = element ins { html5.ins.attlist & html5.ins.flow.content }
+   html5.ins.phrasing = element ins { html5.ins.attlist & html5.ins.phrasing.content }	
+   html5.ins.flow.content = html5.flow.model
+   html5.ins.phrasing.content = html5.phrasing.model
+   html5.ins.attlist &= html5.global.attrs & html5.cite.attr? & html5.edit.datetime.attr?
+
+
+   html5.del.flow = element del { html5.del.attlist & html5.del.flow.content }
+   html5.del.phrasing = element del { html5.del.attlist & html5.del.phrasing.content }
+	
+   html5.del.flow.content = html5.flow.model
+   html5.del.phrasing.content = html5.phrasing.model
+   html5.del.attlist &= html5.global.attrs & html5.cite.attr? & html5.edit.datetime.attr?
+
+   html5.edit.datetime.attr = attribute datetime { datatype.html5.date.optional.time }
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-embed-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-embed-30.rnc
new file mode 100644
index 0000000..7e193b7
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-embed-30.rnc
@@ -0,0 +1,155 @@
+
+
+   html5.flow.class |= html5.embed.flow.class
+   html5.phrasing.class |= html5.embed.phrasing.class
+
+   html5.embed.flow.class |= html5.audio.flow | html5.video.flow | html5.object.flow | html5.canvas.flow 
+      | html5.map.flow | html5.area | html5.iframe | html5.img | html5.embed
+   html5.embed.phrasing.class |= html5.audio.phrasing | html5.video.phrasing | html5.object.phrasing | html5.canvas.phrasing 
+      | html5.map.phrasing | html5.area | html5.iframe | html5.img | html5.embed 
+
+
+   
+   html5.video.flow = element video { html5.video.attlist & html5.video.flow.content }
+   html5.video.phrasing = element video { html5.video.attlist & html5.video.phrasing.content }
+   html5.video.attlist &= html5.global.attrs & html5.av.common.attrs & html5.video.poster.attr? & html5.dimension.attrs
+   html5.video.poster.attr = attribute poster { datatype.html5.URL.spaces }	   
+   html5.video.flow.content = html5.av.source, html5.track*, html5.flow.model
+   html5.video.phrasing.content = html5.av.source, html5.track*, html5.phrasing.model
+
+
+
+   html5.audio.flow = element audio { html5.audio.attlist & html5.audio.flow.content }
+   html5.audio.phrasing = element audio { html5.audio.attlist & html5.audio.phrasing.content }
+   html5.audio.attlist &= html5.global.attrs & html5.av.common.attrs   		
+   html5.audio.flow.content = html5.av.source, html5.track*, html5.flow.model
+   html5.audio.phrasing.content = html5.av.source, html5.track*, html5.phrasing.model
+
+   html5.av.source = html5.src.attr | html5.source*
+   
+   html5.av.common.attrs =  html5.av.autoplay.attr? & html5.av.preload.attr? 
+      & html5.av.controls.attr? & html5.av.loop.attr? & html5.av.mediagroup.attr?
+      & html5.av.muted.attr?
+		
+		
+   html5.track = element track { html5.track.attlist }	
+   html5.track.attlist &= html5.global.attrs & html5.track.kind.attr? & html5.src.attr & html5.track.default.attr? 
+      & html5.track.srclang.attr? & html5.track.label.attr?
+
+   html5.track.kind.attr = attribute kind { 'subtitles' | 'captions' | 'descriptions' | 'chapters' | 'metadata' }   
+   html5.track.srclang.attr = attribute srclang { datatype.languagecode }
+   html5.track.label.attr = attribute label { datatype.string  }
+   html5.track.default.attr = attribute default { 'default' | '' }
+
+
+   html5.av.autoplay.attr = attribute autoplay { 'autoplay' | '' }
+   html5.av.preload.attr = attribute preload { 'none' | 'metadata' | 'auto' | '' }			
+   html5.av.controls.attr  = attribute controls  { 'controls' | '' }			
+   html5.av.loop.attr = attribute loop { 'loop' | '' }
+   html5.av.mediagroup.attr = attribute mediagroup { datatype.string }
+   html5.av.muted.attr = attribute muted { 'muted' | '' }
+				
+   html5.source = element source { html5.source.attlist }
+   html5.source.attlist &= html5.global.attrs & html5.src.attr & html5.type.mime.attr? & html5.media.attr?
+
+
+   
+   
+   html5.img = element img { html5.img.attlist }
+   html5.img.attlist &= html5.global.attrs & html5.dimension.attrs & html5.src.attr & html5.alt.attr? & html5.usemap.attr? & html5.img.ismap.attr?    
+   html5.img.ismap.attr = attribute ismap { 'ismap' | '' }
+   
+   
+      
+   html5.embed = element embed { html5.embed.attlist }
+   html5.embed.attlist &= html5.global.attrs & html5.src.attr? & html5.type.mime.attr? & html5.dimension.attrs & html5.embed.attrs.other*		
+   html5.embed.attrs.other = empty #TODO		
+
+
+
+   html5.object.flow = element object { html5.object.flow.content & html5.object.attlist }
+   html5.object.phrasing = element object { html5.object.phrasing.content & html5.object.attlist }
+   html5.object.attlist &= html5.global.attrs & (( html5.object.data.attr & html5.type.mime.attr? ) | html5.type.mime.attr ) 
+      & html5.dimension.attrs & html5.usemap.attr? & html5.name.context.attr? & html5.forms.form.attr?
+   html5.object.data.attr = attribute data { datatype.html5.URL.spaces }
+   
+   html5.object.flow.content = html5.param*, html5.flow.model
+   html5.object.phrasing.content = html5.param*, html5.phrasing.model
+
+   html5.param = element param { html5.param.attlist }
+   html5.param.attlist &= html5.global.attrs & html5.param.name.attr & html5.param.value.attr
+   html5.param.name.attr = attribute name { string }
+   html5.param.value.attr = attribute value { string }
+
+
+   html5.canvas.flow = element canvas { html5.canvas.attlist & html5.canvas.flow.content }
+   html5.canvas.phrasing = element canvas { html5.canvas.attlist & html5.canvas.phrasing.content }	
+   html5.canvas.attlist = html5.global.attrs & html5.dimension.attrs
+   html5.canvas.flow.content	= html5.flow.model	
+   html5.canvas.phrasing.content = html5.phrasing.model
+
+
+   html5.map.flow = element map { html5.map.flow.content & html5.map.attlist }
+   html5.map.phrasing  = element map { html5.map.phrasing.content & html5.map.attlist }
+   html5.map.attlist &= html5.global.attrs & html5.name.id.attr
+   html5.map.flow.content = html5.flow.model
+   html5.map.phrasing.content = html5.phrasing.model
+
+
+   html5.area = element area { html5.area.attlist }
+   html5.area.attlist &= html5.global.common.attrs & html5.global.xml.attrs & (html5.alt.attr & html5.href.attr)? & html5.target.attr? & html5.rel.attr? 
+      & html5.media.attr? & html5.hreflang.attr? & html5.type.mime.attr? & html5.area.shape.attrs?
+		
+   html5.area.shape.attrs =
+      ( html5.area.shape.rect.attr?  & html5.area.coords.rect.attr )
+      |( html5.area.shape.circle.attr & html5.area.coords.circle.attr )
+      |( html5.area.shape.poly.attr & html5.area.coords.poly.attr )
+      |( html5.area.shape.default.attr )
+					
+   html5.area.shape.rect.attr = attribute shape { 'rect' }
+   html5.area.coords.rect.attr = attribute coords { datatype.html5.coords.rectangle }
+   html5.area.shape.circle.attr = attribute shape { 'circle' }
+   html5.area.coords.circle.attr = attribute coords { datatype.html5.coords.circle }
+   html5.area.shape.poly.attr = attribute shape { 'poly' }			
+   html5.area.coords.poly.attr = attribute coords {datatype.html5.coords.poly}
+   html5.area.shape.default.attr = attribute shape { 'default' }
+			
+
+
+   html5.iframe = element iframe { html5.iframe.attlist & html5.iframe.content}
+   html5.iframe.attlist &= html5.global.attrs & html5.src.attr? & html5.name.context.attr? 
+      & html5.dimension.attrs & html5.iframe.sandbox.attr? & html5.iframe.seamless.attr? 
+      & html5.iframe.srcdoc.attr?
+   html5.iframe.seamless.attr = attribute seamless { 'seamless' | '' }
+   html5.iframe.sandbox.attr = attribute sandbox
+      { list { 'allow-top-navigation'?, 'allow-same-origin'?, 'allow-forms'?, 'allow-scripts'? }
+      | list { 'allow-top-navigation'?, 'allow-same-origin'?, 'allow-scripts'?, 'allow-forms'? }
+      | list { 'allow-top-navigation'?, 'allow-forms'?, 'allow-same-origin'?, 'allow-scripts'? }
+      | list { 'allow-top-navigation'?, 'allow-forms'?, 'allow-scripts'?, 'allow-same-origin'? }
+      | list { 'allow-top-navigation'?, 'allow-scripts'?, 'allow-same-origin'?, 'allow-forms'? }
+      | list { 'allow-top-navigation'?, 'allow-scripts'?, 'allow-forms'?, 'allow-same-origin'? }
+      | list { 'allow-same-origin'?, 'allow-top-navigation'?, 'allow-forms'?, 'allow-scripts'? }
+      | list { 'allow-same-origin'?, 'allow-top-navigation'?, 'allow-scripts'?, 'allow-forms'? }
+      | list { 'allow-forms'?, 'allow-top-navigation'?, 'allow-same-origin'?, 'allow-scripts'? }
+      | list { 'allow-forms'?, 'allow-top-navigation'?, 'allow-scripts'?, 'allow-same-origin'? }
+      | list { 'allow-scripts'?, 'allow-top-navigation'?, 'allow-same-origin'?, 'allow-forms'? }
+      | list { 'allow-scripts'?, 'allow-top-navigation'?, 'allow-forms'?, 'allow-same-origin'? }
+      | list { 'allow-same-origin'?, 'allow-forms'?, 'allow-top-navigation'?, 'allow-scripts'? }
+      | list { 'allow-same-origin'?, 'allow-scripts'?, 'allow-top-navigation'?, 'allow-forms'? }
+      | list { 'allow-forms'?, 'allow-same-origin'?, 'allow-top-navigation'?, 'allow-scripts'? }
+      | list { 'allow-forms'?, 'allow-scripts'?, 'allow-top-navigation'?, 'allow-same-origin'? }
+      | list { 'allow-scripts'?, 'allow-same-origin'?, 'allow-top-navigation'?, 'allow-forms'? }
+      | list { 'allow-scripts'?, 'allow-forms'?, 'allow-top-navigation'?, 'allow-same-origin'? }
+      | list { 'allow-same-origin'?, 'allow-forms'?, 'allow-scripts'?, 'allow-top-navigation'? }
+      | list { 'allow-same-origin'?, 'allow-scripts'?, 'allow-forms'?, 'allow-top-navigation'? }
+      | list { 'allow-forms'?, 'allow-same-origin'?, 'allow-scripts'?, 'allow-top-navigation'? }
+      | list { 'allow-forms'?, 'allow-scripts'?, 'allow-same-origin'?, 'allow-top-navigation'? }
+      | list { 'allow-scripts'?, 'allow-same-origin'?, 'allow-forms'?, 'allow-top-navigation'? }
+      | list { 'allow-scripts'?, 'allow-forms'?, 'allow-same-origin'?, 'allow-top-navigation'? }
+      } 
+   html5.iframe.srcdoc.attr	= attribute srcdoc { datatype.html5.iframe.srcdoc.xml }
+   
+   html5.iframe.content = html5.iframe.content.xml
+   html5.iframe.content.html = datatype.text 
+   html5.iframe.content.xml = empty 
+   
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-forms-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-forms-30.rnc
new file mode 100644
index 0000000..1d213c8
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-forms-30.rnc
@@ -0,0 +1,431 @@
+   
+   
+   
+   html5.flow.class |= html5.forms.flow.class
+   html5.phrasing.class |= html5.forms.phrasing.class
+   
+   html5.forms.flow.class |= html5.form | html5.fieldset
+   html5.forms.phrasing.class |= html5.meter | html5.input.class | html5.textarea 
+      | html5.label | html5.button.class | html5.select | html5.output | html5.datalist
+      | html5.keygen
+   
+   html5.input.class |= html5.input.text | html5.input.password | html5.input.checkbox
+      | html5.input.radio | html5.input.button | html5.input.submit | html5.input.reset
+      | html5.input.file | html5.input.hidden | html5.input.image | html5.input.datetime
+      | html5.input.datetime-local | html5.input.date | html5.input.month | html5.input.time
+      | html5.input.week | html5.input.number | html5.input.range | html5.input.email 
+      | html5.input.url | html5.input.search | html5.input.tel | html5.input.color
+      
+   html5.button.class |=  html5.button.submit | html5.button.reset | html5.button.button
+
+   
+
+
+   html5.form = element form { html5.form.attlist & html5.form.content }	
+   html5.form.attlist &= html5.global.attrs & html5.form.action.attr? 
+      & html5.form.method.attr? & html5.form.enctype.attr? 
+      & html5.forms.name.attr? & html5.form.accept-charset.attr? 
+      & html5.form.novalidate.attr? & html5.form.target.attr?
+      & html5.form.autocomplete.attr?
+   html5.form.action.attr = attribute action { datatype.html5.URL.spaces }
+   html5.form.method.attr = attribute method { html5.form.method.attr.value }
+   html5.form.method.attr.value =  ( 'get' | 'post' )
+   html5.form.enctype.attr = attribute enctype { html5.form.enctype.attr.value }
+   html5.form.enctype.attr.value = ( 'application/x-www-form-urlencoded' | 'multipart/form-data' | 'text/plain' )
+   html5.form.accept-charset.attr = attribute accept-charset { datatype.html5.forms.charsetlist}
+   html5.form.novalidate.attr = attribute novalidate { 'novalidate' | '' }
+   html5.form.target.attr = attribute target { datatype.html5.browsing.context.name.or.keyword }
+   html5.form.autocomplete.attr = attribute autocomplete { 'on' | 'off' }
+   html5.form.content = html5.flow.model
+
+
+   html5.input.text =  element input { html5.input.text.attlist }
+   html5.input.text.attlist = html5.global.attrs & html5.forms.common.attrs
+      & attribute type { 'text' }? & html5.forms.maxlength.attr? 
+      & html5.forms.readonly.attr? & html5.forms.size.attr?
+      & html5.input.text.value.attr? & html5.input.autocomplete.attr? 
+      & html5.forms.autofocus.attr? & html5.input.list.attr? 
+      & html5.forms.pattern.attr? & html5.forms.required.attr? 
+      & html5.forms.placeholder.attr? & html5.input.common.attrs       
+   html5.input.text.value.attr = attribute value { datatype.html5.forms.string.nolinebreaks }
+
+      
+   html5.input.password =  element input { html5.input.password.attlist }
+   html5.input.password.attlist = html5.global.attrs & html5.forms.common.attrs
+      & attribute type { 'password' } & html5.forms.maxlength.attr? 
+      & html5.forms.readonly.attr? & html5.forms.size.attr?
+      & html5.input.password.value.attr? & html5.input.autocomplete.attr? 
+      & html5.forms.autofocus.attr? & html5.forms.pattern.attr? 
+      & html5.forms.required.attr? & html5.forms.placeholder.attr?
+      & html5.input.common.attrs
+   html5.input.password.value.attr = attribute value { datatype.html5.forms.string.nolinebreaks }
+
+        
+   html5.input.checkbox = element input { html5.input.checkbox.attlist }
+   html5.input.checkbox.attlist =  html5.global.attrs & html5.forms.common.attrs 
+      & attribute type { 'checkbox' } & html5.input.checked.attr? 
+      & html5.input.checkbox.value.attr? & html5.forms.autofocus.attr? 
+      & html5.forms.required.attr? & html5.input.common.attrs   
+   html5.input.checkbox.value.attr = attribute value { datatype.string }      
+
+
+   html5.input.radio = element input { html5.input.radio.attlist }
+   html5.input.radio.attlist = html5.global.attrs & html5.forms.common.attrs
+      & attribute type { 'radio' } & html5.input.checked.attr? 
+      & html5.input.radio.value.attr? & html5.forms.autofocus.attr? 
+      & html5.forms.required.attr? & html5.input.common.attrs
+   html5.input.radio.value.attr = attribute value { datatype.string }
+
+
+   html5.input.button = element input { html5.input.button.attlist }
+   html5.input.button.attlist = html5.global.attrs & html5.forms.common.attrs 
+      & attribute type { 'button' } & html5.input.button.value.attr? 
+      & html5.forms.autofocus.attr? & html5.input.common.attrs
+   html5.input.button.value.attr = attribute value { datatype.string }
+
+
+   html5.input.submit = element input { html5.input.submit.attlist }
+   html5.input.submit.attlist = html5.global.attrs & html5.forms.common.attrs
+      & attribute type { 'submit' } & html5.input.submit.value.attr? 
+      & html5.forms.formaction.attr? & html5.forms.autofocus.attr? 
+      & html5.forms.formenctype.attr? & html5.forms.formmethod.attr? 
+      & html5.forms.formtarget.attr? & html5.forms.formnovalidate.attr? 
+      & html5.input.common.attrs
+   html5.input.submit.value.attr = attribute value { datatype.string }
+
+     
+   html5.input.reset = element input { html5.input.reset.attlist }
+   html5.input.reset.attlist = html5.global.attrs & html5.forms.common.attrs
+      & attribute type { 'reset' } & html5.input.reset.value.attr?
+      & html5.forms.autofocus.attr? & html5.input.common.attrs   
+   html5.input.reset.value.attr = attribute value { datatype.string }     
+     
+     
+   html5.input.file =  element input { html5.input.file.attlist }
+   html5.input.file.attlist = html5.global.attrs & html5.forms.common.attrs
+      & attribute type { 'file'} & html5.input.file.accept.attr?
+      & html5.forms.autofocus.attr? & html5.forms.required.attr? 
+      & html5.input.multiple.attr? & html5.input.common.attrs
+   html5.input.file.accept.attr = attribute accept { datatype.html5.forms.mimetypelist }  
+     
+     
+   html5.input.hidden = element input { html5.input.hidden.attlist }
+   html5.input.hidden.attlist = html5.global.attrs & html5.forms.common.attrs
+      & attribute type { 'hidden' } & html5.input.hidden.value.attr? 
+      & html5.input.common.attrs
+   html5.input.hidden.value.attr = attribute value { datatype.string }
+     
+
+   html5.input.image = element input { html5.input.image.attlist }
+   html5.input.image.attlist = html5.global.attrs & html5.forms.common.attrs
+      & attribute type { 'image' } & html5.alt.attr & html5.src.attr 
+      & html5.forms.formaction.attr? & html5.forms.autofocus.attr? 
+      & html5.forms.formenctype.attr? & html5.forms.formmethod.attr? 
+      & html5.forms.formtarget.attr? & html5.forms.formnovalidate.attr? 
+      & html5.dimension.attrs? & html5.input.common.attrs
+   
+   
+   
+   html5.input.datetime = element input { html5.input.datetime.attlist }	
+   html5.input.datetime.attlist =  html5.global.attrs
+      & html5.forms.common.attrs & attribute type { 'datetime'}
+      & html5.input.autocomplete.attr? & html5.forms.autofocus.attr? 
+      & html5.input.list.attr? & html5.input.datetime.min.attr? 
+      & html5.input.datetime.max.attr? & html5.input.step.float.attr? 
+      & html5.forms.readonly.attr? & html5.forms.required.attr? 
+      & html5.input.datetime.value.attr? & html5.input.common.attrs
+   html5.input.datetime.min.attr = attribute min { datatype.html5.datetime }
+   html5.input.datetime.max.attr = attribute max { datatype.html5.datetime }	
+   html5.input.datetime.value.attr = attribute value { datatype.html5.datetime }
+
+
+   html5.input.datetime-local =  element input { html5.input.datetime-local.attlist }
+   html5.input.datetime-local.attlist = html5.global.attrs & html5.forms.common.attrs
+      & attribute type { 'datetime-local' } & html5.input.autocomplete.attr? 
+      & html5.forms.autofocus.attr? & html5.input.list.attr? 
+      & html5.input.datetime-local.min.attr? & html5.input.datetime-local.max.attr? 
+      & html5.input.step.float.attr? & html5.forms.readonly.attr? 
+      & html5.forms.required.attr? & html5.input.datetime-local.value.attr?
+      & html5.input.common.attrs
+   html5.input.datetime-local.min.attr = attribute min { datatype.html5.datetime.local }
+   html5.input.datetime-local.max.attr = attribute max { datatype.html5.datetime.local }	
+   html5.input.datetime-local.value.attr = attribute value { datatype.html5.datetime.local }
+
+
+   html5.input.date = element input { html5.input.date.attlist }
+   html5.input.date.attlist = html5.global.attrs & html5.forms.common.attrs
+      & attribute type { 'date' } & html5.input.autocomplete.attr? 
+      & html5.forms.autofocus.attr? & html5.input.list.attr? 
+      & html5.input.date.min.attr? & html5.input.date.max.attr? 
+      & html5.input.step.integer.attr? & html5.forms.readonly.attr? 
+      & html5.forms.required.attr? & html5.input.date.value.attr? 
+      & html5.input.common.attrs
+   html5.input.date.min.attr = attribute min { datatype.html5.date }
+   html5.input.date.max.attr = attribute max { datatype.html5.date }	
+   html5.input.date.value.attr = attribute value { datatype.html5.date }
+
+
+   html5.input.month = element input { html5.input.month.attlist }
+   html5.input.month.attlist = html5.global.attrs & html5.forms.common.attrs
+      & attribute type { 'month' } & html5.input.autocomplete.attr? 
+      & html5.forms.autofocus.attr? & html5.input.list.attr? 
+      & html5.input.month.min.attr? & html5.input.month.max.attr? 
+      & html5.input.step.integer.attr? & html5.forms.readonly.attr? 
+      & html5.forms.required.attr? & html5.input.month.value.attr? 
+      & html5.input.common.attrs
+   html5.input.month.min.attr = attribute min { datatype.html5.month }
+   html5.input.month.max.attr = attribute max { datatype.html5.month }	
+   html5.input.month.value.attr = attribute value { datatype.html5.month }
+		
+	
+   html5.input.time = element input { html5.input.time.attlist }
+   html5.input.time.attlist =  html5.global.attrs & html5.forms.common.attrs
+      & attribute type { 'time' } & html5.input.autocomplete.attr? 
+      & html5.forms.autofocus.attr? & html5.input.list.attr? 
+      & html5.input.time.min.attr? & html5.input.time.max.attr? 
+      & html5.input.step.float.attr? & html5.forms.readonly.attr? 
+      & html5.forms.required.attr? & html5.input.time.value.attr? 
+      & html5.input.common.attrs
+   html5.input.time.min.attr = attribute min { datatype.html5.time }
+   html5.input.time.max.attr = attribute max { datatype.html5.time }	
+   html5.input.time.value.attr = attribute value { datatype.html5.time }
+		
+	
+   html5.input.week = element input { html5.input.week.attlist }
+   html5.input.week.attlist = html5.global.attrs & html5.forms.common.attrs
+      & attribute type { 'week' } & html5.input.autocomplete.attr? 
+      & html5.forms.autofocus.attr? & html5.input.list.attr? 
+      & html5.input.week.min.attr? & html5.input.week.max.attr? 
+      & html5.input.step.integer.attr? & html5.forms.readonly.attr? 
+      & html5.forms.required.attr? & html5.input.week.value.attr? 
+      & html5.input.common.attrs
+   html5.input.week.min.attr = attribute min { datatype.html5.week }
+   html5.input.week.max.attr = attribute max { datatype.html5.week }	
+   html5.input.week.value.attr = attribute value { datatype.html5.week }
+		
+	
+   html5.input.number = element input { input.number.attlist }
+   input.number.attlist = html5.global.attrs & html5.forms.common.attrs
+      & attribute type { 'number' } & html5.input.autocomplete.attr? 
+      & html5.forms.autofocus.attr? & html5.input.list.attr? 
+      & html5.input.number.min.attr? & html5.input.number.max.attr? 
+      & html5.input.step.float.attr? & html5.forms.readonly.attr? 
+      & html5.forms.required.attr? & html5.input.number.value.attr? 
+      & html5.input.common.attrs
+   html5.input.number.min.attr = attribute min { datatype.float }
+   html5.input.number.max.attr = attribute max { datatype.float }	
+   html5.input.number.value.attr = attribute value { datatype.float }
+		
+	
+   html5.input.range = element input { html5.input.range.attlist }
+   html5.input.range.attlist = html5.global.attrs & html5.forms.common.attrs
+      & attribute type { 'range' } & html5.input.autocomplete.attr? 
+      & html5.forms.autofocus.attr? & html5.input.list.attr? 
+      & html5.input.range.min.attr? & html5.input.range.max.attr? 
+      & html5.input.step.float.attr? & html5.input.range.value.attr? 
+      & html5.input.common.attrs
+   html5.input.range.min.attr = attribute min { datatype.float }
+   html5.input.range.max.attr = attribute max { datatype.float }	
+   html5.input.range.value.attr = attribute value { datatype.float }
+		
+	
+   html5.input.email =  element input { html5.input.email.attlist }	
+   html5.input.email.attlist =  html5.global.attrs & html5.forms.common.attrs
+      & attribute type { 'email' } & html5.input.autocomplete.attr? 
+      & html5.forms.autofocus.attr? & html5.input.list.attr? 
+      & html5.forms.maxlength.attr? & html5.forms.pattern.attr? 
+      & html5.forms.readonly.attr? & html5.forms.required.attr? 
+      & html5.forms.size.attr? & html5.forms.placeholder.attr?
+      & ((html5.input.multiple.attr & html5.input.email.value.multiple.attr?)
+			| html5.input.email.value.single.attr? )?
+	  & html5.input.common.attrs					
+   html5.input.email.value.single.attr = attribute value { datatype.html5.emailaddress }
+   html5.input.email.value.multiple.attr = attribute value { datatype.html5.emailaddresslist }
+		
+	
+   html5.input.url =  element input { html5.input.url.attlist }	
+   html5.input.url.attlist =  html5.global.attrs & html5.forms.common.attrs
+      & attribute type { 'url' } & html5.input.autocomplete.attr? 
+      & html5.forms.autofocus.attr? & html5.input.list.attr? 
+      & html5.forms.maxlength.attr? & html5.forms.pattern.attr? 
+      & html5.forms.readonly.attr? & html5.forms.required.attr? 
+      & html5.forms.size.attr? & html5.forms.placeholder.attr?
+      &	html5.input.url.value.attr? & html5.input.common.attrs				
+   html5.input.url.value.attr = attribute value { '' | datatype.URI.absolute }
+		
+	
+   html5.input.search =  element input { html5.input.search.attlist }	
+   html5.input.search.attlist = html5.global.attrs & html5.forms.common.attrs
+      & attribute type { 'search' } & html5.input.autocomplete.attr? 
+      & html5.forms.autofocus.attr? & html5.input.list.attr? 
+      & html5.forms.maxlength.attr? & html5.forms.pattern.attr? 
+      & html5.forms.readonly.attr? & html5.forms.required.attr? 
+      & html5.forms.size.attr? & html5.forms.placeholder.attr?
+      & html5.input.search.value.attr? & html5.input.common.attrs
+   html5.input.search.value.attr = attribute value { datatype.html5.forms.string.nolinebreaks }
+		
+	
+   html5.input.tel = element input { html5.input.tel.attlist }	
+   html5.input.tel.attlist = html5.global.attrs & html5.forms.common.attrs
+      & attribute type { 'tel' } & html5.input.autocomplete.attr? 
+      & html5.forms.autofocus.attr? & html5.input.list.attr? 
+      & html5.forms.maxlength.attr? & html5.forms.pattern.attr? 
+      & html5.forms.readonly.attr? & html5.forms.required.attr? 
+      & html5.forms.size.attr? & html5.forms.placeholder.attr?
+      & html5.input.tel.value.attr? & html5.input.common.attrs			
+   html5.input.tel.value.attr = attribute value { datatype.string }
+		
+		
+   html5.input.color = element input { html5.input.color.attlist }	
+   html5.input.color.attlist = html5.global.attrs & html5.forms.common.attrs
+      & attribute type { 'color' } & html5.input.autocomplete.attr? 
+      & html5.forms.autofocus.attr? & html5.input.list.attr? 
+      & html5.input.color.value.attr? & html5.input.common.attrs 			
+   html5.input.color.value.attr = attribute value { datatype.html5.color }
+
+
+   html5.textarea = element textarea { html5.textarea.attlist & html5.textarea.content }
+   html5.textarea.attlist = html5.global.attrs & html5.forms.common.attrs 
+      & html5.forms.readonly.attr? & html5.forms.maxlength.attr?
+      & html5.forms.autofocus.attr? & html5.forms.required.attr? 
+      & html5.forms.placeholder.attr? & html5.textarea.rows.attr?
+      & ((html5.textarea.wrap.hard.attr? & html5.textarea.cols.attr)| 
+          (html5.textarea.wrap.soft.attr? & html5.textarea.cols.attr?)) 
+      & html5.forms.dirname.attr?   
+   html5.textarea.cols.attr = attribute cols { datatype.positive.integer }
+   html5.textarea.rows.attr = attribute rows { datatype.positive.integer }
+   html5.textarea.wrap.hard.attr = attribute wrap { 'hard' }
+   html5.textarea.wrap.soft.attr = attribute wrap { 'soft' }
+   html5.textarea.content = datatype.text
+
+		
+   html5.option = element option { html5.option.attlist & html5.option.content }
+   html5.option.attlist = html5.global.attrs & html5.forms.disabled.attr?
+      & html5.option.selected.attr? & html5.option.label.attr? 
+      & html5.option.value.attr?      
+   html5.option.selected.attr = attribute selected { 'selected' | '' }
+   html5.option.label.attr = attribute label { datatype.string }		
+   html5.option.value.attr = attribute value { datatype.string }		
+   html5.option.content = datatype.text
+   
+      
+   html5.optgroup = element optgroup { html5.optgroup.attlist & html5.optgroup.content }
+   html5.optgroup.attlist = html5.global.attrs & html5.optgroup.label.attr & html5.forms.disabled.attr?
+   html5.optgroup.label.attr = attribute label { datatype.string }
+   html5.optgroup.content = html5.option*
+
+
+   html5.select = element select { html5.select.attlist & html5.select.content }	
+   html5.select.attlist = html5.global.attrs & html5.forms.common.attrs
+      & html5.select.size.attr? & html5.select.multiple.attr?	
+      & html5.forms.autofocus.attr? & html5.forms.required.attr?
+   html5.select.size.attr = attribute size { datatype.positive.integer }
+   html5.select.multiple.attr = attribute multiple { 'multiple' | '' }
+   html5.select.content = html5.optgroup* & html5.option*
+   
+   					
+   html5.button.submit = element button { html5.button.submit.attlist & html5.button.content }	
+   html5.button.submit.attlist = html5.global.attrs & html5.forms.common.attrs
+      & html5.button.submit.type.attr? & html5.button.value.attr?  
+      & html5.forms.formaction.attr? & html5.forms.autofocus.attr? 
+      & html5.forms.formenctype.attr? & html5.forms.formmethod.attr? 
+      & html5.forms.formtarget.attr? & html5.forms.formnovalidate.attr? 
+   html5.button.submit.type.attr = attribute type { 'submit' }
+
+   	
+   html5.button.reset = element button { html5.button.reset.attlist & html5.button.content }	
+   html5.button.reset.attlist = html5.global.attrs & html5.forms.common.attrs
+      & html5.button.reset.type.attr & html5.button.value.attr?   
+      & html5.forms.autofocus.attr?
+   html5.button.reset.type.attr = attribute type { 'reset' }
+
+	
+   html5.button.button = element button { html5.button.button.attlist & html5.button.content }	
+   html5.button.button.attlist = html5.global.attrs & html5.forms.common.attrs
+      & html5.button.button.type.attr & html5.button.value.attr?     
+      & html5.forms.autofocus.attr?
+   html5.button.button.type.attr = attribute type { 'button' }
+   
+   html5.button.value.attr = attribute value { datatype.string }
+   html5.button.content = html5.phrasing.model 
+
+   
+   html5.fieldset = element fieldset { html5.fieldset.attlist & html5.fieldset.content }
+   html5.fieldset.attlist = html5.global.attrs & html5.forms.common.attrs
+   html5.fieldset.content = html5.legend?, html5.flow.model
+
+
+   html5.legend = element legend { html5.legend.attlist & html5.legend.content }
+   html5.legend.attlist = html5.global.attrs			
+   html5.legend.content = html5.phrasing.model
+		
+		
+   html5.label = element label { html5.label.attlist & html5.label.content }
+   html5.label.attlist = html5.global.attrs & html5.label.for.attr? 
+      & html5.forms.form.attr?
+   html5.label.for.attr = attribute for { datatype.IDREF }
+   html5.label.content = html5.phrasing.model
+   
+   
+   html5.meter = element meter { html5.meter.attlist & html5.meter.content }
+   html5.meter.attlist = html5.global.attrs & html5.meter.value.attr & html5.meter.min.attr? 
+      & html5.meter.low.attr? & html5.meter.high.attr? & html5.meter.max.attr? & html5.meter.optimum.attr?		
+   html5.meter.value.attr = attribute value { datatype.float }
+   html5.meter.min.attr = attribute min { datatype.float }
+   html5.meter.low.attr = attribute low { datatype.float }
+   html5.meter.high.attr = attribute high { datatype.float }
+   html5.meter.max.attr = attribute max { datatype.float }
+   html5.meter.optimum.attr = attribute optimum { datatype.float }
+   html5.meter.content = html5.phrasing.model
+
+
+   html5.output = element output { html5.output.attlist & html5.output.content }
+   html5.output.attlist = html5.global.attrs & html5.forms.name.attr?
+      & html5.forms.form.attr? & html5.output.for.attr?
+   html5.output.for.attr = attribute for { datatype.IDREFS }
+   html5.output.content = html5.phrasing.model
+		
+		
+   html5.datalist = element datalist { html5.datalist.attlist & html5.datalist.content }
+   html5.datalist.attlist = html5.global.attrs 
+   html5.datalist.content = html5.option* & html5.phrasing.model 
+
+
+   html5.keygen = element keygen { html5.keygen.attlist }
+   html5.keygen.attlist = html5.global.attrs & html5.keygen.challenge.attr?
+      & html5.keygen.keytype.attr? & html5.forms.autofocus.attr? 
+      & html5.forms.common.attrs?				
+   html5.keygen.challenge.attr = attribute challenge { datatype.string }
+   html5.keygen.keytype.attr = attribute keytype { 'rsa' }
+
+
+   html5.input.common.attrs = html5.forms.dirname.attr?
+   html5.input.checked.attr = attribute checked { 'checked' | '' }
+   html5.input.autocomplete.attr = attribute autocomplete { 'on' | 'off'}	
+   html5.input.list.attr = attribute list { datatype.IDREF }	
+   html5.input.step.float.attr = attribute step { 'any' | datatype.float.positive }	
+   html5.input.step.integer.attr = attribute step { 'any' | datatype.positive.integer }	
+   html5.input.multiple.attr = attribute multiple { 'multiple' | '' }
+
+   
+   html5.forms.common.attrs = html5.forms.name.attr? & html5.forms.disabled.attr? & html5.forms.form.attr?	
+   
+   html5.forms.name.attr =  attribute name { datatype.string }
+   html5.forms.disabled.attr = attribute disabled { 'disabled' | '' }
+   html5.forms.form.attr = attribute form { datatype.IDREF }	
+   html5.forms.readonly.attr = attribute readonly { 'readonly' | '' }
+   html5.forms.maxlength.attr = attribute maxlength { datatype.non-negative.integer }
+   html5.forms.size.attr = attribute size { datatype.positive.integer }   
+   html5.forms.formaction.attr = attribute formaction { datatype.html5.URL.spaces }
+   html5.forms.formenctype.attr = attribute formenctype { html5.forms.formenctype.attr.value }
+   html5.forms.formenctype.attr.value = ( 'application/x-www-form-urlencoded' | 'multipart/form-data'| 'text/plain' )
+   html5.forms.formmethod.attr = attribute formmethod { html5.forms.formmethod.attr.value }
+   html5.forms.formmethod.attr.value = ( 'get'| 'post')
+   html5.forms.formtarget.attr = attribute formtarget { datatype.html5.browsing.context.name.or.keyword }
+   html5.forms.formnovalidate.attr =  attribute formnovalidate { 'formnovalidate' | '' }
+   html5.forms.autofocus.attr =  attribute autofocus { 'autofocus' | '' }	
+   html5.forms.pattern.attr = attribute pattern { datatype.html5.forms.pattern }
+   html5.forms.template.attr = attribute template { datatype.IDREF }
+   html5.forms.required.attr = attribute required { 'required' | '' }
+   html5.forms.placeholder.attr =  attribute placeholder { datatype.html5.forms.string.nolinebreaks }
+   html5.forms.dirname.attr =  attribute dirname { datatype.string }
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-grouping-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-grouping-30.rnc
new file mode 100644
index 0000000..4772657
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-grouping-30.rnc
@@ -0,0 +1,115 @@
+
+
+   html5.flow.class |= html5.grouping.class
+   html5.grouping.class |= html5.p | html5.hr | html5.pre | html5.blockquote | html5.ul | html5.ol | html5.dl | html5.div | html5.figure | html5.table
+   
+   html5.grouping.attrs &= html5.global.attrs
+      
+   html5.p = element p { html5.p.attlist & html5.p.content }
+   html5.p.attlist &= html5.grouping.attrs
+   html5.p.content = html5.phrasing.model
+   
+   html5.hr = element hr { html5.hr.attlist }
+   html5.hr.attlist = html5.grouping.attrs
+
+   html5.pre = element pre { html5.pre.attlist & html5.pre.content }
+   html5.pre.attlist = html5.grouping.attrs
+   html5.pre.content = html5.phrasing.model
+
+   html5.blockquote = element blockquote { html5.blockquote.attlist & html5.blockquote.content }
+   html5.blockquote.attlist = html5.grouping.attrs & html5.cite.attr?
+   html5.blockquote.content = html5.flow.model
+
+   html5.ul = element ul { html5.ul.attlist & html5.ul.content }
+   html5.ul.attlist = html5.grouping.attrs
+   html5.ul.content = html5.li*
+
+   html5.li = element li { html5.li.attlist & html5.li.content }
+   html5.li.attlist = html5.global.attrs 
+   html5.li.content = html5.flow.model
+
+   html5.ol = element ol { html5.ol.attlist & html5.ol.content }
+   html5.ol.attlist = html5.grouping.attrs & html5.ol.start.attr? & html5.ol.reversed.attr? & ol.type.attr?
+   html5.ol.start.attr = attribute start { datatype.integer }
+   html5.ol.reversed.attr = attribute reversed { 'reversed' | '' }
+   ol.type.attr = attribute type {'1' | 'a' | 'A' | 'i' | 'I' }
+   html5.ol.content = html5.oli*
+
+   html5.oli = element li { html5.oli.attlist & html5.oli.content }
+   html5.oli.attlist = html5.global.attrs & html5.oli.attrs.value?
+   html5.oli.attrs.value = attribute value { datatype.integer }
+   html5.oli.content = html5.flow.model
+
+   html5.dl = element dl { html5.dl.attlist & html5.dl.content }
+   html5.dl.attlist = html5.grouping.attrs
+   html5.dl.content = (html5.dt+ , html5.dd+)*
+
+   html5.dt = element dt { html5.dt.attlist & html5.dt.content }
+   html5.dt.attlist = html5.global.attrs
+   html5.dt.content = html5.phrasing.model
+
+   html5.dd = element dd { html5.dd.attlist & html5.dd.content }
+   html5.dd.phrasing = element dd { html5.dd.phrasing.content & html5.dd.attlist }
+   html5.dd.attlist = html5.global.attrs
+   html5.dd.content = html5.flow.model
+   html5.dd.phrasing.content = html5.phrasing.model
+
+   html5.div = element div { html5.div.attlist & html5.div.content }
+   html5.div.attlist = html5.grouping.attrs
+   html5.div.content = html5.flow.model
+
+   html5.figure = element figure { html5.figure.attlist & html5.figure.content }
+   html5.figure.attlist = html5.grouping.attrs
+   html5.figure.content = ( html5.figcaption, html5.flow.model ) | ( html5.flow.model, html5.figcaption? )
+		
+   html5.figcaption = element figcaption { html5.figcaption.attlist & html5.figcaption.content }
+   html5.figcaption.attlist = html5.global.attrs
+   html5.figcaption.content = html5.flow.model
+      
+   html5.table = element table { table.attlist & table.content }
+   table.attlist &= html5.grouping.attrs & html5.table.border.attr?
+   html5.table.border.attr = attribute border { '1' | '' }
+   table.content = (html5.caption?, html5.colgroup*, html5.thead?, 
+      ((html5.tfoot, ( html5.tbody* | html5.tr+ ))|(( html5.tbody* | html5.tr+ ), html5.tfoot?))) 
+
+   html5.caption = element caption { html5.caption.attlist & html5.caption.content }
+   html5.caption.attlist &= html5.global.attrs
+   html5.caption.content = html5.flow.model
+      
+   html5.colgroup = element colgroup { html5.colgroup.attlist & html5.colgroup.content }
+   html5.colgroup.attlist &= html5.global.attrs   
+   html5.colgroup.content = html5.col* | html5.colspan.col.span.attr?
+                     
+   html5.col = element col { html5.col.attlist }
+   html5.col.attlist &= html5.global.attrs & html5.colspan.col.span.attr?  
+            
+   html5.thead = element thead { html5.thead.attlist & html5.thead.content }
+   html5.thead.attlist &= html5.grouping.attrs  
+   html5.thead.content = html5.tr* 
+      
+   html5.tfoot = element tfoot { html5.tfoot.attlist & html5.tfoot.content }
+   html5.tfoot.attlist &= ( html5.grouping.attrs )
+   html5.tfoot.content = ( html5.tr* )
+
+   html5.tbody = element tbody { html5.tbody.attlist & html5.tbody.content  }
+   html5.tbody.attlist &= ( html5.grouping.attrs )
+   html5.tbody.content = ( html5.tr* )
+      
+   html5.tr = element tr { html5.tr.attlist & html5.tr.content }
+   html5.tr.attlist &= html5.grouping.attrs
+   html5.tr.content = ( html5.td | html5.th )* 
+   
+   html5.td = element td { html5.td.attlist & html5.td.content }
+   html5.td.attlist &= html5.global.attrs & html5.table.colspan.attr? & html5.table.rowspan.attr? & html5.table.headers.attr?
+   html5.td.content = ( html5.flow.model )
+
+   html5.th = element th { html5.th.content & html5.th.attlist }
+   html5.th.attlist &= html5.global.attrs & html5.table.colspan.attr? & html5.table.rowspan.attr? & html5.table.scope.attr? & html5.table.headers.attr?    
+   html5.th.content = ( html5.flow.model )
+
+   html5.colspan.col.span.attr = attribute span { datatype.positive.integer }   
+   html5.table.colspan.attr = attribute colspan { datatype.positive.integer }
+   html5.table.rowspan.attr = attribute rowspan { datatype.non-negative.integer }   
+   html5.table.headers.attr = attribute headers { datatype.IDREFS }   
+   html5.table.scope.attr = attribute scope { 'row' | 'col' | 'rowgroup' | 'colgroup' }
+   html5.table.abbr.attr = attribute abbr { string }
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-interactive-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-interactive-30.rnc
new file mode 100644
index 0000000..648e4d3
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-interactive-30.rnc
@@ -0,0 +1,86 @@
+
+
+   html5.flow.class |= html5.interactive.flow.class
+   html5.phrasing.class |= html5.interactive.phrasing.class
+   html5.metadata.class |= html5.interactive.metadata.class
+
+   html5.interactive.phrasing.class |= html5.command.class | html5.progress
+   html5.interactive.flow.class |= html5.menu | html5.details
+   html5.interactive.metadata.class |= html5.command.class
+
+   html5.command.class |= html5.command.command | html5.command.radio | html5.command.checkbox
+      
+    
+   html5.html.attlist &= html5.interactive.manifest.attr?
+   html5.global.common.attrs &= html5.interactive.global.attrs
+   
+   html5.interactive.global.attrs &= html5.interactive.contextmenu.attr?
+      & html5.interactive.contenteditable.attr? & html5.interactive.draggable.attr?
+	  & html5.interactive.hidden.attr? & html5.interactive.spellcheck.attr? 
+	  & html5.interactive.accesskey.attr? & html5.interactive.tabindex.attr? & html5.interactive.dropzone.attr?
+      
+   html5.progress = element progress { html5.progress.attlist & html5.progress.content }
+   html5.progress.attlist &= html5.phrasing.attrs & html5.progress.value.attr? & html5.progress.max.attr?
+   html5.progress.value.attr = attribute value { datatype.float.non-negative }
+   html5.progress.max.attr = attribute max { datatype.float.positive }
+   html5.progress.content = html5.phrasing.model
+		
+
+   html5.command.command = element command { html5.command.command.attlist }
+   html5.command.command.attlist &= html5.phrasing.attrs & html5.command.command.type.attr? & html5.common-command.attrs
+   html5.command.command.type.attr = attribute type { 'command' }
+   
+   html5.command.checked.attr = attribute checked { 'checked' | '' }
+   
+   html5.command.radio = element command { html5.command.radio.attlist }
+   html5.command.radio.attlist &= html5.phrasing.attrs & ( html5.command.radio.type.attr & html5.command.radio.radiogroup.attr  & html5.command.checked.attr? ) & html5.common-command.attrs
+   html5.command.radio.type.attr = attribute type { 'radio' }
+   html5.command.radio.radiogroup.attr = attribute radiogroup { datatype.string } 
+      
+   html5.command.checkbox = element command { html5.command.checkbox.attlist }
+   html5.command.checkbox.attlist = html5.phrasing.attrs & ( html5.command.checkbox.type.attr & html5.command.checked.attr? ) & html5.common-command.attrs	
+   html5.command.checkbox.type.attr = attribute type { 'checkbox' }			
+   	
+   html5.common-command.attrs &= html5.command.label.attr? & html5.command.icon.attr? & html5.command.disabled.attr?
+   html5.command.label.attr = attribute label { string }
+   html5.command.icon.attr = attribute icon { datatype.html5.URL.spaces }
+   html5.command.disabled.attr = attribute disabled { 'disabled' |'' }
+			
+			
+   html5.menu = element menu { html5.menu.attlist & html5.menu.content }
+   html5.menu.attlist &= html5.global.attrs & html5.menu.type.attr? & html5.menu.label.attr?
+   html5.menu.type.attr = attribute type { 'toolbar' | 'context' }
+   html5.menu.label.attr = attribute label { string }
+   html5.menu.content = ( html5.mli* | html5.flow.model )
+	
+   html5.mli = element li { html5.mli.attlist & html5.mli.content }
+   html5.mli.attlist &= html5.global.attrs
+   html5.mli.content = html5.flow.model
+		
+   html5.details = element details { html5.details.attlist & html5.details.content }
+   html5.details.attlist &= html5.global.attrs & html5.details.open.attr?
+   html5.details.open.attr = attribute open { 'open' | '' }
+   html5.details.content = html5.summary?, html5.flow.model 
+		
+   html5.summary = element summary { html5.summary.attlist & html5.summary.content }
+   html5.summary.attlist &= html5.global.attrs
+   html5.summary.content = html5.phrasing.model		
+
+
+   html5.interactive.manifest.attr = attribute manifest { datatype.html5.URL.spaces }		
+
+   html5.interactive.contextmenu.attr = attribute contextmenu { datatype.IDREF }
+   html5.interactive.contenteditable.attr = attribute contenteditable { 'true' | 'false' | '' }		
+   html5.interactive.draggable.attr = attribute draggable { 'true' | 'false' }		
+   html5.interactive.hidden.attr = attribute hidden { 'hidden' | '' }
+   html5.interactive.spellcheck.attr = attribute spellcheck { 'true' | 'false' | '' }		
+   html5.interactive.accesskey.attr = attribute accesskey { datatype.html5.accesskey }
+   html5.interactive.tabindex.attr = attribute tabindex { datatype.integer }
+   html5.interactive.dropzone.attr = attribute dropzone { list {
+      ( xsd:string { pattern = "[sS]:.+" } | xsd:string { pattern = "[fF]:.+" })*,
+      ( 'copy' | 'move' | 'link' )?,
+      ( xsd:string { pattern = "[sS]:.+" } | xsd:string { pattern = "[fF]:.+" })*
+      }
+   }
+	
+	
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-md.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-md.rnc
new file mode 100644
index 0000000..547b960
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-md.rnc
@@ -0,0 +1,56 @@
+html5.global.attrs &= html5.attrs.md
+html5.link.attlist &= html5.attrs.md
+html5.meta.attlist &= html5.attrs.md
+html5.a.attrs &= html5.attrs.md
+html5.area.attlist &= html5.attrs.md
+
+html5.attrs.md =
+	(	html5.md.attr.itemref?
+	&	html5.md.attr.itemprop?
+	&	html5.md.attr.itemscope?
+	&	html5.md.attr.itemtype?
+	&	html5.md.attr.itemid?
+	)
+
+html5.attrs.md.no-itemprop =
+	(	html5.md.attr.itemref?
+	&	html5.md.attr.itemscope?
+	&	html5.md.attr.itemtype?
+	&	html5.md.attr.itemid?
+	)
+	
+	html5.md.attr.itemref =
+		attribute itemref {
+			datatype.IDREFS.lexical
+		}
+	html5.md.attr.itemprop =
+		attribute itemprop { datatype.string }
+		
+	html5.md.attr.itemscope =
+		attribute itemscope {
+			"itemscope" | ""
+		}
+	html5.md.attr.itemtype =
+		attribute itemtype {
+			list { datatype.URI.absolute+ }
+		}
+	html5.md.attr.itemid =
+		attribute itemid {
+			datatype.URI
+		}
+
+### elements ######
+html5.phrasing.class |= html5.md.link.elem | html5.md.meta.elem
+html5.metadata.class |= html5.md.meta.elem | html5.md.link.elem
+
+html5.md.link.elem = element link { html5.md.link.attlist }
+html5.md.link.attlist = html5.md.attr.itemprop 
+	& html5.attrs.md.no-itemprop 
+	& html5.global.common.attrs & html5.global.xml.attrs 
+	& html5.media.attr? & html5.hreflang.attr? & html5.rel.attr?
+	& html5.type.mime.attr? & html5.link.sizes.attr? & html5.href.attr?
+
+html5.md.meta.elem = element meta { html5.md.meta.attlist }
+html5.md.meta.attlist = html5.md.attr.itemprop & html5.meta.content.attr
+	& html5.attrs.md.no-itemprop 
+	& html5.global.common.attrs & html5.global.xml.attrs
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-models-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-models-30.rnc
new file mode 100644
index 0000000..437fce1
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-models-30.rnc
@@ -0,0 +1,10 @@
+
+
+   html5.flow.model = html5.flow.model.html5   
+   html5.flow.model.html5 = html5.flow.class*   
+    
+   html5.grouping.model = html5.grouping.class+
+   html5.phrasing.model = html5.phrasing.class+
+      
+   html5.section.model = html5.section.model.html5         
+   html5.section.model.html5 = html5.flow.model
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-phrasing-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-phrasing-30.rnc
new file mode 100644
index 0000000..9c0e080
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-phrasing-30.rnc
@@ -0,0 +1,134 @@
+
+
+
+   html5.flow.class |= html5.phrasing.class | html5.a.flow
+   
+   html5.phrasing.class |= datatype.text | html5.a.phrasing | html5.em | html5.strong | html5.small | html5.cite  
+      | html5.q  | html5.dfn | html5.abbr | html5.time | html5.code | html5.var | html5.samp 
+      | html5.kbd | html5.sup | html5.sub | html5.i | html5.b | html5.mark | html5.bdo | html5.bdi | html5.span  
+      | html5.br | html5.wbr | html5.s | html5.u | html5.ruby
+   
+   html5.phrasing.attrs &= html5.global.attrs
+   
+   
+   html5.a.flow = element a { html5.a.flow.attlist & html5.a.flow.content }
+   html5.a.flow.attlist &= html5.global.common.attrs & html5.global.xml.attrs & html5.a.attrs 
+   html5.a.flow.content = html5.flow.model
+   html5.a.phrasing = element a { html5.a.phrasing.attlist & html5.a.phrasing.content }
+   html5.a.phrasing.attlist &= html5.global.common.attrs & html5.global.xml.attrs & html5.a.attrs
+   html5.a.phrasing.content = html5.phrasing.model
+   html5.a.attrs &= ( html5.href.attr & ( html5.hreflang.attr? & html5.target.attr? 
+      & html5.rel.attr? & html5.media.attr? & html5.type.mime.attr? ))?
+
+   html5.abbr = element abbr { html5.abbr.attlist & html5.abbr.content }
+   html5.abbr.attlist &= html5.phrasing.attrs
+   html5.abbr.content = html5.phrasing.model
+   
+   html5.b = element b { html5.b.attlist & html5.b.content }
+   html5.b.attlist &= html5.phrasing.attrs
+   html5.b.content = html5.phrasing.model
+      
+   html5.bdo = element bdo { html5.bdo.attlist & html5.bdo.content }
+   html5.bdo.attlist &= html5.phrasing.attrs 					
+   html5.bdo.content = html5.phrasing.model
+   
+   html5.bdi = element bdi { html5.bdi.attlist & html5.bdi.content }
+   html5.bdi.attlist &= html5.phrasing.attrs 					
+   html5.bdi.content = html5.phrasing.model
+
+   html5.br = element br { html5.br.attlist }
+   html5.br.attlist &= html5.phrasing.attrs
+      
+   html5.cite = element cite { html5.cite.attlist & html5.cite.content }
+   html5.cite.attlist &= html5.phrasing.attrs
+   html5.cite.content = html5.phrasing.model
+   
+   html5.code = element code { html5.code.attlist & html5.code.content }
+   html5.code.attlist &= html5.phrasing.attrs    
+   html5.code.content = html5.phrasing.model
+   
+   html5.dfn = element dfn { html5.dfn.attlist & html5.dfn.content }
+   html5.dfn.attlist &= html5.phrasing.attrs
+   html5.dfn.content = html5.phrasing.model
+   
+   html5.em = element em { html5.em.attlist & html5.em.content }
+   html5.em.attlist &= html5.phrasing.attrs
+   html5.em.content = html5.phrasing.model
+
+   html5.i = element i { html5.i.attlist & html5.i.content }
+   html5.i.attlist &= html5.phrasing.attrs
+   html5.i.content = html5.phrasing.model
+
+   html5.kbd = element kbd { html5.kbd.attlist & html5.kbd.content }
+   html5.kbd.attlist &= html5.phrasing.attrs
+   html5.kbd.content = html5.phrasing.model
+
+   html5.mark = element mark { html5.mark.attlist & html5.mark.content }
+   html5.mark.attlist &= html5.phrasing.attrs
+   html5.mark.content = html5.phrasing.model
+
+   html5.strong = element strong { html5.strong.attlist & html5.strong.content }
+   html5.strong.attlist &= html5.phrasing.attrs
+   html5.strong.content = html5.phrasing.model
+
+   html5.small = element small { html5.small.attlist & html5.small.content }
+   html5.small.attlist &= html5.phrasing.attrs
+   html5.small.content = html5.phrasing.model
+
+   html5.q = element q { html5.q.attlist & html5.q.content }
+   html5.q.attlist &= html5.phrasing.attrs & html5.cite.attr?	 
+   html5.q.content = html5.phrasing.model
+
+   html5.s = element s { html5.s.attlist & html5.s.content }
+   html5.s.attlist &= html5.phrasing.attrs
+   html5.s.content = html5.phrasing.model
+
+   html5.samp = element samp { html5.samp.attlist & html5.samp.content }
+   html5.samp.attlist &= html5.phrasing.attrs
+   html5.samp.content = html5.phrasing.model
+
+   html5.sub = element sub { html5.sub.attlist & html5.sub.content }
+   html5.sub.attlist &= html5.phrasing.attrs
+   html5.sub.content = html5.phrasing.model
+
+   html5.sup = element sup { html5.sup.attlist & html5.sup.content }
+   html5.sup.attlist &= html5.phrasing.attrs
+   html5.sup.content = html5.phrasing.model
+
+   html5.span = element span { html5.span.attlist & html5.span.content }
+   html5.span.attlist &= html5.phrasing.attrs
+   html5.span.content = html5.phrasing.model
+
+   html5.time = element time { html5.time.attlist & html5.time.content }
+   html5.time.attlist &= html5.phrasing.attrs & 
+      ((html5.time.pubdate.attr & html5.time.datetime.attr.date-optional-time?)
+      | (html5.time.datetime.attr.date-or-time?))   
+   html5.time.pubdate.attr = attribute pubdate { 'pubdate' | '' }
+   html5.time.datetime.attr.date-optional-time = attribute datetime { datatype.html5.date.optional.time }
+   html5.time.datetime.attr.date-or-time = attribute datetime { datatype.html5.date.or.time }
+   html5.time.content = html5.phrasing.model
+
+   html5.var = element var { html5.var.attlist & html5.var.content }
+   html5.var.attlist &= html5.phrasing.attrs
+   html5.var.content = html5.phrasing.model
+
+   html5.wbr = element wbr { html5.wbr.attlist }
+   html5.wbr.attlist &= html5.phrasing.attrs
+   
+   html5.u = element u { html5.u.attlist & html5.u.content }
+   html5.u.attlist = html5.phrasing.attrs
+   html5.u.content = html5.phrasing.model
+   
+   
+   html5.ruby = element ruby { html5.ruby.attlist & html5.ruby.content }
+   html5.ruby.attlist = html5.phrasing.attrs
+   html5.ruby.content = ((html5.phrasing.model, (html5.rt | (html5.rp, html5.rt, html5.rp)))+)
+
+   html5.rt = element rt { html5.rt.attlist & html5.rt.content }
+   html5.rt.attlist &= html5.phrasing.attrs
+   html5.rt.content = html5.phrasing.model
+
+   html5.rp = element rp { html5.rp.attlist & html5.rp.content }
+   html5.rp.attlist &= html5.phrasing.attrs
+   html5.rp.content = html5.phrasing.model
+   
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-rdfa.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-rdfa.rnc
new file mode 100644
index 0000000..c6df432
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-rdfa.rnc
@@ -0,0 +1,218 @@
+
+
+
+html5.global.attrs &= html5.rdfa.attrs
+
+html5.link.choice |= (html5.rdfa.attrs & html5.href.attr?)
+
+html5.meta.attlist &= html5.rdfa.attrs.no-content-property
+html5.meta.attrs.choice |= html5.rdfa.property.attr & html5.meta.content.attr
+
+html5.a.phrasing.attlist &= html5.rdfa.attrs.no-rel
+html5.area.attlist &= html5.rdfa.attrs.no-rel
+
+### elements ######
+html5.flow.class |= html5.rdfa.link.elem | html5.rdfa.meta.elem
+
+html5.rdfa.link.elem = element link { html5.rdfa.link.attlist }
+html5.rdfa.link.attlist = html5.rdfa.property.attr 
+	& html5.rdfa.attrs.no-property 
+	& html5.global.common.attrs & html5.global.xml.attrs 
+	& html5.media.attr? & html5.hreflang.attr? 
+	& html5.type.mime.attr? & html5.link.sizes.attr? & html5.href.attr?
+
+html5.rdfa.meta.elem = element meta { html5.rdfa.meta.attlist }
+html5.rdfa.meta.attlist = html5.rdfa.property.attr 
+	& html5.rdfa.attrs.no-property 
+	& html5.global.common.attrs & html5.global.xml.attrs
+
+### attributes #####
+html5.rdfa.attrs &=
+	(	html5.rdfa.about.attr?
+	&	html5.rdfa.prefix.attr?
+	&	html5.rdfa.property.attr?
+	&	html5.rdfa.typeof.attr?
+	&	html5.rdfa.vocab.attr?
+	&	html5.rdfa.content.attr?
+	&	html5.rdfa.datatype.attr?
+	&	html5.rdfa.rel.attr?
+	&	html5.rdfa.resource.attr?
+	&	html5.rdfa.rev.attr?
+	&	html5.rdfa.inlist.attr?
+	)
+
+html5.rdfa.attrs.no-property &=
+	(	html5.rdfa.about.attr?
+	&	html5.rdfa.prefix.attr?
+	&	html5.rdfa.typeof.attr?
+	&	html5.rdfa.vocab.attr?
+	&	html5.rdfa.content.attr?
+	&	html5.rdfa.datatype.attr?
+	&	html5.rdfa.rel.attr?
+	&	html5.rdfa.resource.attr?
+	&	html5.rdfa.rev.attr?
+	&	html5.rdfa.inlist.attr?
+	)
+	
+html5.rdfa.attrs.no-rel &=
+	(	html5.rdfa.about.attr?
+	&	html5.rdfa.prefix.attr?
+	&	html5.rdfa.property.attr?
+	&	html5.rdfa.typeof.attr?
+	&	html5.rdfa.vocab.attr?
+	&	html5.rdfa.content.attr?
+	&	html5.rdfa.datatype.attr?
+	&	html5.rdfa.resource.attr?
+	&	html5.rdfa.rev.attr?
+	&	html5.rdfa.inlist.attr?
+	)	
+
+html5.rdfa.attrs.no-rel-property-resource &=
+	(	html5.rdfa.about.attr?
+	&	html5.rdfa.prefix.attr?
+	&	html5.rdfa.typeof.attr?
+	&	html5.rdfa.vocab.attr?
+	&	html5.rdfa.content.attr?
+	&	html5.rdfa.datatype.attr?
+	&	html5.rdfa.rev.attr?
+	&	html5.rdfa.inlist.attr?
+	)
+
+html5.rdfa.attrs.no-content-property &=
+	(	html5.rdfa.about.attr?
+	&	html5.rdfa.prefix.attr?
+	&	html5.rdfa.typeof.attr?
+	&	html5.rdfa.vocab.attr?
+	&	html5.rdfa.datatype.attr?
+	&	html5.rdfa.rel.attr?
+	&	html5.rdfa.resource.attr?
+	&	html5.rdfa.rev.attr?
+	&	html5.rdfa.inlist.attr?
+	)
+
+### atomic attributes #############
+
+html5.rdfa.prefix.attr =
+		attribute prefix {
+			(
+				xsd:string {
+					pattern = "\s*([\i-[:]][\c-[:]]*: [^ ]+)(\s+[\i-[:]][\c-[:]]*: [^ ]+)*\s*"
+				}
+				|	string ""
+			)
+		}
+		
+	html5.rdfa.property.attr =
+		attribute property {
+			(
+				list {
+					(	datatypes.rdfa.term
+					|	datatypes.rdfa.curie
+					|	datatype.URI.absolute
+					)+
+				}
+			|	string ""
+			)
+		}
+		
+	html5.rdfa.resource.attr =
+		attribute resource {
+			(	datatypes.rdfa.safecurie
+			|	datatypes.rdfa.curie
+			|	datatype.URI
+			)
+		}
+		
+	html5.rdfa.typeof.attr =
+		attribute typeof {
+			(
+			list {
+				(	datatypes.rdfa.term
+				|	datatypes.rdfa.curie
+				|	datatype.URI.absolute
+				)+
+			}
+			|	string ""
+			)
+		}
+		
+	html5.rdfa.vocab.attr =
+		attribute vocab {
+			(	datatype.URI.absolute
+			|	string ""
+			)
+		}
+		
+	html5.rdfa.about.attr =
+		attribute about {
+			(	datatypes.rdfa.safecurie
+			|	datatypes.rdfa.curie
+			|	datatype.URI
+			)
+		} 
+		
+	html5.rdfa.content.attr =
+		attribute content {
+			string
+		} 
+		
+	html5.rdfa.datatype.attr =
+		attribute datatype {
+			(	datatypes.rdfa.term
+			|	datatypes.rdfa.curie
+			|	datatype.URI.absolute
+			|	string ""
+			)
+		} 
+		
+	html5.rdfa.rel.attr =
+		attribute rel {
+			(
+				list {
+					(	datatypes.rdfa.term
+					|	datatypes.rdfa.curie
+					|	datatype.URI.absolute
+					)+
+				}
+				|	string ""
+			)
+		} 
+		
+	html5.rdfa.rev.attr =
+		attribute rev {
+			(
+				list {
+					(	datatypes.rdfa.term
+					|	datatypes.rdfa.curie
+					|	datatype.URI.absolute
+					)+
+				}
+				|	string ""
+			)
+		} 
+		
+	html5.rdfa.inlist.attr =
+		attribute inlist {
+			string
+		} 
+		
+### datatypes ###########
+
+datatypes.rdfa.safecurie =
+	xsd:string {
+		pattern = "\[(([\i-[:]][\c-[:]]*)?:?)[^\s]*\]"
+		minLength = "2"
+	}
+
+datatypes.rdfa.curie =
+	xsd:string {
+		pattern = "(([\i-[:]][\c-[:]]*)?:)[^\s]*"
+		minLength = "1"
+	}
+	
+datatypes.rdfa.term =
+	xsd:string {
+		pattern = "[\i-[:]][/\c-[:]]*"
+	}
+	
+	
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-script-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-script-30.rnc
new file mode 100644
index 0000000..fb0d175
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-script-30.rnc
@@ -0,0 +1,164 @@
+
+
+
+   html5.metadata.class |= html5.script
+   html5.flow.class |= html5.script
+   html5.phrasing.class |= html5.script
+   html5.global.common.attrs &= html5.global.scripting.attrs
+   html5.body.attlist &= html5.scripting.body.attrs
+   
+   html5.script = html5.script.internal | html5.script.external 
+		
+
+   html5.script.internal = element script { html5.script.internal.attlist & html5.script.internal.content }
+   html5.script.external = element script { html5.script.external.attlist & html5.script.external.content }	
+   
+   html5.script.internal.attlist &= html5.global.attrs & html5.type.mime.nocharset.attr?  
+   html5.script.external.attlist &= html5.global.attrs & html5.src.attr & html5.script.defer.attr? 
+      & html5.script.async.attr? & html5.type.mime.nocharset.attr? & html5.charset.attr?  
+				
+   html5.script.defer.attr = attribute defer { 'defer' | '' }
+   html5.script.async.attr = attribute async { 'async' | '' }
+   
+		
+   html5.script.internal.content = datatype.html5.script 
+   html5.script.external.content = datatype.html5.script.documentation
+		
+   html5.global.scripting.attrs &= html5.scripting.onabort.attr?
+      & html5.scripting.onblur.attr?
+      & html5.scripting.oncanplay.attr?
+      & html5.scripting.oncanplaythrough.attr?
+      & html5.scripting.onchange.attr?
+      & html5.scripting.onclick.attr?
+      & html5.scripting.oncontextmenu.attr?
+      & html5.scripting.ondblclick.attr?
+      & html5.scripting.ondrag.attr?
+      & html5.scripting.ondragend.attr?
+      & html5.scripting.ondragenter.attr?
+      & html5.scripting.ondragleave.attr?
+      & html5.scripting.ondragover.attr?
+      & html5.scripting.ondragstart.attr?
+      & html5.scripting.ondrop.attr?
+      & html5.scripting.ondurationchange.attr?
+      & html5.scripting.onemptied.attr?
+      & html5.scripting.onended.attr?
+      & html5.scripting.onerror.attr?
+      & html5.scripting.onfocus.attr?
+      & html5.scripting.oninput.attr?
+      & html5.scripting.oninvalid.attr?
+      & html5.scripting.onkeydown.attr?
+      & html5.scripting.onkeypress.attr?
+      & html5.scripting.onkeyup.attr?
+      & html5.scripting.onload.attr?
+      & html5.scripting.onloadeddata.attr?
+      & html5.scripting.onloadedmetadata.attr?
+      & html5.scripting.onloadstart.attr?
+      & html5.scripting.onmousedown.attr?
+      & html5.scripting.onmousemove.attr?
+      & html5.scripting.onmouseout.attr?
+      & html5.scripting.onmouseover.attr?
+      & html5.scripting.onmouseup.attr?
+      & html5.scripting.onmousewheel.attr?
+      & html5.scripting.onpause.attr?
+      & html5.scripting.onplay.attr?
+      & html5.scripting.onplaying.attr?
+      & html5.scripting.onprogress.attr?
+      & html5.scripting.onratechange.attr?
+      & html5.scripting.onreadystatechange.attr?
+      & html5.scripting.onreset.attr?
+      & html5.scripting.onscroll.attr?
+      & html5.scripting.onseeked.attr?
+      & html5.scripting.onseeking.attr?
+      & html5.scripting.onselect.attr?
+      & html5.scripting.onshow.attr?
+      & html5.scripting.onstalled.attr?
+      & html5.scripting.onsubmit.attr?
+      & html5.scripting.onsuspend.attr?
+      & html5.scripting.ontimeupdate.attr?
+      & html5.scripting.onvolumechange.attr?
+      & html5.scripting.onwaiting.attr?
+      
+      
+   html5.scripting.onabort.attr = attribute onabort { datatype.html5.js }
+   html5.scripting.onblur.attr = attribute onblur { datatype.html5.js }
+   html5.scripting.oncanplay.attr = attribute oncanplay { datatype.html5.js }
+   html5.scripting.oncanplaythrough.attr = attribute oncanplaythrough { datatype.html5.js }
+   html5.scripting.onchange.attr = attribute onchange { datatype.html5.js }
+   html5.scripting.onclick.attr = attribute onclick { datatype.html5.js }
+   html5.scripting.oncontextmenu.attr = attribute oncontextmenu { datatype.html5.js }
+   html5.scripting.ondblclick.attr = attribute ondblclick { datatype.html5.js }
+   html5.scripting.ondrag.attr = attribute ondrag { datatype.html5.js }
+   html5.scripting.ondragend.attr = attribute ondragend { datatype.html5.js }
+   html5.scripting.ondragenter.attr = attribute ondragenter { datatype.html5.js }
+   html5.scripting.ondragleave.attr = attribute ondragleave { datatype.html5.js }
+   html5.scripting.ondragover.attr = attribute ondragover { datatype.html5.js }
+   html5.scripting.ondragstart.attr = attribute ondragstart { datatype.html5.js }
+   html5.scripting.ondrop.attr = attribute ondrop { datatype.html5.js }
+   html5.scripting.ondurationchange.attr = attribute ondurationchange { datatype.html5.js }
+   html5.scripting.onemptied.attr = attribute onemptied { datatype.html5.js }
+   html5.scripting.onended.attr = attribute onended { datatype.html5.js }
+   html5.scripting.onerror.attr = attribute onerror { datatype.html5.js }
+   html5.scripting.onfocus.attr = attribute onfocus { datatype.html5.js }   
+   html5.scripting.oninput.attr = attribute oninput { datatype.html5.js }
+   html5.scripting.oninvalid.attr = attribute oninvalid { datatype.html5.js }
+   html5.scripting.onkeydown.attr = attribute onkeydown { datatype.html5.js }
+   html5.scripting.onkeypress.attr = attribute onkeypress { datatype.html5.js }
+   html5.scripting.onkeyup.attr = attribute onkeyup { datatype.html5.js }
+   html5.scripting.onload.attr = attribute onload { datatype.html5.js }
+   html5.scripting.onloadeddata.attr = attribute onloadeddata { datatype.html5.js }
+   html5.scripting.onloadedmetadata.attr = attribute onloadedmetadata { datatype.html5.js }
+   html5.scripting.onloadstart.attr = attribute onloadstart { datatype.html5.js }
+   html5.scripting.onmousedown.attr = attribute onmousedown { datatype.html5.js }
+   html5.scripting.onmousemove.attr = attribute onmousemove { datatype.html5.js }
+   html5.scripting.onmouseout.attr = attribute onmouseout { datatype.html5.js }
+   html5.scripting.onmouseover.attr = attribute onmouseover { datatype.html5.js }
+   html5.scripting.onmouseup.attr = attribute onmouseup { datatype.html5.js }
+   html5.scripting.onmousewheel.attr = attribute onmousewheel { datatype.html5.js }
+   html5.scripting.onpause.attr = attribute onpause { datatype.html5.js }
+   html5.scripting.onplay.attr = attribute onplay { datatype.html5.js }
+   html5.scripting.onplaying.attr = attribute onplaying { datatype.html5.js }
+   html5.scripting.onprogress.attr = attribute onprogress { datatype.html5.js }
+   html5.scripting.onratechange.attr = attribute onratechange { datatype.html5.js }
+   html5.scripting.onreadystatechange.attr = attribute onreadystatechange { datatype.html5.js }
+   html5.scripting.onreset.attr = attribute onreset { datatype.html5.js }
+   html5.scripting.onscroll.attr = attribute onscroll { datatype.html5.js }
+   html5.scripting.onseeked.attr = attribute onseeked { datatype.html5.js }
+   html5.scripting.onseeking.attr = attribute onseeking { datatype.html5.js }
+   html5.scripting.onselect.attr = attribute onselect { datatype.html5.js }
+   html5.scripting.onshow.attr = attribute onshow { datatype.html5.js }
+   html5.scripting.onstalled.attr = attribute onstalled { datatype.html5.js }
+   html5.scripting.onsubmit.attr = attribute onsubmit { datatype.html5.js }
+   html5.scripting.onsuspend.attr = attribute onsuspend { datatype.html5.js }
+   html5.scripting.ontimeupdate.attr = attribute ontimeupdate { datatype.html5.js }
+   html5.scripting.onvolumechange.attr = attribute onvolumechange { datatype.html5.js }
+   html5.scripting.onwaiting.attr = attribute onwaiting { datatype.html5.js }
+   
+   
+   html5.scripting.body.attrs = html5.scripting.body.onafterprint.attr?
+      & html5.scripting.body.onbeforeprint.attr?
+      & html5.scripting.body.onbeforeunload.attr?
+      & html5.scripting.body.onhashchange.attr?
+      & html5.scripting.body.onmessage.attr?
+      & html5.scripting.body.onoffline.attr?
+      & html5.scripting.body.ononline.attr?
+      & html5.scripting.body.onpopstate.attr?
+      & html5.scripting.body.onredo.attr?
+      & html5.scripting.body.onresize.attr?
+      & html5.scripting.body.onstorage.attr?
+      & html5.scripting.body.onundo.attr?
+      & html5.scripting.body.onunload.attr?
+
+
+   html5.scripting.body.onafterprint.attr = attribute onafterprint { datatype.html5.js }
+   html5.scripting.body.onbeforeprint.attr = attribute onbeforeprint { datatype.html5.js }
+   html5.scripting.body.onbeforeunload.attr = attribute onbeforeunload { datatype.html5.js }
+   html5.scripting.body.onhashchange.attr = attribute onhashchange { datatype.html5.js }
+   html5.scripting.body.onmessage.attr = attribute onmessage { datatype.html5.js }
+   html5.scripting.body.onoffline.attr = attribute onoffline { datatype.html5.js }
+   html5.scripting.body.ononline.attr = attribute ononline { datatype.html5.js }
+   html5.scripting.body.onpopstate.attr = attribute onpopstate { datatype.html5.js }
+   html5.scripting.body.onredo.attr = attribute onredo { datatype.html5.js }
+   html5.scripting.body.onresize.attr = attribute onresize { datatype.html5.js }
+   html5.scripting.body.onstorage.attr = attribute onstorage { datatype.html5.js }
+   html5.scripting.body.onundo.attr = attribute onundo { datatype.html5.js }
+   html5.scripting.body.onunload.attr = attribute onunload { datatype.html5.js }
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-sections-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-sections-30.rnc
new file mode 100644
index 0000000..1605182
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-sections-30.rnc
@@ -0,0 +1,58 @@
+
+
+   html5.flow.class |= html5.sections.class | html5.headings.class   
+   
+   html5.sections.class |= html5.section | html5.article | html5.nav | html5.aside | html5.header | html5.footer | html5.address
+   html5.headings.class |= html5.hgroup | html5.h1 | html5.h2 | html5.h3 | html5.h4 | html5.h5 | html5.h6
+   
+   html5.headings.attrs &= html5.global.attrs
+   html5.sections.attrs &= html5.global.attrs
+   
+   html5.hgroup = element hgroup {html5.hgroup.attlist & html5.hgroup.content}
+   html5.hgroup.attlist &= html5.headings.attrs
+   html5.hgroup.content =  (html5.h1 | html5.h2 | html5.h3 | html5.h4 | html5.h5 | html5.h6)+
+   
+   html5.h1 = element h1 {html5.h.attlist, html5.h.content}
+   html5.h2 = element h2 {html5.h.attlist, html5.h.content}
+   html5.h3 = element h3 {html5.h.attlist, html5.h.content}
+   html5.h4 = element h4 {html5.h.attlist, html5.h.content}
+   html5.h5 = element h5 {html5.h.attlist, html5.h.content}
+   html5.h6 = element h6 {html5.h.attlist, html5.h.content}
+   
+   html5.h.attlist &= html5.headings.attrs
+   html5.h.content = html5.phrasing.model
+   
+      
+   html5.section = element section {html5.section.attlist & html5.section.content}
+   html5.section.attlist &= html5.sections.attrs
+   html5.section.content =  html5.section.model
+   
+   
+   html5.article = element article {html5.article.attlist & html5.article.content}
+   html5.article.attlist &= html5.sections.attrs
+   html5.article.content = html5.section.model
+   
+   
+   html5.nav = element nav { html5.nav.attlist &  html5.nav.content }
+   html5.nav.attlist &= html5.sections.attrs
+   html5.nav.content = html5.flow.model
+
+
+   html5.aside = element aside { html5.aside.attlist &  html5.aside.content }
+   html5.aside.attlist &= html5.sections.attrs
+   html5.aside.content = html5.flow.model
+
+
+   html5.header = element header { html5.header.attlist &  html5.header.content }
+   html5.header.attlist &= html5.sections.attrs
+   html5.header.content = html5.flow.model
+
+
+   html5.footer = element footer { html5.footer.attlist &  html5.footer.content }
+   html5.footer.attlist &= html5.sections.attrs   
+   html5.footer.content = html5.flow.model
+   
+   
+   html5.address = element address { html5.address.attlist &  html5.address.content }
+   html5.address.attlist &= html5.sections.attrs   
+   html5.address.content = html5.flow.model
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-style-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-style-30.rnc
new file mode 100644
index 0000000..eef986d
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/html5/html5-style-30.rnc
@@ -0,0 +1,18 @@
+
+ 
+   html5.metadata.class |= html5.style.unscoped
+   html5.global.common.attrs &= html5.style.attr?
+   html5.flow.class |= html5.style.scoped
+   
+   
+   
+   html5.style.unscoped = element style { html5.style.unscoped.attlist, html5.style.content }
+   html5.style.unscoped.attlist &= html5.global.attrs, html5.media.attr?, html5.type.mime.nocharset.attr?
+             
+   html5.style.scoped = element style { html5.style.scoped.attlist, html5.style.content }
+   html5.style.scoped.attlist &= html5.global.attrs, html5.media.attr?, html5.type.mime.nocharset.attr?, html5.style.scoped.attr
+   
+   html5.style.scoped.attr = attribute scoped {'scoped' | ''}
+   html5.style.content = datatype.style
+   
+   html5.style.attr = attribute style { datatype.style }
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/id-unique.sch b/src/main/resources/com/adobe/epubcheck/schema/30/mod/id-unique.sch
new file mode 100644
index 0000000..b7a0c55
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/id-unique.sch
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<pattern id="id-unique" xmlns="http://purl.oclc.org/dsdl/schematron">
+    <!-- note: assumes that NCName lexical constraints are tested elsewhere -->
+    <let name="id-set" value="//*[@id]"/>
+    <rule context="*[@id]">
+        <assert test="count($id-set[@id = current()/@id]) = 1"
+            >Duplicate ID '<value-of select="current()/@id"/>'</assert>
+    </rule>
+</pattern>
+    
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/mathml/LICENSE b/src/main/resources/com/adobe/epubcheck/schema/30/mod/mathml/LICENSE
new file mode 100644
index 0000000..e09124f
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/mathml/LICENSE
@@ -0,0 +1,3 @@
+Use and distribution of all schemas in this directory are permitted under the terms
+W3C Software Notice and License
+http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/mathml/mathml3-common.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/mathml/mathml3-common.rnc
new file mode 100644
index 0000000..3d18ae1
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/mathml/mathml3-common.rnc
@@ -0,0 +1,84 @@
+#     This is the Mathematical Markup Language (MathML) 3.0, an XML
+#     application for describing mathematical notation and capturing
+#     both its structure and content.
+#
+#     Copyright 1998-2009 W3C (MIT, ERCIM, Keio)
+# 
+#     Use and distribution of this code are permitted under the terms
+#     W3C Software Notice and License
+#     http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+
+
+default namespace m = "http://www.w3.org/1998/Math/MathML"
+namespace local = ""
+
+start = math
+
+math = element math {math.attributes,MathExpression*}
+MathExpression = semantics
+
+NonMathMLAtt = attribute (* - (local:*|m:*)) {xsd:string} 
+
+CommonDeprecatedAtt = attribute other {text}?
+
+CommonAtt = attribute id {xsd:ID}?,
+            attribute xref {text}?,
+            attribute class {xsd:NMTOKENS}?,
+            attribute style {xsd:string}?,
+            attribute href {xsd:anyURI}?,
+            CommonDeprecatedAtt,
+            NonMathMLAtt*
+
+
+math.attributes = CommonAtt,
+               attribute display {"block" | "inline"}?,
+               attribute maxwidth {length}?,
+               attribute overflow {"linebreak" | "scroll" | "elide" | "truncate" | "scale"}?,
+               attribute altimg {xsd:anyURI}?,
+               attribute altimg-width {length}?,
+               attribute altimg-height {length}?,
+               attribute altimg-valign {length | "top" | "middle" | "bottom"}?,
+               attribute alttext {text}?,
+               attribute cdgroup {xsd:anyURI}?,
+               math.deprecatedattributes
+
+# the mathml3-presentation schema  adds additional attributes
+# to the math element, all those valid on mstyle
+
+math.deprecatedattributes = attribute mode {xsd:string}?,
+                            attribute macros {xsd:string}?
+
+
+name = attribute name {xsd:NCName}
+cd = attribute cd {xsd:NCName}
+
+src = attribute src {xsd:anyURI}?
+
+annotation = element annotation {annotation.attributes,text}
+                     
+annotation-xml.model = (MathExpression|anyElement)*
+
+anyElement =  element (* - m:*) {(attribute * {text}|text| anyElement)*}
+
+annotation-xml = element annotation-xml {annotation.attributes,
+                                         annotation-xml.model}
+annotation.attributes = CommonAtt,
+	                cd?,
+                        name?,
+                        DefEncAtt,
+                        src?
+
+DefEncAtt = attribute encoding {xsd:string}?,
+            attribute definitionURL {xsd:anyURI}?
+
+semantics = element semantics {semantics.attributes,
+                               MathExpression, 
+                              (annotation|annotation-xml)*}
+semantics.attributes = CommonAtt,DefEncAtt,cd?,name?
+
+
+
+length = xsd:string {
+  pattern = '\s*((-?[0-9]*(\.[0-9]*)?(e[mx]|in|cm|mm|p[xtc]|%)?)|(negative)?((very){0,2}thi(n|ck)|medium)mathspace)\s*' 
+}
+
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/mathml/mathml3-content.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/mathml/mathml3-content.rnc
new file mode 100644
index 0000000..3facbfd
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/mathml/mathml3-content.rnc
@@ -0,0 +1,373 @@
+
+#     This is the Mathematical Markup Language (MathML) 3.0, an XML
+#     application for describing mathematical notation and capturing
+#     both its structure and content.
+#
+#     Copyright 1998-2010 W3C (MIT, ERCIM, Keio)
+# 
+#     Use and distribution of this code are permitted under the terms
+#     W3C Software Notice and License
+#     http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+
+include "mathml3-strict-content.rnc"{
+  cn.content = (text | mglyph | sep | PresentationExpression)* 
+  cn.attributes = CommonAtt, DefEncAtt, attribute type {text}?, base?
+
+  ci.attributes = CommonAtt, DefEncAtt, ci.type?
+  ci.type = attribute type {text}
+  ci.content = (text | mglyph | PresentationExpression)* 
+
+  csymbol.attributes = CommonAtt, DefEncAtt, attribute type {text}?,cd?
+  csymbol.content = (text | mglyph | PresentationExpression)* 
+
+  bvar = element bvar { (ci | semantics-ci) & degree?}
+
+  cbytes.attributes = CommonAtt, DefEncAtt
+
+  cs.attributes = CommonAtt, DefEncAtt
+
+  apply.content = ContExp+ | (ContExp, BvarQ, Qualifier*, ContExp*)
+
+  bind.content = apply.content
+}
+
+base = attribute base {text}
+
+
+sep = element sep {empty}
+PresentationExpression |= notAllowed
+
+
+DomainQ = (domainofapplication|condition|interval|(lowlimit,uplimit?))*
+domainofapplication = element domainofapplication {ContExp}
+condition = element condition {ContExp}
+uplimit = element uplimit {ContExp}
+lowlimit = element lowlimit {ContExp}
+
+Qualifier = DomainQ|degree|momentabout|logbase
+degree = element degree {ContExp}
+momentabout = element momentabout {ContExp}
+logbase = element logbase {ContExp}
+
+type = attribute type {text}
+order = attribute order {"numeric" | "lexicographic"}
+closure = attribute closure {text}
+
+
+ContExp |= piecewise
+
+
+piecewise = element piecewise {CommonAtt, DefEncAtt,(piece* & otherwise?)}
+
+piece = element piece {CommonAtt, DefEncAtt, ContExp, ContExp}
+
+otherwise = element otherwise {CommonAtt, DefEncAtt, ContExp}
+
+
+DeprecatedContExp = reln | fn | declare
+ContExp |= DeprecatedContExp
+
+reln = element reln {ContExp*}
+fn = element fn {ContExp}
+declare = element declare {attribute type {xsd:string}?,
+                           attribute scope {xsd:string}?,
+                           attribute nargs {xsd:nonNegativeInteger}?,
+                           attribute occurrence {"prefix"|"infix"|"function-model"}?,
+                           DefEncAtt, 
+                           ContExp+}
+
+
+interval.class = interval
+ContExp |= interval.class
+
+
+interval = element interval { CommonAtt, DefEncAtt,closure?, ContExp,ContExp}
+
+unary-functional.class = inverse | ident | domain | codomain | image | ln | log | moment
+ContExp |= unary-functional.class
+
+
+inverse = element inverse { CommonAtt, DefEncAtt, empty}
+ident = element ident { CommonAtt, DefEncAtt, empty}
+domain = element domain { CommonAtt, DefEncAtt, empty}
+codomain = element codomain { CommonAtt, DefEncAtt, empty}
+image = element image { CommonAtt, DefEncAtt, empty}
+ln = element ln { CommonAtt, DefEncAtt, empty}
+log = element log { CommonAtt, DefEncAtt, empty}
+moment = element moment { CommonAtt, DefEncAtt, empty}
+
+lambda.class = lambda
+ContExp |= lambda.class
+
+
+lambda = element lambda { CommonAtt, DefEncAtt, BvarQ, DomainQ, ContExp}
+
+nary-functional.class = compose
+ContExp |= nary-functional.class
+
+
+compose = element compose { CommonAtt, DefEncAtt, empty}
+
+binary-arith.class = quotient | divide | minus | power | rem | root
+ContExp |= binary-arith.class
+
+
+quotient = element quotient { CommonAtt, DefEncAtt, empty}
+divide = element divide { CommonAtt, DefEncAtt, empty}
+minus = element minus { CommonAtt, DefEncAtt, empty}
+power = element power { CommonAtt, DefEncAtt, empty}
+rem = element rem { CommonAtt, DefEncAtt, empty}
+root = element root { CommonAtt, DefEncAtt, empty}
+
+unary-arith.class = factorial | minus | root | abs | conjugate | arg | real | imaginary | floor | ceiling | exp
+ContExp |= unary-arith.class
+
+
+factorial = element factorial { CommonAtt, DefEncAtt, empty}
+abs = element abs { CommonAtt, DefEncAtt, empty}
+conjugate = element conjugate { CommonAtt, DefEncAtt, empty}
+arg = element arg { CommonAtt, DefEncAtt, empty}
+real = element real { CommonAtt, DefEncAtt, empty}
+imaginary = element imaginary { CommonAtt, DefEncAtt, empty}
+floor = element floor { CommonAtt, DefEncAtt, empty}
+ceiling = element ceiling { CommonAtt, DefEncAtt, empty}
+exp = element exp { CommonAtt, DefEncAtt, empty}
+
+nary-minmax.class = max | min
+ContExp |= nary-minmax.class
+
+
+max = element max { CommonAtt, DefEncAtt, empty}
+min = element min { CommonAtt, DefEncAtt, empty}
+
+nary-arith.class = plus | times | gcd | lcm
+ContExp |= nary-arith.class
+
+
+plus = element plus { CommonAtt, DefEncAtt, empty}
+times = element times { CommonAtt, DefEncAtt, empty}
+gcd = element gcd { CommonAtt, DefEncAtt, empty}
+lcm = element lcm { CommonAtt, DefEncAtt, empty}
+
+nary-logical.class = and | or | xor
+ContExp |= nary-logical.class
+
+
+and = element and { CommonAtt, DefEncAtt, empty}
+or = element or { CommonAtt, DefEncAtt, empty}
+xor = element xor { CommonAtt, DefEncAtt, empty}
+
+unary-logical.class = not
+ContExp |= unary-logical.class
+
+
+not = element not { CommonAtt, DefEncAtt, empty}
+
+binary-logical.class = implies | equivalent
+ContExp |= binary-logical.class
+
+
+implies = element implies { CommonAtt, DefEncAtt, empty}
+equivalent = element equivalent { CommonAtt, DefEncAtt, empty}
+
+quantifier.class = forall | exists
+ContExp |= quantifier.class
+
+
+forall = element forall { CommonAtt, DefEncAtt, empty}
+exists = element exists { CommonAtt, DefEncAtt, empty}
+
+nary-reln.class = eq | gt | lt | geq | leq
+ContExp |= nary-reln.class
+
+
+eq = element eq { CommonAtt, DefEncAtt, empty}
+gt = element gt { CommonAtt, DefEncAtt, empty}
+lt = element lt { CommonAtt, DefEncAtt, empty}
+geq = element geq { CommonAtt, DefEncAtt, empty}
+leq = element leq { CommonAtt, DefEncAtt, empty}
+
+binary-reln.class = neq | approx | factorof | tendsto
+ContExp |= binary-reln.class
+
+
+neq = element neq { CommonAtt, DefEncAtt, empty}
+approx = element approx { CommonAtt, DefEncAtt, empty}
+factorof = element factorof { CommonAtt, DefEncAtt, empty}
+tendsto = element tendsto { CommonAtt, DefEncAtt, type?, empty}
+
+int.class = int
+ContExp |= int.class
+
+
+int = element int { CommonAtt, DefEncAtt, empty}
+
+Differential-Operator.class = diff
+ContExp |= Differential-Operator.class
+
+
+diff = element diff { CommonAtt, DefEncAtt, empty}
+
+partialdiff.class = partialdiff
+ContExp |= partialdiff.class
+
+
+partialdiff = element partialdiff { CommonAtt, DefEncAtt, empty}
+
+unary-veccalc.class = divergence | grad | curl | laplacian
+ContExp |= unary-veccalc.class
+
+
+divergence = element divergence { CommonAtt, DefEncAtt, empty}
+grad = element grad { CommonAtt, DefEncAtt, empty}
+curl = element curl { CommonAtt, DefEncAtt, empty}
+laplacian = element laplacian { CommonAtt, DefEncAtt, empty}
+
+nary-setlist-constructor.class = set | \list
+ContExp |= nary-setlist-constructor.class
+
+
+set = element set { CommonAtt, DefEncAtt, type?, BvarQ*, DomainQ*, ContExp*}
+\list = element \list { CommonAtt, DefEncAtt, order?, BvarQ*, DomainQ*, ContExp*}
+
+nary-set.class = union | intersect | cartesianproduct
+ContExp |= nary-set.class
+
+
+union = element union { CommonAtt, DefEncAtt, empty}
+intersect = element intersect { CommonAtt, DefEncAtt, empty}
+cartesianproduct = element cartesianproduct { CommonAtt, DefEncAtt, empty}
+
+binary-set.class = in | notin | notsubset | notprsubset | setdiff
+ContExp |= binary-set.class
+
+
+in = element in { CommonAtt, DefEncAtt, empty}
+notin = element notin { CommonAtt, DefEncAtt, empty}
+notsubset = element notsubset { CommonAtt, DefEncAtt, empty}
+notprsubset = element notprsubset { CommonAtt, DefEncAtt, empty}
+setdiff = element setdiff { CommonAtt, DefEncAtt, empty}
+
+nary-set-reln.class = subset | prsubset
+ContExp |= nary-set-reln.class
+
+
+subset = element subset { CommonAtt, DefEncAtt, empty}
+prsubset = element prsubset { CommonAtt, DefEncAtt, empty}
+
+unary-set.class = card
+ContExp |= unary-set.class
+
+
+card = element card { CommonAtt, DefEncAtt, empty}
+
+sum.class = sum
+ContExp |= sum.class
+
+
+sum = element sum { CommonAtt, DefEncAtt, empty}
+
+product.class = product
+ContExp |= product.class
+
+
+product = element product { CommonAtt, DefEncAtt, empty}
+
+limit.class = limit
+ContExp |= limit.class
+
+
+limit = element limit { CommonAtt, DefEncAtt, empty}
+
+unary-elementary.class = sin | cos | tan | sec | csc | cot | sinh | cosh | tanh | sech | csch | coth | arcsin | arccos | arctan | arccosh | arccot | arccoth | arccsc | arccsch | arcsec | arcsech | arcsinh | arctanh
+ContExp |= unary-elementary.class
+
+
+sin = element sin { CommonAtt, DefEncAtt, empty}
+cos = element cos { CommonAtt, DefEncAtt, empty}
+tan = element tan { CommonAtt, DefEncAtt, empty}
+sec = element sec { CommonAtt, DefEncAtt, empty}
+csc = element csc { CommonAtt, DefEncAtt, empty}
+cot = element cot { CommonAtt, DefEncAtt, empty}
+sinh = element sinh { CommonAtt, DefEncAtt, empty}
+cosh = element cosh { CommonAtt, DefEncAtt, empty}
+tanh = element tanh { CommonAtt, DefEncAtt, empty}
+sech = element sech { CommonAtt, DefEncAtt, empty}
+csch = element csch { CommonAtt, DefEncAtt, empty}
+coth = element coth { CommonAtt, DefEncAtt, empty}
+arcsin = element arcsin { CommonAtt, DefEncAtt, empty}
+arccos = element arccos { CommonAtt, DefEncAtt, empty}
+arctan = element arctan { CommonAtt, DefEncAtt, empty}
+arccosh = element arccosh { CommonAtt, DefEncAtt, empty}
+arccot = element arccot { CommonAtt, DefEncAtt, empty}
+arccoth = element arccoth { CommonAtt, DefEncAtt, empty}
+arccsc = element arccsc { CommonAtt, DefEncAtt, empty}
+arccsch = element arccsch { CommonAtt, DefEncAtt, empty}
+arcsec = element arcsec { CommonAtt, DefEncAtt, empty}
+arcsech = element arcsech { CommonAtt, DefEncAtt, empty}
+arcsinh = element arcsinh { CommonAtt, DefEncAtt, empty}
+arctanh = element arctanh { CommonAtt, DefEncAtt, empty}
+
+nary-stats.class = mean | sdev | variance | median | mode
+ContExp |= nary-stats.class
+
+
+mean = element mean { CommonAtt, DefEncAtt, empty}
+sdev = element sdev { CommonAtt, DefEncAtt, empty}
+variance = element variance { CommonAtt, DefEncAtt, empty}
+median = element median { CommonAtt, DefEncAtt, empty}
+mode = element mode { CommonAtt, DefEncAtt, empty}
+
+nary-constructor.class = vector | matrix | matrixrow
+ContExp |= nary-constructor.class
+
+
+vector = element vector { CommonAtt, DefEncAtt, BvarQ, DomainQ, ContExp*}
+matrix = element matrix { CommonAtt, DefEncAtt, BvarQ, DomainQ, ContExp*}
+matrixrow = element matrixrow { CommonAtt, DefEncAtt, BvarQ, DomainQ, ContExp*}
+
+unary-linalg.class = determinant | transpose
+ContExp |= unary-linalg.class
+
+
+determinant = element determinant { CommonAtt, DefEncAtt, empty}
+transpose = element transpose { CommonAtt, DefEncAtt, empty}
+
+nary-linalg.class = selector
+ContExp |= nary-linalg.class
+
+
+selector = element selector { CommonAtt, DefEncAtt, empty}
+
+binary-linalg.class = vectorproduct | scalarproduct | outerproduct
+ContExp |= binary-linalg.class
+
+
+vectorproduct = element vectorproduct { CommonAtt, DefEncAtt, empty}
+scalarproduct = element scalarproduct { CommonAtt, DefEncAtt, empty}
+outerproduct = element outerproduct { CommonAtt, DefEncAtt, empty}
+
+constant-set.class = integers | reals | rationals | naturalnumbers | complexes | primes | emptyset
+ContExp |= constant-set.class
+
+
+integers = element integers { CommonAtt, DefEncAtt, empty}
+reals = element reals { CommonAtt, DefEncAtt, empty}
+rationals = element rationals { CommonAtt, DefEncAtt, empty}
+naturalnumbers = element naturalnumbers { CommonAtt, DefEncAtt, empty}
+complexes = element complexes { CommonAtt, DefEncAtt, empty}
+primes = element primes { CommonAtt, DefEncAtt, empty}
+emptyset = element emptyset { CommonAtt, DefEncAtt, empty}
+
+constant-arith.class = exponentiale | imaginaryi | notanumber | true | false | pi | eulergamma | infinity
+ContExp |= constant-arith.class
+
+
+exponentiale = element exponentiale { CommonAtt, DefEncAtt, empty}
+imaginaryi = element imaginaryi { CommonAtt, DefEncAtt, empty}
+notanumber = element notanumber { CommonAtt, DefEncAtt, empty}
+true = element true { CommonAtt, DefEncAtt, empty}
+false = element false { CommonAtt, DefEncAtt, empty}
+pi = element pi { CommonAtt, DefEncAtt, empty}
+eulergamma = element eulergamma { CommonAtt, DefEncAtt, empty}
+infinity = element infinity { CommonAtt, DefEncAtt, empty}
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/mathml/mathml3-presentation.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/mathml/mathml3-presentation.rnc
new file mode 100644
index 0000000..5fa56e7
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/mathml/mathml3-presentation.rnc
@@ -0,0 +1,536 @@
+
+#     This is the Mathematical Markup Language (MathML) 3.0, an XML
+#     application for describing mathematical notation and capturing
+#     both its structure and content.
+#
+#     Copyright 1998-2010 W3C (MIT, ERCIM, Keio)
+# 
+#     Use and distribution of this code are permitted under the terms
+#     W3C Software Notice and License
+#     http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+
+default namespace m = "http://www.w3.org/1998/Math/MathML"
+
+MathExpression |= PresentationExpression
+
+ImpliedMrow = MathExpression*
+
+TableRowExpression = mtr|mlabeledtr
+
+TableCellExpression = mtd
+
+MstackExpression = MathExpression|mscarries|msline|msrow|msgroup
+
+MsrowExpression = MathExpression|none
+
+MultiScriptExpression = (MathExpression|none),(MathExpression|none)
+
+mpadded-length = xsd:string {
+  pattern = '\s*([\+\-]?[0-9]*(\.[0-9]*)?\s*((%?\s*(height|depth|width)?)|e[mx]|in|cm|mm|p[xtc]|((negative)?((very){0,2}thi(n|ck)|medium)mathspace)))\s*' }
+
+linestyle = "none" | "solid" | "dashed"
+
+verticalalign =
+      "top" |
+      "bottom" |
+      "center" |
+      "baseline" |
+      "axis"
+
+columnalignstyle = "left" | "center" | "right"
+
+notationstyle =
+     "longdiv" |
+     "actuarial" |
+     "radical" |
+     "box" |
+     "roundedbox" |
+     "circle" |
+     "left" |
+     "right" |
+     "top" |
+     "bottom" |
+     "updiagonalstrike" |
+     "downdiagonalstrike" |
+     "verticalstrike" |
+     "horizontalstrike" |
+     "madruwb"
+
+idref = text
+unsigned-integer = xsd:unsignedLong
+integer = xsd:integer
+number = xsd:decimal
+
+character = xsd:string {
+  pattern = '\s*\S\s*'}
+
+color =  xsd:string {
+  pattern = '\s*((#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?)|[aA][qQ][uU][aA]|[bB][lL][aA][cC][kK]|[bB][lL][uU][eE]|[fF][uU][cC][hH][sS][iI][aA]|[gG][rR][aA][yY]|[gG][rR][eE][eE][nN]|[lL][iI][mM][eE]|[mM][aA][rR][oO][oO][nN]|[nN][aA][vV][yY]|[oO][lL][iI][vV][eE]|[pP][uU][rR][pP][lL][eE]|[rR][eE][dD]|[sS][iI][lL][vV][eE][rR]|[tT][eE][aA][lL]|[wW][hH][iI][tT][eE]|[yY][eE][lL][lL][oO][wW])\s*'}
+
+
+group-alignment = "left" | "center" | "right" | "decimalpoint"
+group-alignment-list = list {group-alignment+}
+group-alignment-list-list = xsd:string {
+  pattern = '(\s*\{\s*(left|center|right|decimalpoint)(\s+(left|center|right|decimalpoint))*\})*\s*' }
+positive-integer = xsd:positiveInteger
+
+
+TokenExpression = mi|mn|mo|mtext|mspace|ms
+
+token.content = mglyph|malignmark|text
+
+mi = element mi {mi.attributes, token.content*}
+mi.attributes = 
+  CommonAtt,
+  CommonPresAtt,
+  TokenAtt
+
+
+mn = element mn {mn.attributes, token.content*}
+mn.attributes = 
+  CommonAtt,
+  CommonPresAtt,
+  TokenAtt
+
+
+mo = element mo {mo.attributes, token.content*}
+mo.attributes = 
+  CommonAtt,
+  CommonPresAtt,
+  TokenAtt,
+  attribute form {"prefix" | "infix" | "postfix"}?,
+  attribute fence {"true" | "false"}?,
+  attribute separator {"true" | "false"}?,
+  attribute lspace {length}?,
+  attribute rspace {length}?,
+  attribute stretchy {"true" | "false"}?,
+  attribute symmetric {"true" | "false"}?,
+  attribute maxsize {length | "infinity"}?,
+  attribute minsize {length}?,
+  attribute largeop {"true" | "false"}?,
+  attribute movablelimits {"true" | "false"}?,
+  attribute accent {"true" | "false"}?,
+  attribute linebreak {"auto" | "newline" | "nobreak" | "goodbreak" | "badbreak"}?,
+  attribute lineleading {length}?,
+  attribute linebreakstyle {"before" | "after" | "duplicate" | "infixlinebreakstyle"}?,
+  attribute linebreakmultchar {text}?,
+  attribute indentalign {"left" | "center" | "right" | "auto" | "id"}?,
+  attribute indentshift {length}?,
+  attribute indenttarget {idref}?,
+  attribute indentalignfirst {"left" | "center" | "right" | "auto" | "id" | "indentalign"}?,
+  attribute indentshiftfirst {length | "indentshift"}?,
+  attribute indentalignlast {"left" | "center" | "right" | "auto" | "id" | "indentalign"}?,
+  attribute indentshiftlast {length | "indentshift"}?
+
+
+mtext = element mtext {mtext.attributes, token.content*}
+mtext.attributes = 
+  CommonAtt,
+  CommonPresAtt,
+  TokenAtt
+
+
+mspace = element mspace {mspace.attributes, empty}
+mspace.attributes = 
+  CommonAtt,
+  CommonPresAtt,
+  TokenAtt,
+  attribute width {length}?,
+  attribute height {length}?,
+  attribute depth {length}?,
+  attribute linebreak {"auto" | "newline" | "nobreak" | "goodbreak" | "badbreak" | "indentingnewline"}?
+
+
+ms = element ms {ms.attributes, token.content*}
+ms.attributes = 
+  CommonAtt,
+  CommonPresAtt,
+  TokenAtt,
+  attribute lquote {text}?,
+  attribute rquote {text}?
+
+
+mglyph = element mglyph {mglyph.attributes,mglyph.deprecatedattributes,empty}
+mglyph.attributes = 
+  CommonAtt,  CommonPresAtt,
+  attribute src {xsd:anyURI}?,
+  attribute width {length}?,
+  attribute height {length}?,
+  attribute valign {length}?,
+  attribute alt {text}?
+mglyph.deprecatedattributes =
+  attribute index {integer}?,
+  attribute mathvariant {"normal" | "bold" | "italic" | "bold-italic" | "double-struck" | "bold-fraktur" | "script" | "bold-script" | "fraktur" | "sans-serif" | "bold-sans-serif" | "sans-serif-italic" | "sans-serif-bold-italic" | "monospace" | "initial" | "tailed" | "looped" | "stretched"}?,
+  attribute mathsize {"small" | "normal" | "big" | length}?,
+  DeprecatedTokenAtt
+
+msline = element msline {msline.attributes,empty}
+msline.attributes = 
+  CommonAtt,  CommonPresAtt,
+  attribute position {integer}?,
+  attribute length {unsigned-integer}?,
+  attribute leftoverhang {length}?,
+  attribute rightoverhang {length}?,
+  attribute mslinethickness {length | "thin" | "medium" | "thick"}?
+
+none = element none {none.attributes,empty}
+none.attributes = 
+  CommonAtt,
+  CommonPresAtt
+
+mprescripts = element mprescripts {mprescripts.attributes,empty}
+mprescripts.attributes = 
+  CommonAtt,
+  CommonPresAtt
+
+
+CommonPresAtt = 
+  attribute mathcolor {color}?,
+  attribute mathbackground {color | "transparent"}?
+
+TokenAtt = 
+  attribute mathvariant {"normal" | "bold" | "italic" | "bold-italic" | "double-struck" | "bold-fraktur" | "script" | "bold-script" | "fraktur" | "sans-serif" | "bold-sans-serif" | "sans-serif-italic" | "sans-serif-bold-italic" | "monospace" | "initial" | "tailed" | "looped" | "stretched"}?,
+  attribute mathsize {"small" | "normal" | "big" | length}?,
+  attribute dir {"ltr" | "rtl"}?,
+  DeprecatedTokenAtt
+
+DeprecatedTokenAtt = 
+  attribute fontfamily {text}?,
+  attribute fontweight {"normal" | "bold"}?,
+  attribute fontstyle {"normal" | "italic"}?,
+  attribute fontsize {length}?,
+  attribute color {color}?,
+  attribute background {color | "transparent"}?
+
+MalignExpression = maligngroup|malignmark
+
+malignmark = element malignmark {malignmark.attributes, empty}
+malignmark.attributes = 
+  CommonAtt, CommonPresAtt,
+  attribute edge {"left" | "right"}?
+
+
+maligngroup = element maligngroup {maligngroup.attributes, empty}
+maligngroup.attributes = 
+  CommonAtt, CommonPresAtt,
+  attribute groupalign {"left" | "center" | "right" | "decimalpoint"}?
+
+
+PresentationExpression = TokenExpression|MalignExpression|
+                         mrow|mfrac|msqrt|mroot|mstyle|merror|mpadded|mphantom|
+                         mfenced|menclose|msub|msup|msubsup|munder|mover|munderover|
+                         mmultiscripts|mtable|mstack|mlongdiv|maction
+
+
+
+mrow = element mrow {mrow.attributes, MathExpression*}
+mrow.attributes = 
+  CommonAtt, CommonPresAtt,
+  attribute dir {"ltr" | "rtl"}?
+
+
+mfrac = element mfrac {mfrac.attributes, MathExpression, MathExpression}
+mfrac.attributes = 
+  CommonAtt, CommonPresAtt,
+  attribute linethickness {length | "thin" | "medium" | "thick"}?,
+  attribute numalign {"left" | "center" | "right"}?,
+  attribute denomalign {"left" | "center" | "right"}?,
+  attribute bevelled {"true" | "false"}?
+
+
+msqrt = element msqrt {msqrt.attributes, ImpliedMrow}
+msqrt.attributes = 
+  CommonAtt, CommonPresAtt
+
+
+mroot = element mroot {mroot.attributes, MathExpression, MathExpression}
+mroot.attributes = 
+  CommonAtt, CommonPresAtt
+
+
+mstyle = element mstyle {mstyle.attributes, ImpliedMrow}
+mstyle.attributes = 
+  CommonAtt, CommonPresAtt,
+  mstyle.specificattributes,
+  mstyle.generalattributes,
+  mstyle.deprecatedattributes
+
+mstyle.specificattributes =
+  attribute scriptlevel {integer}?,
+  attribute displaystyle {"true" | "false"}?,
+  attribute scriptsizemultiplier {number}?,
+  attribute scriptminsize {length}?,
+  attribute infixlinebreakstyle {"before" | "after" | "duplicate"}?,
+  attribute decimalpoint {character}?
+
+mstyle.generalattributes =
+  attribute accent {"true" | "false"}?,
+  attribute accentunder {"true" | "false"}?,
+  attribute align {"left" | "right" | "center"}?,
+  attribute alignmentscope {list {("true" | "false") +}}?,
+  attribute bevelled {"true" | "false"}?,
+  attribute charalign {"left" | "center" | "right"}?,
+  attribute charspacing {length | "loose" | "medium" | "tight"}?,
+  attribute close {text}?,
+  attribute columnalign {list {columnalignstyle+} }?,
+  attribute columnlines {list {linestyle +}}?,
+  attribute columnspacing {list {(length) +}}?,
+  attribute columnspan {positive-integer}?,
+  attribute columnwidth {list {("auto" | length | "fit") +}}?,
+  attribute crossout {list {("none" | "updiagonalstrike" | "downdiagonalstrike" | "verticalstrike" | "horizontalstrike")*}}?,
+  attribute denomalign {"left" | "center" | "right"}?,
+  attribute depth {length}?,
+  attribute dir {"ltr" | "rtl"}?,
+  attribute edge {"left" | "right"}?,
+  attribute equalcolumns {"true" | "false"}?,
+  attribute equalrows {"true" | "false"}?,
+  attribute fence {"true" | "false"}?,
+  attribute form {"prefix" | "infix" | "postfix"}?,
+  attribute frame {linestyle}?,
+  attribute framespacing {list {length, length}}?,
+  attribute groupalign {group-alignment-list-list}?,
+  attribute height {length}?,
+  attribute indentalign {"left" | "center" | "right" | "auto" | "id"}?,
+  attribute indentalignfirst {"left" | "center" | "right" | "auto" | "id" | "indentalign"}?,
+  attribute indentalignlast {"left" | "center" | "right" | "auto" | "id" | "indentalign"}?,
+  attribute indentshift {length}?,
+  attribute indentshiftfirst {length | "indentshift"}?,
+  attribute indentshiftlast {length | "indentshift"}?,
+  attribute indenttarget {idref}?,
+  attribute largeop {"true" | "false"}?,
+  attribute leftoverhang {length}?,
+  attribute length {unsigned-integer}?,
+  attribute linebreak {"auto" | "newline" | "nobreak" | "goodbreak" | "badbreak"}?,
+  attribute linebreakmultchar {text}?,
+  attribute linebreakstyle {"before" | "after" | "duplicate" | "infixlinebreakstyle"}?,
+  attribute lineleading {length}?,
+  attribute linethickness {length | "thin" | "medium" | "thick"}?,
+  attribute location {"w" | "nw" | "n" | "ne" | "e" | "se" | "s" | "sw"}?,
+  attribute longdivstyle {"lefttop" | "stackedrightright" | "mediumstackedrightright" | "shortstackedrightright" | "righttop" | "left/\right" | "left)(right" | ":right=right" | "stackedleftleft" | "stackedleftlinetop"}?,
+  attribute lquote {text}?,
+  attribute lspace {length}?,
+  attribute mathsize {"small" | "normal" | "big" | length}?,
+  attribute mathvariant {"normal" | "bold" | "italic" | "bold-italic" | "double-struck" | "bold-fraktur" | "script" | "bold-script" | "fraktur" | "sans-serif" | "bold-sans-serif" | "sans-serif-italic" | "sans-serif-bold-italic" | "monospace" | "initial" | "tailed" | "looped" | "stretched"}?,
+  attribute maxsize {length | "infinity"}?,
+  attribute minlabelspacing {length}?,
+  attribute minsize {length}?,
+  attribute movablelimits {"true" | "false"}?,
+  attribute mslinethickness {length | "thin" | "medium" | "thick"}?,
+  attribute notation {text}?,
+  attribute numalign {"left" | "center" | "right"}?,
+  attribute open {text}?,
+  attribute position {integer}?,
+  attribute rightoverhang {length}?,
+  attribute rowalign {list {verticalalign+} }?,
+  attribute rowlines {list {linestyle +}}?,
+  attribute rowspacing {list {(length) +}}?,
+  attribute rowspan {positive-integer}?,
+  attribute rquote {text}?,
+  attribute rspace {length}?,
+  attribute selection {positive-integer}?,
+  attribute separator {"true" | "false"}?,
+  attribute separators {text}?,
+  attribute shift {integer}?,
+  attribute side {"left" | "right" | "leftoverlap" | "rightoverlap"}?,
+  attribute stackalign {"left" | "center" | "right" | "decimalpoint"}?,
+  attribute stretchy {"true" | "false"}?,
+  attribute subscriptshift {length}?,
+  attribute superscriptshift {length}?,
+  attribute symmetric {"true" | "false"}?,
+  attribute valign {length}?,
+  attribute width {length}?
+
+mstyle.deprecatedattributes =
+  DeprecatedTokenAtt,
+  attribute veryverythinmathspace {length}?,
+  attribute verythinmathspace {length}?,
+  attribute thinmathspace {length}?,
+  attribute mediummathspace {length}?,
+  attribute thickmathspace {length}?,
+  attribute verythickmathspace {length}?,
+  attribute veryverythickmathspace {length}?
+
+math.attributes &= CommonPresAtt
+math.attributes &= mstyle.specificattributes
+math.attributes &= mstyle.generalattributes
+
+
+
+
+merror = element merror {merror.attributes, ImpliedMrow}
+merror.attributes = 
+  CommonAtt, CommonPresAtt
+
+
+mpadded = element mpadded {mpadded.attributes, ImpliedMrow}
+mpadded.attributes = 
+  CommonAtt, CommonPresAtt,
+  attribute height {mpadded-length}?,
+  attribute depth {mpadded-length}?,
+  attribute width {mpadded-length}?,
+  attribute lspace {mpadded-length}?,
+  attribute voffset {mpadded-length}?
+
+
+mphantom = element mphantom {mphantom.attributes, ImpliedMrow}
+mphantom.attributes = 
+  CommonAtt, CommonPresAtt
+
+
+mfenced = element mfenced {mfenced.attributes, MathExpression*}
+mfenced.attributes = 
+  CommonAtt, CommonPresAtt,
+  attribute open {text}?,
+  attribute close {text}?,
+  attribute separators {text}?
+
+
+menclose = element menclose {menclose.attributes, ImpliedMrow}
+menclose.attributes = 
+  CommonAtt, CommonPresAtt,
+  attribute notation {text}?
+
+
+msub = element msub {msub.attributes, MathExpression, MathExpression}
+msub.attributes = 
+  CommonAtt, CommonPresAtt,
+  attribute subscriptshift {length}?
+
+
+msup = element msup {msup.attributes, MathExpression, MathExpression}
+msup.attributes = 
+  CommonAtt, CommonPresAtt,
+  attribute superscriptshift {length}?
+
+
+msubsup = element msubsup {msubsup.attributes, MathExpression, MathExpression, MathExpression}
+msubsup.attributes = 
+  CommonAtt, CommonPresAtt,
+  attribute subscriptshift {length}?,
+  attribute superscriptshift {length}?
+
+
+munder = element munder {munder.attributes, MathExpression, MathExpression}
+munder.attributes = 
+  CommonAtt, CommonPresAtt,
+  attribute accentunder {"true" | "false"}?,
+  attribute align {"left" | "right" | "center"}?
+
+
+mover = element mover {mover.attributes, MathExpression, MathExpression}
+mover.attributes = 
+  CommonAtt, CommonPresAtt,
+  attribute accent {"true" | "false"}?,
+  attribute align {"left" | "right" | "center"}?
+
+
+munderover = element munderover {munderover.attributes, MathExpression, MathExpression, MathExpression}
+munderover.attributes = 
+  CommonAtt, CommonPresAtt,
+  attribute accent {"true" | "false"}?,
+  attribute accentunder {"true" | "false"}?,
+  attribute align {"left" | "right" | "center"}?
+
+
+mmultiscripts = element mmultiscripts {mmultiscripts.attributes, MathExpression,MultiScriptExpression*,(mprescripts,MultiScriptExpression*)?}
+mmultiscripts.attributes = 
+  msubsup.attributes
+
+
+mtable = element mtable {mtable.attributes, TableRowExpression*}
+mtable.attributes = 
+  CommonAtt, CommonPresAtt,
+  attribute align {xsd:string {
+    pattern ='\s*(top|bottom|center|baseline|axis)\s*[0-9]*'}}?,
+  attribute rowalign {list {verticalalign+} }?,
+  attribute columnalign {list {columnalignstyle+} }?,
+  attribute groupalign {group-alignment-list-list}?,
+  attribute alignmentscope {list {("true" | "false") +}}?,
+  attribute columnwidth {list {("auto" | length | "fit") +}}?,
+  attribute width {"auto" | length}?,
+  attribute rowspacing {list {(length) +}}?,
+  attribute columnspacing {list {(length) +}}?,
+  attribute rowlines {list {linestyle +}}?,
+  attribute columnlines {list {linestyle +}}?,
+  attribute frame {linestyle}?,
+  attribute framespacing {list {length, length}}?,
+  attribute equalrows {"true" | "false"}?,
+  attribute equalcolumns {"true" | "false"}?,
+  attribute displaystyle {"true" | "false"}?,
+  attribute side {"left" | "right" | "leftoverlap" | "rightoverlap"}?,
+  attribute minlabelspacing {length}?
+
+
+mlabeledtr = element mlabeledtr {mlabeledtr.attributes, TableCellExpression+}
+mlabeledtr.attributes = 
+  mtr.attributes
+
+
+mtr = element mtr {mtr.attributes, TableCellExpression*}
+mtr.attributes = 
+  CommonAtt, CommonPresAtt,
+  attribute rowalign {"top" | "bottom" | "center" | "baseline" | "axis"}?,
+  attribute columnalign {list {columnalignstyle+} }?,
+  attribute groupalign {group-alignment-list-list}?
+
+
+mtd = element mtd {mtd.attributes, ImpliedMrow}
+mtd.attributes = 
+  CommonAtt, CommonPresAtt,
+  attribute rowspan {positive-integer}?,
+  attribute columnspan {positive-integer}?,
+  attribute rowalign {"top" | "bottom" | "center" | "baseline" | "axis"}?,
+  attribute columnalign {columnalignstyle}?,
+  attribute groupalign {group-alignment-list}?
+
+
+mstack = element mstack {mstack.attributes, MstackExpression*}
+mstack.attributes = 
+  CommonAtt, CommonPresAtt,
+  attribute align {xsd:string {
+    pattern ='\s*(top|bottom|center|baseline|axis)\s*[0-9]*'}}?,
+  attribute stackalign {"left" | "center" | "right" | "decimalpoint"}?,
+  attribute charalign {"left" | "center" | "right"}?,
+  attribute charspacing {length | "loose" | "medium" | "tight"}?
+
+
+mlongdiv = element mlongdiv {mlongdiv.attributes, MstackExpression,MstackExpression,MstackExpression+}
+mlongdiv.attributes = 
+  msgroup.attributes,
+  attribute longdivstyle {"lefttop" | "stackedrightright" | "mediumstackedrightright" | "shortstackedrightright" | "righttop" | "left/\right" | "left)(right" | ":right=right" | "stackedleftleft" | "stackedleftlinetop"}?
+
+
+msgroup = element msgroup {msgroup.attributes, MstackExpression*}
+msgroup.attributes = 
+  CommonAtt, CommonPresAtt,
+  attribute position {integer}?,
+  attribute shift {integer}?
+
+
+msrow = element msrow {msrow.attributes, MsrowExpression*}
+msrow.attributes = 
+  CommonAtt, CommonPresAtt,
+  attribute position {integer}?
+
+
+mscarries = element mscarries {mscarries.attributes, (MsrowExpression|mscarry)*}
+mscarries.attributes = 
+  CommonAtt, CommonPresAtt,
+  attribute position {integer}?,
+  attribute location {"w" | "nw" | "n" | "ne" | "e" | "se" | "s" | "sw"}?,
+  attribute crossout {list {("none" | "updiagonalstrike" | "downdiagonalstrike" | "verticalstrike" | "horizontalstrike")*}}?,
+  attribute scriptsizemultiplier {number}?
+
+
+mscarry = element mscarry {mscarry.attributes, MsrowExpression*}
+mscarry.attributes = 
+  CommonAtt, CommonPresAtt,
+  attribute location {"w" | "nw" | "n" | "ne" | "e" | "se" | "s" | "sw"}?,
+  attribute crossout {list {("none" | "updiagonalstrike" | "downdiagonalstrike" | "verticalstrike" | "horizontalstrike")*}}?
+
+
+maction = element maction {maction.attributes, MathExpression+}
+maction.attributes = 
+  CommonAtt, CommonPresAtt,
+  attribute actiontype {text}?,
+  attribute selection {positive-integer}?
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/mathml/mathml3-strict-content.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/mathml/mathml3-strict-content.rnc
new file mode 100644
index 0000000..e854b1c
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/mathml/mathml3-strict-content.rnc
@@ -0,0 +1,60 @@
+#     This is the Mathematical Markup Language (MathML) 3.0, an XML
+#     application for describing mathematical notation and capturing
+#     both its structure and content.
+#
+#     Copyright 1998-2009 W3C (MIT, ERCIM, Keio)
+# 
+#     Use and distribution of this code are permitted under the terms
+#     W3C Software Notice and License
+#     http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+
+
+default namespace m = "http://www.w3.org/1998/Math/MathML"
+
+ContExp = semantics-contexp | cn | ci | csymbol | apply | bind | share | cerror | cbytes | cs
+
+cn = element cn {cn.attributes,cn.content}
+cn.content = text
+cn.attributes = attribute type {"integer" | "real" | "double" | "hexdouble"}
+
+semantics-ci = element semantics {semantics.attributes,(ci|semantics-ci), 
+  (annotation|annotation-xml)*}
+
+semantics-contexp = element semantics {semantics.attributes,ContExp, 
+  (annotation|annotation-xml)*}
+
+ci = element ci {ci.attributes, ci.content}
+ci.attributes = CommonAtt, ci.type?
+ci.type = attribute type {"integer" | "rational" | "real" | "complex" | "complex-polar" | "complex-cartesian" | "constant" | "function" | "vector" | "list" | "set" | "matrix"}
+ci.content = text
+
+
+csymbol = element csymbol {csymbol.attributes,csymbol.content}
+
+SymbolName = xsd:NCName
+csymbol.attributes = CommonAtt, cd
+csymbol.content = SymbolName
+
+BvarQ = bvar*
+bvar = element bvar { ci | semantics-ci}
+
+apply = element apply {CommonAtt,apply.content}
+apply.content = ContExp+
+
+
+bind = element bind {CommonAtt,bind.content}
+bind.content = ContExp,bvar*,ContExp
+
+share = element share {CommonAtt, src, empty}
+
+cerror = element cerror {cerror.attributes, csymbol, ContExp*}
+cerror.attributes = CommonAtt
+
+cbytes = element cbytes {cbytes.attributes, base64}
+cbytes.attributes = CommonAtt
+base64 = xsd:base64Binary
+
+cs = element cs {cs.attributes, text}
+cs.attributes = CommonAtt
+
+MathExpression |= ContExp
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/LICENSE b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/LICENSE
new file mode 100644
index 0000000..ca3c818
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/LICENSE
@@ -0,0 +1,4 @@
+Use and distribution of all schemas in this directory are permitted under the terms
+W3C Software Notice and License
+http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/Lenient-Encryption11-ghc.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/Lenient-Encryption11-ghc.rnc
new file mode 100644
index 0000000..c4ab121
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/Lenient-Encryption11-ghc.rnc
@@ -0,0 +1,41 @@
+# Lenient-Encryption11-ghc.rnc
+#
+# Copyright 2011 W3C (Massachusetts Institute of Technology, 
+# Institut National de Recherche en Informatique et en Automatique, 
+# Keio University). All Rights Reserved.  http://www.w3.org/Consortium/Legal/
+# 
+# Use and distribution of all schemas in this directory are permitted under the terms
+# W3C Software Notice and License
+# http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+
+namespace ds = "http://www.w3.org/2000/09/xmldsig#"
+namespace ds11 = "http://www.w3.org/2009/xmldsig11#"
+namespace xenc = "http://www.w3.org/2001/04/xmlenc#"
+namespace xenc11 = "http://www.w3.org/2009/xmlenc11#"
+
+start = anyForeignElementOrEncrypted
+anyForeignElementOrEncrypted = 
+  element * -  xenc:* { 
+    mixed { security_anyAttribute*, anyForeignElementOrEncrypted* } }
+  | xenc_EncryptedData
+  | xenc_EncryptedKey
+ds_anyForeignElement = element * - (ds:* | xenc:*) {
+  mixed { security_anyAttribute*, security_anyElement* } }
+dsig11_anyForeignElement = element * - ds11:* {
+  mixed { security_anyAttribute*, security_anyElement* } }
+xenc_anyForeignElement = element * - xenc:* {
+  mixed { security_anyAttribute*, security_anyElement* } }
+xenc11_anyForeignElement = element * - xenc11:* {
+  mixed { security_anyAttribute*, security_anyElement* } }
+
+include "security_any.rnc"
+include "xmldsig-core-schema.rnc"
+include "xmldsig-allowAnyForeign.rnc"
+include "xmldsig11-schema.rnc"
+include "xmldsig11-allowAnyForeign.rnc"
+include "xenc-schema.rnc"
+include "xenc-allowAnyForeign.rnc"
+include "xenc-schema-11.rnc"
+include "xenc11-allowAnyForeign.rnc"
+include "xmlsec-ghc-schema.rnc"
+include "xmlsec-ghc-allowAnyForeign.rnc"
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/Lenient-Encryption11.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/Lenient-Encryption11.rnc
new file mode 100644
index 0000000..8070014
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/Lenient-Encryption11.rnc
@@ -0,0 +1,39 @@
+# Lenient-Encryption11.rnc
+#
+# Copyright 2011 W3C (Massachusetts Institute of Technology, 
+# Institut National de Recherche en Informatique et en Automatique, 
+# Keio University). All Rights Reserved.  http://www.w3.org/Consortium/Legal/
+# 
+# Use and distribution of all schemas in this directory are permitted under the terms
+# W3C Software Notice and License
+# http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+
+namespace ds = "http://www.w3.org/2000/09/xmldsig#"
+namespace ds11 = "http://www.w3.org/2009/xmldsig11#"
+namespace xenc = "http://www.w3.org/2001/04/xmlenc#"
+namespace xenc11 = "http://www.w3.org/2009/xmlenc11#"
+
+start = anyForeignElementOrEncrypted
+anyForeignElementOrEncrypted = 
+  element * -  xenc:* { 
+    mixed { security_anyAttribute*, anyForeignElementOrEncrypted* } }
+  | xenc_EncryptedData
+  | xenc_EncryptedKey
+ds_anyForeignElement = element * - (ds:* | xenc:*) {
+  mixed { security_anyAttribute*, security_anyElement* } }
+dsig11_anyForeignElement = element * - ds11:* {
+  mixed { security_anyAttribute*, security_anyElement* } }
+xenc_anyForeignElement = element * - xenc:* {
+  mixed { security_anyAttribute*, security_anyElement* } }
+xenc11_anyForeignElement = element * - xenc11:* {
+  mixed { security_anyAttribute*, security_anyElement* } }
+
+include "security_any.rnc"
+include "xmldsig-core-schema.rnc"
+include "xmldsig-allowAnyForeign.rnc"
+include "xmldsig11-schema.rnc"
+include "xmldsig11-allowAnyForeign.rnc"
+include "xenc-schema.rnc"
+include "xenc-allowAnyForeign.rnc"
+include "xenc-schema-11.rnc"
+include "xenc11-allowAnyForeign.rnc"
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/Lenient-Signature-exclusiveC14N.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/Lenient-Signature-exclusiveC14N.rnc
new file mode 100644
index 0000000..1989791
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/Lenient-Signature-exclusiveC14N.rnc
@@ -0,0 +1,25 @@
+# Lenient-Signature-exclusiveC14N.rnc
+#
+# Copyright 2011 W3C (Massachusetts Institute of Technology, 
+# Institut National de Recherche en Informatique et en Automatique, 
+# Keio University). All Rights Reserved.  http://www.w3.org/Consortium/Legal/
+# 
+# Use and distribution of all schemas in this directory are permitted under the terms
+# W3C Software Notice and License
+# http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+
+namespace ds = "http://www.w3.org/2000/09/xmldsig#"
+namespace ec = "http://www.w3.org/2001/10/xml-exc-c14n#"
+
+start = anyForeignElementOrSignature
+anyForeignElementOrSignature = 
+  element * -  ds:* { 
+    mixed { security_anyAttribute*, anyForeignElementOrSignature* } }
+  | ds_Signature
+ds_anyForeignElement = element * - ds:* {
+  mixed { security_anyAttribute*, security_anyElement* } }
+
+include "security_any.rnc"
+include "xmldsig-core-schema.rnc"
+include "xmldsig-allowAnyForeign.rnc"
+include "exc-c14n.rnc"
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/Lenient-Signature11-properties-exclusiveC14N.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/Lenient-Signature11-properties-exclusiveC14N.rnc
new file mode 100644
index 0000000..c619b4c
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/Lenient-Signature11-properties-exclusiveC14N.rnc
@@ -0,0 +1,32 @@
+# Lenient-Signature11-properties-exclusiveC14N.rnc
+#
+# Copyright 2011 W3C (Massachusetts Institute of Technology, 
+# Institut National de Recherche en Informatique et en Automatique, 
+# Keio University). All Rights Reserved.  http://www.w3.org/Consortium/Legal/
+# 
+# Use and distribution of all schemas in this directory are permitted under the terms
+# W3C Software Notice and License
+# http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+
+namespace ds = "http://www.w3.org/2000/09/xmldsig#"
+namespace ds11 = "http://www.w3.org/2009/xmldsig11#"
+namespace dsp = "http://www.w3.org/2009/xmldsig-properties"
+namespace ec = "http://www.w3.org/2001/10/xml-exc-c14n#"
+
+start = anyForeignElementOrSignature
+anyForeignElementOrSignature = 
+  element * -  (ds:* | ds11:* | dsp:* | ec:*) { 
+    mixed { security_anyAttribute*, anyForeignElementOrSignature* } }
+  | ds_Signature
+ds_anyForeignElement = element * - ds:* {
+  mixed { security_anyAttribute*, security_anyElement* } }
+dsig11_anyForeignElement = element * - ds11:* {
+  mixed { security_anyAttribute*, security_anyElement* } }
+
+include "security_any.rnc"
+include "xmldsig-core-schema.rnc"
+include "xmldsig11-schema.rnc"
+include "xmldsig-allowAnyForeign.rnc"
+include "xmldsig11-allowAnyForeign.rnc"
+include "xmldsig-properties-schema.rnc"
+include "exc-c14n.rnc"
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/Lenient-Signature11-properties.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/Lenient-Signature11-properties.rnc
new file mode 100644
index 0000000..1d38d7b
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/Lenient-Signature11-properties.rnc
@@ -0,0 +1,30 @@
+# Lenient-Signature11-properties.rnc
+#
+# Copyright 2011 W3C (Massachusetts Institute of Technology, 
+# Institut National de Recherche en Informatique et en Automatique, 
+# Keio University). All Rights Reserved.  http://www.w3.org/Consortium/Legal/
+# 
+# Use and distribution of all schemas in this directory are permitted under the terms
+# W3C Software Notice and License
+# http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+
+namespace ds = "http://www.w3.org/2000/09/xmldsig#"
+namespace ds11 = "http://www.w3.org/2009/xmldsig11#"
+namespace dsp = "http://www.w3.org/2009/xmldsig-properties"
+
+start = anyForeignElementOrSignature
+anyForeignElementOrSignature = 
+  element * -  (ds:* | ds11:* | dsp:*) { 
+    mixed { security_anyAttribute*, anyForeignElementOrSignature* } }
+  | ds_Signature
+ds_anyForeignElement = element * - ds:* {
+  mixed { security_anyAttribute*, security_anyElement* } }
+dsig11_anyForeignElement = element * - ds11:* {
+  mixed { security_anyAttribute*, security_anyElement* } }
+
+include "security_any.rnc"
+include "xmldsig-core-schema.rnc"
+include "xmldsig11-schema.rnc"
+include "xmldsig-allowAnyForeign.rnc"
+include "xmldsig11-allowAnyForeign.rnc"
+include "xmldsig-properties-schema.rnc"
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/Lenient-Signature11.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/Lenient-Signature11.rnc
new file mode 100644
index 0000000..e21aeb6
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/Lenient-Signature11.rnc
@@ -0,0 +1,28 @@
+# Lenient-Signature11.rnc
+#
+# Copyright 2011 W3C (Massachusetts Institute of Technology, 
+# Institut National de Recherche en Informatique et en Automatique, 
+# Keio University). All Rights Reserved.  http://www.w3.org/Consortium/Legal/
+# 
+# Use and distribution of all schemas in this directory are permitted under the terms
+# W3C Software Notice and License
+# http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+
+namespace ds = "http://www.w3.org/2000/09/xmldsig#"
+namespace ds11 = "http://www.w3.org/2009/xmldsig11#"
+
+start = anyForeignElementOrSignature
+anyForeignElementOrSignature = 
+  element * -  (ds:* | ds11:*) { 
+    mixed { security_anyAttribute*, anyForeignElementOrSignature* } }
+  | ds_Signature
+ds_anyForeignElement = element * - ds:* {
+  mixed { security_anyAttribute*, security_anyElement* } }
+dsig11_anyForeignElement = element * - ds11:* {
+  mixed { security_anyAttribute*, security_anyElement* } }
+
+include "security_any.rnc"
+include "xmldsig-core-schema.rnc"
+include "xmldsig11-schema.rnc"
+include "xmldsig-allowAnyForeign.rnc"
+include "xmldsig11-allowAnyForeign.rnc"
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/Strict-Encryption.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/Strict-Encryption.rnc
new file mode 100644
index 0000000..4cf9427
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/Strict-Encryption.rnc
@@ -0,0 +1,27 @@
+# Strict-Encryption.rnc
+#
+# Copyright 2011 W3C (Massachusetts Institute of Technology, 
+# Institut National de Recherche en Informatique et en Automatique, 
+# Keio University). All Rights Reserved.  http://www.w3.org/Consortium/Legal/
+# 
+# Use and distribution of all schemas in this directory are permitted under the terms
+# W3C Software Notice and License
+# http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+
+namespace ds = "http://www.w3.org/2000/09/xmldsig#"
+namespace xenc = "http://www.w3.org/2001/04/xmlenc#"
+
+start = anyForeignElementOrEncrypted
+anyForeignElementOrEncrypted = 
+  element * -  xenc:* { 
+    mixed { security_anyAttribute*, anyForeignElementOrEncrypted* } }
+  | xenc_EncryptedData
+  | xenc_EncryptedKey
+ds_anyForeignElement = element * - (ds:* | xenc:*) {
+  mixed { security_anyAttribute*, security_anyElement* } }
+xenc_anyForeignElement = element * - xenc:* {
+  mixed { security_anyAttribute*, security_anyElement* } }
+
+include "security_any.rnc"
+include "xmldsig-core-schema.rnc"
+include "xenc-schema.rnc"
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/Strict-Signature.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/Strict-Signature.rnc
new file mode 100644
index 0000000..0616302
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/Strict-Signature.rnc
@@ -0,0 +1,22 @@
+# Strict-Signature.rnc
+#
+# Copyright 2011 W3C (Massachusetts Institute of Technology, 
+# Institut National de Recherche en Informatique et en Automatique, 
+# Keio University). All Rights Reserved.  http://www.w3.org/Consortium/Legal/
+# 
+# Use and distribution of all schemas in this directory are permitted under the terms
+# W3C Software Notice and License
+# http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+
+namespace ds = "http://www.w3.org/2000/09/xmldsig#"
+
+start = anyForeignElementOrSignature
+anyForeignElementOrSignature = 
+  element * -  ds:* { 
+    mixed { security_anyAttribute*, anyForeignElementOrSignature* } }
+  | ds_Signature
+ds_anyForeignElement = element * - ds:* {
+  mixed { security_anyAttribute*, security_anyElement* } }
+
+include "security_any.rnc"
+include "xmldsig-core-schema.rnc"
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/exc-c14n.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/exc-c14n.rnc
new file mode 100644
index 0000000..73692b2
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/exc-c14n.rnc
@@ -0,0 +1,39 @@
+# exc-c14n.rnc (derived from exc-c14n.xsd)
+#
+# Copyright 2011 W3C (Massachusetts Institute of Technology, 
+# Institut National de Recherche en Informatique et en Automatique, 
+# Keio University). All Rights Reserved.  http://www.w3.org/Consortium/Legal/
+# 
+# Use and distribution of all schemas in this directory are permitted under the terms
+# W3C Software Notice and License
+# http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+#
+# This RELAX NG schema allows the use of two algorithms, namely 
+#
+#   http://www.w3.org/2001/10/xml-exc-c14n# and 
+#   http://www.w3.org/2001/10/xml-exc-c14n#WithComments,
+#
+# in ds_CanonicalizationMethodType, which specifies permissible
+# contents of Transform or CanonicalizationMethod elements.
+#
+# The definition of ds_CanonicalizationMethodType in this schema is 
+# combined with the other definitions of ds_CanonicalizationMethodType
+# by the choice operator.
+
+default namespace = "http://www.w3.org/2001/10/xml-exc-c14n#"
+
+ds_CanonicalizationMethodType |=
+  attribute Algorithm {
+    xsd:anyURI "http://www.w3.org/2001/10/xml-exc-c14n#"
+    | xsd:anyURI "http://www.w3.org/2001/10/xml-exc-c14n#WithComments"
+  },
+  ec_InclusiveNamespaces?
+ec_InclusiveNamespaces =
+  element InclusiveNamespaces {
+    attribute PrefixList { xsd:NMTOKENS }
+  }
+
+# List of known algorithms
+ds_CanonicalizationAlgorithms |=  
+  xsd:anyURI "http://www.w3.org/2001/10/xml-exc-c14n#"
+  | xsd:anyURI "http://www.w3.org/2001/10/xml-exc-c14n#WithComments" 
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/security_any.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/security_any.rnc
new file mode 100644
index 0000000..249d111
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/security_any.rnc
@@ -0,0 +1,15 @@
+# security_any.rnc
+#
+# Copyright 2011 W3C (Massachusetts Institute of Technology, 
+# Institut National de Recherche en Informatique et en Automatique, 
+# Keio University). All Rights Reserved.  http://www.w3.org/Consortium/Legal/
+# 
+# Use and distribution of all schemas in this directory are permitted under the terms
+# W3C Software Notice and License
+# http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+#
+# This RELAX NG schema defines security_anyElement, which allows any element,
+# and security_anyAttribute, which allows any attribute.
+
+security_anyElement = element * { mixed { security_anyAttribute*, security_anyElement* } }
+security_anyAttribute = attribute * { text }
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xenc-allowAnyForeign.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xenc-allowAnyForeign.rnc
new file mode 100644
index 0000000..e7ad8c6
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xenc-allowAnyForeign.rnc
@@ -0,0 +1,25 @@
+# xenc-allowAnyForeign.rnc
+#
+# Copyright 2011 W3C (Massachusetts Institute of Technology, 
+# Institut National de Recherche en Informatique et en Automatique, 
+# Keio University). All Rights Reserved.  http://www.w3.org/Consortium/Legal/
+# 
+# Use and distribution of all schemas in this directory are permitted under the terms
+# W3C Software Notice and License
+# http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+#
+# This schema mimicks <any namespace='##other'.../>
+# in xenc-schema.xsd.
+# 
+# Schema authors might want to create a dedicated schema 
+# for a collection of particular algorithms rather than 
+# using this schema.
+
+xenc_EncryptionMethodOtherParams |=
+  attribute Algorithm {
+    xsd:anyURI - xenc_EncryptionAlgorithms },
+  xenc_anyForeignElement*
+xenc_AgreementMethodParams |=
+  attribute Algorithm {
+    xsd:anyURI - xenc_KeyAgreementAlgorithms },
+  xenc_anyForeignElement*
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xenc-schema-11.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xenc-schema-11.rnc
new file mode 100644
index 0000000..cdeecf0
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xenc-schema-11.rnc
@@ -0,0 +1,96 @@
+# xenc-schema-11.rnc (derived from xenc-schema.xsd)
+#
+# Copyright 2011 W3C (Massachusetts Institute of Technology, 
+# Institut National de Recherche en Informatique et en Automatique, 
+# Keio University). All Rights Reserved.  http://www.w3.org/Consortium/Legal/
+# 
+# Use and distribution of all schemas in this directory are permitted under the terms
+# W3C Software Notice and License
+# http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+#
+# This schema complements "xenc-schema.rnc" by introducing 
+# elements specific to 1.1.  Note that the definitions of
+# xenc_EncryptionMethodOtherParams and 
+# xenc_AgreementMethodParams have been extended so that 
+# elements specific to 1.1 are allowed.
+
+default namespace = "http://www.w3.org/2009/xmlenc11#"
+namespace ds = "http://www.w3.org/2000/09/xmldsig#"
+namespace xenc = "http://www.w3.org/2001/04/xmlenc#"
+namespace xenc11 = "http://www.w3.org/2009/xmlenc11#"
+
+xenc11_ConcatKDFParams =
+  element ConcatKDFParams { xenc11_ConcatKDFParamsType }
+xenc11_ConcatKDFParamsType =
+  attribute AlgorithmID { xsd:hexBinary }?,
+  attribute PartyUInfo { xsd:hexBinary }?,
+  attribute PartyVInfo { xsd:hexBinary }?,
+  attribute SuppPubInfo { xsd:hexBinary }?,
+  attribute SuppPrivInfo { xsd:hexBinary }?,
+  ds_DigestMethod
+xenc11_DerivedKey = element DerivedKey { xenc11_DerivedKeyType }
+xenc11_DerivedKeyType =
+  attribute Recipient { xsd:string }?,
+  attribute Id { xenc11_IdType }?,
+  attribute Type { xsd:anyURI }?,
+  xenc11_KeyDerivationMethod?,
+  xenc_ReferenceList?,
+  element DerivedKeyName { xsd:string }?,
+  element MasterKeyName { xsd:string }?
+xenc11_KeyDerivationMethod =
+  element KeyDerivationMethod { xenc11_KeyDerivationMethodType }
+xenc11_KeyDerivationMethodType = 
+    (attribute Algorithm { xsd:anyURI "http://www.w3.org/2009/xmlenc11#ConcatKDF" },
+     xenc11_ConcatKDFParams)
+  | (attribute Algorithm { xsd:anyURI "http://www.w3.org/2009/xmlenc11#pbkdf2" },
+     xenc11_PBKDF2-params)
+xenc11_PBKDF2-params =
+  element PBKDF2-params { xenc11_PBKDF2ParameterType }
+xenc11_AlgorithmIdentifierType =
+  attribute Algorithm { xsd:anyURI },
+  element Parameters { security_anyAttribute*, mixed { security_anyElement* } }?
+xenc11_PRFAlgorithmIdentifierType =
+  # Restricts xenc11:AlgorithmIdentifierType
+  attribute Algorithm { xsd:anyURI }
+xenc11_PBKDF2ParameterType =
+  element Salt {
+    element Specified { xsd:base64Binary }
+    | element OtherSource { xenc11_AlgorithmIdentifierType }
+  },
+  element IterationCount { xsd:positiveInteger },
+  element KeyLength { xsd:positiveInteger },
+  element PRF { xenc11_PRFAlgorithmIdentifierType }
+
+xenc11_IdType = xsd:NCName # xsd:ID does not work
+
+xenc_EncryptionMethodOtherParams |= 
+  attribute Algorithm {
+# Block Encryption
+    xsd:anyURI "http://www.w3.org/2009/xmlenc11#aes128-gcm"
+    | xsd:anyURI "http://www.w3.org/2009/xmlenc11#aes256-gcm"
+# Symmetric Key Wrap
+    | xsd:anyURI "http://www.w3.org/2009/xmlenc11#kw-aes-128-pad"
+    | xsd:anyURI "http://www.w3.org/2009/xmlenc11#kw-aes-192-pad"
+    | xsd:anyURI "http://www.w3.org/2009/xmlenc11#kw-aes-256-pad"
+  }
+
+xenc_AgreementMethodParams |=
+    attribute Algorithm { xsd:anyURI "http://www.w3.org/2009/xmlenc11#dh-es" }
+  | attribute Algorithm { xsd:anyURI "http://www.w3.org/2009/xmlenc11#ECDH-ES" }
+
+
+# List of known algorithms
+xenc_EncryptionAlgorithms |=
+# Block Encryption
+    xsd:anyURI "http://www.w3.org/2009/xmlenc11#aes128-gcm"
+  | xsd:anyURI "http://www.w3.org/2009/xmlenc11#aes256-gcm"
+# Symmetric Key Wrap
+  |  xsd:anyURI "http://www.w3.org/2009/xmlenc11#kw-aes-128-pad"
+  | xsd:anyURI "http://www.w3.org/2009/xmlenc11#kw-aes-192-pad"
+  | xsd:anyURI "http://www.w3.org/2009/xmlenc11#kw-aes-256-pad"
+xenc_KeyAgreementAlgorithms |= 
+    xsd:anyURI "http://www.w3.org/2009/xmlenc11#dh-es"
+  | xsd:anyURI "http://www.w3.org/2009/xmlenc11#ECDH-ES"
+xenc11_KeyDerivationAlgorithms = 
+    xsd:anyURI "http://www.w3.org/2009/xmlenc11#ConcatKDF"
+  | xsd:anyURI "http://www.w3.org/2009/xmlenc11#pbkdf2"
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xenc-schema.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xenc-schema.rnc
new file mode 100644
index 0000000..7c8d73a
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xenc-schema.rnc
@@ -0,0 +1,145 @@
+# xenc-schema.rnc (derived from xenc-schema.xsd)
+#
+# Copyright 2011 W3C (Massachusetts Institute of Technology, 
+# Institut National de Recherche en Informatique et en Automatique, 
+# Keio University). All Rights Reserved.  http://www.w3.org/Consortium/Legal/
+# 
+# Use and distribution of all schemas in this directory are permitted under the terms
+# W3C Software Notice and License
+# http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+#
+#It is assumed that the driver schema imports xmldsig-core-schema.rnc.
+
+
+default namespace = "http://www.w3.org/2001/04/xmlenc#"
+namespace xenc = "http://www.w3.org/2001/04/xmlenc#"
+
+ds_KeyValueType |= xenc_DHKeyValue
+ds_DigestMethodType |=
+  attribute Algorithm { 
+      xsd:anyURI "http://www.w3.org/2001/04/xmlenc#sha256"
+    | xsd:anyURI "http://www.w3.org/2001/04/xmlenc#sha512"
+    | xsd:anyURI "http://www.w3.org/2001/04/xmlenc#ripemd160"
+  }
+
+xenc_EncryptedType =
+  attribute Id { xenc_IdType }?,
+  attribute Type { xsd:anyURI }?,
+  attribute MimeType { xsd:string }?,
+  attribute Encoding { xsd:anyURI }?,
+  element EncryptionMethod { xenc_EncryptionMethodType }?,
+  ds_KeyInfo?,
+  xenc_CipherData,
+  xenc_EncryptionProperties?
+xenc_EncryptionMethodType =
+  mixed {
+    element KeySize { xenc_KeySizeType }?,
+    xenc_EncryptionMethodOtherParams
+  }
+
+ds_KeyInfoChild |= xenc_EncryptedKey | xenc_AgreementMethod
+
+xenc_EncryptionMethodOtherParams = 
+    attribute Algorithm { xsd:anyURI "http://www.w3.org/2001/04/xmlenc#tripledes-cbc" } 
+  | attribute Algorithm { xsd:anyURI "http://www.w3.org/2001/04/xmlenc#aes128-cbc" } 
+  | attribute Algorithm { xsd:anyURI "http://www.w3.org/2001/04/xmlenc#aes256-cbc" }
+  | attribute Algorithm { xsd:anyURI "http://www.w3.org/2001/04/xmlenc#aes192-cbc" }
+  | attribute Algorithm { xsd:anyURI "http://www.w3.org/2001/04/xmlenc#rsa-1_5" } 
+  | (attribute Algorithm { xsd:anyURI "http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" },
+     element OAEPparams { xsd:base64Binary }?,
+     ds_DigestMethod?)
+  | attribute Algorithm { xsd:anyURI "http://www.w3.org/2001/04/xmlenc#kw-tripledes" }
+  | attribute Algorithm { 
+        xsd:anyURI "http://www.w3.org/2001/04/xmlenc#kw-aes128"
+      | xsd:anyURI "http://www.w3.org/2001/04/xmlenc#kw-aes192"
+      | xsd:anyURI "http://www.w3.org/2001/04/xmlenc#kw-aes256"
+    }
+
+xenc_KeySizeType = xsd:integer
+xenc_CipherData = element CipherData { xenc_CipherDataType }
+xenc_CipherDataType =
+  element CipherValue { xsd:base64Binary }
+  | xenc_CipherReference
+xenc_CipherReference =
+  element CipherReference { xenc_CipherReferenceType }
+xenc_CipherReferenceType =
+  attribute URI { xsd:anyURI },
+  element Transforms { xenc_TransformsType }?
+xenc_TransformsType = ds_Transform+
+xenc_EncryptedData = element EncryptedData { xenc_EncryptedDataType }
+xenc_EncryptedDataType = xenc_EncryptedType
+xenc_EncryptedKey = element EncryptedKey { xenc_EncryptedKeyType }
+xenc_EncryptedKeyType =
+  xenc_EncryptedType,
+  xenc_ReferenceList?,
+  element CarriedKeyName { xsd:string }?,
+  attribute Recipient { xsd:string }?
+xenc_AgreementMethod =
+  element AgreementMethod { xenc_AgreementMethodType }
+xenc_AgreementMethodType =
+  mixed {
+    element KA-Nonce { xsd:base64Binary }?,
+    xenc_AgreementMethodParams,
+    element OriginatorKeyInfo { ds_KeyInfoType }?,
+    element RecipientKeyInfo { ds_KeyInfoType }?
+  }
+xenc_AgreementMethodParams =
+  attribute Algorithm { xsd:anyURI "http://www.w3.org/2001/04/xmlenc#dh" },
+  ds_DigestMethod
+
+xenc_ReferenceList =
+  element ReferenceList {
+    (element DataReference { xenc_ReferenceType }
+     | element KeyReference { xenc_ReferenceType })+
+  }
+xenc_ReferenceType =
+  attribute URI { xsd:anyURI },
+  xenc_anyForeignElement*
+#For both types of references one may optionally specify child elements to aid the recipient in retrieving the EncryptedKey and/or EncryptedData elements. These could include information such as XPath transforms, decompression transforms, or information on how to retrieve the elements from a document storage facility. For example:
+#ds_Transforms
+
+xenc_EncryptionProperties =
+  element EncryptionProperties { xenc_EncryptionPropertiesType }
+xenc_EncryptionPropertiesType =
+  attribute Id { xenc_IdType }?,
+  xenc_EncryptionProperty+
+xenc_EncryptionProperty =
+  element EncryptionProperty { xenc_EncryptionPropertyType }
+xenc_EncryptionPropertyType =
+  mixed {
+    attribute Target { xsd:anyURI }?,
+    attribute Id { xenc_IdType }?,
+    attribute xml:* { text }*,
+    xenc_anyForeignElement+
+  }
+
+xenc_DHKeyValue = element DHKeyValue { xenc_DHKeyValueType }
+xenc_DHKeyValueType =
+  (element P { ds_CryptoBinary },
+   element Q { ds_CryptoBinary },
+   element Generator { ds_CryptoBinary })?,
+  element Public { ds_CryptoBinary },
+  (element seed { ds_CryptoBinary },
+   element pgenCounter { ds_CryptoBinary })?
+
+xenc_IdType = xsd:NCName # xsd:ID does not work
+
+ds_DigestAlgorithms |=
+      xsd:anyURI "http://www.w3.org/2001/04/xmlenc#sha256"
+    | xsd:anyURI "http://www.w3.org/2001/04/xmlenc#sha512"
+    | xsd:anyURI "http://www.w3.org/2001/04/xmlenc#ripemd160"
+
+xenc_EncryptionAlgorithms =
+    xsd:anyURI "http://www.w3.org/2001/04/xmlenc#tripledes-cbc"
+  | xsd:anyURI "http://www.w3.org/2001/04/xmlenc#aes128-cbc"
+  | xsd:anyURI "http://www.w3.org/2001/04/xmlenc#aes256-cbc"
+  | xsd:anyURI "http://www.w3.org/2001/04/xmlenc#aes192-cbc"
+  | xsd:anyURI "http://www.w3.org/2001/04/xmlenc#rsa-1_5"
+  | xsd:anyURI "http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p"
+  | xsd:anyURI "http://www.w3.org/2001/04/xmlenc#kw-tripledes"
+  | xsd:anyURI "http://www.w3.org/2001/04/xmlenc#kw-aes128"
+  | xsd:anyURI "http://www.w3.org/2001/04/xmlenc#kw-aes256"
+  | xsd:anyURI "http://www.w3.org/2001/04/xmlenc#kw-aes192"
+
+xenc_KeyAgreementAlgorithms = 
+  xsd:anyURI "http://www.w3.org/2001/04/xmlenc#dh"
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xenc11-allowAnyForeign.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xenc11-allowAnyForeign.rnc
new file mode 100644
index 0000000..3541d31
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xenc11-allowAnyForeign.rnc
@@ -0,0 +1,19 @@
+# xenc11-allowAnyForeign.rnc
+#
+# Copyright 2011 W3C (Massachusetts Institute of Technology, 
+# Institut National de Recherche en Informatique et en Automatique, 
+# Keio University). All Rights Reserved.  http://www.w3.org/Consortium/Legal/
+# 
+# Use and distribution of all schemas in this directory are permitted under the terms
+# W3C Software Notice and License
+# http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+#
+# This schema mimicks <any .. /> in xenc-schema-11.xsd.
+# 
+# Schema authors might want to create a dedicated schema 
+# for a collection of particular algorithms rather than 
+# using this schema.
+
+xenc11_KeyDerivationMethodType |= 
+  attribute Algorithm { xsd:anyURI - xenc11_KeyDerivationAlgorithms },
+  xenc11_anyForeignElement*
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xmldsig-allowAnyForeign.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xmldsig-allowAnyForeign.rnc
new file mode 100644
index 0000000..1543d3f
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xmldsig-allowAnyForeign.rnc
@@ -0,0 +1,47 @@
+# xmldsig-allowAnyForeign.rnc
+#
+# Copyright 2011 W3C (Massachusetts Institute of Technology, 
+# Institut National de Recherche en Informatique et en Automatique, 
+# Keio University). All Rights Reserved.  http://www.w3.org/Consortium/Legal/
+# 
+# Use and distribution of all schemas in this directory are permitted under the terms
+# W3C Software Notice and License
+# http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+# 
+# This schema mimicks <any ../> in xmldsig-core-schema.xsd.  
+# When namespace="##other", any foreign element is allowed.
+# When namespace="##any", any foreign element as well as 
+# any element valid against xmldsig-core-schema.xsd is allowed.
+# 
+# Schema authors might want to create a dedicated schema 
+# for a collection of particular algorithms rather than 
+# using this schema.
+
+default namespace ds = "http://www.w3.org/2000/09/xmldsig#"
+
+ds_CanonicalizationMethodType |=
+  attribute Algorithm { xsd:anyURI - ds_CanonicalizationAlgorithms },
+  (ds_anyForeignElement | ds_anyDsElement)*
+ds_SignatureMethodType |=
+  attribute Algorithm { xsd:anyURI - ds_SignatureAlgorithms },
+# It is allowed to use an HMACOutputLength element even when
+# the agorithm is not "http://www.w3.org/2000/09/xmldsig#hmac-sha1"
+  element HMACOutputLength { ds_HMACOutputLengthType }?,
+  ds_anyForeignElement*
+ds_TransformType |=
+  attribute Algorithm {
+    xsd:anyURI - (ds_CanonicalizationAlgorithms | ds_TransformAlgorithms) },
+# It is allowed to use XPath elements even when
+# the algorithm is not "http://www.w3.org/TR/1999/REC-xpath-19991116"
+  (ds_anyForeignElement
+   | element XPath { xsd:string })*
+ds_DigestMethodType |=
+  attribute Algorithm { xsd:anyURI - ds_DigestAlgorithms },
+  ds_anyForeignElement*
+ds_KeyInfoChild |= ds_anyForeignElement
+ds_KeyValueType |= ds_anyForeignElement
+ds_X509DataForeignChild |= ds_anyForeignElement
+ds_SPKIDataForeignChild |= ds_anyForeignElement
+ds_ObjectChild |= ds_anyForeignElement
+ds_SignaturePropertyChild |= ds_anyForeignElement
+ds_PGPDataForeignChild |= ds_anyForeignElement
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xmldsig-core-schema.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xmldsig-core-schema.rnc
new file mode 100644
index 0000000..2ec7db7
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xmldsig-core-schema.rnc
@@ -0,0 +1,276 @@
+# xmldsig-core-schema.rnc (derived from xmldsig-core-schema.xsd)
+#
+# Copyright 2011 W3C (Massachusetts Institute of Technology, 
+# Institut National de Recherche en Informatique et en Automatique, 
+# Keio University). All Rights Reserved.  http://www.w3.org/Consortium/Legal/
+# 
+# Use and distribution of all schemas in this directory are permitted under the terms
+# W3C Software Notice and License
+# http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+#
+# 1. Differences from dsig-core-schema.xsd.
+#
+# 1.1 Attribute-value dependent content models
+#
+# The content models of CanonicalizationMethod, SignatureMethod,
+# Transform, and DigestMethod elemenst are dependent on the value 
+# of the attribute Algorithm.
+#
+# 1.2 Customization
+#
+# The original XSD schema uses xsd:any several times, and it is 
+# not intended to be customized.  However, this RELAX NG schema 
+# is intended to be customized always, and provides customization
+# points rather than wildcards. 
+#
+# This schema also defines lists of known algorithms.  These definitions
+# are expected to be customized when algorithms are added.
+#
+# A customization example is xmldsig-allowAnyForeign.rnc, which 
+# allows anything at any cutomization point.
+#
+# 2. Customization points
+#
+# 2.1 Union-combination (i.e., |= ) is intended
+#
+# (1) Algorithm identifiers and parameters
+#
+# Allow the combination of a particular value of @Algorithm
+# and the parameter elements.  See 6.1 in the xmldsig-core recommendation.
+#
+# ds_CanonicalizationMethodType
+# ds_SignatureMethodType
+# ds_TransformType
+# ds_DigestMethodType
+#
+# Example:
+#  namespace foo = "http://www.example.com/someNewAlgorithm"
+#  ds_CanonicalizationMethodType |=
+#    attribute Algorithm { 
+#      xsd:anyURI "http://www.example.com/someNewAlgorithm" }, 
+#    element foo:Param1 { text },
+#    element foo:Param2 { text } 
+#
+# (2) Other contents
+#
+# Allow one element rather than a sequence of elements or empty sequence.
+#
+# ds_KeyInfoChild
+# ds_KeyValueType
+# ds_X509DataForeignChild
+# ds_SPKIDataForeignChild
+# ds_ObjectChild
+# ds_SignaturePropertyChild
+# ds_PGPDataForeignChild
+#
+# (3) Known algorithms
+#
+# ds_CanonicalizationAlgorithms
+# ds_SignatureAlgorithms
+# ds_TransformAlgorithms
+# ds_DigestAlgorithms =
+#
+# 2.2 Overriding
+#
+# (1) ds_IdType
+#
+# This is defined as xsd:NCName.  One might want to use xsd:ID 
+# instead, but jing is likely to report an error.  This is because 
+# of the compatibility requirement for the ID/IDREF/IDREFS feature, 
+# which is specified in the OASIS committee specification 
+# "RELAX NG DTD Compatibility" (December 2001).
+#
+# (2) ds_xslt
+#
+# This is defined as any element, but one might want to use the 
+# schema created by James Clark.
+
+default namespace = "http://www.w3.org/2000/09/xmldsig#"
+namespace xsi = "http://www.w3.org/2001/XMLSchema-instance"
+
+ds_CryptoBinary = xsd:base64Binary
+ds_Signature = element Signature {
+ ds_SignatureType &  attribute xsi:schemaLocation { text }?
+}
+ds_SignatureType =
+  attribute Id { ds_IdType }?,
+  ds_SignedInfo,
+  ds_SignatureValue,
+  ds_KeyInfo?,
+  ds_Object*
+ds_SignatureValue = element SignatureValue { ds_SignatureValueType }
+ds_SignatureValueType =
+  xsd:base64Binary,
+  attribute Id { ds_IdType }?
+ds_SignedInfo = element SignedInfo { ds_SignedInfoType }
+ds_SignedInfoType =
+  attribute Id { ds_IdType }?,
+  ds_CanonicalizationMethod,
+  ds_SignatureMethod,
+  ds_Reference+
+ds_CanonicalizationMethod =
+  element CanonicalizationMethod { mixed { ds_CanonicalizationMethodType } }
+ds_CanonicalizationMethodType =
+    attribute Algorithm { 
+        xsd:anyURI "http://www.w3.org/TR/2001/REC-xml-c14n-20010315" 
+      | xsd:anyURI "http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"
+    }
+  | attribute Algorithm { 
+        xsd:anyURI "http://www.w3.org/2006/12/xml-c14n11"
+      | xsd:anyURI "http://www.w3.org/2006/12/xml-c14n11#WithComments"
+    }
+ds_SignatureMethod = element SignatureMethod { mixed { ds_SignatureMethodType } }
+ds_SignatureMethodType =
+  (attribute Algorithm { 
+      xsd:anyURI "http://www.w3.org/2000/09/xmldsig#hmac-sha1" }, 
+    element HMACOutputLength { ds_HMACOutputLengthType }?) 
+  | attribute Algorithm { 
+    xsd:anyURI "http://www.w3.org/2000/09/xmldsig#dsa-sha1" } 
+  | attribute Algorithm { 
+    xsd:anyURI "http://www.w3.org/2000/09/xmldsig#rsa-sha1" } 
+ds_Reference = element Reference { ds_ReferenceType }
+ds_ReferenceType =
+  attribute Id { ds_IdType }?,
+  attribute URI { xsd:anyURI }?,
+  attribute Type { xsd:anyURI }?,
+  ds_Transforms?,
+  ds_DigestMethod,
+  ds_DigestValue
+ds_Transforms = element Transforms { ds_TransformsType }
+ds_TransformsType = ds_Transform+
+ds_Transform = element Transform { mixed { ds_TransformType } }
+ds_TransformType =
+  ds_CanonicalizationMethodType
+  | attribute Algorithm { 
+      xsd:anyURI "http://www.w3.org/2000/09/xmldsig#base64" }
+  | (attribute Algorithm {
+       xsd:anyURI "http://www.w3.org/TR/1999/REC-xpath-19991116"},
+    element XPath { xsd:string })
+  | attribute Algorithm {
+       xsd:anyURI "http://www.w3.org/2000/09/xmldsig#enveloped-signature"}
+  | (attribute Algorithm {
+       xsd:anyURI "http://www.w3.org/TR/1999/REC-xslt-19991116"},
+    ds_Xslt)
+ds_Xslt = security_anyElement
+ds_DigestMethod = element DigestMethod { mixed { ds_DigestMethodType } }
+ds_DigestMethodType =
+  attribute Algorithm { 
+      xsd:anyURI "http://www.w3.org/2000/09/xmldsig#sha1" }
+ds_DigestValue = element DigestValue { ds_DigestValueType }
+ds_DigestValueType = xsd:base64Binary
+ds_KeyInfo = element KeyInfo { mixed { ds_KeyInfoType } }
+ds_KeyInfoType =
+  attribute Id { ds_IdType }?, ds_KeyInfoChild+
+ds_KeyInfoChild =
+  ds_KeyName
+  | ds_KeyValue
+  | ds_RetrievalMethod
+  | ds_X509Data
+  | ds_PGPData
+  | ds_SPKIData
+  | ds_MgmtData
+ds_KeyName = element KeyName { xsd:string }
+ds_MgmtData = element MgmtData { xsd:string }
+ds_KeyValue = element KeyValue { mixed { ds_KeyValueType } }
+ds_KeyValueType = ds_DSAKeyValue | ds_RSAKeyValue
+ds_RetrievalMethod = element RetrievalMethod { ds_RetrievalMethodType }
+ds_RetrievalMethodType =
+  attribute URI { xsd:anyURI }?,
+  attribute Type { xsd:anyURI }?,
+  ds_Transforms?
+ds_X509Data =
+  element X509Data { (ds_X509DataChild | ds_X509DataForeignChild?)+ }
+ds_X509DataChild =
+  element X509IssuerSerial { ds_X509IssuerSerialType }
+  | element X509SKI { xsd:base64Binary }
+  | element X509SubjectName { xsd:string }
+  | element X509Certificate { xsd:base64Binary }
+  | element X509CRL { xsd:base64Binary }
+ds_X509DataForeignChild = notAllowed
+ds_X509IssuerSerialType =
+  element X509IssuerName { xsd:string },
+  element X509SerialNumber { xsd:integer }
+ds_PGPData = element PGPData { ds_PGPDataType }
+ds_PGPDataType =
+  (element PGPKeyID { xsd:base64Binary },
+   element PGPKeyPacket { xsd:base64Binary }?,
+   ds_PGPDataForeignChild*)
+  | (element PGPKeyPacket { xsd:base64Binary },
+     ds_PGPDataForeignChild*)
+ds_PGPDataForeignChild = notAllowed
+ds_SPKIData = element SPKIData { SPKIDataType }
+SPKIDataType =
+  (element SPKISexp { xsd:base64Binary } | ds_SPKIDataForeignChild?)+
+ds_SPKIDataForeignChild = notAllowed
+ds_Object = element Object { mixed { ds_ObjectType } }
+ds_ObjectType =
+  attribute Id { ds_IdType }?,
+  attribute MimeType { xsd:string }?,
+  attribute Encoding { xsd:anyURI }?,
+  ds_ObjectChild*
+ds_ObjectChild = ds_anyDsElement
+ds_Manifest = element Manifest { ds_ManifestType }
+ds_ManifestType =
+  attribute Id { ds_IdType }?,
+  ds_Reference+
+ds_SignatureProperties =
+  element SignatureProperties { ds_SignaturePropertiesType }
+ds_SignaturePropertiesType =
+  attribute Id { ds_IdType }?,
+  ds_SignatureProperty+
+ds_SignatureProperty =
+  element SignatureProperty { mixed { ds_SignaturePropertyType } }
+ds_SignaturePropertyType =
+  attribute Target { xsd:anyURI },
+  attribute Id { ds_IdType }?,
+  ds_SignaturePropertyChild*
+ds_SignaturePropertyChild = notAllowed
+ds_HMACOutputLengthType = xsd:integer
+ds_DSAKeyValue = element DSAKeyValue { ds_DSAKeyValueType }
+ds_DSAKeyValueType =
+  (element P { ds_CryptoBinary },
+   element Q { ds_CryptoBinary })?,
+  element G { ds_CryptoBinary }?,
+  element Y { ds_CryptoBinary },
+  element J { ds_CryptoBinary }?,
+  (element Seed { ds_CryptoBinary },
+   element PgenCounter { ds_CryptoBinary })?
+ds_RSAKeyValue = element RSAKeyValue { ds_RSAKeyValueType }
+ds_RSAKeyValueType =
+  element Modulus { ds_CryptoBinary },
+  element Exponent { ds_CryptoBinary }
+ds_IdType = xsd:NCName # xsd:ID does not work
+
+#Definitions for mimicking xsd:any
+ds_anyDsElement =
+    ds_Signature | ds_SignatureValue | ds_SignedInfo
+    | ds_CanonicalizationMethod | ds_SignatureMethod | ds_Reference
+    | ds_Transforms | ds_Transform | ds_DigestMethod | ds_DigestValue
+    | ds_KeyInfo | ds_KeyName | ds_MgmtData | ds_KeyValue
+    | ds_RetrievalMethod | ds_X509Data | ds_PGPData | ds_SPKIData
+    | ds_Object | ds_Manifest | ds_SignatureProperties
+    | ds_SignatureProperty | ds_DSAKeyValue | ds_RSAKeyValue
+
+# List of known canonicalization algorithms
+ds_CanonicalizationAlgorithms =
+    xsd:anyURI "http://www.w3.org/TR/2001/REC-xml-c14n-20010315"
+  | xsd:anyURI "http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"
+  | xsd:anyURI "http://www.w3.org/2006/12/xml-c14n11"
+  | xsd:anyURI "http://www.w3.org/2006/12/xml-c14n11#WithComments"
+
+# List of known signature algorithms
+ds_SignatureAlgorithms =
+    xsd:anyURI "http://www.w3.org/2000/09/xmldsig#hmac-sha1"
+  | xsd:anyURI "http://www.w3.org/2000/09/xmldsig#dsa-sha1"
+  | xsd:anyURI "http://www.w3.org/2000/09/xmldsig#rsa-sha1"
+
+# List of known transformation-but-non-canonicalization algorithms
+ds_TransformAlgorithms =
+    xsd:anyURI "http://www.w3.org/2000/09/xmldsig#base64"
+  | xsd:anyURI "http://www.w3.org/TR/1999/REC-xpath-19991116"
+  | xsd:anyURI "http://www.w3.org/2000/09/xmldsig#enveloped-signature"
+  | xsd:anyURI "http://www.w3.org/TR/1999/REC-xslt-19991116"
+
+# List of known digest algorithms
+ds_DigestAlgorithms =
+    xsd:anyURI "http://www.w3.org/2000/09/xmldsig#sha1" 
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xmldsig-filter2.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xmldsig-filter2.rnc
new file mode 100644
index 0000000..179c342
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xmldsig-filter2.rnc
@@ -0,0 +1,16 @@
+# xmldsig-filter2.rnc (derived from xmldsig-filter2.xsd)
+#
+# Copyright 2011 W3C (Massachusetts Institute of Technology, 
+# Institut National de Recherche en Informatique et en Automatique, 
+# Keio University). All Rights Reserved.  http://www.w3.org/Consortium/Legal/
+# 
+# Use and distribution of all schemas in this directory are permitted under the terms
+# W3C Software Notice and License
+# http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+
+
+default namespace = "http://www.w3.org/2002/06/xmldsig-filter2"
+start =  element XPath {
+     attribute Filter { string "intersect" | string "substract" | string "union" },
+     text
+}
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xmldsig-properties-schema.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xmldsig-properties-schema.rnc
new file mode 100644
index 0000000..e962a45
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xmldsig-properties-schema.rnc
@@ -0,0 +1,34 @@
+# xmldsig-properties-schema.rnc (derived from xmldsig-properties-schema.xsd)
+#
+# Copyright 2011 W3C (Massachusetts Institute of Technology, 
+# Institut National de Recherche en Informatique et en Automatique, 
+# Keio University). All Rights Reserved.  http://www.w3.org/Consortium/Legal/
+# 
+# Use and distribution of all schemas in this directory are permitted under the terms
+# W3C Software Notice and License
+# http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+#
+# This schema allows Profile, Role, Identifier, Created, Expires,
+# and ReplayProject elements as children of SignatureProperty
+# elements.
+
+default namespace = "http://www.w3.org/2009/xmldsig-properties"
+
+ds_SignaturePropertyChild |=
+   dsp_Profile | dsp_Role | dsp_Identifier
+   | dsp_Created | dsp_Expires | dsp_ReplayProtect
+dsp_Profile = element Profile { dsp_ProfileType }
+dsp_ProfileType = attribute URI { xsd:anyURI }?
+dsp_Role = element Role { dsp_RoleType }
+dsp_RoleType = attribute URI { xsd:anyURI }?
+dsp_Identifier = element Identifier { xsd:string }
+dsp_Created = element Created { xsd:dateTime }
+dsp_Expires = element Expires { xsd:dateTime }
+dsp_ReplayProtect = element ReplayProtect { dsp_ReplayProtectType }
+dsp_ReplayProtectType =
+  element timestamp { xsd:dateTime },
+  element nonce { dsp_NonceValueType }
+dsp_NonceValueType =
+  attribute EncodingType { xsd:anyURI }?,
+  xsd:string
+
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xmldsig11-allowAnyForeign.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xmldsig11-allowAnyForeign.rnc
new file mode 100644
index 0000000..ac4e180
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xmldsig11-allowAnyForeign.rnc
@@ -0,0 +1,18 @@
+# xmldsig11-allowAnyForeign.rnc
+#
+# Copyright 2011 W3C (Massachusetts Institute of Technology, 
+# Institut National de Recherche en Informatique et en Automatique, 
+# Keio University). All Rights Reserved.  http://www.w3.org/Consortium/Legal/
+# 
+# Use and distribution of all schemas in this directory are permitted under the terms
+# W3C Software Notice and License
+# http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+#
+# This schema mimicks <any namespace="##other" processContents="lax"/>
+# in xmldsig11-schema.xsd.
+# 
+# Schema authors might want to create a dedicated schema 
+# for a collection of particular algorithms rather than 
+# using this schema.
+
+dsig11_OtherFieldIDType |= dsig11_anyForeignElement
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xmldsig11-schema.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xmldsig11-schema.rnc
new file mode 100644
index 0000000..0d806b7
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xmldsig11-schema.rnc
@@ -0,0 +1,133 @@
+# xmldsig11-schema.rnc
+#
+# Copyright 2011 W3C (Massachusetts Institute of Technology, 
+# Institut National de Recherche en Informatique et en Automatique, 
+# Keio University). All Rights Reserved.  http://www.w3.org/Consortium/Legal/
+# 
+# Use and distribution of all schemas in this directory are permitted under the terms
+# W3C Software Notice and License
+# http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+#
+# This schema complements "xmldsig-core-schema.rnc" by 
+# introducing elements specific to 1.1.  Note that the definition
+# of ds_KeyValueType, ds_KeyInfoChild, and ds_X509DataChild
+# in "xmldsig-core-schema.rnc" has been extended so that 
+# elements specific to 1.1 are allowed.
+
+default namespace = "http://www.w3.org/2009/xmldsig11#"
+
+ds_KeyValueType |= dsig11_ECKeyValue
+ds_KeyInfoChild |= dsig11_DEREncodedKeyValue | dsig11_KeyInfoReference
+ds_X509DataChild |= dsig11_OCSPResponse | dsig11_X509Digest
+ds_CanonicalizationMethodType |=
+  attribute Algorithm { 
+      xsd:anyURI "http://www.w3.org/2006/12/xml-c14n11"
+    | xsd:anyURI "http://www.w3.org/2006/12/xml-c14n11#WithComments"
+  }
+ds_TransformType |=
+    attribute Algorithm { 
+      xsd:anyURI "http://www.w3.org/2002/06/xmldsig-filter2"
+    }, 
+    external "xmldsig-filter2.rnc" +
+ds_DigestMethodType |=
+    attribute Algorithm { 
+      xsd:anyURI "http://www.w3.org/2001/04/xmlenc#sha256"
+    }
+  | attribute Algorithm { 
+      xsd:anyURI "http://www.w3.org/2001/04/xmldsig-more#sha384"
+    }
+  | attribute Algorithm { 
+      xsd:anyURI "http://www.w3.org/2001/04/xmlenc#sha512"
+    }
+ds_SignatureMethodType |=
+    (attribute Algorithm { 
+         xsd:anyURI "http://www.w3.org/2001/04/xmldsig-more#hmac-sha256" 
+       | xsd:anyURI "http://www.w3.org/2001/04/xmldsig-more#hmac-sha384" 
+       | xsd:anyURI "http://www.w3.org/2001/04/xmldsig-more#hmac-sha512" }, 
+     element HMACOutputLength { ds_HMACOutputLengthType }?)
+  | attribute Algorithm { 
+      xsd:anyURI "http://www.w3.org/2009/xmldsig11#dsa-sha256" }
+  | attribute Algorithm { 
+        xsd:anyURI "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"
+      | xsd:anyURI "http://www.w3.org/2001/04/xmldsig-more#rsa-sha384"
+      | xsd:anyURI "http://www.w3.org/2001/04/xmldsig-more#rsa-sha512" }
+  | attribute Algorithm { 
+        xsd:anyURI "http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha1"
+      | xsd:anyURI "http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256"
+      | xsd:anyURI "http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha384"
+      | xsd:anyURI "http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha512" }
+dsig11_ECKeyValue = element ECKeyValue { dsig11_ECKeyValueType }
+dsig11_ECKeyValueType =
+  attribute Id { ds_IdType }?,
+  (element ECParameters { dsig11_ECParametersType }
+   | element NamedCurve { dsig11_NamedCurveType }),
+  element PublicKey { dsig11_ECPointType }
+dsig11_NamedCurveType = attribute URI { xsd:anyURI }
+dsig11_ECPointType = ds_CryptoBinary
+dsig11_ECParametersType =
+  element FieldID { dsig11_FieldIDType },
+  element Curve { dsig11_CurveType },
+  element Base { dsig11_ECPointType },
+  element Order { ds_CryptoBinary },
+  element CoFactor { xsd:integer }?,
+  element ValidationData { dsig11_ECValidationDataType }?
+dsig11_FieldIDType = dsig11_Prime | dsig11_TnB | dsig11_PnB | dsig11_GnB | dsig11_OtherFieldIDType
+dsig11_OtherFieldIDType = notAllowed
+dsig11_CurveType =
+  element A { ds_CryptoBinary },
+  element B { ds_CryptoBinary }
+dsig11_ECValidationDataType =
+  attribute hashAlgorithm { xsd:anyURI },
+  element seed { ds_CryptoBinary }
+dsig11_Prime = element Prime { dsig11_PrimeFieldParamsType }
+dsig11_PrimeFieldParamsType = element P { ds_CryptoBinary }
+dsig11_GnB = element GnB { dsig11_CharTwoFieldParamsType }
+dsig11_CharTwoFieldParamsType =
+  element M { xsd:positiveInteger }
+dsig11_TnB = element TnB { dsig11_TnBFieldParamsType }
+dsig11_TnBFieldParamsType =
+  dsig11_CharTwoFieldParamsType,
+  element K { xsd:positiveInteger }
+dsig11_PnB = element PnB { dsig11_PnBFieldParamsType }
+dsig11_PnBFieldParamsType =
+  dsig11_CharTwoFieldParamsType,
+  element K1 { xsd:positiveInteger },
+  element K2 { xsd:positiveInteger },
+  element K3 { xsd:positiveInteger }
+dsig11_OCSPResponse = element OCSPResponse { xsd:base64Binary }
+dsig11_DEREncodedKeyValue = element DEREncodedKeyValue { dsig11_DEREncodedKeyValueType }
+dsig11_DEREncodedKeyValueType =
+  attribute Id { ds_IdType }?,
+  xsd:base64Binary
+dsig11_KeyInfoReference = element KeyInfoReference { dsig11_KeyInfoReferenceType}
+dsig11_KeyInfoReferenceType =
+  attribute URI { xsd:anyURI },
+  attribute Id { ds_IdType }?
+dsig11_X509Digest = element X509Digest { dsig11_X509DigestType }
+dsig11_X509DigestType =
+  attribute Algorithm {xsd:anyURI},
+  xsd:base64Binary
+
+# List of known algorithms
+ds_CanonicalizationAlgorithms |=
+    xsd:anyURI "http://www.w3.org/2006/12/xml-c14n11"
+  | xsd:anyURI "http://www.w3.org/2006/12/xml-c14n11#WithComments"
+
+ds_SignatureAlgorithms |=
+    xsd:anyURI "http://www.w3.org/2001/04/xmldsig-more#hmac-sha256"
+  | xsd:anyURI "http://www.w3.org/2001/04/xmldsig-more#hmac-sha384"
+  | xsd:anyURI "http://www.w3.org/2001/04/xmldsig-more#hmac-sha512"
+  | xsd:anyURI "http://www.w3.org/2009/xmldsig11#dsa-sha256"
+  | xsd:anyURI "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"
+  | xsd:anyURI "http://www.w3.org/2001/04/xmldsig-more#rsa-sha384"
+  | xsd:anyURI "http://www.w3.org/2001/04/xmldsig-more#rsa-sha512"
+  | xsd:anyURI "http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha1"
+  | xsd:anyURI "http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256"
+  | xsd:anyURI "http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha384"
+  | xsd:anyURI "http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha512"
+ds_DigestAlgorithms |=
+    xsd:anyURI "http://www.w3.org/2001/04/xmlenc#sha256"
+  | xsd:anyURI "http://www.w3.org/2001/04/xmldsig-more#sha384"
+  | xsd:anyURI "http://www.w3.org/2001/04/xmlenc#sha512"
+ds_TransformAlgorithms |= 
+    xsd:anyURI "http://www.w3.org/2002/06/xmldsig-filter2"
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xmlsec-ghc-allowAnyForeign.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xmlsec-ghc-allowAnyForeign.rnc
new file mode 100644
index 0000000..517f410
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xmlsec-ghc-allowAnyForeign.rnc
@@ -0,0 +1,21 @@
+# xmlsec-ghc-allowAnyForeign.rnc
+#
+# Copyright 2011 W3C (Massachusetts Institute of Technology, 
+# Institut National de Recherche en Informatique et en Automatique, 
+# Keio University). All Rights Reserved.  http://www.w3.org/Consortium/Legal/
+# 
+# Use and distribution of all schemas in this directory are permitted under the terms
+# W3C Software Notice and License
+# http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+#
+# This schema mimicks <any namespace="##other" ../> in 
+# xmlsec-ghc-schema.xsd, thus allowing any parameter 
+# and any value for the attribute "Algorithm".
+#
+# Schema authors might want to create a dedicated schema 
+# for a collection of particular algorithms rather than 
+# using this schema.
+
+gh_KeyEncapsulationMethodParams |= 
+    attribute Algorithm {xsd:anyURI - gh_KeyEncapsulationAlgorithms },
+    security_anyElement*
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xmlsec-ghc-schema.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xmlsec-ghc-schema.rnc
new file mode 100644
index 0000000..be6360a
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/security/xmlsec-ghc-schema.rnc
@@ -0,0 +1,42 @@
+# xmlsec-ghc-schema.rnc (derived from xmlsec-ghc-schema.xsd)
+#
+# Copyright 2011 W3C (Massachusetts Institute of Technology, 
+# Institut National de Recherche en Informatique et en Automatique, 
+# Keio University). All Rights Reserved.  http://www.w3.org/Consortium/Legal/
+# 
+# Use and distribution of all schemas in this directory are permitted under the terms
+# W3C Software Notice and License
+# http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+#
+
+default namespace gh = "http://www.w3.org/2009/xmlsec-gh#"
+
+gh_GenericHybridCipherMethod =
+  element GenericHybridCipherMethod {
+    gh_GenericHybridCipherMethodType
+  }
+
+gh_GenericHybridCipherMethodType = 
+  element KeyEncapsulationMethod { gh_KeyEncapsulationMethodType },
+  element DataEncapsulationMethod { xenc_EncryptionMethodType }
+
+gh_KeyEncapsulationMethodType = 
+  xenc11_KeyDerivationMethod,
+  element KeyLen { xsd:positiveInteger } ,
+  gh_KeyEncapsulationMethodParams
+
+gh_KeyEncapsulationMethodParams = 
+    attribute Algorithm {xsd:anyURI "http://www.w3.org/2009/xmlsec-gh#rsaes-kem"} 
+  | attribute Algorithm {xsd:anyURI "http://www.w3.org/2009/xmlsec-gh#ecies-kem" } 
+
+xenc_EncryptionMethodOtherParams |= 
+    attribute Algorithm { xsd:anyURI "http://www.w3.org/2009/xmlsec-gh#generic-hybrid" },
+    gh_GenericHybridCipherMethod    
+
+# List of known algorithms
+xenc_EncryptionAlgorithms |=
+    xsd:anyURI "http://www.w3.org/2009/xmlsec-gh#generic-hybrid"
+gh_KeyEncapsulationAlgorithms =
+    xsd:anyURI "http://www.w3.org/2009/xmlsec-gh#rsaes-kem" 
+  | xsd:anyURI "http://www.w3.org/2009/xmlsec-gh#ecies-kem" 
+
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/svg11/LICENSE b/src/main/resources/com/adobe/epubcheck/schema/30/mod/svg11/LICENSE
new file mode 100644
index 0000000..43d514e
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/svg11/LICENSE
@@ -0,0 +1 @@
+License is shown in the header of svg11-flat.rnc.
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/svg11/README.txt b/src/main/resources/com/adobe/epubcheck/schema/30/mod/svg11/README.txt
new file mode 100644
index 0000000..eb272cd
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/svg11/README.txt
@@ -0,0 +1,8 @@
+$Id: README.txt 3106 2011-08-24 07:56:19Z eb2mmrt $
+$Author: eb2mmrt $
+
+This directory contains a RELAX NG schema, namely svg11-flat.rnc, for
+SVG 1.1 (2nd Edition).  It is automatically created by trang from
+svg11-flat.dtd, available at
+http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-flat.dtd (08-July-2011).
+
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/mod/svg11/svg11-flat.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/mod/svg11/svg11-flat.rnc
new file mode 100644
index 0000000..b8703ec
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/mod/svg11/svg11-flat.rnc
@@ -0,0 +1,4000 @@
+# .......................................................................
+
+# SVG 1.1 DTD ...........................................................
+
+# file: svg11.dtd
+
+# SVG 1.1 DTD
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# 
+# The Scalable Vector Graphics (SVG)
+# Copyright 2001, 2002 World Wide Web Consortium
+#    (Massachusetts Institute of Technology, Institut National de
+#     Recherche en Informatique et en Automatique, Keio University).
+#     All Rights Reserved.
+# 
+# Permission to use, copy, modify and distribute the SVG DTD and its
+# accompanying documentation for any purpose and without fee is hereby
+# granted in perpetuity, provided that the above copyright notice and
+# this paragraph appear in all copies.  The copyright holders make no
+# representation about the suitability of the DTD for any purpose.
+# 
+# It is provided "as is" without expressed or implied warranty.
+# 
+#    Author:   Jun Fujisawa <fujisawa.jun at canon.co.jp>
+#    Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+#
+
+# This is the driver file for version 1.1 of the SVG DTD.
+# 
+# This DTD is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//DTD SVG 1.1//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"
+
+# Use this URI to identify the default namespace:
+# 
+#    "http://www.w3.org/2000/svg"
+# 
+# See the Qualified Names module for information
+# on the use of namespace prefixes in the DTD.
+
+# reserved for future use with document profiles
+
+# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+# Pre-Framework Redeclaration Placeholder .....................
+
+# Document Model Module .......................................
+
+# Attribute Collection Module .................................
+
+# Modular Framework Module ....................................
+
+# .......................................................................
+
+# SVG 1.1 Modular Framework Module ......................................
+
+# file: svg-framework.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ENTITIES SVG 1.1 Modular Framework//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-framework.mod"
+# 
+# .......................................................................
+
+# Modular Framework
+# 
+# This module instantiates the modules needed to support the SVG
+# modularization model, including:
+# 
+#    + Datatypes
+#    + Qualified Name
+#    + Document Model
+#    + Attribute Collection
+
+# .......................................................................
+
+# SVG 1.1 Datatypes Module ..............................................
+
+# file: svg-datatypes.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ENTITIES SVG 1.1 Datatypes//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-datatypes.mod"
+# 
+# .......................................................................
+
+# Datatypes
+# 
+# This module declares common data types for properties and attributes.
+
+# feature specification
+
+default namespace = "http://www.w3.org/2000/svg"
+namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
+namespace xlink = "http://www.w3.org/1999/xlink"
+
+Boolean.datatype = "false" | "true"
+# 'clip-rule' or 'fill-rule' property/attribute value
+ClipFillRule.datatype = "nonzero" | "evenodd" | "inherit"
+# media type, as per [RFC2045]
+ContentType.datatype = string
+# a <coordinate>
+Coordinate.datatype = string
+# a list of <coordinate>s
+Coordinates.datatype = string
+# a <color> value
+Color.datatype = string
+# a <integer>
+Integer.datatype = string
+# a language code, as per [BCP47]
+LanguageCode.datatype = xsd:NMTOKEN
+# comma-separated list of language codes, as per [BCP47]
+LanguageCodes.datatype = string
+# a <length>
+Length.datatype = string
+# a list of <length>s
+Lengths.datatype = string
+# a <number>
+Number.datatype = string
+# a list of <number>s
+Numbers.datatype = string
+# opacity value (e.g., <number>)
+OpacityValue.datatype = string
+# a path data specification
+PathData.datatype = string
+# 'preserveAspectRatio' attribute specification
+PreserveAspectRatioSpec.datatype = string
+# script expression
+Script.datatype = string
+# An SVG color value (RGB plus optional ICC)
+SVGColor.datatype = string
+# arbitrary text string
+Text.datatype = string
+# list of transforms
+TransformList.datatype = string
+# a Uniform Resource Identifier, see [URI]
+URI.datatype = string
+# 'viewBox' attribute specification
+ViewBoxSpec.datatype = string
+# end of svg-datatypes.mod
+
+# .......................................................................
+
+# SVG 1.1 Qualified Name Module .........................................
+
+# file: svg-qname.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ENTITIES SVG 1.1 Qualified Name//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-qname.mod"
+# 
+# .......................................................................
+
+# Qualified Name
+# 
+# This module is contained in two parts, labeled Section 'A' and 'B':
+# 
+#    Section A declares parameter entities to support namespace-
+#    qualified names, namespace declarations, and name prefixing
+#    for SVG and extensions.
+# 
+#    Section B declares parameter entities used to provide
+#    namespace-qualified names for all SVG element types:
+
+# Section A: SVG XML Namespace Framework ::::::::::::::::::::::
+
+# 1. Declare a %SVG.prefixed; conditional section keyword, used
+# to activate namespace prefixing. The default value should
+# inherit '%NS.prefixed;' from the DTD driver, so that unless
+# overridden, the default behaviour follows the overall DTD
+# prefixing scheme.
+
+# 2. Declare a parameter entity (eg., %SVG.xmlns;) containing
+# the URI reference used to identify the SVG namespace:
+
+# 3. Declare parameter entities (eg., %SVG.prefix;) containing
+# the default namespace prefix string(s) to use when prefixing
+# is enabled. This may be overridden in the DTD driver or the
+# internal subset of an document instance. If no default prefix
+# is desired, this may be declared as an empty string.
+
+# 4. Declare parameter entities (eg., %SVG.pfx;) containing the
+# colonized prefix(es) (eg., '%SVG.prefix;:') used when
+# prefixing is active, an empty string when it is not.
+
+# 5. The parameter entity %SVG.xmlns.extra.attrib; may be
+# redeclared to contain any non-SVG namespace declaration
+# attributes for namespaces embedded in SVG. The default
+# is an empty string.
+
+# Declare a parameter entity XLINK.xmlns.attrib containing
+# the XML Namespace declarations for XLink.
+XLINK.xmlns.attrib = empty
+# Declare a parameter entity %NS.decl.attrib; containing
+# all XML Namespace declarations used in the DTD, plus the
+# xmlns declaration for SVG, its form dependent on whether
+# prefixing is active.
+
+# Declare a parameter entity %SVG.xmlns.attrib; containing
+# all XML namespace declaration attributes used by SVG,
+# including a default xmlns attribute when prefixing is
+# inactive.
+SVG.xmlns.attrib = XLINK.xmlns.attrib
+# Section B: SVG Qualified Names ::::::::::::::::::::::::::::::
+
+# 6. This section declares parameter entities used to provide
+# namespace-qualified names for all SVG element types.
+
+# module: svg-structure.mod .........................
+
+# module: svg-conditional.mod .......................
+
+# module: svg-image.mod .............................
+
+# module: svg-style.mod .............................
+
+# module: svg-shape.mod .............................
+
+# module: svg-text.mod ..............................
+
+# module: svg-marker.mod ............................
+
+# module: svg-profile.mod ...........................
+
+# module: svg-gradient.mod ..........................
+
+# module: svg-pattern.mod ...........................
+
+# module: svg-clip.mod ..............................
+
+# module: svg-mask.mod ..............................
+
+# module: svg-filter.mod ............................
+
+# module: svg-cursor.mod ............................
+
+# module: svg-hyperlink.mod .........................
+
+# module: svg-view.mod ..............................
+
+# module: svg-script.mod ............................
+
+# module: svg-animation.mod .........................
+
+# module: svg-font.mod ..............................
+
+# module: svg-extensibility.mod .....................
+
+# end of svg-qname.mod
+
+# instantiate the Document Model declared in the DTD driver
+
+# .......................................................................
+
+# SVG 1.1 Document Model Module .........................................
+
+# file: svg11-model.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ENTITIES SVG 1.1 Document Model//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-model.mod"
+# 
+# .......................................................................
+
+# SVG 1.1 Document Model
+# 
+# This module describes the groupings of elements that make up
+# common content models for SVG elements.
+
+# module: svg-structure.mod .........................
+SVG.Description.extra.class = notAllowed
+SVG.Description.class =
+  desc | title | metadata | SVG.Description.extra.class
+SVG.Use.extra.class = notAllowed
+SVG.Use.class = use | SVG.Use.extra.class
+SVG.Structure.extra.class = notAllowed
+SVG.Structure.class =
+  svg | g | defs | symbol | SVG.Use.class | SVG.Structure.extra.class
+# module: svg-conditional.mod .......................
+SVG.Conditional.extra.class = notAllowed
+SVG.Conditional.class = switch | SVG.Conditional.extra.class
+# module: svg-image.mod .............................
+SVG.Image.extra.class = notAllowed
+SVG.Image.class = image | SVG.Image.extra.class
+# module: svg-style.mod .............................
+SVG.Style.extra.class = notAllowed
+SVG.Style.class = style | SVG.Style.extra.class
+# module: svg-shape.mod .............................
+SVG.Shape.extra.class = notAllowed
+SVG.Shape.class =
+  path
+  | rect
+  | circle
+  | line
+  | ellipse
+  | polyline
+  | polygon
+  | SVG.Shape.extra.class
+# module: svg-text.mod ..............................
+SVG.Text.extra.class = notAllowed
+SVG.Text.class = \text | altGlyphDef | SVG.Text.extra.class
+SVG.TextContent.extra.class = notAllowed
+SVG.TextContent.class =
+  tspan | tref | textPath | altGlyph | SVG.TextContent.extra.class
+# module: svg-marker.mod ............................
+SVG.Marker.extra.class = notAllowed
+SVG.Marker.class = marker | SVG.Marker.extra.class
+# module: svg-profile.mod ...........................
+SVG.ColorProfile.extra.class = notAllowed
+SVG.ColorProfile.class = color-profile | SVG.ColorProfile.extra.class
+# module: svg-gradient.mod ..........................
+SVG.Gradient.extra.class = notAllowed
+SVG.Gradient.class =
+  linearGradient | radialGradient | SVG.Gradient.extra.class
+# module: svg-pattern.mod ...........................
+SVG.Pattern.extra.class = notAllowed
+SVG.Pattern.class = pattern | SVG.Pattern.extra.class
+# module: svg-clip.mod ..............................
+SVG.Clip.extra.class = notAllowed
+SVG.Clip.class = clipPath | SVG.Clip.extra.class
+# module: svg-mask.mod ..............................
+SVG.Mask.extra.class = notAllowed
+SVG.Mask.class = mask | SVG.Mask.extra.class
+# module: svg-filter.mod ............................
+SVG.Filter.extra.class = notAllowed
+SVG.Filter.class = filter | SVG.Filter.extra.class
+SVG.FilterPrimitive.extra.class = notAllowed
+SVG.FilterPrimitive.class =
+  feBlend
+  | feColorMatrix
+  | feComponentTransfer
+  | feComposite
+  | feConvolveMatrix
+  | feDiffuseLighting
+  | feDisplacementMap
+  | feFlood
+  | feGaussianBlur
+  | feImage
+  | feMerge
+  | feMorphology
+  | feOffset
+  | feSpecularLighting
+  | feTile
+  | feTurbulence
+  | SVG.FilterPrimitive.extra.class
+# module: svg-cursor.mod ............................
+SVG.Cursor.extra.class = notAllowed
+SVG.Cursor.class = cursor | SVG.Cursor.extra.class
+# module: svg-hyperlink.mod .........................
+SVG.Hyperlink.extra.class = notAllowed
+SVG.Hyperlink.class = a | SVG.Hyperlink.extra.class
+# module: svg-view.mod ..............................
+SVG.View.extra.class = notAllowed
+SVG.View.class = view | SVG.View.extra.class
+# module: svg-script.mod ............................
+SVG.Script.extra.class = notAllowed
+SVG.Script.class = script | SVG.Script.extra.class
+# module: svg-animation.mod .........................
+SVG.Animation.extra.class = notAllowed
+SVG.Animation.class =
+  animate
+  | set
+  | animateMotion
+  | animateColor
+  | animateTransform
+  | SVG.Animation.extra.class
+# module: svg-font.mod ..............................
+SVG.Font.extra.class = notAllowed
+SVG.Font.class = font | font-face | SVG.Font.extra.class
+# module: svg-extensibility.mod .....................
+SVG.Extensibility.extra.class = notAllowed
+SVG.Extensibility.class = foreignObject | SVG.Extensibility.extra.class
+# end of svg11-model.mod
+
+# instantiate the Attribute Collection declared in the DTD driver
+
+# .......................................................................
+
+# SVG 1.1 Attribute Collection Module ...................................
+
+# file: svg11-attribs.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ENTITIES SVG 1.1 Attribute Collection//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-attribs.mod"
+# 
+# .......................................................................
+
+# SVG 1.1 Attribute Collection
+# 
+# This module defines the set of common attributes that can be present
+# on many SVG elements.
+
+# module: svg-conditional.mod .......................
+ExtensionList.datatype = string
+FeatureList.datatype = string
+SVG.Conditional.extra.attrib = empty
+SVG.Conditional.attrib =
+  attribute requiredFeatures { FeatureList.datatype }?,
+  attribute requiredExtensions { ExtensionList.datatype }?,
+  attribute systemLanguage { LanguageCodes.datatype }?,
+  SVG.Conditional.extra.attrib
+# module: svg-style.mod .............................
+ClassList.datatype = string
+StyleSheet.datatype = string
+SVG.Style.extra.attrib = empty
+SVG.Style.attrib =
+  attribute style { StyleSheet.datatype }?,
+  attribute class { ClassList.datatype }?,
+  SVG.Style.extra.attrib
+# module: svg-text.mod ..............................
+BaselineShiftValue.datatype = string
+FontFamilyValue.datatype = string
+FontSizeValue.datatype = string
+FontSizeAdjustValue.datatype = string
+GlyphOrientationHorizontalValue.datatype = string
+GlyphOrientationVerticalValue.datatype = string
+KerningValue.datatype = string
+SpacingValue.datatype = string
+TextDecorationValue.datatype = string
+SVG.Text.extra.attrib = empty
+SVG.Text.attrib =
+  attribute writing-mode {
+    "lr-tb" | "rl-tb" | "tb-rl" | "lr" | "rl" | "tb" | "inherit"
+  }?,
+  SVG.Text.extra.attrib
+SVG.TextContent.extra.attrib = empty
+SVG.TextContent.attrib =
+  attribute alignment-baseline {
+    "auto"
+    | "baseline"
+    | "before-edge"
+    | "text-before-edge"
+    | "middle"
+    | "central"
+    | "after-edge"
+    | "text-after-edge"
+    | "ideographic"
+    | "alphabetic"
+    | "hanging"
+    | "mathematical"
+    | "inherit"
+  }?,
+  attribute baseline-shift { BaselineShiftValue.datatype }?,
+  attribute direction { "ltr" | "rtl" | "inherit" }?,
+  attribute dominant-baseline {
+    "auto"
+    | "use-script"
+    | "no-change"
+    | "reset-size"
+    | "ideographic"
+    | "alphabetic"
+    | "hanging"
+    | "mathematical"
+    | "central"
+    | "middle"
+    | "text-after-edge"
+    | "text-before-edge"
+    | "inherit"
+  }?,
+  attribute glyph-orientation-horizontal {
+    GlyphOrientationHorizontalValue.datatype
+  }?,
+  attribute glyph-orientation-vertical {
+    GlyphOrientationVerticalValue.datatype
+  }?,
+  attribute kerning { KerningValue.datatype }?,
+  attribute letter-spacing { SpacingValue.datatype }?,
+  attribute text-anchor { "start" | "middle" | "end" | "inherit" }?,
+  attribute text-decoration { TextDecorationValue.datatype }?,
+  attribute unicode-bidi {
+    "normal" | "embed" | "bidi-override" | "inherit"
+  }?,
+  attribute word-spacing { SpacingValue.datatype }?,
+  SVG.TextContent.extra.attrib
+SVG.Font.extra.attrib = empty
+SVG.Font.attrib =
+  attribute font-family { FontFamilyValue.datatype }?,
+  attribute font-size { FontSizeValue.datatype }?,
+  attribute font-size-adjust { FontSizeAdjustValue.datatype }?,
+  attribute font-stretch {
+    "normal"
+    | "wider"
+    | "narrower"
+    | "ultra-condensed"
+    | "extra-condensed"
+    | "condensed"
+    | "semi-condensed"
+    | "semi-expanded"
+    | "expanded"
+    | "extra-expanded"
+    | "ultra-expanded"
+    | "inherit"
+  }?,
+  attribute font-style { "normal" | "italic" | "oblique" | "inherit" }?,
+  attribute font-variant { "normal" | "small-caps" | "inherit" }?,
+  attribute font-weight {
+    "normal"
+    | "bold"
+    | "bolder"
+    | "lighter"
+    | "100"
+    | "200"
+    | "300"
+    | "400"
+    | "500"
+    | "600"
+    | "700"
+    | "800"
+    | "900"
+    | "inherit"
+  }?,
+  SVG.Font.extra.attrib
+# module: svg-marker.mod ............................
+MarkerValue.datatype = string
+SVG.Marker.extra.attrib = empty
+SVG.Marker.attrib =
+  attribute marker-start { MarkerValue.datatype }?,
+  attribute marker-mid { MarkerValue.datatype }?,
+  attribute marker-end { MarkerValue.datatype }?,
+  SVG.Marker.extra.attrib
+# module: svg-profile.mod ...........................
+SVG.ColorProfile.extra.attrib = empty
+SVG.ColorProfile.attrib =
+  attribute color-profile { text }?,
+  SVG.ColorProfile.extra.attrib
+# module: svg-gradient.mod ..........................
+NumberOrPercentage.datatype = string
+SVG.Gradient.extra.attrib = empty
+SVG.Gradient.attrib =
+  attribute stop-color { SVGColor.datatype }?,
+  attribute stop-opacity { OpacityValue.datatype }?,
+  SVG.Gradient.extra.attrib
+# module: svg-clip.mod ..............................
+ClipPathValue.datatype = string
+SVG.Clip.extra.attrib = empty
+SVG.Clip.attrib =
+  attribute clip-path { ClipPathValue.datatype }?,
+  attribute clip-rule { ClipFillRule.datatype }?,
+  SVG.Clip.extra.attrib
+# module: svg-mask.mod ..............................
+MaskValue.datatype = string
+SVG.Mask.extra.attrib = empty
+SVG.Mask.attrib =
+  attribute mask { MaskValue.datatype }?,
+  SVG.Mask.extra.attrib
+# module: svg-filter.mod ............................
+FilterValue.datatype = string
+NumberOptionalNumber.datatype = string
+SVG.Filter.extra.attrib = empty
+SVG.Filter.attrib =
+  attribute filter { FilterValue.datatype }?,
+  SVG.Filter.extra.attrib
+SVG.FilterColor.extra.attrib = empty
+SVG.FilterColor.attrib =
+  attribute color-interpolation-filters {
+    "auto" | "sRGB" | "linearRGB" | "inherit"
+  }?,
+  SVG.FilterColor.extra.attrib
+# module: svg-cursor.mod ............................
+CursorValue.datatype = string
+SVG.Cursor.extra.attrib = empty
+SVG.Cursor.attrib =
+  attribute cursor { CursorValue.datatype }?,
+  SVG.Cursor.extra.attrib
+# end of svg11-attribs.mod
+
+# end of svg-framework.mod
+
+# Post-Framework Redeclaration Placeholder ....................
+
+# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+# Core Attribute Module .......................................
+
+# .......................................................................
+
+# SVG 1.1 Core Attribute Module .........................................
+
+# file: svg-core-attrib.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ENTITIES SVG 1.1 Core Attribute//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-core-attrib.mod"
+# 
+# .......................................................................
+
+# Core Attribute
+# 
+#    id, xml:base, xml:lang, xml:space
+# 
+# This module defines the core set of attributes that can be present on
+# any element.
+SVG.id.attrib = attribute id { xsd:ID }?
+SVG.base.attrib = attribute xml:base { URI.datatype }?
+SVG.lang.attrib = attribute xml:lang { LanguageCode.datatype }?
+SVG.space.attrib = attribute xml:space { "default" | "preserve" }?
+SVG.Core.extra.attrib = empty
+SVG.Core.attrib =
+  SVG.id.attrib,
+  SVG.base.attrib,
+  SVG.lang.attrib,
+  SVG.space.attrib,
+  SVG.Core.extra.attrib
+# end of svg-core-attrib.mod
+
+# Container Attribute Module ..................................
+
+# .......................................................................
+
+# SVG 1.1 Container Attribute Module ....................................
+
+# file: svg-container-attrib.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ENTITIES SVG 1.1 Container Attribute//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-container-attrib.mod"
+# 
+# .......................................................................
+
+# Container Attribute
+# 
+#    enable-background
+# 
+# This module defines the Container attribute set.
+
+# 'enable-background' property/attribute value (e.g., 'new', 'accumulate')
+EnableBackgroundValue.datatype = string
+SVG.enable-background.attrib =
+  attribute enable-background { EnableBackgroundValue.datatype }?
+SVG.Container.extra.attrib = empty
+SVG.Container.attrib =
+  SVG.enable-background.attrib, SVG.Container.extra.attrib
+# end of svg-container-attrib.mod
+
+# Viewport Attribute Module ...................................
+
+# .......................................................................
+
+# SVG 1.1 Viewport Attribute Module .....................................
+
+# file: svg-viewport-attrib.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ENTITIES SVG 1.1 Viewport Attribute//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-viewport-attrib.mod"
+# 
+# .......................................................................
+
+# Viewport Attribute
+# 
+#    clip, overflow
+# 
+# This module defines the Viewport attribute set.
+
+# 'clip' property/attribute value (e.g., 'auto', rect(...))
+ClipValue.datatype = string
+SVG.clip.attrib = attribute clip { ClipValue.datatype }?
+SVG.overflow.attrib =
+  attribute overflow {
+    "visible" | "hidden" | "scroll" | "auto" | "inherit"
+  }?
+SVG.Viewport.extra.attrib = empty
+SVG.Viewport.attrib =
+  SVG.clip.attrib, SVG.overflow.attrib, SVG.Viewport.extra.attrib
+# end of svg-viewport-attrib.mod
+
+# Paint Attribute Module ......................................
+
+# .......................................................................
+
+# SVG 1.1 Paint Attribute Module ........................................
+
+# file: svg-paint-attrib.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ENTITIES SVG 1.1 Paint Attribute//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-paint-attrib.mod"
+# 
+# .......................................................................
+
+# Paint Attribute
+# 
+#    fill, fill-rule, stroke, stroke-dasharray, stroke-dashoffset,
+#    stroke-linecap, stroke-linejoin, stroke-miterlimit, stroke-width, color,
+#    color-interpolation, color-rendering
+# 
+# This module defines the Paint and Color attribute sets.
+
+# a 'fill' or 'stroke' property/attribute value: <paint>
+Paint.datatype = string
+# 'stroke-dasharray' property/attribute value (e.g., 'none', list of <number>s)
+StrokeDashArrayValue.datatype = string
+# 'stroke-dashoffset' property/attribute value (e.g., 'none', <legnth>)
+StrokeDashOffsetValue.datatype = string
+# 'stroke-miterlimit' property/attribute value (e.g., <number>)
+StrokeMiterLimitValue.datatype = string
+# 'stroke-width' property/attribute value (e.g., <length>)
+StrokeWidthValue.datatype = string
+SVG.fill.attrib = attribute fill { Paint.datatype }?
+SVG.fill-rule.attrib = attribute fill-rule { ClipFillRule.datatype }?
+SVG.stroke.attrib = attribute stroke { Paint.datatype }?
+SVG.stroke-dasharray.attrib =
+  attribute stroke-dasharray { StrokeDashArrayValue.datatype }?
+SVG.stroke-dashoffset.attrib =
+  attribute stroke-dashoffset { StrokeDashOffsetValue.datatype }?
+SVG.stroke-linecap.attrib =
+  attribute stroke-linecap { "butt" | "round" | "square" | "inherit" }?
+SVG.stroke-linejoin.attrib =
+  attribute stroke-linejoin { "miter" | "round" | "bevel" | "inherit" }?
+SVG.stroke-miterlimit.attrib =
+  attribute stroke-miterlimit { StrokeMiterLimitValue.datatype }?
+SVG.stroke-width.attrib =
+  attribute stroke-width { StrokeWidthValue.datatype }?
+SVG.Paint.extra.attrib = empty
+SVG.Paint.attrib =
+  SVG.fill.attrib,
+  SVG.fill-rule.attrib,
+  SVG.stroke.attrib,
+  SVG.stroke-dasharray.attrib,
+  SVG.stroke-dashoffset.attrib,
+  SVG.stroke-linecap.attrib,
+  SVG.stroke-linejoin.attrib,
+  SVG.stroke-miterlimit.attrib,
+  SVG.stroke-width.attrib,
+  SVG.Paint.extra.attrib
+SVG.color.attrib = attribute color { Color.datatype }?
+SVG.color-interpolation.attrib =
+  attribute color-interpolation {
+    "auto" | "sRGB" | "linearRGB" | "inherit"
+  }?
+SVG.color-rendering.attrib =
+  attribute color-rendering {
+    "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
+  }?
+SVG.Color.extra.attrib = empty
+SVG.Color.attrib =
+  SVG.color.attrib,
+  SVG.color-interpolation.attrib,
+  SVG.color-rendering.attrib,
+  SVG.Color.extra.attrib
+# end of svg-paint-attrib.mod
+
+# Paint Opacity Attribute Module ..............................
+
+# .......................................................................
+
+# SVG 1.1 Paint Opacity Attribute Module ................................
+
+# file: svg-opacity-attrib.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ENTITIES SVG 1.1 Paint Opacity Attribute//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-opacity-attrib.mod"
+# 
+# .......................................................................
+
+# Paint Opacity Attribute
+# 
+#    opacity, fill-opacity, stroke-opacity
+# 
+# This module defines the Opacity attribute set.
+SVG.opacity.attrib = attribute opacity { OpacityValue.datatype }?
+SVG.fill-opacity.attrib =
+  attribute fill-opacity { OpacityValue.datatype }?
+SVG.stroke-opacity.attrib =
+  attribute stroke-opacity { OpacityValue.datatype }?
+SVG.Opacity.extra.attrib = empty
+SVG.Opacity.attrib =
+  SVG.opacity.attrib,
+  SVG.fill-opacity.attrib,
+  SVG.stroke-opacity.attrib,
+  SVG.Opacity.extra.attrib
+# end of svg-opacity-attrib.mod
+
+# Graphics Attribute Module ...................................
+
+# .......................................................................
+
+# SVG 1.1 Graphics Attribute Module .....................................
+
+# file: svg-graphics-attrib.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ENTITIES SVG 1.1 Graphics Attribute//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-graphics-attrib.mod"
+# 
+# .......................................................................
+
+# Graphics Attribute
+# 
+#    display, image-rendering, pointer-events, shape-rendering,
+#    text-rendering, visibility
+# 
+# This module defines the Graphics attribute set.
+SVG.display.attrib =
+  attribute display {
+    "inline"
+    | "block"
+    | "list-item"
+    | "run-in"
+    | "compact"
+    | "marker"
+    | "table"
+    | "inline-table"
+    | "table-row-group"
+    | "table-header-group"
+    | "table-footer-group"
+    | "table-row"
+    | "table-column-group"
+    | "table-column"
+    | "table-cell"
+    | "table-caption"
+    | "none"
+    | "inherit"
+  }?
+SVG.image-rendering.attrib =
+  attribute image-rendering {
+    "auto" | "optimizeSpeed" | "optimizeQuality" | "inherit"
+  }?
+SVG.pointer-events.attrib =
+  attribute pointer-events {
+    "visiblePainted"
+    | "visibleFill"
+    | "visibleStroke"
+    | "visible"
+    | "painted"
+    | "fill"
+    | "stroke"
+    | "all"
+    | "none"
+    | "inherit"
+  }?
+SVG.shape-rendering.attrib =
+  attribute shape-rendering {
+    "auto"
+    | "optimizeSpeed"
+    | "crispEdges"
+    | "geometricPrecision"
+    | "inherit"
+  }?
+SVG.text-rendering.attrib =
+  attribute text-rendering {
+    "auto"
+    | "optimizeSpeed"
+    | "optimizeLegibility"
+    | "geometricPrecision"
+    | "inherit"
+  }?
+SVG.visibility.attrib =
+  attribute visibility { "visible" | "hidden" | "inherit" }?
+SVG.Graphics.extra.attrib = empty
+SVG.Graphics.attrib =
+  SVG.display.attrib,
+  SVG.image-rendering.attrib,
+  SVG.pointer-events.attrib,
+  SVG.shape-rendering.attrib,
+  SVG.text-rendering.attrib,
+  SVG.visibility.attrib,
+  SVG.Graphics.extra.attrib
+# end of svg-graphics-attrib.mod
+
+# Document Events Attribute Module ............................
+
+# .......................................................................
+
+# SVG 1.1 Document Events Attribute Module ..............................
+
+# file: svg-docevents-attrib.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ENTITIES SVG 1.1 Document Events Attribute//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-docevents-attrib.mod"
+# 
+# .......................................................................
+
+# Document Events Attribute
+# 
+#    onunload, onabort, onerror, onresize, onscroll, onzoom
+# 
+# This module defines the DocumentEvents attribute set.
+SVG.onunload.attrib = attribute onunload { Script.datatype }?
+SVG.onabort.attrib = attribute onabort { Script.datatype }?
+SVG.onerror.attrib = attribute onerror { Script.datatype }?
+SVG.onresize.attrib = attribute onresize { Script.datatype }?
+SVG.onscroll.attrib = attribute onscroll { Script.datatype }?
+SVG.onzoom.attrib = attribute onzoom { Script.datatype }?
+SVG.DocumentEvents.extra.attrib = empty
+SVG.DocumentEvents.attrib =
+  SVG.onunload.attrib,
+  SVG.onabort.attrib,
+  SVG.onerror.attrib,
+  SVG.onresize.attrib,
+  SVG.onscroll.attrib,
+  SVG.onzoom.attrib,
+  SVG.DocumentEvents.extra.attrib
+# end of svg-docevents-attrib.mod
+
+# Graphical Element Events Attribute Module ...................
+
+# .......................................................................
+
+# SVG 1.1 Graphical Element Events Attribute Module .....................
+
+# file: svg-graphevents-attrib.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ENTITIES SVG 1.1 Graphical Element Events Attribute//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-graphevents-attrib.mod"
+# 
+# .......................................................................
+
+# Graphical Element Events Attribute
+# 
+#    onfocusin, onfocusout, onactivate, onclick, onmousedown, onmouseup,
+#    onmouseover, onmousemove, onmouseout, onload
+# 
+# This module defines the GraphicalEvents attribute set.
+SVG.onfocusin.attrib = attribute onfocusin { Script.datatype }?
+SVG.onfocusout.attrib = attribute onfocusout { Script.datatype }?
+SVG.onactivate.attrib = attribute onactivate { Script.datatype }?
+SVG.onclick.attrib = attribute onclick { Script.datatype }?
+SVG.onmousedown.attrib = attribute onmousedown { Script.datatype }?
+SVG.onmouseup.attrib = attribute onmouseup { Script.datatype }?
+SVG.onmouseover.attrib = attribute onmouseover { Script.datatype }?
+SVG.onmousemove.attrib = attribute onmousemove { Script.datatype }?
+SVG.onmouseout.attrib = attribute onmouseout { Script.datatype }?
+SVG.onload.attrib = attribute onload { Script.datatype }?
+SVG.GraphicalEvents.extra.attrib = empty
+SVG.GraphicalEvents.attrib =
+  SVG.onfocusin.attrib,
+  SVG.onfocusout.attrib,
+  SVG.onactivate.attrib,
+  SVG.onclick.attrib,
+  SVG.onmousedown.attrib,
+  SVG.onmouseup.attrib,
+  SVG.onmouseover.attrib,
+  SVG.onmousemove.attrib,
+  SVG.onmouseout.attrib,
+  SVG.onload.attrib,
+  SVG.GraphicalEvents.extra.attrib
+# end of svg-graphevents-attrib.mod
+
+# Animation Events Attribute Module ...........................
+
+# .......................................................................
+
+# SVG 1.1 Animation Events Attribute Module .............................
+
+# file: svg-animevents-attrib.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ENTITIES SVG 1.1 Animation Events Attribute//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-animevents-attrib.mod"
+# 
+# .......................................................................
+
+# Animation Events Attribute
+# 
+#    onbegin, onend, onrepeat, onload
+# 
+# This module defines the AnimationEvents attribute set.
+SVG.onbegin.attrib = attribute onbegin { Script.datatype }?
+SVG.onend.attrib = attribute onend { Script.datatype }?
+SVG.onrepeat.attrib = attribute onrepeat { Script.datatype }?
+SVG.AnimationEvents.extra.attrib = empty
+SVG.AnimationEvents.attrib =
+  SVG.onbegin.attrib,
+  SVG.onend.attrib,
+  SVG.onrepeat.attrib,
+  SVG.onload.attrib,
+  SVG.AnimationEvents.extra.attrib
+# end of svg-animevents-attrib.mod
+
+# XLink Attribute Module ......................................
+
+# .......................................................................
+
+# SVG 1.1 XLink Attribute Module ........................................
+
+# file: svg-xlink-attrib.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ENTITIES SVG 1.1 XLink Attribute//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-xlink-attrib.mod"
+# 
+# .......................................................................
+
+# XLink Attribute
+# 
+#   type, href, role, arcrole, title, show, actuate
+# 
+# This module defines the XLink, XLinkRequired, XLinkEmbed, and
+# XLinkReplace attribute set.
+SVG.XLink.extra.attrib = empty
+SVG.XLink.attrib =
+  XLINK.xmlns.attrib,
+  [ a:defaultValue = "simple" ] attribute xlink:type { "simple" }?,
+  attribute xlink:href { URI.datatype }?,
+  attribute xlink:role { URI.datatype }?,
+  attribute xlink:arcrole { URI.datatype }?,
+  attribute xlink:title { text }?,
+  [ a:defaultValue = "other" ] attribute xlink:show { "other" }?,
+  [ a:defaultValue = "onLoad" ] attribute xlink:actuate { "onLoad" }?,
+  SVG.XLink.extra.attrib
+SVG.XLinkRequired.extra.attrib = empty
+SVG.XLinkRequired.attrib =
+  XLINK.xmlns.attrib,
+  [ a:defaultValue = "simple" ] attribute xlink:type { "simple" }?,
+  attribute xlink:href { URI.datatype },
+  attribute xlink:role { URI.datatype }?,
+  attribute xlink:arcrole { URI.datatype }?,
+  attribute xlink:title { text }?,
+  [ a:defaultValue = "other" ] attribute xlink:show { "other" }?,
+  [ a:defaultValue = "onLoad" ] attribute xlink:actuate { "onLoad" }?,
+  SVG.XLinkRequired.extra.attrib
+SVG.XLinkEmbed.extra.attrib = empty
+SVG.XLinkEmbed.attrib =
+  XLINK.xmlns.attrib,
+  [ a:defaultValue = "simple" ] attribute xlink:type { "simple" }?,
+  attribute xlink:href { URI.datatype },
+  attribute xlink:role { URI.datatype }?,
+  attribute xlink:arcrole { URI.datatype }?,
+  attribute xlink:title { text }?,
+  [ a:defaultValue = "embed" ] attribute xlink:show { "embed" }?,
+  [ a:defaultValue = "onLoad" ] attribute xlink:actuate { "onLoad" }?,
+  SVG.XLinkEmbed.extra.attrib
+SVG.XLinkReplace.extra.attrib = empty
+SVG.XLinkReplace.attrib =
+  XLINK.xmlns.attrib,
+  [ a:defaultValue = "simple" ] attribute xlink:type { "simple" }?,
+  attribute xlink:href { URI.datatype },
+  attribute xlink:role { URI.datatype }?,
+  attribute xlink:arcrole { URI.datatype }?,
+  attribute xlink:title { text }?,
+  [ a:defaultValue = "replace" ]
+  attribute xlink:show { "new" | "replace" }?,
+  [ a:defaultValue = "onRequest" ]
+  attribute xlink:actuate { "onRequest" }?,
+  SVG.XLinkReplace.extra.attrib
+# end of svg-xlink-attrib.mod
+
+# External Resources Attribute Module .........................
+
+# .......................................................................
+
+# SVG 1.1 External Resources Attribute Module ...........................
+
+# file: svg-extresources-attrib.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ENTITIES SVG 1.1 External Resources Attribute//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-extresources-attrib.mod"
+# 
+# .......................................................................
+
+# External Resources Attribute
+# 
+#    externalResourcesRequired
+# 
+# This module defines the External attribute set.
+SVG.externalResourcesRequired.attrib =
+  attribute externalResourcesRequired { Boolean.datatype }?
+SVG.External.extra.attrib = empty
+SVG.External.attrib =
+  SVG.externalResourcesRequired.attrib, SVG.External.extra.attrib
+# end of svg-extresources-attrib.mod
+
+# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+# Structure Module ............................................
+
+# .......................................................................
+
+# SVG 1.1 Structure Module ..............................................
+
+# file: svg-structure.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Structure//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-structure.mod"
+# 
+# .......................................................................
+
+# Structure
+# 
+#    svg, g, defs, desc, title, metadata, symbol, use
+# 
+# This module declares the major structural elements and their attributes.
+
+# Qualified Names (Default) .........................
+
+# Attribute Collections (Default) ...................
+
+# SVG.Description.class .............................
+
+# SVG.Use.class .....................................
+
+# SVG.Structure.class ...............................
+
+# SVG.Presentation.attrib ...........................
+SVG.Presentation.extra.attrib = empty
+SVG.Presentation.attrib =
+  SVG.Container.attrib,
+  SVG.Viewport.attrib,
+  SVG.Text.attrib,
+  SVG.TextContent.attrib,
+  SVG.Font.attrib,
+  SVG.Paint.attrib,
+  SVG.Color.attrib,
+  SVG.Opacity.attrib,
+  SVG.Graphics.attrib,
+  SVG.Marker.attrib,
+  SVG.ColorProfile.attrib,
+  SVG.Gradient.attrib,
+  SVG.Clip.attrib,
+  SVG.Mask.attrib,
+  SVG.Filter.attrib,
+  SVG.FilterColor.attrib,
+  SVG.Cursor.attrib,
+  attribute flood-color { SVGColor.datatype }?,
+  attribute flood-opacity { OpacityValue.datatype }?,
+  attribute lighting-color { SVGColor.datatype }?,
+  SVG.Presentation.extra.attrib
+# svg: SVG Document Element .........................
+SVG.svg.extra.content = notAllowed
+SVG.svg.content =
+  (SVG.Description.class
+   | SVG.Animation.class
+   | SVG.Structure.class
+   | SVG.Conditional.class
+   | SVG.Image.class
+   | SVG.Style.class
+   | SVG.Shape.class
+   | SVG.Text.class
+   | SVG.Marker.class
+   | SVG.ColorProfile.class
+   | SVG.Gradient.class
+   | SVG.Pattern.class
+   | SVG.Clip.class
+   | SVG.Mask.class
+   | SVG.Filter.class
+   | SVG.Cursor.class
+   | SVG.Hyperlink.class
+   | SVG.View.class
+   | SVG.Script.class
+   | SVG.Font.class
+   | SVG.Extensibility.class
+   | SVG.svg.extra.content)*
+svg =
+  element svg {
+    SVG.xmlns.attrib,
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.DocumentEvents.attrib,
+    SVG.GraphicalEvents.attrib,
+    SVG.External.attrib,
+    attribute x { Coordinate.datatype }?,
+    attribute y { Coordinate.datatype }?,
+    attribute width { Length.datatype }?,
+    attribute height { Length.datatype }?,
+    attribute viewBox { ViewBoxSpec.datatype }?,
+    [ a:defaultValue = "xMidYMid meet" ]
+    attribute preserveAspectRatio { PreserveAspectRatioSpec.datatype }?,
+    [ a:defaultValue = "magnify" ]
+    attribute zoomAndPan { "disable" | "magnify" }?,
+    [ a:defaultValue = "1.1" ] attribute version { string "1.1" }?,
+    attribute baseProfile { Text.datatype }?,
+    [ a:defaultValue = "application/ecmascript" ]
+    attribute contentScriptType { ContentType.datatype }?,
+    [ a:defaultValue = "text/css" ]
+    attribute contentStyleType { ContentType.datatype }?,
+    SVG.svg.content
+  }
+# end of SVG.svg.element
+
+# end of SVG.svg.attlist
+
+# g: Group Element ..................................
+SVG.g.extra.content = notAllowed
+SVG.g.content =
+  (SVG.Description.class
+   | SVG.Animation.class
+   | SVG.Structure.class
+   | SVG.Conditional.class
+   | SVG.Image.class
+   | SVG.Style.class
+   | SVG.Shape.class
+   | SVG.Text.class
+   | SVG.Marker.class
+   | SVG.ColorProfile.class
+   | SVG.Gradient.class
+   | SVG.Pattern.class
+   | SVG.Clip.class
+   | SVG.Mask.class
+   | SVG.Filter.class
+   | SVG.Cursor.class
+   | SVG.Hyperlink.class
+   | SVG.View.class
+   | SVG.Script.class
+   | SVG.Font.class
+   | SVG.Extensibility.class
+   | SVG.g.extra.content)*
+g =
+  element g {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.GraphicalEvents.attrib,
+    SVG.External.attrib,
+    attribute transform { TransformList.datatype }?,
+    SVG.g.content
+  }
+# end of SVG.g.element
+
+# end of SVG.g.attlist
+
+# defs: Definisions Element .........................
+SVG.defs.extra.content = notAllowed
+SVG.defs.content =
+  (SVG.Description.class
+   | SVG.Animation.class
+   | SVG.Structure.class
+   | SVG.Conditional.class
+   | SVG.Image.class
+   | SVG.Style.class
+   | SVG.Shape.class
+   | SVG.Text.class
+   | SVG.Marker.class
+   | SVG.ColorProfile.class
+   | SVG.Gradient.class
+   | SVG.Pattern.class
+   | SVG.Clip.class
+   | SVG.Mask.class
+   | SVG.Filter.class
+   | SVG.Cursor.class
+   | SVG.Hyperlink.class
+   | SVG.View.class
+   | SVG.Script.class
+   | SVG.Font.class
+   | SVG.Extensibility.class
+   | SVG.defs.extra.content)*
+defs =
+  element defs {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.GraphicalEvents.attrib,
+    SVG.External.attrib,
+    attribute transform { TransformList.datatype }?,
+    SVG.defs.content
+  }
+# end of SVG.defs.element
+
+# end of SVG.defs.attlist
+
+# desc: Description Element .........................
+SVG.desc.extra.content = notAllowed
+SVG.desc.content = (text | SVG.desc.extra.content)*
+desc =
+  element desc { SVG.Core.attrib, SVG.Style.attrib, SVG.desc.content }
+# end of SVG.desc.element
+
+# end of SVG.desc.attlist
+
+# title: Title Element ..............................
+SVG.title.extra.content = notAllowed
+SVG.title.content = (text | SVG.title.extra.content)*
+title =
+  element title { SVG.Core.attrib, SVG.Style.attrib, SVG.title.content }
+# end of SVG.title.element
+
+# end of SVG.title.attlist
+
+# metadata: Metadata Element ........................
+SVG.metadata.extra.content = notAllowed
+SVG.metadata.content = (text | SVG.metadata.extra.content)*
+metadata = element metadata { SVG.Core.attrib, SVG.metadata.content }
+# end of SVG.metadata.element
+
+# end of SVG.metadata.attlist
+
+# symbol: Symbol Element ............................
+SVG.symbol.extra.content = notAllowed
+SVG.symbol.content =
+  (SVG.Description.class
+   | SVG.Animation.class
+   | SVG.Structure.class
+   | SVG.Conditional.class
+   | SVG.Image.class
+   | SVG.Style.class
+   | SVG.Shape.class
+   | SVG.Text.class
+   | SVG.Marker.class
+   | SVG.ColorProfile.class
+   | SVG.Gradient.class
+   | SVG.Pattern.class
+   | SVG.Clip.class
+   | SVG.Mask.class
+   | SVG.Filter.class
+   | SVG.Cursor.class
+   | SVG.Hyperlink.class
+   | SVG.View.class
+   | SVG.Script.class
+   | SVG.Font.class
+   | SVG.Extensibility.class
+   | SVG.symbol.extra.content)*
+symbol =
+  element symbol {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.GraphicalEvents.attrib,
+    SVG.External.attrib,
+    attribute viewBox { ViewBoxSpec.datatype }?,
+    [ a:defaultValue = "xMidYMid meet" ]
+    attribute preserveAspectRatio { PreserveAspectRatioSpec.datatype }?,
+    SVG.symbol.content
+  }
+# end of SVG.symbol.element
+
+# end of SVG.symbol.attlist
+
+# use: Use Element ..................................
+SVG.use.extra.content = notAllowed
+SVG.use.content =
+  (SVG.Description.class | SVG.Animation.class | SVG.use.extra.content)*
+use =
+  element use {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.GraphicalEvents.attrib,
+    SVG.XLinkEmbed.attrib,
+    SVG.External.attrib,
+    attribute x { Coordinate.datatype }?,
+    attribute y { Coordinate.datatype }?,
+    attribute width { Length.datatype }?,
+    attribute height { Length.datatype }?,
+    attribute transform { TransformList.datatype }?,
+    SVG.use.content
+  }
+# end of SVG.use.element
+
+# end of SVG.use.attlist
+
+# end of svg-structure.mod
+
+# Conditional Processing Module ...............................
+
+# .......................................................................
+
+# SVG 1.1 Conditional Processing Module .................................
+
+# file: svg-conditional.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Conditional Processing//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-conditional.mod"
+# 
+# .......................................................................
+
+# Conditional Processing
+# 
+#    switch
+# 
+# This module declares markup to provide support for conditional processing.
+
+# extension list specification
+
+# feature list specification
+
+# Qualified Names (Default) .........................
+
+# Attribute Collections (Default) ...................
+
+# SVG.Conditional.class .............................
+
+# SVG.Conditional.attrib ............................
+
+# SVG.Presentation.attrib ...........................
+
+# switch: Switch Element ............................
+SVG.switch.extra.content = notAllowed
+SVG.switch.content =
+  (SVG.Description.class
+   | svg
+   | g
+   | use
+   | \text
+   | SVG.Animation.class
+   | SVG.Conditional.class
+   | SVG.Image.class
+   | SVG.Shape.class
+   | SVG.Hyperlink.class
+   | SVG.Extensibility.class
+   | SVG.switch.extra.content)*
+switch =
+  element switch {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.GraphicalEvents.attrib,
+    SVG.External.attrib,
+    attribute transform { TransformList.datatype }?,
+    SVG.switch.content
+  }
+# end of SVG.switch.element
+
+# end of SVG.switch.attlist
+
+# end of svg-conditional.mod
+
+# Image Module ................................................
+
+# .......................................................................
+
+# SVG 1.1 Image Module ..................................................
+
+# file: svg-image.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Image//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-image.mod"
+# 
+# .......................................................................
+
+# Image
+# 
+#    image
+# 
+# This module declares markup to provide support for image.
+
+# Qualified Names (Default) .........................
+
+# Attribute Collections (Default) ...................
+
+# SVG.Image.class ...................................
+
+# image: Image Element ..............................
+SVG.image.extra.content = notAllowed
+SVG.image.content =
+  (SVG.Description.class
+   | SVG.Animation.class
+   | SVG.image.extra.content)*
+image =
+  element image {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.GraphicalEvents.attrib,
+    SVG.XLinkEmbed.attrib,
+    SVG.External.attrib,
+    attribute x { Coordinate.datatype }?,
+    attribute y { Coordinate.datatype }?,
+    attribute width { Length.datatype },
+    attribute height { Length.datatype },
+    [ a:defaultValue = "xMidYMid meet" ]
+    attribute preserveAspectRatio { PreserveAspectRatioSpec.datatype }?,
+    attribute transform { TransformList.datatype }?,
+    SVG.image.content
+  }
+# end of SVG.image.element
+
+# end of SVG.image.attlist
+
+# end of svg-image.mod
+
+# Style Module ................................................
+
+# .......................................................................
+
+# SVG 1.1 Style Module ..................................................
+
+# file: svg-style.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Style//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-style.mod"
+# 
+# .......................................................................
+
+# Style
+# 
+#    style
+# 
+# This module declares markup to provide support for stylesheet.
+
+# list of classes
+
+# comma-separated list of media descriptors.
+MediaDesc.datatype = string
+# style sheet data
+
+# Qualified Names (Default) .........................
+
+# Attribute Collections (Default) ...................
+
+# SVG.Style.class ...................................
+
+# SVG.Style.attrib ..................................
+
+# style: Style Element ..............................
+SVG.style.extra.content = notAllowed
+SVG.style.content = (text | SVG.style.extra.content)*
+style =
+  element style {
+    [ a:defaultValue = "preserve" ] attribute xml:space { "preserve" }?,
+    SVG.id.attrib,
+    SVG.base.attrib,
+    SVG.lang.attrib,
+    SVG.Core.extra.attrib,
+    attribute type { ContentType.datatype },
+    attribute media { MediaDesc.datatype }?,
+    attribute title { Text.datatype }?,
+    SVG.style.content
+  }
+# end of SVG.style.element
+
+# end of SVG.style.attlist
+
+# end of svg-style.mod
+
+# Shape Module ................................................
+
+# .......................................................................
+
+# SVG 1.1 Shape Module ..................................................
+
+# file: svg-shape.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Shape//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-shape.mod"
+# 
+# .......................................................................
+
+# Shape
+# 
+#    path, rect, circle, line, ellipse, polyline, polygon
+# 
+# This module declares markup to provide support for graphical shapes.
+
+# a list of points
+Points.datatype = string
+# Qualified Names (Default) .........................
+
+# Attribute Collections (Default) ...................
+
+# SVG.Shape.class ...................................
+
+# path: Path Element ................................
+SVG.path.extra.content = notAllowed
+SVG.path.content =
+  (SVG.Description.class
+   | SVG.Animation.class
+   | SVG.path.extra.content)*
+path =
+  element path {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.GraphicalEvents.attrib,
+    SVG.External.attrib,
+    attribute d { PathData.datatype },
+    attribute pathLength { Number.datatype }?,
+    attribute transform { TransformList.datatype }?,
+    SVG.path.content
+  }
+# end of SVG.path.element
+
+# end of SVG.path.attlist
+
+# rect: Rectangle Element ...........................
+SVG.rect.extra.content = notAllowed
+SVG.rect.content =
+  (SVG.Description.class
+   | SVG.Animation.class
+   | SVG.rect.extra.content)*
+rect =
+  element rect {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.GraphicalEvents.attrib,
+    SVG.External.attrib,
+    attribute x { Coordinate.datatype }?,
+    attribute y { Coordinate.datatype }?,
+    attribute width { Length.datatype },
+    attribute height { Length.datatype },
+    attribute rx { Length.datatype }?,
+    attribute ry { Length.datatype }?,
+    attribute transform { TransformList.datatype }?,
+    SVG.rect.content
+  }
+# end of SVG.rect.element
+
+# end of SVG.rect.attlist
+
+# circle: Circle Element ............................
+SVG.circle.extra.content = notAllowed
+SVG.circle.content =
+  (SVG.Description.class
+   | SVG.Animation.class
+   | SVG.circle.extra.content)*
+circle =
+  element circle {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.GraphicalEvents.attrib,
+    SVG.External.attrib,
+    attribute cx { Coordinate.datatype }?,
+    attribute cy { Coordinate.datatype }?,
+    attribute r { Length.datatype },
+    attribute transform { TransformList.datatype }?,
+    SVG.circle.content
+  }
+# end of SVG.circle.element
+
+# end of SVG.circle.attlist
+
+# line: Line Element ................................
+SVG.line.extra.content = notAllowed
+SVG.line.content =
+  (SVG.Description.class
+   | SVG.Animation.class
+   | SVG.line.extra.content)*
+line =
+  element line {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.GraphicalEvents.attrib,
+    SVG.External.attrib,
+    attribute x1 { Coordinate.datatype }?,
+    attribute y1 { Coordinate.datatype }?,
+    attribute x2 { Coordinate.datatype }?,
+    attribute y2 { Coordinate.datatype }?,
+    attribute transform { TransformList.datatype }?,
+    SVG.line.content
+  }
+# end of SVG.line.element
+
+# end of SVG.line.attlist
+
+# ellipse: Ellipse Element ..........................
+SVG.ellipse.extra.content = notAllowed
+SVG.ellipse.content =
+  (SVG.Description.class
+   | SVG.Animation.class
+   | SVG.ellipse.extra.content)*
+ellipse =
+  element ellipse {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.GraphicalEvents.attrib,
+    SVG.External.attrib,
+    attribute cx { Coordinate.datatype }?,
+    attribute cy { Coordinate.datatype }?,
+    attribute rx { Length.datatype },
+    attribute ry { Length.datatype },
+    attribute transform { TransformList.datatype }?,
+    SVG.ellipse.content
+  }
+# end of SVG.ellipse.element
+
+# end of SVG.ellipse.attlist
+
+# polyline: Polyline Element ........................
+SVG.polyline.extra.content = notAllowed
+SVG.polyline.content =
+  (SVG.Description.class
+   | SVG.Animation.class
+   | SVG.polyline.extra.content)*
+polyline =
+  element polyline {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.GraphicalEvents.attrib,
+    SVG.External.attrib,
+    attribute points { Points.datatype },
+    attribute transform { TransformList.datatype }?,
+    SVG.polyline.content
+  }
+# end of SVG.polyline.element
+
+# end of SVG.polyline.attlist
+
+# polygon: Polygon Element ..........................
+SVG.polygon.extra.content = notAllowed
+SVG.polygon.content =
+  (SVG.Description.class
+   | SVG.Animation.class
+   | SVG.polygon.extra.content)*
+polygon =
+  element polygon {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.GraphicalEvents.attrib,
+    SVG.External.attrib,
+    attribute points { Points.datatype },
+    attribute transform { TransformList.datatype }?,
+    SVG.polygon.content
+  }
+# end of SVG.polygon.element
+
+# end of SVG.polygon.attlist
+
+# end of svg-shape.mod
+
+# Text Module .................................................
+
+# .......................................................................
+
+# SVG 1.1 Text Module ...................................................
+
+# file: svg-text.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Text//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-text.mod"
+# 
+# .......................................................................
+
+# Text
+# 
+#    text, tspan, tref, textPath, altGlyph, altGlyphDef, altGlyphItem,
+#    glyphRef
+# 
+# This module declares markup to provide support for alternate glyph.
+
+# 'baseline-shift' property/attribute value (e.g., 'baseline', 'sub', etc.)
+
+# 'font-family' property/attribute value (i.e., list of fonts)
+
+# 'font-size' property/attribute value
+
+# 'font-size-adjust' property/attribute value
+
+# 'glyph-orientation-horizontal' property/attribute value (e.g., <angle>)
+
+# 'glyph-orientation-vertical' property/attribute value (e.g., 'auto', <angle>)
+
+# 'kerning' property/attribute value (e.g., 'auto', <length>)
+
+# 'letter-spacing' or 'word-spacing' property/attribute value (e.g., 'normal', <length>)
+
+# 'text-decoration' property/attribute value (e.g., 'none', 'underline')
+
+# Qualified Names (Default) .........................
+
+# Attribute Collections (Default) ...................
+
+# SVG.Text.class ....................................
+
+# SVG.TextContent.class .............................
+
+# SVG.Text.attrib ...................................
+
+# SVG.TextContent.attrib ............................
+
+# SVG.Font.attrib ...................................
+
+# text: Text Element ................................
+SVG.text.extra.content = notAllowed
+SVG.text.content =
+  (text
+   | SVG.Description.class
+   | SVG.Animation.class
+   | SVG.TextContent.class
+   | SVG.Hyperlink.class
+   | SVG.text.extra.content)*
+\text =
+  element text {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.GraphicalEvents.attrib,
+    SVG.External.attrib,
+    attribute x { Coordinates.datatype }?,
+    attribute y { Coordinates.datatype }?,
+    attribute dx { Lengths.datatype }?,
+    attribute dy { Lengths.datatype }?,
+    attribute rotate { Numbers.datatype }?,
+    attribute textLength { Length.datatype }?,
+    attribute lengthAdjust { "spacing" | "spacingAndGlyphs" }?,
+    attribute transform { TransformList.datatype }?,
+    SVG.text.content
+  }
+# end of SVG.text.element
+
+# end of SVG.text.attlist
+
+# tspan: Text Span Element ..........................
+SVG.tspan.extra.content = notAllowed
+SVG.tspan.content =
+  (text
+   | tspan
+   | tref
+   | altGlyph
+   | animate
+   | set
+   | animateColor
+   | SVG.Description.class
+   | SVG.Hyperlink.class
+   | SVG.tspan.extra.content)*
+tspan =
+  element tspan {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.GraphicalEvents.attrib,
+    SVG.External.attrib,
+    attribute x { Coordinates.datatype }?,
+    attribute y { Coordinates.datatype }?,
+    attribute dx { Lengths.datatype }?,
+    attribute dy { Lengths.datatype }?,
+    attribute rotate { Numbers.datatype }?,
+    attribute textLength { Length.datatype }?,
+    attribute lengthAdjust { "spacing" | "spacingAndGlyphs" }?,
+    SVG.tspan.content
+  }
+# end of SVG.tspan.element
+
+# end of SVG.tspan.attlist
+
+# tref: Text Reference Element ......................
+SVG.tref.extra.content = notAllowed
+SVG.tref.content =
+  (animate
+   | set
+   | animateColor
+   | SVG.Description.class
+   | SVG.tref.extra.content)*
+tref =
+  element tref {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.GraphicalEvents.attrib,
+    SVG.XLinkRequired.attrib,
+    SVG.External.attrib,
+    attribute x { Coordinates.datatype }?,
+    attribute y { Coordinates.datatype }?,
+    attribute dx { Lengths.datatype }?,
+    attribute dy { Lengths.datatype }?,
+    attribute rotate { Numbers.datatype }?,
+    attribute textLength { Length.datatype }?,
+    attribute lengthAdjust { "spacing" | "spacingAndGlyphs" }?,
+    SVG.tref.content
+  }
+# end of SVG.tref.element
+
+# end of SVG.tref.attlist
+
+# textPath: Text Path Element .......................
+SVG.textPath.extra.content = notAllowed
+SVG.textPath.content =
+  (text
+   | tspan
+   | tref
+   | altGlyph
+   | animate
+   | set
+   | animateColor
+   | SVG.Description.class
+   | SVG.Hyperlink.class
+   | SVG.textPath.extra.content)*
+textPath =
+  element textPath {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.GraphicalEvents.attrib,
+    SVG.XLinkRequired.attrib,
+    SVG.External.attrib,
+    attribute startOffset { Length.datatype }?,
+    attribute textLength { Length.datatype }?,
+    attribute lengthAdjust { "spacing" | "spacingAndGlyphs" }?,
+    attribute method { "align" | "stretch" }?,
+    attribute spacing { "auto" | "exact" }?,
+    SVG.textPath.content
+  }
+# end of SVG.textPath.element
+
+# end of SVG.textPath.attlist
+
+# altGlyph: Alternate Glyph Element .................
+SVG.altGlyph.extra.content = notAllowed
+SVG.altGlyph.content = (text | SVG.altGlyph.extra.content)*
+altGlyph =
+  element altGlyph {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.GraphicalEvents.attrib,
+    SVG.XLink.attrib,
+    SVG.External.attrib,
+    attribute x { Coordinates.datatype }?,
+    attribute y { Coordinates.datatype }?,
+    attribute dx { Lengths.datatype }?,
+    attribute dy { Lengths.datatype }?,
+    attribute glyphRef { text }?,
+    attribute format { text }?,
+    attribute rotate { Numbers.datatype }?,
+    SVG.altGlyph.content
+  }
+# end of SVG.altGlyph.element
+
+# end of SVG.altGlyph.attlist
+
+# altGlyphDef: Alternate Glyph Definition Element ...
+SVG.altGlyphDef.extra.content = notAllowed
+SVG.altGlyphDef.content =
+  (glyphRef+ | altGlyphItem+) | SVG.altGlyphDef.extra.content
+altGlyphDef =
+  element altGlyphDef { SVG.Core.attrib, SVG.altGlyphDef.content }
+# end of SVG.altGlyphDef.element
+
+# end of SVG.altGlyphDef.attlist
+
+# altGlyphItem: Alternate Glyph Item Element ........
+SVG.altGlyphItem.extra.content = notAllowed
+SVG.altGlyphItem.content = glyphRef+ | SVG.altGlyphItem.extra.content
+altGlyphItem =
+  element altGlyphItem { SVG.Core.attrib, SVG.altGlyphItem.content }
+# end of SVG.altGlyphItem.element
+
+# end of SVG.altGlyphItem.attlist
+
+# glyphRef: Glyph Reference Element .................
+SVG.glyphRef.content = empty
+glyphRef =
+  element glyphRef {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.XLink.attrib,
+    attribute x { Number.datatype }?,
+    attribute y { Number.datatype }?,
+    attribute dx { Number.datatype }?,
+    attribute dy { Number.datatype }?,
+    attribute glyphRef { text }?,
+    attribute format { text }?,
+    SVG.glyphRef.content
+  }
+# end of SVG.glyphRef.element
+
+# end of SVG.glyphRef.attlist
+
+# end of svg-text.mod
+
+# Marker Module ...............................................
+
+# .......................................................................
+
+# SVG 1.1 Marker Module .................................................
+
+# file: svg-marker.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Marker//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-marker.mod"
+# 
+# .......................................................................
+
+# Marker
+# 
+#    marker
+# 
+# This module declares markup to provide support for marker.
+
+# 'marker' property/attribute value (e.g., 'none', <uri>)
+
+# Qualified Names (Default) .........................
+
+# Attribute Collections (Default) ...................
+
+# SVG.Marker.class ..................................
+
+# SVG.Marker.attrib .................................
+
+# SVG.Presentation.attrib ...........................
+
+# marker: Marker Element ............................
+SVG.marker.extra.content = notAllowed
+SVG.marker.content =
+  (SVG.Description.class
+   | SVG.Animation.class
+   | SVG.Structure.class
+   | SVG.Conditional.class
+   | SVG.Image.class
+   | SVG.Style.class
+   | SVG.Shape.class
+   | SVG.Text.class
+   | SVG.Marker.class
+   | SVG.ColorProfile.class
+   | SVG.Gradient.class
+   | SVG.Pattern.class
+   | SVG.Clip.class
+   | SVG.Mask.class
+   | SVG.Filter.class
+   | SVG.Cursor.class
+   | SVG.Hyperlink.class
+   | SVG.View.class
+   | SVG.Script.class
+   | SVG.Font.class
+   | SVG.Extensibility.class
+   | SVG.marker.extra.content)*
+marker =
+  element marker {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.External.attrib,
+    attribute refX { Coordinate.datatype }?,
+    attribute refY { Coordinate.datatype }?,
+    attribute markerUnits { "strokeWidth" | "userSpaceOnUse" }?,
+    attribute markerWidth { Length.datatype }?,
+    attribute markerHeight { Length.datatype }?,
+    attribute orient { text }?,
+    attribute viewBox { ViewBoxSpec.datatype }?,
+    [ a:defaultValue = "xMidYMid meet" ]
+    attribute preserveAspectRatio { PreserveAspectRatioSpec.datatype }?,
+    SVG.marker.content
+  }
+# end of SVG.marker.element
+
+# end of SVG.marker.attlist
+
+# end of svg-marker.mod
+
+# Color Profile Module ........................................
+
+# .......................................................................
+
+# SVG 1.1 Color Profile Module ..........................................
+
+# file: svg-profile.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Color Profile//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-profile.mod"
+# 
+# .......................................................................
+
+# Color Profile
+# 
+#    color-profile
+# 
+# This module declares markup to provide support for color profile.
+
+# Qualified Names (Default) .........................
+
+# Attribute Collections (Default) ...................
+
+# SVG.ColorProfile.class ............................
+
+# SVG.ColorProfile.attrib ...........................
+
+# color-profile: Color Profile Element ..............
+SVG.color-profile.extra.content = notAllowed
+SVG.color-profile.content =
+  (SVG.Description.class | SVG.color-profile.extra.content)*
+color-profile =
+  element color-profile {
+    SVG.Core.attrib,
+    SVG.XLink.attrib,
+    attribute local { text }?,
+    attribute name { text },
+    [ a:defaultValue = "auto" ]
+    attribute rendering-intent {
+      "auto"
+      | "perceptual"
+      | "relative-colorimetric"
+      | "saturation"
+      | "absolute-colorimetric"
+    }?,
+    SVG.color-profile.content
+  }
+# end of SVG.color-profile.element
+
+# end of SVG.color-profile.attlist
+
+# end of svg-profile.mod
+
+# Gradient Module .............................................
+
+# .......................................................................
+
+# SVG 1.1 Gradient Module ...............................................
+
+# file: svg-gradient.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Gradient//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-gradient.mod"
+# 
+# .......................................................................
+
+# Gradient
+# 
+#    linearGradient, radialGradient, stop
+# 
+# This module declares markup to provide support for gradient fill.
+
+# a <number> or a <percentage>
+
+# Qualified Names (Default) .........................
+
+# Attribute Collections (Default) ...................
+
+# SVG.Gradient.class ................................
+
+# SVG.Gradient.attrib ...............................
+
+# linearGradient: Linear Gradient Element ...........
+SVG.linearGradient.extra.content = notAllowed
+SVG.linearGradient.content =
+  (SVG.Description.class
+   | stop
+   | animate
+   | set
+   | animateTransform
+   | SVG.linearGradient.extra.content)*
+linearGradient =
+  element linearGradient {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.XLink.attrib,
+    SVG.External.attrib,
+    attribute x1 { Coordinate.datatype }?,
+    attribute y1 { Coordinate.datatype }?,
+    attribute x2 { Coordinate.datatype }?,
+    attribute y2 { Coordinate.datatype }?,
+    attribute gradientUnits { "userSpaceOnUse" | "objectBoundingBox" }?,
+    attribute gradientTransform { TransformList.datatype }?,
+    attribute spreadMethod { "pad" | "reflect" | "repeat" }?,
+    SVG.linearGradient.content
+  }
+# end of SVG.linearGradient.element
+
+# end of SVG.linearGradient.attlist
+
+# radialGradient: Radial Gradient Element ...........
+SVG.radialGradient.extra.content = notAllowed
+SVG.radialGradient.content =
+  (SVG.Description.class
+   | stop
+   | animate
+   | set
+   | animateTransform
+   | SVG.radialGradient.extra.content)*
+radialGradient =
+  element radialGradient {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.XLink.attrib,
+    SVG.External.attrib,
+    attribute cx { Coordinate.datatype }?,
+    attribute cy { Coordinate.datatype }?,
+    attribute r { Length.datatype }?,
+    attribute fx { Coordinate.datatype }?,
+    attribute fy { Coordinate.datatype }?,
+    attribute gradientUnits { "userSpaceOnUse" | "objectBoundingBox" }?,
+    attribute gradientTransform { TransformList.datatype }?,
+    attribute spreadMethod { "pad" | "reflect" | "repeat" }?,
+    SVG.radialGradient.content
+  }
+# end of SVG.radialGradient.element
+
+# end of SVG.radialGradient.attlist
+
+# stop: Stop Element ................................
+SVG.stop.extra.content = notAllowed
+SVG.stop.content =
+  (animate | set | animateColor | SVG.stop.extra.content)*
+stop =
+  element stop {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    attribute offset { NumberOrPercentage.datatype },
+    SVG.stop.content
+  }
+# end of SVG.stop.element
+
+# end of SVG.stop.attlist
+
+# end of svg-gradient.mod
+
+# Pattern Module ..............................................
+
+# .......................................................................
+
+# SVG 1.1 Pattern Module ................................................
+
+# file: svg-pattern.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Pattern//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-pattern.mod"
+# 
+# .......................................................................
+
+# Pattern
+# 
+#    pattern
+# 
+# This module declares markup to provide support for pattern fill.
+
+# Qualified Names (Default) .........................
+
+# Attribute Collections (Default) ...................
+
+# SVG.Pattern.class .................................
+
+# SVG.Presentation.attrib ...........................
+
+# pattern: Pattern Element ..........................
+SVG.pattern.extra.content = notAllowed
+SVG.pattern.content =
+  (SVG.Description.class
+   | SVG.Animation.class
+   | SVG.Structure.class
+   | SVG.Conditional.class
+   | SVG.Image.class
+   | SVG.Style.class
+   | SVG.Shape.class
+   | SVG.Text.class
+   | SVG.Marker.class
+   | SVG.ColorProfile.class
+   | SVG.Gradient.class
+   | SVG.Pattern.class
+   | SVG.Clip.class
+   | SVG.Mask.class
+   | SVG.Filter.class
+   | SVG.Cursor.class
+   | SVG.Hyperlink.class
+   | SVG.View.class
+   | SVG.Script.class
+   | SVG.Font.class
+   | SVG.Extensibility.class
+   | SVG.pattern.extra.content)*
+pattern =
+  element pattern {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.XLink.attrib,
+    SVG.External.attrib,
+    attribute x { Coordinate.datatype }?,
+    attribute y { Coordinate.datatype }?,
+    attribute width { Length.datatype }?,
+    attribute height { Length.datatype }?,
+    attribute patternUnits { "userSpaceOnUse" | "objectBoundingBox" }?,
+    attribute patternContentUnits {
+      "userSpaceOnUse" | "objectBoundingBox"
+    }?,
+    attribute patternTransform { TransformList.datatype }?,
+    attribute viewBox { ViewBoxSpec.datatype }?,
+    [ a:defaultValue = "xMidYMid meet" ]
+    attribute preserveAspectRatio { PreserveAspectRatioSpec.datatype }?,
+    SVG.pattern.content
+  }
+# end of SVG.pattern.element
+
+# end of SVG.pattern.attlist
+
+# end of svg-pattern.mod
+
+# Clip Module .................................................
+
+# .......................................................................
+
+# SVG 1.1 Clip Module ...................................................
+
+# file: svg-clip.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Clip//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-clip.mod"
+# 
+# .......................................................................
+
+# Clip
+# 
+#    clipPath
+# 
+# This module declares markup to provide support for clipping.
+
+# 'clip-path' property/attribute value (e.g., 'none', <uri>)
+
+# Qualified Names (Default) .........................
+
+# Attribute Collections (Default) ...................
+
+# SVG.Clip.class ....................................
+
+# SVG.Clip.attrib ...................................
+
+# clipPath: Clip Path Element .......................
+SVG.clipPath.extra.content = notAllowed
+SVG.clipPath.content =
+  (SVG.Description.class
+   | SVG.Animation.class
+   | SVG.Use.class
+   | SVG.Shape.class
+   | \text
+   | SVG.clipPath.extra.content)*
+clipPath =
+  element clipPath {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.External.attrib,
+    attribute transform { TransformList.datatype }?,
+    attribute clipPathUnits { "userSpaceOnUse" | "objectBoundingBox" }?,
+    SVG.clipPath.content
+  }
+# end of SVG.clipPath.element
+
+# end of SVG.clipPath.attlist
+
+# end of svg-clip.mod
+
+# Mask Module .................................................
+
+# .......................................................................
+
+# SVG 1.1 Mask Module ...................................................
+
+# file: svg-mask.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Mask//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-mask.mod"
+# 
+# .......................................................................
+
+# Mask
+# 
+#    mask
+# 
+# This module declares markup to provide support for masking.
+
+# 'mask' property/attribute value (e.g., 'none', <uri>)
+
+# Qualified Names (Default) .........................
+
+# Attribute Collections (Default) ...................
+
+# SVG.Mask.class ....................................
+
+# SVG.Mask.attrib ...................................
+
+# SVG.Presentation.attrib ...........................
+
+# mask: Mask Element ................................
+SVG.mask.extra.content = notAllowed
+SVG.mask.content =
+  (SVG.Description.class
+   | SVG.Animation.class
+   | SVG.Structure.class
+   | SVG.Conditional.class
+   | SVG.Image.class
+   | SVG.Style.class
+   | SVG.Shape.class
+   | SVG.Text.class
+   | SVG.Marker.class
+   | SVG.ColorProfile.class
+   | SVG.Gradient.class
+   | SVG.Pattern.class
+   | SVG.Clip.class
+   | SVG.Mask.class
+   | SVG.Filter.class
+   | SVG.Cursor.class
+   | SVG.Hyperlink.class
+   | SVG.View.class
+   | SVG.Script.class
+   | SVG.Font.class
+   | SVG.Extensibility.class
+   | SVG.mask.extra.content)*
+mask =
+  element mask {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.External.attrib,
+    attribute x { Coordinate.datatype }?,
+    attribute y { Coordinate.datatype }?,
+    attribute width { Length.datatype }?,
+    attribute height { Length.datatype }?,
+    attribute maskUnits { "userSpaceOnUse" | "objectBoundingBox" }?,
+    attribute maskContentUnits {
+      "userSpaceOnUse" | "objectBoundingBox"
+    }?,
+    SVG.mask.content
+  }
+# end of SVG.mask.element
+
+# end of SVG.mask.attlist
+
+# end of svg-mask.mod
+
+# Filter Module ...............................................
+
+# .......................................................................
+
+# SVG 1.1 Filter Module .................................................
+
+# file: svg-filter.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Filter//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-filter.mod"
+# 
+# .......................................................................
+
+# Filter
+# 
+#    filter, feBlend, feColorMatrix, feComponentTransfer, feComposite,
+#    feConvolveMatrix, feDiffuseLighting, feDisplacementMap, feFlood,
+#    feGaussianBlur, feImage, feMerge, feMergeNode, feMorphology, feOffset,
+#    feSpecularLighting, feTile, feTurbulence, feDistantLight, fePointLight,
+#    feSpotLight, feFuncR, feFuncG, feFuncB, feFuncA
+# 
+# This module declares markup to provide support for filter effect.
+
+# 'filter' property/attribute value (e.g., 'none', <uri>)
+
+# list of <number>s, but at least one and at most two
+
+# Qualified Names (Default) .........................
+
+# Attribute Collections (Default) ...................
+
+# SVG.Filter.class ..................................
+
+# SVG.FilterPrimitive.class .........................
+
+# SVG.Filter.attrib .................................
+
+# SVG.FilterColor.attrib ............................
+
+# SVG.FilterPrimitive.attrib ........................
+SVG.FilterPrimitive.extra.attrib = empty
+SVG.FilterPrimitive.attrib =
+  attribute x { Coordinate.datatype }?,
+  attribute y { Coordinate.datatype }?,
+  attribute width { Length.datatype }?,
+  attribute height { Length.datatype }?,
+  attribute result { text }?,
+  SVG.FilterPrimitive.extra.attrib
+# SVG.FilterPrimitiveWithIn.attrib ..................
+SVG.FilterPrimitiveWithIn.extra.attrib = empty
+SVG.FilterPrimitiveWithIn.attrib =
+  SVG.FilterPrimitive.attrib,
+  attribute in { text }?,
+  SVG.FilterPrimitiveWithIn.extra.attrib
+# SVG.Presentation.attrib ...........................
+
+# filter: Filter Element ............................
+SVG.filter.extra.content = notAllowed
+SVG.filter.content =
+  (SVG.Description.class
+   | animate
+   | set
+   | SVG.FilterPrimitive.class
+   | SVG.filter.extra.content)*
+filter =
+  element filter {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.XLink.attrib,
+    SVG.External.attrib,
+    attribute x { Coordinate.datatype }?,
+    attribute y { Coordinate.datatype }?,
+    attribute width { Length.datatype }?,
+    attribute height { Length.datatype }?,
+    attribute filterRes { NumberOptionalNumber.datatype }?,
+    attribute filterUnits { "userSpaceOnUse" | "objectBoundingBox" }?,
+    attribute primitiveUnits {
+      "userSpaceOnUse" | "objectBoundingBox"
+    }?,
+    SVG.filter.content
+  }
+# end of SVG.filter.element
+
+# end of SVG.filter.attlist
+
+# feBlend: Filter Effect Blend Element ..............
+SVG.feBlend.extra.content = notAllowed
+SVG.feBlend.content = (animate | set | SVG.feBlend.extra.content)*
+feBlend =
+  element feBlend {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.FilterPrimitiveWithIn.attrib,
+    attribute in2 { text },
+    [ a:defaultValue = "normal" ]
+    attribute mode {
+      "normal" | "multiply" | "screen" | "darken" | "lighten"
+    }?,
+    SVG.feBlend.content
+  }
+# end of SVG.feBlend.element
+
+# end of SVG.feBlend.attlist
+
+# feColorMatrix: Filter Effect Color Matrix Element .
+SVG.feColorMatrix.extra.content = notAllowed
+SVG.feColorMatrix.content =
+  (animate | set | SVG.feColorMatrix.extra.content)*
+feColorMatrix =
+  element feColorMatrix {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.FilterPrimitiveWithIn.attrib,
+    [ a:defaultValue = "matrix" ]
+    attribute type {
+      "matrix" | "saturate" | "hueRotate" | "luminanceToAlpha"
+    }?,
+    attribute values { text }?,
+    SVG.feColorMatrix.content
+  }
+# end of SVG.feColorMatrix.element
+
+# end of SVG.feColorMatrix.attlist
+
+# feComponentTransfer: Filter Effect Component Transfer Element
+SVG.feComponentTransfer.extra.content = empty
+SVG.feComponentTransfer.content =
+  feFuncR?,
+  feFuncG?,
+  feFuncB?,
+  feFuncA?,
+  SVG.feComponentTransfer.extra.content
+feComponentTransfer =
+  element feComponentTransfer {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.FilterPrimitiveWithIn.attrib,
+    SVG.feComponentTransfer.content
+  }
+# end of SVG.feComponentTransfer.element
+
+# end of SVG.feComponentTransfer.attlist
+
+# feComposite: Filter Effect Composite Element ......
+SVG.feComposite.extra.content = notAllowed
+SVG.feComposite.content =
+  (animate | set | SVG.feComposite.extra.content)*
+feComposite =
+  element feComposite {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.FilterPrimitiveWithIn.attrib,
+    attribute in2 { text },
+    [ a:defaultValue = "over" ]
+    attribute operator {
+      "over" | "in" | "out" | "atop" | "xor" | "arithmetic"
+    }?,
+    attribute k1 { Number.datatype }?,
+    attribute k2 { Number.datatype }?,
+    attribute k3 { Number.datatype }?,
+    attribute k4 { Number.datatype }?,
+    SVG.feComposite.content
+  }
+# end of SVG.feComposite.element
+
+# end of SVG.feComposite.attlist
+
+# feConvolveMatrix: Filter Effect Convolve Matrix Element
+SVG.feConvolveMatrix.extra.content = notAllowed
+SVG.feConvolveMatrix.content =
+  (animate | set | SVG.feConvolveMatrix.extra.content)*
+feConvolveMatrix =
+  element feConvolveMatrix {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.FilterPrimitiveWithIn.attrib,
+    attribute order { NumberOptionalNumber.datatype }?,
+    attribute kernelMatrix { text },
+    attribute divisor { Number.datatype }?,
+    attribute bias { Number.datatype }?,
+    attribute targetX { Integer.datatype }?,
+    attribute targetY { Integer.datatype }?,
+    [ a:defaultValue = "duplicate" ]
+    attribute edgeMode { "duplicate" | "wrap" | "none" }?,
+    attribute kernelUnitLength { NumberOptionalNumber.datatype }?,
+    attribute preserveAlpha { Boolean.datatype }?,
+    SVG.feConvolveMatrix.content
+  }
+# end of SVG.feConvolveMatrix.element
+
+# end of SVG.feConvolveMatrix.attlist
+
+# feDiffuseLighting: Filter Effect Diffuse Lighting Element
+SVG.feDiffuseLighting.extra.content = notAllowed
+SVG.feDiffuseLighting.content =
+  (feDistantLight | fePointLight | feSpotLight),
+  (animate | set | animateColor | SVG.feDiffuseLighting.extra.content)*
+feDiffuseLighting =
+  element feDiffuseLighting {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.FilterPrimitiveWithIn.attrib,
+    attribute surfaceScale { Number.datatype }?,
+    attribute diffuseConstant { Number.datatype }?,
+    attribute kernelUnitLength { NumberOptionalNumber.datatype }?,
+    SVG.feDiffuseLighting.content
+  }
+# end of SVG.feDiffuseLighting.element
+
+# end of SVG.feDiffuseLighting.attlist
+
+# feDisplacementMap: Filter Effect Displacement Map Element
+SVG.feDisplacementMap.extra.content = notAllowed
+SVG.feDisplacementMap.content =
+  (animate | set | SVG.feDisplacementMap.extra.content)*
+feDisplacementMap =
+  element feDisplacementMap {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.FilterPrimitiveWithIn.attrib,
+    attribute in2 { text },
+    attribute scale { Number.datatype }?,
+    [ a:defaultValue = "A" ]
+    attribute xChannelSelector { "R" | "G" | "B" | "A" }?,
+    [ a:defaultValue = "A" ]
+    attribute yChannelSelector { "R" | "G" | "B" | "A" }?,
+    SVG.feDisplacementMap.content
+  }
+# end of SVG.feDisplacementMap.element
+
+# end of SVG.feDisplacementMap.attlist
+
+# feFlood: Filter Effect Flood Element ..............
+SVG.feFlood.extra.content = notAllowed
+SVG.feFlood.content =
+  (animate | set | animateColor | SVG.feFlood.extra.content)*
+feFlood =
+  element feFlood {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.FilterPrimitive.attrib,
+    SVG.feFlood.content
+  }
+# end of SVG.feFlood.element
+
+# end of SVG.feFlood.attlist
+
+# feGaussianBlur: Filter Effect Gaussian Blur Element
+SVG.feGaussianBlur.extra.content = notAllowed
+SVG.feGaussianBlur.content =
+  (animate | set | SVG.feGaussianBlur.extra.content)*
+feGaussianBlur =
+  element feGaussianBlur {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.FilterPrimitiveWithIn.attrib,
+    attribute stdDeviation { NumberOptionalNumber.datatype }?,
+    SVG.feGaussianBlur.content
+  }
+# end of SVG.feGaussianBlur.element
+
+# end of SVG.feGaussianBlur.attlist
+
+# feImage: Filter Effect Image Element ..............
+SVG.feImage.extra.content = notAllowed
+SVG.feImage.content =
+  (animate | set | animateTransform | SVG.feImage.extra.content)*
+feImage =
+  element feImage {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.FilterPrimitive.attrib,
+    SVG.XLinkEmbed.attrib,
+    SVG.External.attrib,
+    [ a:defaultValue = "xMidYMid meet" ]
+    attribute preserveAspectRatio { PreserveAspectRatioSpec.datatype }?,
+    SVG.feImage.content
+  }
+# end of SVG.feImage.element
+
+# end of SVG.feImage.attlist
+
+# feMerge: Filter Effect Merge Element ..............
+SVG.feMerge.extra.content = notAllowed
+SVG.feMerge.content = (feMergeNode | SVG.feMerge.extra.content)*
+feMerge =
+  element feMerge {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.FilterPrimitive.attrib,
+    SVG.feMerge.content
+  }
+# end of SVG.feMerge.element
+
+# end of SVG.feMerge.attlist
+
+# feMergeNode: Filter Effect Merge Node Element .....
+SVG.feMergeNode.extra.content = notAllowed
+SVG.feMergeNode.content =
+  (animate | set | SVG.feMergeNode.extra.content)*
+feMergeNode =
+  element feMergeNode {
+    SVG.Core.attrib,
+    attribute in { text }?,
+    SVG.feMergeNode.content
+  }
+# end of SVG.feMergeNode.element
+
+# end of SVG.feMergeNode.attlist
+
+# feMorphology: Filter Effect Morphology Element ....
+SVG.feMorphology.extra.content = notAllowed
+SVG.feMorphology.content =
+  (animate | set | SVG.feMorphology.extra.content)*
+feMorphology =
+  element feMorphology {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.FilterPrimitiveWithIn.attrib,
+    [ a:defaultValue = "erode" ]
+    attribute operator { "erode" | "dilate" }?,
+    attribute radius { NumberOptionalNumber.datatype }?,
+    SVG.feMorphology.content
+  }
+# end of SVG.feMorphology.element
+
+# end of SVG.feMorphology.attlist
+
+# feOffset: Filter Effect Offset Element ............
+SVG.feOffset.extra.content = notAllowed
+SVG.feOffset.content = (animate | set | SVG.feOffset.extra.content)*
+feOffset =
+  element feOffset {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.FilterPrimitiveWithIn.attrib,
+    attribute dx { Number.datatype }?,
+    attribute dy { Number.datatype }?,
+    SVG.feOffset.content
+  }
+# end of SVG.feOffset.element
+
+# end of SVG.feOffset.attlist
+
+# feSpecularLighting: Filter Effect Specular Lighting Element
+SVG.feSpecularLighting.extra.content = notAllowed
+SVG.feSpecularLighting.content =
+  (feDistantLight | fePointLight | feSpotLight),
+  (animate | set | animateColor | SVG.feSpecularLighting.extra.content)*
+feSpecularLighting =
+  element feSpecularLighting {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.FilterPrimitiveWithIn.attrib,
+    attribute surfaceScale { Number.datatype }?,
+    attribute specularConstant { Number.datatype }?,
+    attribute specularExponent { Number.datatype }?,
+    attribute kernelUnitLength { NumberOptionalNumber.datatype }?,
+    SVG.feSpecularLighting.content
+  }
+# end of SVG.feSpecularLighting.element
+
+# end of SVG.feSpecularLighting.attlist
+
+# feTile: Filter Effect Tile Element ................
+SVG.feTile.extra.content = notAllowed
+SVG.feTile.content = (animate | set | SVG.feTile.extra.content)*
+feTile =
+  element feTile {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.FilterPrimitiveWithIn.attrib,
+    SVG.feTile.content
+  }
+# end of SVG.feTile.element
+
+# end of SVG.feTile.attlist
+
+# feTurbulence: Filter Effect Turbulence Element ....
+SVG.feTurbulence.extra.content = notAllowed
+SVG.feTurbulence.content =
+  (animate | set | SVG.feTurbulence.extra.content)*
+feTurbulence =
+  element feTurbulence {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.FilterPrimitive.attrib,
+    attribute baseFrequency { NumberOptionalNumber.datatype }?,
+    attribute numOctaves { Integer.datatype }?,
+    attribute seed { Number.datatype }?,
+    [ a:defaultValue = "noStitch" ]
+    attribute stitchTiles { "stitch" | "noStitch" }?,
+    [ a:defaultValue = "turbulence" ]
+    attribute type { "fractalNoise" | "turbulence" }?,
+    SVG.feTurbulence.content
+  }
+# end of SVG.feTurbulence.element
+
+# end of SVG.feTurbulence.attlist
+
+# feDistantLight: Filter Effect Distant Light Element
+SVG.feDistantLight.extra.content = notAllowed
+SVG.feDistantLight.content =
+  (animate | set | SVG.feDistantLight.extra.content)*
+feDistantLight =
+  element feDistantLight {
+    SVG.Core.attrib,
+    attribute azimuth { Number.datatype }?,
+    attribute elevation { Number.datatype }?,
+    SVG.feDistantLight.content
+  }
+# end of SVG.feDistantLight.element
+
+# end of SVG.feDistantLight.attlist
+
+# fePointLight: Filter Effect Point Light Element ...
+SVG.fePointLight.extra.content = notAllowed
+SVG.fePointLight.content =
+  (animate | set | SVG.fePointLight.extra.content)*
+fePointLight =
+  element fePointLight {
+    SVG.Core.attrib,
+    attribute x { Number.datatype }?,
+    attribute y { Number.datatype }?,
+    attribute z { Number.datatype }?,
+    SVG.fePointLight.content
+  }
+# end of SVG.fePointLight.element
+
+# end of SVG.fePointLight.attlist
+
+# feSpotLight: Filter Effect Spot Light Element .....
+SVG.feSpotLight.extra.content = notAllowed
+SVG.feSpotLight.content =
+  (animate | set | SVG.feSpotLight.extra.content)*
+feSpotLight =
+  element feSpotLight {
+    SVG.Core.attrib,
+    attribute x { Number.datatype }?,
+    attribute y { Number.datatype }?,
+    attribute z { Number.datatype }?,
+    attribute pointsAtX { Number.datatype }?,
+    attribute pointsAtY { Number.datatype }?,
+    attribute pointsAtZ { Number.datatype }?,
+    attribute specularExponent { Number.datatype }?,
+    attribute limitingConeAngle { Number.datatype }?,
+    SVG.feSpotLight.content
+  }
+# end of SVG.feSpotLight.element
+
+# end of SVG.feSpotLight.attlist
+
+# feFuncR: Filter Effect Function Red Element .......
+SVG.feFuncR.extra.content = notAllowed
+SVG.feFuncR.content = (animate | set | SVG.feFuncR.extra.content)*
+feFuncR =
+  element feFuncR {
+    SVG.Core.attrib,
+    attribute type {
+      "identity" | "table" | "discrete" | "linear" | "gamma"
+    },
+    attribute tableValues { text }?,
+    attribute slope { Number.datatype }?,
+    attribute intercept { Number.datatype }?,
+    attribute amplitude { Number.datatype }?,
+    attribute exponent { Number.datatype }?,
+    attribute offset { Number.datatype }?,
+    SVG.feFuncR.content
+  }
+# end of SVG.feFuncR.element
+
+# end of SVG.feFuncR.attlist
+
+# feFuncG: Filter Effect Function Green Element .....
+SVG.feFuncG.extra.content = notAllowed
+SVG.feFuncG.content = (animate | set | SVG.feFuncG.extra.content)*
+feFuncG =
+  element feFuncG {
+    SVG.Core.attrib,
+    attribute type {
+      "identity" | "table" | "discrete" | "linear" | "gamma"
+    },
+    attribute tableValues { text }?,
+    attribute slope { Number.datatype }?,
+    attribute intercept { Number.datatype }?,
+    attribute amplitude { Number.datatype }?,
+    attribute exponent { Number.datatype }?,
+    attribute offset { Number.datatype }?,
+    SVG.feFuncG.content
+  }
+# end of SVG.feFuncG.element
+
+# end of SVG.feFuncG.attlist
+
+# feFuncB: Filter Effect Function Blue Element ......
+SVG.feFuncB.extra.content = notAllowed
+SVG.feFuncB.content = (animate | set | SVG.feFuncB.extra.content)*
+feFuncB =
+  element feFuncB {
+    SVG.Core.attrib,
+    attribute type {
+      "identity" | "table" | "discrete" | "linear" | "gamma"
+    },
+    attribute tableValues { text }?,
+    attribute slope { Number.datatype }?,
+    attribute intercept { Number.datatype }?,
+    attribute amplitude { Number.datatype }?,
+    attribute exponent { Number.datatype }?,
+    attribute offset { Number.datatype }?,
+    SVG.feFuncB.content
+  }
+# end of SVG.feFuncB.element
+
+# end of SVG.feFuncB.attlist
+
+# feFuncA: Filter Effect Function Alpha Element .....
+SVG.feFuncA.extra.content = notAllowed
+SVG.feFuncA.content = (animate | set | SVG.feFuncA.extra.content)*
+feFuncA =
+  element feFuncA {
+    SVG.Core.attrib,
+    attribute type {
+      "identity" | "table" | "discrete" | "linear" | "gamma"
+    },
+    attribute tableValues { text }?,
+    attribute slope { Number.datatype }?,
+    attribute intercept { Number.datatype }?,
+    attribute amplitude { Number.datatype }?,
+    attribute exponent { Number.datatype }?,
+    attribute offset { Number.datatype }?,
+    SVG.feFuncA.content
+  }
+# end of SVG.feFuncA.element
+
+# end of SVG.feFuncA.attlist
+
+# end of svg-filter.mod
+
+# Cursor Module ...............................................
+
+# .......................................................................
+
+# SVG 1.1 Cursor Module .................................................
+
+# file: svg-cursor.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Cursor//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-cursor.mod"
+# 
+# .......................................................................
+
+# Cursor
+# 
+#    cursor
+# 
+# This module declares markup to provide support for cursor.
+
+# 'cursor' property/attribute value (e.g., 'crosshair', <uri>)
+
+# Qualified Names (Default) .........................
+
+# Attribute Collections (Default) ...................
+
+# SVG.Cursor.class ..................................
+
+# SVG.Cursor.attrib .................................
+
+# cursor: Cursor Element ............................
+SVG.cursor.extra.content = notAllowed
+SVG.cursor.content = (SVG.Description.class | SVG.cursor.extra.content)*
+cursor =
+  element cursor {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.XLinkRequired.attrib,
+    SVG.External.attrib,
+    attribute x { Coordinate.datatype }?,
+    attribute y { Coordinate.datatype }?,
+    SVG.cursor.content
+  }
+# end of SVG.cursor.element
+
+# end of SVG.cursor.attlist
+
+# end of svg-cursor.mod
+
+# Hyperlinking Module .........................................
+
+# .......................................................................
+
+# SVG 1.1 Hyperlinking Module ...........................................
+
+# file: svg-hyperlink.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Hyperlinking//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-hyperlink.mod"
+# 
+# .......................................................................
+
+# Hyperlinking
+# 
+#    a
+# 
+# This module declares markup to provide support for hyper linking.
+
+# link to this target
+LinkTarget.datatype = xsd:NMTOKEN
+# Qualified Names (Default) .........................
+
+# Attribute Collections (Default) ...................
+
+# SVG.Hyperlink.class ...............................
+
+# SVG.Presentation.attrib ...........................
+
+# a: Anchor Element .................................
+SVG.a.extra.content = notAllowed
+SVG.a.content =
+  (text
+   | SVG.Description.class
+   | SVG.Animation.class
+   | SVG.Structure.class
+   | SVG.Conditional.class
+   | SVG.Image.class
+   | SVG.Style.class
+   | SVG.Shape.class
+   | SVG.Text.class
+   | SVG.Marker.class
+   | SVG.ColorProfile.class
+   | SVG.Gradient.class
+   | SVG.Pattern.class
+   | SVG.Clip.class
+   | SVG.Mask.class
+   | SVG.Filter.class
+   | SVG.Cursor.class
+   | SVG.Hyperlink.class
+   | SVG.View.class
+   | SVG.Script.class
+   | SVG.Font.class
+   | SVG.Extensibility.class
+   | SVG.a.extra.content)*
+a =
+  element a {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.GraphicalEvents.attrib,
+    SVG.XLinkReplace.attrib,
+    SVG.External.attrib,
+    attribute transform { TransformList.datatype }?,
+    attribute target { LinkTarget.datatype }?,
+    SVG.a.content
+  }
+# end of SVG.a.element
+
+# end of SVG.a.attlist
+
+# end of svg-hyperlink.mod
+
+# View Module .................................................
+
+# .......................................................................
+
+# SVG 1.1 View Module ...................................................
+
+# file: svg-view.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ELEMENTS SVG 1.1 View//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-view.mod"
+# 
+# .......................................................................
+
+# View
+# 
+#    view
+# 
+# This module declares markup to provide support for view.
+
+# Qualified Names (Default) .........................
+
+# Attribute Collections (Default) ...................
+
+# SVG.View.class ....................................
+
+# view: View Element ................................
+SVG.view.extra.content = notAllowed
+SVG.view.content = (SVG.Description.class | SVG.view.extra.content)*
+view =
+  element view {
+    SVG.Core.attrib,
+    SVG.External.attrib,
+    attribute viewBox { ViewBoxSpec.datatype }?,
+    [ a:defaultValue = "xMidYMid meet" ]
+    attribute preserveAspectRatio { PreserveAspectRatioSpec.datatype }?,
+    [ a:defaultValue = "magnify" ]
+    attribute zoomAndPan { "disable" | "magnify" }?,
+    attribute viewTarget { text }?,
+    SVG.view.content
+  }
+# end of SVG.view.element
+
+# end of SVG.view.attlist
+
+# end of svg-view.mod
+
+# Scripting Module ............................................
+
+# .......................................................................
+
+# SVG 1.1 Scripting Module ..............................................
+
+# file: svg-script.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Scripting//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-script.mod"
+# 
+# .......................................................................
+
+# Scripting
+# 
+#    script
+# 
+# This module declares markup to provide support for scripting.
+
+# Qualified Names (Default) .........................
+
+# Attribute Collections (Default) ...................
+
+# SVG.Script.class ..................................
+
+# script: Script Element ............................
+SVG.script.extra.content = notAllowed
+SVG.script.content = (text | SVG.script.extra.content)*
+script =
+  element script {
+    SVG.Core.attrib,
+    SVG.XLink.attrib,
+    SVG.External.attrib,
+    attribute type { ContentType.datatype },
+    SVG.script.content
+  }
+# end of SVG.script.element
+
+# end of SVG.script.attlist
+
+# end of svg-script.mod
+
+# Animation Module ............................................
+
+# .......................................................................
+
+# SVG 1.1 Animation Module ..............................................
+
+# file: svg-animation.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Animation//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-animation.mod"
+# 
+# .......................................................................
+
+# Animation
+# 
+#    animate, set, animateMotion, animateColor, animateTransform, mpath
+# 
+# This module declares markup to provide support for animation.
+
+# Qualified Names (Default) .........................
+
+# Attribute Collections (Default) ...................
+
+# SVG.Animation.class ...............................
+
+# SVG.Animation.attrib ..............................
+SVG.Animation.extra.attrib = empty
+SVG.Animation.attrib = SVG.XLink.attrib, SVG.Animation.extra.attrib
+# SVG.AnimationAttribute.attrib .....................
+SVG.AnimationAttribute.extra.attrib = empty
+SVG.AnimationAttribute.attrib =
+  attribute attributeName { text },
+  attribute attributeType { text }?,
+  SVG.AnimationAttribute.extra.attrib
+# SVG.AnimationTiming.attrib ........................
+SVG.AnimationTiming.extra.attrib = empty
+SVG.AnimationTiming.attrib =
+  attribute begin { text }?,
+  attribute dur { text }?,
+  attribute end { text }?,
+  attribute min { text }?,
+  attribute max { text }?,
+  [ a:defaultValue = "always" ]
+  attribute restart { "always" | "never" | "whenNotActive" }?,
+  attribute repeatCount { text }?,
+  attribute repeatDur { text }?,
+  [ a:defaultValue = "remove" ] attribute fill { "remove" | "freeze" }?,
+  SVG.AnimationTiming.extra.attrib
+# SVG.AnimationValue.attrib .........................
+SVG.AnimationValue.extra.attrib = empty
+SVG.AnimationValue.attrib =
+  [ a:defaultValue = "linear" ]
+  attribute calcMode { "discrete" | "linear" | "paced" | "spline" }?,
+  attribute values { text }?,
+  attribute keyTimes { text }?,
+  attribute keySplines { text }?,
+  attribute from { text }?,
+  attribute to { text }?,
+  attribute by { text }?,
+  SVG.AnimationValue.extra.attrib
+# SVG.AnimationAddtion.attrib .......................
+SVG.AnimationAddtion.extra.attrib = empty
+SVG.AnimationAddtion.attrib =
+  [ a:defaultValue = "replace" ]
+  attribute additive { "replace" | "sum" }?,
+  [ a:defaultValue = "none" ] attribute accumulate { "none" | "sum" }?,
+  SVG.AnimationAddtion.extra.attrib
+# animate: Animate Element ..........................
+SVG.animate.extra.content = notAllowed
+SVG.animate.content =
+  (SVG.Description.class | SVG.animate.extra.content)*
+animate =
+  element animate {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.AnimationEvents.attrib,
+    SVG.External.attrib,
+    SVG.Animation.attrib,
+    SVG.AnimationAttribute.attrib,
+    SVG.AnimationTiming.attrib,
+    SVG.AnimationValue.attrib,
+    SVG.AnimationAddtion.attrib,
+    SVG.animate.content
+  }
+# end of SVG.animate.element
+
+# end of SVG.animate.attlist
+
+# set: Set Element ..................................
+SVG.set.extra.content = notAllowed
+SVG.set.content = (SVG.Description.class | SVG.set.extra.content)*
+set =
+  element set {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.AnimationEvents.attrib,
+    SVG.External.attrib,
+    SVG.Animation.attrib,
+    SVG.AnimationAttribute.attrib,
+    SVG.AnimationTiming.attrib,
+    attribute to { text }?,
+    SVG.set.content
+  }
+# end of SVG.set.element
+
+# end of SVG.set.attlist
+
+# animateMotion: Animate Motion Element .............
+SVG.animateMotion.extra.content = notAllowed
+SVG.animateMotion.content =
+  (mpath, (SVG.Description.class | SVG.animateMotion.extra.content)*)
+  | ((SVG.Description.class | SVG.animateMotion.extra.content)+,
+     mpath,
+     ((SVG.Description.class | SVG.animateMotion.extra.content)*)?)
+animateMotion =
+  element animateMotion {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.AnimationEvents.attrib,
+    SVG.External.attrib,
+    SVG.Animation.attrib,
+    SVG.AnimationTiming.attrib,
+    SVG.AnimationAddtion.attrib,
+    [ a:defaultValue = "paced" ]
+    attribute calcMode { "discrete" | "linear" | "paced" | "spline" }?,
+    attribute values { text }?,
+    attribute keyTimes { text }?,
+    attribute keySplines { text }?,
+    attribute from { text }?,
+    attribute to { text }?,
+    attribute by { text }?,
+    attribute path { text }?,
+    attribute keyPoints { text }?,
+    attribute rotate { text }?,
+    attribute origin { text }?,
+    SVG.animateMotion.content
+  }
+# end of SVG.animateMotion.element
+
+# end of SVG.animateMotion.attlist
+
+# animateColor: Animate Color Element ...............
+SVG.animateColor.extra.content = notAllowed
+SVG.animateColor.content =
+  (SVG.Description.class | SVG.animateColor.extra.content)*
+animateColor =
+  element animateColor {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.AnimationEvents.attrib,
+    SVG.External.attrib,
+    SVG.Animation.attrib,
+    SVG.AnimationAttribute.attrib,
+    SVG.AnimationTiming.attrib,
+    SVG.AnimationValue.attrib,
+    SVG.AnimationAddtion.attrib,
+    SVG.animateColor.content
+  }
+# end of SVG.animateColor.element
+
+# end of SVG.animateColor.attlist
+
+# animateTransform: Animate Transform Element .......
+SVG.animateTransform.extra.content = notAllowed
+SVG.animateTransform.content =
+  (SVG.Description.class | SVG.animateTransform.extra.content)*
+animateTransform =
+  element animateTransform {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.AnimationEvents.attrib,
+    SVG.External.attrib,
+    SVG.Animation.attrib,
+    SVG.AnimationAttribute.attrib,
+    SVG.AnimationTiming.attrib,
+    SVG.AnimationValue.attrib,
+    SVG.AnimationAddtion.attrib,
+    [ a:defaultValue = "translate" ]
+    attribute type {
+      "translate" | "scale" | "rotate" | "skewX" | "skewY"
+    }?,
+    SVG.animateTransform.content
+  }
+# end of SVG.animateTransform.element
+
+# end of SVG.animateTransform.attlist
+
+# mpath: Motion Path Element ........................
+SVG.mpath.extra.content = notAllowed
+SVG.mpath.content = (SVG.Description.class | SVG.mpath.extra.content)*
+mpath =
+  element mpath {
+    SVG.Core.attrib,
+    SVG.XLinkRequired.attrib,
+    SVG.External.attrib,
+    SVG.mpath.content
+  }
+# end of SVG.mpath.element
+
+# end of SVG.mpath.attlist
+
+# end of svg-animation.mod
+
+# Font Module .................................................
+
+# .......................................................................
+
+# SVG 1.1 Font Module ...................................................
+
+# file: svg-font.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Font//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-font.mod"
+# 
+# .......................................................................
+
+# Font
+# 
+#    font, font-face, glyph, missing-glyph, hkern, vkern, font-face-src,
+#    font-face-uri, font-face-format, font-face-name
+# 
+# This module declares markup to provide support for template.
+
+# Qualified Names (Default) .........................
+
+# Attribute Collections (Default) ...................
+
+# SVG.Font.class ....................................
+
+# SVG.Presentation.attrib ...........................
+
+# font: Font Element ................................
+SVG.font.extra.content = notAllowed
+SVG.font.content =
+  (SVG.Description.class
+   | font-face
+   | missing-glyph
+   | glyph
+   | hkern
+   | vkern
+   | SVG.font.extra.content)*
+font =
+  element font {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.External.attrib,
+    attribute horiz-origin-x { Number.datatype }?,
+    attribute horiz-origin-y { Number.datatype }?,
+    attribute horiz-adv-x { Number.datatype },
+    attribute vert-origin-x { Number.datatype }?,
+    attribute vert-origin-y { Number.datatype }?,
+    attribute vert-adv-y { Number.datatype }?,
+    SVG.font.content
+  }
+# end of SVG.font.element
+
+# end of SVG.font.attlist
+
+# font-face: Font Face Element ......................
+SVG.font-face.extra.content = notAllowed
+SVG.font-face.content =
+  empty | 
+  (font-face-src,
+   (SVG.Description.class | SVG.font-face.extra.content)*)
+  | ((SVG.Description.class | SVG.font-face.extra.content)+,
+     font-face-src,
+     ((SVG.Description.class | SVG.font-face.extra.content)*)?)
+font-face =
+  element font-face {
+    SVG.Core.attrib,
+    attribute font-family { text }?,
+    attribute font-style { text }?,
+    attribute font-variant { text }?,
+    attribute font-weight { text }?,
+    attribute font-stretch { text }?,
+    attribute font-size { text }?,
+    attribute unicode-range { text }?,
+    attribute units-per-em { Number.datatype }?,
+    attribute panose-1 { text }?,
+    attribute stemv { Number.datatype }?,
+    attribute stemh { Number.datatype }?,
+    attribute slope { Number.datatype }?,
+    attribute cap-height { Number.datatype }?,
+    attribute x-height { Number.datatype }?,
+    attribute accent-height { Number.datatype }?,
+    attribute ascent { Number.datatype }?,
+    attribute descent { Number.datatype }?,
+    attribute widths { text }?,
+    attribute bbox { text }?,
+    attribute ideographic { Number.datatype }?,
+    attribute alphabetic { Number.datatype }?,
+    attribute mathematical { Number.datatype }?,
+    attribute hanging { Number.datatype }?,
+    attribute v-ideographic { Number.datatype }?,
+    attribute v-alphabetic { Number.datatype }?,
+    attribute v-mathematical { Number.datatype }?,
+    attribute v-hanging { Number.datatype }?,
+    attribute underline-position { Number.datatype }?,
+    attribute underline-thickness { Number.datatype }?,
+    attribute strikethrough-position { Number.datatype }?,
+    attribute strikethrough-thickness { Number.datatype }?,
+    attribute overline-position { Number.datatype }?,
+    attribute overline-thickness { Number.datatype }?,
+    SVG.font-face.content
+  }
+# end of SVG.font-face.element
+
+# end of SVG.font-face.attlist
+
+# glyph: Glyph Element ..............................
+SVG.glyph.extra.content = notAllowed
+SVG.glyph.content =
+  (SVG.Description.class
+   | SVG.Animation.class
+   | SVG.Structure.class
+   | SVG.Conditional.class
+   | SVG.Image.class
+   | SVG.Style.class
+   | SVG.Shape.class
+   | SVG.Text.class
+   | SVG.Marker.class
+   | SVG.ColorProfile.class
+   | SVG.Gradient.class
+   | SVG.Pattern.class
+   | SVG.Clip.class
+   | SVG.Mask.class
+   | SVG.Filter.class
+   | SVG.Cursor.class
+   | SVG.Hyperlink.class
+   | SVG.View.class
+   | SVG.Script.class
+   | SVG.Font.class
+   | SVG.Extensibility.class
+   | SVG.glyph.extra.content)*
+glyph =
+  element glyph {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    attribute unicode { text }?,
+    attribute glyph-name { text }?,
+    attribute d { PathData.datatype }?,
+    attribute orientation { text }?,
+    attribute arabic-form { text }?,
+    attribute lang { LanguageCodes.datatype }?,
+    attribute horiz-adv-x { Number.datatype }?,
+    attribute vert-origin-x { Number.datatype }?,
+    attribute vert-origin-y { Number.datatype }?,
+    attribute vert-adv-y { Number.datatype }?,
+    SVG.glyph.content
+  }
+# end of SVG.glyph.element
+
+# end of SVG.glyph.attlist
+
+# missing-glyph: Missing Glyph Element ..............
+SVG.missing-glyph.extra.content = notAllowed
+SVG.missing-glyph.content =
+  (SVG.Description.class
+   | SVG.Animation.class
+   | SVG.Structure.class
+   | SVG.Conditional.class
+   | SVG.Image.class
+   | SVG.Style.class
+   | SVG.Shape.class
+   | SVG.Text.class
+   | SVG.Marker.class
+   | SVG.ColorProfile.class
+   | SVG.Gradient.class
+   | SVG.Pattern.class
+   | SVG.Clip.class
+   | SVG.Mask.class
+   | SVG.Filter.class
+   | SVG.Cursor.class
+   | SVG.Hyperlink.class
+   | SVG.View.class
+   | SVG.Script.class
+   | SVG.Font.class
+   | SVG.Extensibility.class
+   | SVG.missing-glyph.extra.content)*
+missing-glyph =
+  element missing-glyph {
+    SVG.Core.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    attribute d { PathData.datatype }?,
+    attribute horiz-adv-x { Number.datatype }?,
+    attribute vert-origin-x { Number.datatype }?,
+    attribute vert-origin-y { Number.datatype }?,
+    attribute vert-adv-y { Number.datatype }?,
+    SVG.missing-glyph.content
+  }
+# end of SVG.missing-glyph.element
+
+# end of SVG.missing-glyph.attlist
+
+# hkern: Horizontal Kerning Element .................
+SVG.hkern.content = empty
+hkern =
+  element hkern {
+    SVG.Core.attrib,
+    attribute u1 { text }?,
+    attribute g1 { text }?,
+    attribute u2 { text }?,
+    attribute g2 { text }?,
+    attribute k { Number.datatype },
+    SVG.hkern.content
+  }
+# end of SVG.hkern.element
+
+# end of SVG.hkern.attlist
+
+# vkern: Vertical Kerning Element ...................
+SVG.vkern.content = empty
+vkern =
+  element vkern {
+    SVG.Core.attrib,
+    attribute u1 { text }?,
+    attribute g1 { text }?,
+    attribute u2 { text }?,
+    attribute g2 { text }?,
+    attribute k { Number.datatype },
+    SVG.vkern.content
+  }
+# end of SVG.vkern.element
+
+# end of SVG.vkern.attlist
+
+# font-face-src: Font Face Source Element ...........
+SVG.font-face-src.extra.content = notAllowed
+SVG.font-face-src.content =
+  (font-face-uri | font-face-name | SVG.font-face-src.extra.content)+
+font-face-src =
+  element font-face-src { SVG.Core.attrib, SVG.font-face-src.content }
+# end of SVG.font-face-src.element
+
+# end of SVG.font-face-src.attlist
+
+# font-face-uri: Font Face URI Element ..............
+SVG.font-face-uri.extra.content = notAllowed
+SVG.font-face-uri.content =
+  (font-face-format | SVG.font-face-uri.extra.content)*
+font-face-uri =
+  element font-face-uri {
+    SVG.Core.attrib, SVG.XLinkRequired.attrib, SVG.font-face-uri.content
+  }
+# end of SVG.font-face-uri.element
+
+# end of SVG.font-face-uri.attlist
+
+# font-face-format: Font Face Format Element ........
+SVG.font-face-format.content = empty
+font-face-format =
+  element font-face-format {
+    SVG.Core.attrib,
+    attribute string { text }?,
+    SVG.font-face-format.content
+  }
+# end of SVG.font-face-format.element
+
+# end of SVG.font-face-format.attlist
+
+# font-face-name: Font Face Name Element ............
+SVG.font-face-name.content = empty
+font-face-name =
+  element font-face-name {
+    SVG.Core.attrib,
+    attribute name { text }?,
+    SVG.font-face-name.content
+  }
+# end of SVG.font-face-name.element
+
+# end of SVG.font-face-name.attlist
+
+# end of svg-font.mod
+
+# Extensibility Module ........................................
+
+# .......................................................................
+
+# SVG 1.1 Extensibility Module ..........................................
+
+# file: svg-extensibility.mod
+# 
+# This is SVG, a language for describing two-dimensional graphics in XML.
+# Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
+# Revision: $Id: svg11-flat.rnc 3024 2011-07-10 08:29:17Z eb2mmrt $
+# 
+# This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+# 
+#    PUBLIC "-//W3C//ELEMENTS SVG 1.1 Extensibility//EN"
+#    SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg-extensibility.mod"
+# 
+# .......................................................................
+
+# Extensibility
+# 
+#    foreignObject
+# 
+# This module declares markup to provide support for extensibility.
+
+# Qualified Names (Default) .........................
+
+# Attribute Collections (Default) ...................
+
+# SVG.Extensibility.class ...........................
+
+# SVG.Presentation.attrib ...........................
+
+# foreignObject: Foreign Object Element .............
+SVG.foreignObject.extra.content = notAllowed
+SVG.foreignObject.content = (text | SVG.foreignObject.extra.content)*
+foreignObject =
+  element foreignObject {
+    SVG.Core.attrib,
+    SVG.Conditional.attrib,
+    SVG.Style.attrib,
+    SVG.Presentation.attrib,
+    SVG.GraphicalEvents.attrib,
+    SVG.External.attrib,
+    attribute x { Coordinate.datatype }?,
+    attribute y { Coordinate.datatype }?,
+    attribute width { Length.datatype },
+    attribute height { Length.datatype },
+    attribute transform { TransformList.datatype }?,
+    SVG.foreignObject.content
+  }
+start =
+  feComposite
+  | animate
+  | cursor
+  | feTile
+  | font-face-src
+  | feFlood
+  | mask
+  | feTurbulence
+  | feFuncA
+  | polygon
+  | feFuncB
+  | clipPath
+  | animateTransform
+  | feMorphology
+  | tref
+  | missing-glyph
+  | feBlend
+  | metadata
+  | feColorMatrix
+  | font-face-uri
+  | \text
+  | ellipse
+  | symbol
+  | linearGradient
+  | foreignObject
+  | font
+  | radialGradient
+  | glyph
+  | feDisplacementMap
+  | image
+  | script
+  | rect
+  | hkern
+  | feSpotLight
+  | animateMotion
+  | feComponentTransfer
+  | altGlyphDef
+  | animateColor
+  | marker
+  | font-face
+  | vkern
+  | view
+  | filter
+  | feMergeNode
+  | stop
+  | desc
+  | feOffset
+  | set
+  | feMerge
+  | line
+  | use
+  | switch
+  | fePointLight
+  | circle
+  | color-profile
+  | feSpecularLighting
+  | title
+  | polyline
+  | style
+  | path
+  | altGlyph
+  | feDiffuseLighting
+  | font-face-format
+  | g
+  | defs
+  | feFuncG
+  | svg
+  | a
+  | feImage
+  | textPath
+  | feConvolveMatrix
+  | altGlyphItem
+  | mpath
+  | feFuncR
+  | font-face-name
+  | tspan
+  | feGaussianBlur
+  | pattern
+  | feDistantLight
+  | glyphRef
+# end of SVG.foreignObject.element
+
+# end of SVG.foreignObject.attlist
+
+# end of svg-extensibility.mod
+
+# end of SVG 1.1 DTD ....................................................
+
+# .......................................................................
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/ocf-container-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/ocf-container-30.rnc
new file mode 100644
index 0000000..8e0bee0
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/ocf-container-30.rnc
@@ -0,0 +1,16 @@
+
+   default namespace = "urn:oasis:names:tc:opendocument:xmlns:container"
+   include "./mod/datatypes.rnc"
+
+   start = ocf.container
+      
+   ocf.container = element container {
+      attribute version { '1.0' } & 
+      element rootfiles {
+         element rootfile {
+            attribute full-path { datatype.URI } &
+            attribute media-type { 'application/oebps-package+xml' }
+         }+
+      }
+   }
+   
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/ocf-encryption-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/ocf-encryption-30.rnc
new file mode 100644
index 0000000..dc02511
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/ocf-encryption-30.rnc
@@ -0,0 +1,12 @@
+   default namespace = "urn:oasis:names:tc:opendocument:xmlns:container"
+   start = element encryption {
+     grammar {
+       include "mod/security/Lenient-Encryption11-ghc.rnc"  {
+         start = xenc_EncryptedData | xenc_EncryptedKey
+       }
+     xenc_EncryptionMethodOtherParams |=
+        attribute Algorithm { xsd:anyURI "http://www.idpf.org/2008/embedding" }
+     xenc_EncryptionAlgorithms |=
+        xsd:anyURI "http://www.idpf.org/2008/embedding"
+     }+
+   }
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/ocf-signatures-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/ocf-signatures-30.rnc
new file mode 100644
index 0000000..03e2fdc
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/ocf-signatures-30.rnc
@@ -0,0 +1,8 @@
+   default namespace = "urn:oasis:names:tc:opendocument:xmlns:container"   
+   start = element signatures {
+     grammar {
+       include "mod/security/Lenient-Signature11-properties-exclusiveC14N.rnc" { 
+         start = ds_Signature
+       }
+    }+
+  }
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/package-30-PREP.sch b/src/main/resources/com/adobe/epubcheck/schema/30/package-30-PREP.sch
new file mode 100644
index 0000000..3e19a2d
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/package-30-PREP.sch
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?><schema xmlns="http://purl.oclc.org/dsdl/schematron" queryBinding="xslt2">
+    
+    <ns uri="http://www.idpf.org/2007/opf" prefix="opf"/>
+    <ns uri="http://purl.org/dc/elements/1.1/" prefix="dc"/>
+            
+    <pattern id="opf.uid">
+        <rule context="opf:package[@unique-identifier]">
+            <let name="uid" value="./@unique-identifier"/>
+            <assert test="/opf:package/opf:metadata/dc:identifier[@id = $uid]">package element unique-identifier attribute does not resolve to a dc:identifier element (given reference was '<value-of select="$uid"/>')</assert>
+        </rule>    
+    </pattern>
+    
+    <pattern id="opf.dcterms.modified">
+        <rule context="opf:metadata">            
+            <assert test="count(opf:meta[@property='dcterms:modified' and not(@refines)]) = 1">package dcterms:modified meta element must occur exactly once</assert>            
+        </rule>        
+    </pattern>
+    
+    <pattern id="opf.dcterms.modified.syntax">
+        <rule context="opf:meta[@property='dcterms:modified']">            
+            <assert test="matches(normalize-space(.), '^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})Z$')">dcterms:modified illegal syntax (expecting: 'CCYY-MM-DDThh:mm:ssZ')</assert>            
+        </rule>
+    </pattern>    
+    
+    <pattern id="opf.refines.relative">
+        <rule context="*[@refines and starts-with(@refines,'#')]">
+            <let name="refines-target-id" value="substring(@refines, 2)"/>
+            <assert test="//*[@id=$refines-target-id]">@refines missing target id: '<value-of select="$refines-target-id"/>'</assert>
+        </rule>
+    </pattern>
+    
+    <pattern id="opf.itemref">        
+        <rule context="opf:spine/opf:itemref[@idref]">    
+            <let name="ref" value="./@idref"/>            
+            <let name="item" value="//opf:manifest/opf:item[@id = $ref]"/>
+            <let name="item-media-type" value="$item/@media-type"/>                                   
+            <assert test="$item">itemref element idref attribute does not resolve to a manifest item element</assert>
+        </rule>    
+    </pattern>
+    
+    <pattern id="opf.fallback.ref"> 
+        <rule context="opf:item[@fallback]">
+            <let name="ref" value="./@fallback"/>
+            <let name="item" value="/opf:package/opf:manifest/opf:item[@id = $ref]"/>
+            <assert test="$item and $item/@id != ./@id">manifest item element fallback attribute must resolve to another manifest item (given reference was '<value-of select="$ref"/>')</assert>
+        </rule>            
+    </pattern>
+        
+    <pattern id="opf.media.overlay"> 
+        <rule context="opf:item[@media-overlay]">
+            <let name="ref" value="./@media-overlay"/>
+            <let name="item" value="//opf:manifest/opf:item[@id = $ref]"/>
+            <let name="item-media-type" value="$item/@media-type"/>
+            <assert test="$item-media-type = 'application/smil+xml'">media overlay items must be of the 'application/smil+xml' type (given type was '<value-of select="$item-media-type"/>')</assert>
+        </rule>            
+    </pattern>
+    
+    <pattern id="opf.media.overlay.metadata.global"> 
+        <rule context="opf:manifest[opf:item[@media-overlay]]">
+            <assert test="//opf:meta[@property='media:duration' and not (@refines)]">global media:duration meta element not set</assert>
+        </rule>        
+    </pattern>
+    
+    <pattern id="opf.media.overlay.metadata.item">
+        <rule context="opf:manifest/opf:item[@media-overlay]">
+            <let name="mo-idref" value="@media-overlay"/>
+            <let name="mo-item" value="//opf:item[@id = $mo-idref]"/>
+            <let name="mo-item-id" value="$mo-item/@id"/>
+            <let name="mo-item-uri" value="concat('#', $mo-item-id)"/>
+            <assert test="//opf:meta[@property='media:duration' and @refines = $mo-item-uri ]">item media:duration meta element not set (expecting: meta property='media:duration' refines='<value-of select="$mo-item-uri"/>')</assert>
+        </rule>
+    </pattern>
+          
+    <pattern id="opf.bindings.handler"> 
+        <rule context="opf:bindings/opf:mediaType">
+            <let name="ref" value="./@handler"/>
+            <let name="item" value="//opf:manifest/opf:item[@id = $ref]"/>
+            <let name="item-media-type" value="$item/@media-type"/>
+            <assert test="$item-media-type = 'application/xhtml+xml'">manifest items referenced from the handler attribute of a bindings mediaType element must be of the 'application/xhtml+xml' type (given type was '<value-of select="$item-media-type"/>')</assert>
+        </rule>            
+    </pattern>
+          
+    <pattern id="opf.toc.ncx"> 
+        <rule context="opf:spine[@toc]">
+            <let name="ref" value="./@toc"/>            
+            <let name="item" value="/opf:package/opf:manifest/opf:item[@id = $ref]"/>
+            <let name="item-media-type" value="$item/@media-type"/>
+            <assert test="$item-media-type = 'application/x-dtbncx+xml'">spine element toc attribute must reference the NCX manifest item (referenced media type was '<value-of select="$item-media-type"/>')</assert>
+        </rule>            
+    </pattern>    
+    
+    <pattern id="opf.toc.ncx.2">     
+        <rule context="opf:item[@media-type='application/x-dtbncx+xml']">
+            <assert test="//opf:spine[@toc]">spine element toc attribute must be set when an NCX is included in the publication</assert>
+        </rule>    
+    </pattern>    
+        
+    <pattern id="opf.nav.prop"> 
+        <rule context="opf:manifest">            
+            <let name="item" value="//opf:manifest/opf:item[@properties and (some $token in tokenize(@properties,' ') satisfies (normalize-space($token) eq 'nav'))]"/>            
+            <assert test="count($item) = 1">Exactly one manifest item must declare the 'nav' property (number of 'nav' items: <value-of select="count($item)"/>).</assert>                            
+        </rule> 
+    </pattern>
+    
+    <pattern id="opf.nav.type"> 
+        <rule context="opf:manifest/opf:item[@properties and (some $token in tokenize(@properties,' ') satisfies (normalize-space($token) eq 'nav'))]">
+            <assert test="@media-type = 'application/xhtml+xml'">The manifest item representing the Navigation Document must be of the 'application/xhtml+xml' type (given type was '<value-of select="@media-type"/>')</assert>
+        </rule>    
+    </pattern>
+    
+    <pattern id="opf.cover-image"> 
+        <rule context="opf:manifest">            
+            <let name="item" value="//opf:manifest/opf:item[@properties and (some $token in tokenize(@properties,' ') satisfies (normalize-space($token) eq 'cover-image'))]"/>            
+            <assert test="count($item) < 2">Multiple occurrences of the 'cover-image' property (number of 'cover-image' items: <value-of select="count($item)"/>).</assert>                            
+        </rule> 
+    </pattern>
+    
+    <pattern id="id-unique">
+    <!-- note: assumes that NCName lexical constraints are tested elsewhere -->
+    <let name="id-set" value="//*[@id]"/>
+    <rule context="*[@id]">
+        <assert test="count($id-set[@id = current()/@id]) = 1">Duplicate ID '<value-of select="current()/@id"/>'</assert>
+    </rule>
+</pattern>     
+         
+             
+</schema>
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/package-30.nvdl b/src/main/resources/com/adobe/epubcheck/schema/30/package-30.nvdl
new file mode 100644
index 0000000..babe8b2
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/package-30.nvdl
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rules xmlns="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0" startMode="package">
+    <mode name="package">
+        <namespace ns="http://www.idpf.org/2007/opf">
+            <validate schema="package-30.rnc" schemaType="application/relax-ng-compact-syntax"/>
+            <validate schema="package-30.sch"/>
+        </namespace>
+    </mode>
+    <mode name="attach">
+        <anyNamespace>
+            <attach/>
+        </anyNamespace>
+    </mode>
+</rules>
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/package-30.rnc b/src/main/resources/com/adobe/epubcheck/schema/30/package-30.rnc
new file mode 100644
index 0000000..8f5616c
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/package-30.rnc
@@ -0,0 +1,132 @@
+
+      
+   default namespace = "http://www.idpf.org/2007/opf"
+   namespace opf = "http://www.idpf.org/2007/opf"
+   namespace dc = "http://purl.org/dc/elements/1.1/"
+   
+   include "./mod/datatypes.rnc"
+   include "./mod/epub-prefix-attr.rnc"
+   
+      
+   start = element package { opf.package.attlist & opf.package.content }
+   
+   opf.package.attlist &= opf.version.attr & opf.unique.identifier.attr & opf.id.attr? & epub.prefix.attr? & opf.i18n.attrs            
+   opf.version.attr = attribute version { '3.0' }
+   opf.unique.identifier.attr = attribute unique-identifier { datatype.IDREF }
+   
+   opf.package.content = opf.metadata, opf.manifest, opf.spine, opf.guide?, opf.bindings?, opf.collection*
+
+   opf.metadata = element metadata { opf.id.attr? & opf.i18n.attrs & opf.metadata.content }
+   opf.metadata.content = opf.dc.elems & opf.meta* & opf.link* 
+   
+   opf.meta = element meta { 
+      opf.epub3.meta.content | opf.epub2.meta.content
+   }
+   
+   opf.epub3.meta.content = (opf.property.attr & opf.refines.attr? & opf.id.attr? & opf.scheme.attr? & opf.i18n.attrs & datatype.string.nonempty)
+   opf.epub2.meta.content = (attribute name { text } & attribute content { text })  #legacy
+   
+   opf.link = element link { opf.href.attr & opf.rel.attr & opf.id.attr? & opf.refines.attr? & opf.media-type.attr? }         
+      
+   opf.property.attr = attribute property { datatype.property }
+   opf.rel.attr = attribute rel { datatype.properties }
+   opf.scheme.attr = attribute scheme { datatype.property }
+   opf.refines.attr = attribute refines { datatype.URI }
+   
+   opf.dc.identifier = element dc:identifier { opf.id.attr? & datatype.string.nonempty } 
+   opf.dc.title = element dc:title { opf.dc.attlist & datatype.string.nonempty }
+   opf.dc.language = element dc:language { opf.id.attr? & datatype.languagecode }
+   opf.dc.date = element dc:date { opf.id.attr? & datatype.string.nonempty }
+   opf.dc.source = element dc:source { opf.dc.attlist & datatype.string.nonempty }
+   opf.dc.type = element dc:type { opf.id.attr? & datatype.string.nonempty }
+   opf.dc.format = element dc:format { opf.id.attr? & datatype.string.nonempty }
+   opf.dc.creator = element dc:creator { opf.dc.attlist & datatype.string.nonempty }
+   opf.dc.subject = element dc:subject { opf.dc.attlist & datatype.string.nonempty }
+   opf.dc.description = element dc:description { opf.dc.attlist & datatype.string.nonempty }
+   opf.dc.publisher = element dc:publisher { opf.dc.attlist & datatype.string.nonempty }
+   opf.dc.contributor = element dc:contributor { opf.dc.attlist & datatype.string.nonempty }
+   opf.dc.relation = element dc:relation { opf.dc.attlist & datatype.string.nonempty }
+   opf.dc.coverage = element dc:coverage { opf.dc.attlist & datatype.string.nonempty }
+   opf.dc.rights = element dc:rights { opf.dc.attlist & datatype.string.nonempty }
+   
+   opf.dc.elems = opf.dc.identifier+
+                & opf.dc.title+
+                & opf.dc.language+
+                & opf.dc.date?
+                & opf.dc.source*
+                & opf.dc.type*
+                & opf.dc.format*
+                & opf.dc.creator*
+                & opf.dc.subject*
+                & opf.dc.description*
+                & opf.dc.publisher*
+                & opf.dc.contributor*
+                & opf.dc.relation*
+                & opf.dc.coverage*
+                & opf.dc.rights*
+
+   opf.dc.attlist = opf.id.attr? & opf.i18n.attrs
+      
+   opf.manifest = element manifest { opf.manifest.attlist & opf.manifest.content }
+   opf.manifest.attlist &= opf.id.attr?
+   opf.manifest.content = opf.item+
+   
+   
+   opf.item = element item { opf.item.attlist }
+   opf.item.attlist &= opf.id.attr & opf.href.attr & opf.media-type.attr & opf.fallback.attr? & opf.media-overlay.attr? & opf.properties.attr?  
+   
+   opf.fallback.attr = attribute fallback { datatype.IDREF }
+   opf.media-overlay.attr = attribute media-overlay { datatype.IDREF }   
+   opf.properties.attr = attribute properties { datatype.properties }
+   
+   
+   opf.spine = element spine { opf.spine.attlist & opf.spine.content }
+   opf.spine.attlist &= opf.id.attr? & opf.spine.toc.attr? & opf.ppd.attr?
+   opf.spine.toc.attr = attribute toc { datatype.IDREF }
+   opf.ppd.attr = attribute page-progression-direction { 'ltr' | 'rtl' | 'default'}
+   opf.spine.content = opf.itemref+
+   
+   
+   opf.itemref = element itemref { opf.itemref.attlist }
+   opf.itemref.attlist &= opf.itemref.idref.attr & opf.itemref.linear.attr? & opf.id.attr? & opf.properties.attr?
+   opf.itemref.idref.attr = attribute idref { datatype.IDREF }
+   opf.itemref.linear.attr = attribute linear { 'yes' | 'no' }
+   
+    
+   opf.guide = element guide { opf.reference+ }
+   opf.reference = element reference { opf.href.attr & attribute type { datatype.text } & attribute title { datatype.text }?}
+   
+   opf.bindings = element bindings { opf.bindings.mediaType+ }
+   opf.bindings.mediaType = element mediaType { opf.bindings.mediaType.attlist }
+   opf.bindings.mediaType.attlist &= opf.media-type.attr & attribute handler { datatype.IDREF }
+   
+   opf.collection = element collection { opf.collection.attlist, opf.collection.content }
+   opf.collection.attlist &= opf.id.attr? & opf.dir.attr? & opf.xml.lang.attr? & opf.collection.role.attr
+   opf.collection.role.attr = attribute role { datatype.space.separated.tokens }
+   opf.collection.content = opf.collection.metadata?, (opf.collection+ | (opf.collection*, opf.collection.link+))
+   opf.collection.metadata = element metadata { opf.id.attr? & opf.i18n.attrs & opf.collection.metadata.content }
+   opf.collection.metadata.content = opf.collection.dc.elems & opf.collection.meta* & opf.link*
+   opf.collection.dc.elems = opf.dc.identifier*
+                           & opf.dc.title*
+                           & opf.dc.language*
+                           & opf.dc.date*
+                           & opf.dc.source*
+                           & opf.dc.type* 
+                           & opf.dc.format* 
+                           & opf.dc.creator*
+                           & opf.dc.subject*
+                           & opf.dc.description*
+                           & opf.dc.publisher*
+                           & opf.dc.contributor*
+                           & opf.dc.relation*
+                           & opf.dc.coverage*
+                           & opf.dc.rights*
+   opf.collection.meta = element meta { opf.epub3.meta.content }
+   opf.collection.link = element link { opf.href.attr & opf.rel.attr? & opf.id.attr? & opf.media-type.attr? }
+   
+   opf.media-type.attr = attribute media-type { datatype.mimetype }
+   opf.href.attr = attribute href { datatype.URI }
+   opf.id.attr = attribute id { datatype.ID }
+   opf.i18n.attrs = opf.xml.lang.attr? & opf.dir.attr?
+   opf.xml.lang.attr = attribute xml:lang { datatype.languagecode }
+   opf.dir.attr = attribute dir { 'ltr' | 'rtl' }
\ No newline at end of file
diff --git a/src/main/resources/com/adobe/epubcheck/schema/30/package-30.sch b/src/main/resources/com/adobe/epubcheck/schema/30/package-30.sch
new file mode 100644
index 0000000..f85f6b4
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/schema/30/package-30.sch
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://purl.oclc.org/dsdl/schematron" queryBinding="xslt2">
+
+    <ns uri="http://www.idpf.org/2007/opf" prefix="opf"/>
+    <ns uri="http://purl.org/dc/elements/1.1/" prefix="dc"/>
+
+    <pattern id="opf.uid">
+        <rule context="opf:package[@unique-identifier]">
+            <let name="uid" value="./@unique-identifier"/>
+            <assert test="/opf:package/opf:metadata/dc:identifier[@id = $uid]">package element
+                unique-identifier attribute does not resolve to a dc:identifier element (given
+                reference was '<value-of select="$uid"/>')</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="opf.dcterms.modified">
+        <rule context="opf:package/opf:metadata">
+            <assert test="count(opf:meta[@property='dcterms:modified' and not(@refines)]) = 1"
+                >package dcterms:modified meta element must occur exactly once</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="opf.dcterms.modified.syntax">
+        <rule context="opf:meta[@property='dcterms:modified'][not(ancestor::opf:collection)]">
+            <assert
+                test="matches(normalize-space(.), '^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})Z$')"
+                >dcterms:modified illegal syntax (expecting: 'CCYY-MM-DDThh:mm:ssZ')</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="opf.refines.relative">
+        <rule context="*[@refines and starts-with(@refines,'#')][not(ancestor::opf:collection)]">
+            <let name="refines-target-id" value="substring(@refines, 2)"/>
+            <assert test="//*[@id=$refines-target-id]">@refines missing target id: '<value-of
+                    select="$refines-target-id"/>'</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="opf.meta.source-of">
+        <rule context="opf:meta[@property='source-of']">
+            <assert test="normalize-space(.) eq 'pagination'">The 'source-of' property must have the
+                value 'pagination'</assert>
+            <assert
+                test="exists(@refines) and exists(../dc:source[@id=substring(current()/@refines,2)])"
+                >The 'source-of' property must refine a 'dc:source' element.</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="opf.link.record">
+        <rule context="opf:link[tokenize(@rel,'\s+')='record']">
+            <assert test="exists(@media-type)">The type of 'record' references must be identifiable
+                from the link element's 'media-type' attribute.</assert>
+            <assert test="empty(@refines)">'record' links only applies to the Publication (must not
+                have a 'refines' attribute).</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="opf.meta.belongs-to-collection">
+        <rule context="opf:meta[@property='belongs-to-collection']">
+            <assert
+                test="empty(@refines) or exists(../opf:meta[@id=substring(current()/@refines,2)][@property='belongs-to-collection'])"
+                >Property 'belongs-to-collection' can only refine other 'belongs-to-collection'
+                properties.</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="opf.meta.collection-type">
+        <rule context="opf:meta[@property='collection-type']">
+            <assert
+                test="exists(../opf:meta[@id=substring(current()/@refines,2)][@property='belongs-to-collection'])"
+                >Property 'collection-type' must refine a 'belongs-to-collection' property.</assert>
+        </rule>
+    </pattern>
+
+
+    <pattern id="opf.itemref">
+        <rule context="opf:spine/opf:itemref[@idref]">
+            <let name="ref" value="./@idref"/>
+            <let name="item" value="//opf:manifest/opf:item[@id = $ref]"/>
+            <let name="item-media-type" value="$item/@media-type"/>
+            <assert test="$item">itemref element idref attribute does not resolve to a manifest item
+                element</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="opf.fallback.ref">
+        <rule context="opf:item[@fallback]">
+            <let name="ref" value="./@fallback"/>
+            <let name="item" value="/opf:package/opf:manifest/opf:item[@id = $ref]"/>
+            <assert test="$item and $item/@id != ./@id">manifest item element fallback attribute
+                must resolve to another manifest item (given reference was '<value-of select="$ref"
+                />')</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="opf.media.overlay">
+        <rule context="opf:item[@media-overlay]">
+            <let name="ref" value="./@media-overlay"/>
+            <let name="item" value="//opf:manifest/opf:item[@id = $ref]"/>
+            <let name="item-media-type" value="$item/@media-type"/>
+            <assert test="$item-media-type = 'application/smil+xml'">media overlay items must be of
+                the 'application/smil+xml' type (given type was '<value-of select="$item-media-type"
+                />')</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="opf.media.overlay.metadata.global">
+        <rule context="opf:manifest[opf:item[@media-overlay]]">
+            <assert test="//opf:meta[@property='media:duration' and not (@refines)]">global
+                media:duration meta element not set</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="opf.media.overlay.metadata.item">
+        <rule context="opf:manifest/opf:item[@media-overlay]">
+            <let name="mo-idref" value="@media-overlay"/>
+            <let name="mo-item" value="//opf:item[@id = $mo-idref]"/>
+            <let name="mo-item-id" value="$mo-item/@id"/>
+            <let name="mo-item-uri" value="concat('#', $mo-item-id)"/>
+            <assert test="//opf:meta[@property='media:duration' and @refines = $mo-item-uri ]">item
+                media:duration meta element not set (expecting: meta property='media:duration'
+                    refines='<value-of select="$mo-item-uri"/>')</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="opf.bindings.handler">
+        <rule context="opf:bindings/opf:mediaType">
+            <let name="ref" value="./@handler"/>
+            <let name="item" value="//opf:manifest/opf:item[@id = $ref]"/>
+            <let name="item-media-type" value="$item/@media-type"/>
+            <assert test="$item-media-type = 'application/xhtml+xml'">manifest items referenced from
+                the handler attribute of a bindings mediaType element must be of the
+                'application/xhtml+xml' type (given type was '<value-of select="$item-media-type"
+                />')</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="opf.toc.ncx">
+        <rule context="opf:spine[@toc]">
+            <let name="ref" value="./@toc"/>
+            <let name="item" value="/opf:package/opf:manifest/opf:item[@id = $ref]"/>
+            <let name="item-media-type" value="$item/@media-type"/>
+            <assert test="$item-media-type = 'application/x-dtbncx+xml'">spine element toc attribute
+                must reference the NCX manifest item (referenced media type was '<value-of
+                    select="$item-media-type"/>')</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="opf.toc.ncx.2">
+        <rule context="opf:item[@media-type='application/x-dtbncx+xml']">
+            <assert test="//opf:spine[@toc]">spine element toc attribute must be set when an NCX is
+                included in the publication</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="opf.nav.prop">
+        <rule context="opf:manifest">
+            <let name="item"
+                value="//opf:manifest/opf:item[@properties and (some $token in tokenize(@properties,' ') satisfies (normalize-space($token) eq 'nav'))]"/>
+            <assert test="count($item) = 1">Exactly one manifest item must declare the 'nav'
+                property (number of 'nav' items: <value-of select="count($item)"/>).</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="opf.nav.type">
+        <rule
+            context="opf:manifest/opf:item[@properties and (some $token in tokenize(@properties,' ') satisfies (normalize-space($token) eq 'nav'))]">
+            <assert test="@media-type = 'application/xhtml+xml'">The manifest item representing the
+                Navigation Document must be of the 'application/xhtml+xml' type (given type was
+                    '<value-of select="@media-type"/>')</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="opf.cover-image">
+        <rule context="opf:manifest">
+            <let name="item"
+                value="//opf:manifest/opf:item[@properties and (some $token in tokenize(@properties,' ') satisfies (normalize-space($token) eq 'cover-image'))]"/>
+            <assert test="count($item) < 2">Multiple occurrences of the 'cover-image' property
+                (number of 'cover-image' items: <value-of select="count($item)"/>).</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="opf.rendition.globals">
+        <rule context="opf:package/opf:metadata">
+            <assert test="count(opf:meta[@property='rendition:flow']) le 1">The 'rendition:flow'
+                property must not occur more than one time in the package metadata.</assert>
+            <assert test="count(opf:meta[@property='rendition:layout']) le 1">The 'rendition:layout'
+                property must not occur more than one time in the package metadata.</assert>
+            <assert test="count(opf:meta[@property='rendition:orientation']) le 1">The
+                'rendition:orientation' property must not occur more than one time in the package
+                metadata.</assert>
+            <assert test="count(opf:meta[@property='rendition:spread']) le 1">The 'rendition:spread'
+                property must not occur more than one time in the package metadata.</assert>
+            <assert test="count(opf:meta[@property='rendition:viewport'][empty(@refines)]) le 1">The
+                'rendition:viewport' property must not occur more than one time as a global value in
+                the package metadata.</assert>
+        </rule>
+        <rule context="opf:meta[not(ancestor::opf:collection)][@property=('rendition:flow')]">
+            <assert test="empty(@refines)">The 'rendition:flow' property must not be set on elements
+                with a 'refines' attribute</assert>
+            <assert
+                test="normalize-space()=('paginated','scrolled-continuous','scrolled-doc','auto')"
+                >The value of the 'rendition:flow' property must be either 'paginated',
+                'scrolled-continuous', 'scrolled-doc', or 'auto'</assert>
+        </rule>
+        <rule context="opf:meta[not(ancestor::opf:collection)][@property=('rendition:layout')]">
+            <assert test="empty(@refines)">The 'rendition:layout' property must not be set on
+                elements with a 'refines' attribute</assert>
+            <assert test="normalize-space()=('reflowable','pre-paginated')">The value of the
+                'rendition:layout' property must be either 'reflowable' or 'pre-paginated'</assert>
+        </rule>
+        <rule context="opf:meta[not(ancestor::opf:collection)][@property=('rendition:orientation')]">
+            <assert test="empty(@refines)">The 'rendition:orientation' property must not be set on
+                elements with a 'refines' attribute</assert>
+            <assert test="normalize-space()=('landscape','portrait','auto')">The value of the
+                'rendition:orientation' property must be either 'landscape', 'portrait' or
+                'auto'</assert>
+        </rule>
+        <rule context="opf:meta[not(ancestor::opf:collection)][@property=('rendition:spread')]">
+            <assert test="empty(@refines)">The 'rendition:spread' property must not be set on
+                elements with a 'refines' attribute</assert>
+            <assert test="normalize-space()=('none','landscape','portrait','both','auto')">The value
+                of the 'rendition:spread' property must be either 'none', 'landscape', 'portrait',
+                'both' or 'auto'</assert>
+        </rule>
+        <rule context="opf:meta[not(ancestor::opf:collection)][@property=('rendition:spread')]">
+            <assert test="empty(@refines)">The 'rendition:spread' property must not be set on
+                elements with a 'refines' attribute</assert>
+            <assert test="normalize-space()=('none','landscape','portrait','both','auto')">The value
+                of the 'rendition:spread' property must be either 'none', 'landscape', 'portrait',
+                'both' or 'auto'</assert>
+        </rule>
+        <rule context="opf:meta[not(ancestor::opf:collection)][@property=('rendition:viewport')]">
+            <assert
+                test="matches(normalize-space(),'^((width=\d+,\s*height=\d+)|(height=\d+,\s*width=\d+))$')"
+                >The value of the 'rendition:viewport' property must be of the form 'width=x,
+                height=y'</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="opf.rendition.overrides">
+        <rule context="opf:itemref">
+            <assert
+                test="count(tokenize(@properties,'\s+')[.=('rendition:flow-paginated','rendition:flow-scrolled-continuous','rendition:flow-scrolled-doc','rendition:flow-auto')]) le 1"
+                >Properties 'rendition:flow-paginated', 'rendition:flow-scrolled-continuous',
+                'rendition:flow-scrolled-doc' and 'rendition:flow-auto' are mutually
+                exclusive</assert>
+            <assert
+                test="count(tokenize(@properties,'\s+')[.=('rendition:layout-reflowable','rendition:layout-pre-paginated')]) le 1"
+                >Properties 'rendition:layout-reflowable' and 'rendition:layout-pre-paginated' are
+                mutually exclusive</assert>
+            <assert
+                test="count(tokenize(@properties,'\s+')[.=('rendition:orientation-landscape','rendition:orientation-portrait','rendition:orientation-auto')]) le 1"
+                >Properties 'rendition:orientation-landscape', 'rendition:orientation-portrait' and
+                'rendition:orientation-auto' are mutually exclusive</assert>
+            <assert
+                test="count(tokenize(@properties,'\s+')[.=('page-spread-right','page-spread-left','rendition:page-spread-center')]) le 1"
+                >Properties 'page-spread-right', 'page-spread-left' and
+                'rendition:page-spread-center' are mutually exclusive</assert>
+            <assert
+                test="count(tokenize(@properties,'\s+')[.=('rendition:spread-portrait','rendition:spread-landscape','rendition:spread-both','rendition:spread-none','rendition:spread-auto')]) le 1"
+                >Properties 'rendition:spread-portrait', 'rendition:spread-landscape',
+                'rendition:spread-both', 'rendition:spread-none' and 'rendition:spread-auto' are
+                mutually exclusive</assert>
+        </rule>
+    </pattern>
+
+    <pattern id="opf.collection.refines-restriction">
+        <rule context="opf:collection/opf:metadata/*[@refines]">
+            <let name="refines-target-id" value="substring(@refines, 2)"/>
+            <assert
+                test="starts-with(@refines,'#') and ancestor::opf:collection[not(ancestor::opf:collection)]//*[@id=$refines-target-id]"
+                > @refines must point to an element within the current collection </assert>
+        </rule>
+    </pattern>
+    
+    <include href="./mod/id-unique.sch"/>
+
+</schema>
diff --git a/src/main/resources/com/adobe/epubcheck/util/messages.properties b/src/main/resources/com/adobe/epubcheck/util/messages.properties
new file mode 100644
index 0000000..ef7101e
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/util/messages.properties
@@ -0,0 +1,72 @@
+single_file=File is validated as a single file of type %1$s and version %2$s. Only a subset of the available tests is run.
+opv_version_test=*** Candidate for msg deletion *** Tests are performed only for the OPF version.
+mode_version_not_supported=The checker doesn't validate type %1$s and version %2$s.
+
+no_errors__or_warnings=No errors or warnings detected.
+there_were_errors=\nCheck finished with errors\n
+there_were_warnings=\nCheck finished with warnings\n
+
+error_processing_unexpanded_epub=\nThis check cannot process expanded epubs\n
+deleting_archive=\nEpub creation cancelled due to detected errors.\n
+display_help=-help displays help
+argument_needed=At least one argument expected
+version_argument_expected=Version number omitted from the -version argument.
+mode_argument_expected=Type omitted from the -mode argument.
+no_file_specified=No file specified in the arguments. Exiting.
+mode_version_ignored=The mode and version arguments are ignored for epubs. They are retrieved from the files.
+mode_required=Mode required for non-epub files. Default version is 3.0.
+validating_version_message=Validating using EPUB version %1$s rules.
+output_type_conflict=Only one output format can be specified at a time.
+validating_against_epub_version=Validating against EPUB version %1$s - custom validation
+file_not_found=File not found: '%1$s'
+epubcheck_completed=epubcheck completed
+error_creating_config_file=Error creating config file '%1$s'.
+expected_message_filename=Expected the Custom message file name, but found '%1$s'
+unrecognized_argument=Unrecognized argument: '%1$s'
+
+help_text = \
+          nookepubcheck v.%1$s\n\
+          When running this tool, the first argument should be the name (with the path)\n\
+          of the file to check.\n\
+          \n\
+          If checking a non-epub file, the epub version of the file must\n\
+           be specified using -v and the type of the file using -mode.\n\
+           The default version is: 3.0.\n\
+          \n\
+          Modes and versions supported: \n\
+          --mode opf -v 2.0\n\
+          --mode opf -v 3.0\n\
+          --mode xhtml -v 2.0\n\
+          --mode xhtml -v 3.0\n\
+          --mode svg -v 2.0\n\
+          --mode svg -v 3.0\n\
+          --mode nav -v 3.0\n\
+          --mode mo  -v 3.0 // For Media Overlays validation\n\
+          --mode exp  // For expanded EPUB archives\n\
+          \n\
+          This tool also accepts the following options:\n\
+          --save 	       = saves the epub created from the expanded epub\n\
+          --out <file>     = output an assessment XML document file.\n\
+          --xmp <file>     = output an assessment XMP document file.\n\
+          --json <file>    = output an assessment JSON document file\n\
+          -m <file>        = same as --mode\n\
+          -o <file>        = same as --out\n\
+          -x <file>        = same as --xmp\n\
+          -j <file>        = same as --json\n\
+          --failonwarnings[+|-] = By default, the tool returns a 1 if errors are found in the file or 0 if no errors\n\
+          \                        are found.  Using --failonwarnings will cause the process to exit with a status of\n\
+          \                        1 if either warnings or errors are present and 0 only when there are no errors or warnings.\n\
+          -q, --quiet      = no message on console, except errors, only in the output\n\
+          -f, --fatal      = include only fatal errors in the output\n\
+          -e, --error      = include only error and fatal severity messages in ouput\n\
+          -w, --warn       = include fatal, error, and warn severity messages in output\n\
+          -u, --usage      = include ePub feature usage information in output\n\
+          \                    (default is OFF); if enabled, usage information will\n\
+          \                    always be included in the output file\n\
+          \n\
+          -l, --listChecks [<file>] = list message ids and severity levels to the custom message file named <file>\n\
+          \                          or the console\n\
+          -c, --customMessages [<file>] = override message severity levels as defined in the custom message file named <file>\n\
+          \n\
+          -h, -? or --help = displays this help message\n
+
diff --git a/src/main/resources/com/adobe/epubcheck/util/messages_ja.properties b/src/main/resources/com/adobe/epubcheck/util/messages_ja.properties
new file mode 100644
index 0000000..57a0a2d
--- /dev/null
+++ b/src/main/resources/com/adobe/epubcheck/util/messages_ja.properties
@@ -0,0 +1,68 @@
+single_file = ファイルはファイル種別 %1$s、version %2$s のシングルファイルとして検証されます. 適用可能なテストのサブセットのみ実行します.
+opv_version_test = *** Candidate for msg deletion *** テストはOPF versionに対してのみ実行します.
+mode_version_not_supported = このチェッカーではファイル種別 %1$s、 version %2$s の検証はできません.
+
+no_errors__or_warnings = エラーも警告も検出されませんでした.
+there_were_errors = \nエラーが検出されました\n
+there_were_warnings = \n警告が検出されました\n
+
+error_processing_unexpanded_epub = \nこのチェックは展開されたepubでは実行できません\n
+deleting_archive = \nエラーの検出のためEPUBの生成を中止しました.\n
+display_help = -help ヘルプを表示
+argument_needed = 少なくとも1つの引数が必要です
+version_argument_expected = オプション -version で与えられるバージョン番号が省略されています
+mode_argument_expected = オプション -mode で与えられるファイル種別が省略されています
+no_file_specified = オプションでファイルが指定されていません. 終了します.
+mode_version_ignored = mode と version の引数はepubファイル指定時は無視します. ファイルより取り出します.
+mode_required = 非epubファイルには -mode オプションが必要です. デフォルトの version は 3.0 です.
+validating_version_message = EPUB version %1$s のルールを使って検証します.
+output_type_conflict = 一度に指定できる出力フォーマットは1つのみです.
+validating_against_epub_version = EPUBバージョン %1$s のファイルに対して検証します - カスタムバリデーション
+file_not_found = ファイルが見つかりませんでした: '%1$s'
+epubcheck_completed = epubcheck 完了
+error_creating_config_file = Error creating config file '%1$s'.
+expected_message_filename = カスタムメッセージファイル名として指定されている引数が '%1$s' となっていました
+unrecognized_argument = 認識できない引数です: '%1$s'
+
+help_text = \
+          nookepubcheck v.%1$s\n\
+          このツールを実行するには、最初の引数をチェックしたいファイルの(パスを含んだ)\n\
+          名前にして下さい.\n\
+          \n\
+          非epubファイルを検証する際は、-v オプションでepubのバージョンを、\n\
+           -modeオプションでファイル種別を指定します.\n\
+           デフォルトのバージョン: 3.0.\n\
+          \n\
+          サポートしている mode と version: \n\
+          --mode opf -v 2.0\n\
+          --mode opf -v 3.0\n\
+          --mode xhtml -v 2.0\n\
+          --mode xhtml -v 3.0\n\
+          --mode svg -v 2.0\n\
+          --mode svg -v 3.0\n\
+          --mode nav -v 3.0 // メディアオーバーレイ検証用\n\
+          --mode mo  -v 3.0 // 展開済みEPUBアーカイブ\n\
+          --mode exp\n\
+          \n\
+          以下のオプションも受け付けます:\n\
+          --save 	         = 展開されたepubパスから生成されたepubファイルを保存します\n\
+          --out <file>     = 評価結果のXML文書ファイルを出力します\n\
+          --json <file>    = 評価結果のXJSON文書ファイルを出力します\n\
+          -m <file>        = --mode と同様\n\
+          -o <file>        = --out と同様\n\
+          -j <file>        = --json と同様\n\
+          --failonwarnings[+|-] = デフォルトでは、終了ステータスコードとして、エラーが検出されれば1を、検出されなければ\n\
+          \                        0を返します. --failonwarnings オプションを指定すると、警告かエラーがあれば1を、どちらも\n\
+          \                        ない場合のみ0を返すようになります.\n\
+          -f, --fatal      = fatal レベルの深刻度のエラーメッセージのみを出力します\n\
+          -e, --error      = fatal レベルと error レベルの深刻度のエラーメッセージのみを出力します\n\
+          -w, --warn       = fatal、error、warn レベルの深刻度のエラーメッセージを出力します\n\
+          -u, --usage      = epubの利用法情報も出力します\n\
+          \                    (デフォルトは OFF です); 指定した場合、利用法情報は\n\
+          \                    出力ファイルに常に含まれるようになります\n\
+          \n\
+          -l, --listChecks [<file>] = メッセージIDと深刻度レベルをカスタムメッセージファイル <file> または\n\
+          \                          コンソールに出力します\n\
+          -c, --customMessages [<file>] = カスタムメッセージファイル <file> でメッセージ深刻度レベルを上書きします\n\
+          \n\
+          -h, -? or --help = ヘルプメッセージを表示します\n
diff --git a/src/main/resources/com/thaiopensource/datatype/xsd/resources/Messages_ja.properties b/src/main/resources/com/thaiopensource/datatype/xsd/resources/Messages_ja.properties
new file mode 100755
index 0000000..8218b0b
--- /dev/null
+++ b/src/main/resources/com/thaiopensource/datatype/xsd/resources/Messages_ja.properties
@@ -0,0 +1,66 @@
+# Copyright (c) 2013 JEPA (Japan Electronic Publishing Association).
+#
+# This is Japanese translation of org/thaiopensource/relaxng/pattern/resources/Messages.propeerties file.
+# Original resources: http://info.jepa.or.jp/document/epubcheckj
+
+# Properties file specifying messages
+enumeration_param=\"enumeration\" facet is not allowed as a parameter: use \"value\" element instead
+whiteSpace_param=\"whiteSpace\" facet is not allowed as a parameter
+unrecognized_param=unrecognized parameter \"{0}\"
+invalid_regex=invalid regular expression: {0}
+not_ordered=parameter can only be applied to ordered datatype
+invalid_limit=\"{0}\" is not allowed by the base type: {1}
+no_length=base datatype does not define a units of length
+scale_not_derived_from_decimal=\"scale\" parameter can only be applied to datatype derived from \"decimal\"
+scale_not_non_negative_integer=\"scale\" parameter must be non negative integer
+length_not_non_negative_integer=\"length\" parameter must be non negative integer
+precision_not_derived_from_decimal=\"precision\" parameter can only be applied to datatype derived from \"decimal\"
+precision_not_positive_integer=\"precision\" parameter must be positive integer
+regex_impl_not_found=cannot find regular expression implementation; use JDK 1.4 or add Xerces2 to your classpath
+regex_internal_error=internal error in regular expression for datatype {0}
+
+# validation errors
+length_violation={0}\u306e\u9577\u3055\u306f {1} \u3067\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093. (\u9577\u3055\u304c {2} \u3067\u3057\u305f)
+max_length_violation={0}\u306e\u9577\u3055\u306f\u6700\u5927 {1} \u307e\u3067\u3067\u3059. (\u9577\u3055\u304c {2} \u3067\u3057\u305f)
+min_length_violation={0}\u306e\u9577\u3055\u306f\u6700\u4f4e\u3067\u3082 {1} \u5fc5\u8981\u3067\u3059. (\u9577\u3055\u304c {2} \u3067\u3057\u305f)
+min_inclusive_violation={0}\u306f {1} \u3088\u308a\u5927\u304d\u3044\u304b\u307e\u305f\u306f\u7b49\u3057\u304f\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093.
+min_exclusive_violation={0}\u306f {1} \u3088\u308a\u5927\u304d\u304f\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093.
+max_inclusive_violation={0}\u306f {1} \u3088\u308a\u5c0f\u3055\u3044\u304b\u307e\u305f\u306f\u7b49\u3057\u304f\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093.
+max_exclusive_violation={0}\u306f {1} \u3088\u308a\u5c0f\u3055\u304f\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093.
+pattern_violation={0}\u306f\u4ee5\u4e0b\u306e\u6b63\u898f\u8868\u73fe\u306b\u30de\u30c3\u30c1\u3057\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093.  \"{1}\"
+entity_violation=DTD\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u89e3\u6790\u5bfe\u8c61\u5916\u5b9f\u4f53\u306e\u540d\u524d\u3067\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093.
+undeclared_prefix=\u4fee\u98fe\u540d(QName)\u3067\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093. \u63a5\u982d\u8f9e\u304c\u3042\u308b\u306a\u3089\u5ba3\u8a00\u6e08\u307f\u3067\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093. (\u63a5\u982d\u8f9e \"{0}\" \u304c\u5ba3\u8a00\u3055\u308c\u3066\u3044\u307e\u305b\u3093)
+precision_violation={0} \u306e\u6709\u52b9\u6841\u306f\u6700\u5927 {1} \u307e\u3067\u3067\u3059. ({2} \u6841\u3042\u308a\u307e\u3057\u305f)
+precision_1_violation={0} \u306e\u6709\u52b9\u6841\u306f\u3061\u3087\u3046\u3069 1 \u6841\u3067\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093. ({1} \u6841\u3042\u308a\u307e\u3057\u305f)
+# part of the point is to avoid ugly "digit(s)" in the error message
+scale_violation=\u5c0f\u6570\u70b9\u4ee5\u4e0b\u306e\u6709\u52b9\u6841\u304c\u6700\u5927 {0} \u6841\u306e10\u9032\u6570\u3067\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093. ({1} \u6841\u3042\u308a\u307e\u3057\u305f)
+scale_0_violation=\u5c0f\u6570\u70b9\u4ee5\u4e0b\u306e\u6841\u304c\u306a\u304410\u9032\u6570\u3067\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093.
+scale_1_violation=\u5c0f\u6570\u70b9\u4ee5\u4e0b\u306e\u6709\u52b9\u6841\u304c\u6700\u5927 1 \u6841\u306e10\u9032\u6570\u3067\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093. ({0} \u6841\u3042\u308a\u307e\u3057\u305f)
+lexical_violation={0}\u3067\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093.
+
+# fragments substituted in above
+lexical_space_string=\u6587\u5b57\u5217
+lexical_space_uri=URI
+lexical_space_boolean=\u771f\u507d\u5024(boolean)
+lexical_space_decimal=10\u9032\u6570
+lexical_space_float=\u6d6e\u52d5\u5c0f\u6570\u70b9\u6570(float)
+lexical_space_duration=\u671f\u9593(duration)
+lexical_space_hex=16\u9032\u6587\u5b57\u5217
+lexical_space_base64=BASE64\u6587\u5b57\u5217
+lexical_space_integer=\u6574\u6570
+lexical_space_name=XML\u540d(Name)
+lexical_space_ncname=\u30b3\u30ed\u30f3\u3092\u542b\u307e\u306a\u3044XML\u540d(NCName)
+lexical_space_nmtoken=XML\u306eNMTOKEN
+lexical_space_qname=XML\u4fee\u98fe\u540d(QName)
+lexical_space_list=\u7a7a\u767d\u3067\u533a\u5207\u3089\u308c\u305f\u30ea\u30b9\u30c8
+lexical_space_list_ncname=\u30b3\u30ed\u30f3\u3092\u542b\u307e\u306a\u3044XML\u540d\u306e\u30ea\u30b9\u30c8
+lexical_space_list_nmtoken=XML\u306eNMTOKEN\u306e\u30ea\u30b9\u30c8
+lexical_space_date_y_m_d_time=ISO\u5f62\u5f0f\u306e\u65e5\u6642
+lexical_space_time=ISO\u5f62\u5f0f\u306e\u6642\u523b
+lexical_space_date_y_m_d=ISO\u5f62\u5f0f\u306e\u65e5\u4ed8
+lexical_space_date_y_m=ISO\u5f62\u5f0f\u306e\u5e74\u6708
+lexical_space_date_y=\u5e74
+lexical_space_date_m_d=ISO\u5f62\u5f0f\u306e\u6708\u65e5(--MM-DD \u5f62\u5f0f)
+lexical_space_date_m=ISO\u5f62\u5f0f\u306e\u6708(--MM \u5f62\u5f0f)
+lexical_space_date_d=ISO\u5f62\u5f0f\u306e\u6708\u306e\u65e5(---DD \u5f62\u5f0f)
+lexical_space_language=RFC3066\u5f62\u5f0f\u306e\u8a00\u8a9e\u30b3\u30fc\u30c9
diff --git a/src/main/resources/com/thaiopensource/relaxng/pattern/resources/Messages_ja.properties b/src/main/resources/com/thaiopensource/relaxng/pattern/resources/Messages_ja.properties
new file mode 100644
index 0000000..7effe39
--- /dev/null
+++ b/src/main/resources/com/thaiopensource/relaxng/pattern/resources/Messages_ja.properties
@@ -0,0 +1,143 @@
+# Copyright (c) 2013 JEPA (Japan Electronic Publishing Association).
+#
+# This is Japanese translation of org/thaiopensource/relaxng/pattern/resources/Messages.propeerties file.
+# Original resources: http://info.jepa.or.jp/document/epubcheckj
+
+# Properties file specifying messages
+illegal_href_attribute=illegal \"href\" attribute
+ns_attribute_ignored=\"ns\" attribute ignored
+reference_to_undefined=reference to undefined pattern \"{0}\"
+missing_start_element=missing \"start\" element
+recursive_reference=bad recursive reference to pattern \"{0}\"
+recursive_include=recursive inclusion of URL \"{0}\"
+duplicate_define=multiple definitions of \"{0}\" without \"combine\" attribute
+duplicate_start=multiple definitions of start without \"combine\" attribute
+conflict_combine_define=conflicting values of \"combine\" attribute for definition of \"{0}\"
+conflict_combine_start=conflicting values of \"combine\" attribute for definition of start
+missing_start_replacement=\"start\" in \"include\" does not override anything
+missing_define_replacement=definition of \"{0}\" in \"include\" does not override anything
+interleave_string=interleave of \"string\" or \"data\" element
+group_string=group of \"string\" or \"data\" element
+one_or_more_string=repeat of \"string\" or \"data\" element
+unrecognized_datatype=datatype \"{1}\" from library \"{0}\" not recognized
+unsupported_datatype_detail=datatype \"{1}\" from library \"{0}\" not supported: {2}
+unrecognized_datatype_library=datatype library \"{0}\" not recognized
+unrecognized_builtin_datatype=no such builtin datatype \"{0}\": must be \"string\" or \"token\"
+invalid_value=\"{0}\" is not a valid value of the datatype
+parent_ref_outside_grammar=reference to non-existent parent grammar
+ref_outside_grammar=reference to non-existent grammar
+expected_one_name_class=found \"{0}\" element but expected no further content
+builtin_param=builtin datatypes do not have any parameters
+invalid_param_display=invalid parameter:\n{0}
+invalid_param_detail_display=invalid parameter: {0}:\n{1}
+display_param={0}>>>>{1}
+invalid_param_detail=invalid parameter: {0}
+invalid_param=invalid parameter
+invalid_params_detail=invalid parameters: {0}
+invalid_params=invalid parameters
+datatype_requires_parameter=datatype cannot be used without parameters
+datatype_requires_parameter_detail=datatype cannot be used without parameters: {0}
+
+attribute_contains_attribute=an attribute pattern must not contain an attribute pattern (section 7.1 of the RELAX NG specification requires that the simplified XML form of the schema not contain any elements matching the path attribute//attribute)
+attribute_contains_element=an attribute pattern must not contain an element pattern (section 7.1 of the RELAX NG specification requires that the simplified XML form of the schema not contain any elements matching the path attribute//ref)
+data_except_contains_attribute=a data pattern must not exclude an attribute pattern (section 7.1 of the RELAX NG specification requires that the simplified XML form of the schema not contain any elements matching the path data/except//attribute)
+data_except_contains_element=a data pattern must not exclude an element pattern (section 7.1 of the RELAX NG specification requires that the simplified XML form of the schema not contain any elements matching the path data/except//ref)
+data_except_contains_empty=a data pattern must not exclude an empty pattern (section 7.1 of the RELAX NG specification requires that the simplified XML form of the schema not contain any elements matching the path data/except//empty)
+data_except_contains_group=a data pattern must not exclude a group (section 7.1 of the RELAX NG specification requires that the simplified XML form of the schema not contain any elements matching the path data/except//group)
+data_except_contains_interleave=a data pattern must not exclude an interleaved group (section 7.1 of the RELAX NG specification requires that the simplified XML form of the schema not contain any elements matching the path data/except//interleave)
+data_except_contains_list=a data pattern must not exclude a list pattern (section 7.1 of the RELAX NG specification requires that the simplified XML form of the schema not contain any elements matching the path data/except//list)
+data_except_contains_one_or_more=a data pattern must not exclude a repetition (section 7.1 of the RELAX NG specification requires that the simplified XML form of the schema not contain any elements matching the path data/except//oneOrMore)
+data_except_contains_text=a data pattern must not exclude a text pattern (section 7.1 of the RELAX NG specification requires that the simplified XML form of the schema not contain any elements matching the path data/except//text)
+list_contains_attribute=a list pattern must not contain an attribute pattern (section 7.1 of the RELAX NG specification requires that the simplified XML form of the schema not contain any elements matching the path list//attribute)
+list_contains_element=a list pattern must not contain an element pattern (section 7.1 of the RELAX NG specification requires that the simplified XML form of the schema not contain any elements matching the path list//ref)
+list_contains_list=a list pattern must not contain a list pattern (section 7.1 of the RELAX NG specification requires that the simplified XML form of the schema not contain any elements matching the path list//list)
+list_contains_text=a list pattern must not contain a text pattern (section 7.1 of the RELAX NG specification requires that the simplified XML form of the schema not contain any elements matching the path list//text)
+list_contains_interleave=a list pattern must not contain an interleave pattern (section 7.1 of the RELAX NG specification requires that the simplified XML form of the schema not contain any elements matching the path list//interleave)
+one_or_more_contains_group_contains_attribute=a group of attributes must not be repeatable (section 7.1 of the RELAX NG specification requires that the simplified XML form of the schema not contain any elements matching the path oneOrMore//group//attribute)
+one_or_more_contains_interleave_contains_attribute=an interleaved group of attributes must not be repeatable (section 7.1 of the RELAX NG specification requires that the simplified XML form of the schema not contain any elements matching the path oneOrMore//interleave//attribute)
+start_contains_attribute=found element matching the prohibited path start//attribute in the simplified XML form of the schema (see section 7.1 of the RELAX NG specification)
+start_contains_data=found element matching the prohibited path start//data in the simplified XML form of the schema (see section 7.1 of the RELAX NG specification)
+start_contains_empty=found element matching the prohibited path start//empty in the simplified XML form of the schema (see section 7.1 of the RELAX NG specification)
+start_contains_group=found element matching the prohibited path start//group in the simplified XML form of the schema (see section 7.1 of the RELAX NG specification)
+start_contains_interleave=found element matching the prohibited path start//interleave in the simplified XML form of the schema (see section 7.1 of the RELAX NG specification)
+start_contains_list=found element matching the prohibited path start//list in the simplified XML form of the schema (see section 7.1 of the RELAX NG specification)
+start_contains_one_or_more=found element matching the prohibited path start//oneOrMore in the simplified XML form of the schema (see section 7.1 of the RELAX NG specification)
+start_contains_text=found element matching the prohibited path start//text in the simplified XML form of the schema (see section 7.1 of the RELAX NG specification)
+start_contains_value=found element matching the prohibited path start//value in the simplified XML form of the schema (see section 7.1 of the RELAX NG specification)
+duplicate_attribute=duplicate attribute
+duplicate_attribute_name=duplicate attribute {0}
+duplicate_attribute_ns=attributes from namespace \"{0}\" can occur more than once
+interleave_element_overlap=overlapping element names in operands of \"interleave\"
+interleave_element_overlap_name=the element {0} can occur in more than one operand of \"interleave\"
+interleave_element_overlap_ns=elements from namespace \"{0}\" can occur in more than one operand of \"interleave\"
+interleave_text_overlap=both operands of \"interleave\" contain \"text\"
+open_name_class_not_repeated=attribute using \"nsName\" or \"anyName\" must be in \"oneOrMore\"
+xmlns_uri_attribute=attribute must not have namespace URI \"http://www.w3.org/2000/xmlns\"
+xmlns_attribute=attribute must not be named \"xmlns\"
+
+# Validation errors
+unknown_element=\u8981\u7d20 {0} \u306f\u3069\u3053\u306b\u3082\u66f8\u3051\u307e\u305b\u3093.  {1}
+unexpected_element_required_element_missing=\u8981\u7d20 {0} \u306f\u3053\u3053\u306b\u306f\u66f8\u3051\u307e\u305b\u3093. \u624b\u524d\u306b\u4ee5\u4e0b\u306e\u8981\u7d20\u304c\u5fc5\u8981\u3067\u3059: {1}
+unexpected_element_required_elements_missing=\u8981\u7d20 {0} \u306f\u3053\u3053\u306b\u306f\u66f8\u3051\u307e\u305b\u3093. \u624b\u524d\u306b\u4ee5\u4e0b\u306e\u8981\u7d20\u304c\u5fc5\u8981\u3067\u3059: {1}
+element_not_allowed_yet=\u8981\u7d20 {0} \u306f\u307e\u3060\u3053\u3053\u306b\u306f\u66f8\u3051\u307e\u305b\u3093.  {1}
+out_of_context_element=\u8981\u7d20 {0} \u3092\u3053\u3053\u306b\u66f8\u3044\u3066\u306f\u3044\u3051\u307e\u305b\u3093.  {1}
+no_attributes_allowed=\u5c5e\u6027 {0} \u304c\u66f8\u304b\u308c\u3066\u3044\u307e\u3059\u304c\u3001\u3053\u3053\u306b\u306f\u5c5e\u6027\u306f\u66f8\u3051\u307e\u305b\u3093.
+invalid_attribute_name=\u5c5e\u6027 {0} \u306f\u3053\u3053\u306b\u306f\u66f8\u3051\u307e\u305b\u3093.  {1}
+invalid_attribute_value=\u5c5e\u6027 {0} \u306e\u5024\u304c\u4e0d\u6b63\u3067\u3059.  {1}
+required_attributes_missing_expected=\u8981\u7d20 {0} \u306b\u306f1\u3064\u307e\u305f\u306f\u305d\u308c\u4ee5\u4e0a\u306e\u5fc5\u8981\u306a\u5c5e\u6027\u304c\u66f8\u304b\u308c\u3066\u3044\u307e\u305b\u3093.  {1}
+required_attribute_missing=\u8981\u7d20 {0} \u306b\u5fc5\u8981\u306a\u5c5e\u6027\u304c\u66f8\u304b\u308c\u3066\u3044\u307e\u305b\u3093.  {1}
+required_attributes_missing=\u8981\u7d20 {0} \u306b\u5fc5\u8981\u306a\u5c5e\u6027\u304c\u66f8\u304b\u308c\u3066\u3044\u307e\u305b\u3093.  {1}
+incomplete_element_required_elements_missing_expected=\u8981\u7d20 {0} \u306e\u5185\u5bb9\u304c\u4e0d\u5b8c\u5168\u3067\u3059.  {1}
+incomplete_element_required_element_missing=\u8981\u7d20 {0} \u306e\u5185\u5bb9\u304c\u4e0d\u5b8c\u5168\u3067\u3059. \u4ee5\u4e0b\u306e\u5fc5\u8981\u306a\u8981\u7d20\u304c\u66f8\u304b\u308c\u3066\u3044\u307e\u305b\u3093 {1}
+incomplete_element_required_elements_missing=\u8981\u7d20 {0} \u306e\u5185\u5bb9\u304c\u4e0d\u5b8c\u5168\u3067\u3059. \u4ee5\u4e0b\u306e\u5fc5\u8981\u306a\u8981\u7d20\u304c\u66f8\u304b\u308c\u3066\u3044\u307e\u305b\u3093 {1}
+text_not_allowed=\u30c6\u30ad\u30b9\u30c8\u306f\u3053\u3053\u306b\u306f\u66f8\u3051\u307e\u305b\u3093.  {0}
+document_incomplete=\u6587\u66f8\u304c\u4e0d\u5b8c\u5168\u306b\u30de\u30c3\u30c1\u3057\u3066\u3044\u307e\u3059.
+invalid_element_value=\u8981\u7d20 {0} \u306e\u30c6\u30ad\u30b9\u30c8\u5185\u5bb9\u304c\u4e0d\u6b63\u3067\u3059.  {1}
+blank_not_allowed=\u8981\u7d20 {0} \u306f\u7a7a\u306e\u5185\u5bb9\u306b\u3057\u3066\u306f\u3044\u3051\u307e\u305b\u3093. {1}
+schema_allows_nothing=\u6587\u66f8\u306b\u4f55\u3082\u66f8\u3044\u3066\u306f\u3044\u3051\u307e\u305b\u3093. \u30b9\u30ad\u30fc\u30de\u304c\u305d\u306e\u3088\u3046\u306b\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059(<notAllowed/> \u304c\u66f8\u304b\u308c\u3066\u3044\u308b\u30b9\u30ad\u30fc\u30de\u3068\u540c\u5024\u3067\u3059).
+
+# ID correctness errors
+id_element_name_class=an \"element\" pattern containing an \"attribute\" pattern with a non-null ID-type must have a name class that contains only \"choice\" and \"name\" elements
+id_attribute_name_class=an \"attribute\" pattern with a non-null ID-type must have a name class that is a single name
+id_parent=a \"data\" or \"value\" pattern with non-null ID-type must occur as the child of an \"attribute\" pattern
+id_type_conflict=conflicting ID-types for attribute {1} of element {0}
+
+# ID soundness errors
+id_no_tokens=ID\u578b\u5c5e\u6027\u306e\u5024\u306b\u30c8\u30fc\u30af\u30f3\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093.
+id_multiple_tokens=ID\u578b\u5c5e\u6027\u306e\u5024\u306b\u8907\u6570\u306e\u30c8\u30fc\u30af\u30f3\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059.
+idref_no_tokens=IDREF\u578b\u5c5e\u6027\u306e\u5024\u306b\u30c8\u30fc\u30af\u30f3\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093.
+idref_multiple_tokens=IDREF\u578b\u5c5e\u6027\u306e\u5024\u306b\u8907\u6570\u306e\u30c8\u30fc\u30af\u30f3\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059.
+idrefs_no_tokens=IDREFS\u578b\u5c5e\u6027\u306e\u5024\u306b\u30c8\u30fc\u30af\u30f3\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093.
+missing_id=IDREF \"{0}\" \u306b\u5bfe\u5fdc\u3059\u308bID\u304c\u3042\u308a\u307e\u305b\u3093.
+duplicate_id=ID \"{0}\" \u306f\u65e2\u306b\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059.
+first_id=ID \"{0}\" \u306f\u3001\u3053\u3053\u306b\u6700\u521d\u306b\u66f8\u304b\u308c\u3066\u3044\u307e\u3059.
+
+# Fragments
+name_absent_namespace=\"{0}\"
+name_with_namespace=\u540d\u524d\u7a7a\u9593 \"{0}\" \u306e \"{1}\"
+qname=\"{0}\"
+qnames_nsdecls={0}(\u540d\u524d\u7a7a\u9593\u5ba3\u8a00 {1})
+or_list_pair={0} \u307e\u305f\u306f {1}
+or_list_many_first={0}
+or_list_many_middle={0}, {1}
+or_list_many_last={0} \u307e\u305f\u306f {1}
+and_list_pair={0} \u304b\u3064 {1}
+and_list_many_first={0}
+and_list_many_middle={0}, {1}
+and_list_many_last={0} \u304b\u3064 {1}
+
+expected=; \u3053\u3053\u306b\u66f8\u304b\u308c\u308b\u3079\u304d\u3082\u306e\u306f {0} \u3067\u3059.
+element_end_tag=\u8981\u7d20\u306e\u7d42\u4e86\u30bf\u30b0
+text=\u30c6\u30ad\u30b9\u30c8
+data=\u30c7\u30fc\u30bf
+element_list=\u8981\u7d20 {0}
+element_other_ns=\u4ed6\u306e\u540d\u524d\u7a7a\u9593\u306e\u8981\u7d20
+expected_attribute=; \u3053\u3053\u306b\u66f8\u304b\u308c\u308b\u3079\u304d\u5c5e\u6027\u306f {0} \u3067\u3059.
+expected_attribute_or_other_ns=; \u3053\u3053\u306b\u66f8\u304b\u308c\u308b\u3079\u304d\u5c5e\u6027\u306f {0} \u307e\u305f\u306f\u4ed6\u306e\u540d\u524d\u7a7a\u9593\u306e\u5c5e\u6027\u3067\u3059.
+data_failures=; {0}
+token_failures=; \u30c8\u30fc\u30af\u30f3 {0} \u304c\u4e0d\u6b63\u3067\u3059. ; {1}
+missing_token=; \u30c8\u30fc\u30af\u30f3\u304c\u3042\u308a\u307e\u305b\u3093. ; {0}
+expected_data=; \u671f\u5f85\u3055\u308c\u308b\u30c7\u30fc\u30bf
+require_values={0} \u3068\u7b49\u3057\u304f\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093.
+require_qnames={0} \u3068\u7b49\u3057\u3044 QName \u3067\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093.
+require_datatype=\u30c7\u30fc\u30bf\u30bf\u30a4\u30d7{0}\u306e\u59a5\u5f53\u306a\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u306a\u304f\u3066\u306f\u306a\u308a\u307e\u305b\u3093.
diff --git a/src/main/resources/org/idpf/epubcheck/util/css/messages.properties b/src/main/resources/org/idpf/epubcheck/util/css/messages.properties
new file mode 100644
index 0000000..cca78e4
--- /dev/null
+++ b/src/main/resources/org/idpf/epubcheck/util/css/messages.properties
@@ -0,0 +1,20 @@
+css.scanner.token.syntax=Invalid syntax ''{0}''
+css.scanner.token.syntax.char=The character ''{0}'' is not allowed in ''{1}'' expressions
+css.scanner.token.syntax.firstChar=The character ''{0}'' is not allowed as the first character in ''{1}'' expressions
+css.scanner.token.syntax.escape=Invalid escape sequence ''{0}''
+css.scanner.token.syntax.urange=Invalid unicode range expression ''{0}''
+css.scanner.prematureEOF=Premature end of file
+
+css.grammar.prematureEOF=Premature end of grammar (expecting: {0})
+css.grammar.token.unexpected=Token ''{0}'' not allowed here
+css.grammar.token.expecting=Token ''{0}'' not allowed here, expecting {1}
+css.grammar.invalidSelector=Invalid selector: ''{0}'' 
+
+or=or
+a_property_name=a property name
+a_property_value=a property value
+a_type_or_universal_selector=a type or universal selector
+a_string_or_dentifier=a string or an identifier
+an_attribute_value_matcher=an attribute value match symbol
+negation_arguments=negation function arguments
+a_selectors=a selector
diff --git a/src/main/resources/org/idpf/epubcheck/util/css/messages_ja.properties b/src/main/resources/org/idpf/epubcheck/util/css/messages_ja.properties
new file mode 100644
index 0000000..8fb924b
--- /dev/null
+++ b/src/main/resources/org/idpf/epubcheck/util/css/messages_ja.properties
@@ -0,0 +1,25 @@
+# Copyright (c) 2013 JEPA (Japan Electronic Publishing Association).
+#
+# This is Japanese translation of message.properties file.
+# Original resources: http://info.jepa.or.jp/document/epubcheckj
+#
+css.scanner.token.syntax=不正な構文 ''{0}'' があります.
+css.scanner.token.syntax.char=文字 ''{0}'' は、式 ''{1}'' 内では使用できません.
+css.scanner.token.syntax.firstChar=文字 ''{0}'' は、式 ''{1}'' の最初の文字としては使用できません.
+css.scanner.token.syntax.escape=不正なエスケープシーケンス ''{0}'' があります.
+css.scanner.token.syntax.urange=不正なユニコード範囲式 ''{0}'' があります.
+css.scanner.prematureEOF=ファイルが途中で終わっています.
+
+css.grammar.prematureEOF=構文が途中で終わっています ({0} がありません)
+css.grammar.token.unexpected=トークン ''{0}'' はここでは使用できません.
+css.grammar.token.expecting={1} がありません. トークン ''{0}'' はここでは使用できません.
+css.grammar.invalidSelector=不正なセレクタ ''{0}'' があります.
+
+or=または
+a_property_name=プロパティ名
+a_property_value=プロパティ値
+a_type_or_universal_selector=要素型 または 全称セレクタ
+a_string_or_dentifier=文字列 または 識別子
+an_attribute_value_matcher=属性値比較演算子
+negation_arguments=否定疑似クラスの引数
+a_selectors=セレクタ
diff --git a/src/main/scripts/epubcheck.bat b/src/main/scripts/epubcheck.bat
new file mode 100644
index 0000000..364cee6
--- /dev/null
+++ b/src/main/scripts/epubcheck.bat
@@ -0,0 +1,20 @@
+ at ECHO OFF
+
+REM If JAVA_HOME is not set, use the java in the execution path
+if "%JAVA_HOME%" == "" (
+   set JAVA=java
+) else (
+   set JAVA="%JAVA_HOME%\bin\java"
+)
+SET EPUBCHECK_HOME=%~dp0
+
+REM Loop to read all the arguments
+SET ARGS=
+:WHILE
+IF "%1"=="" GOTO LOOP
+  SET ARGS=%ARGS% %1
+  SHIFT
+  GOTO WHILE
+:LOOP
+
+"%JAVA%" -jar "%EPUBCHECK_HOME%\epubcheck-${project.version}.jar" %ARGS%
diff --git a/src/main/scripts/epubcheck.sh b/src/main/scripts/epubcheck.sh
new file mode 100644
index 0000000..2e87c51
--- /dev/null
+++ b/src/main/scripts/epubcheck.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+# If JAVA_HOME is not set, use the java in the execution path
+if [ -z "$JAVA_HOME" ] ; then
+  JAVA=java
+else
+  JAVA="$JAVA_HOME/bin/java"
+fi
+
+EPUBCHECK_HOME=$(dirname "$0")
+
+"${JAVA}" -jar "$EPUBCHECK_HOME/epubcheck-${project.version}.jar" "$@"
+
diff --git a/src/main/util/sch/iso-sch-abstract.xsl b/src/main/util/sch/iso-sch-abstract.xsl
new file mode 100644
index 0000000..1302194
--- /dev/null
+++ b/src/main/util/sch/iso-sch-abstract.xsl
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+  version="1.0" xmlns:iso="http://purl.oclc.org/dsdl/schematron">
+  
+  <xsl:key name="ap" match="iso:pattern[@abstract='true']" use="@id"/>
+  
+  <xsl:template match="node() | @*">
+    <xsl:copy>
+      <xsl:apply-templates select="node() | @*"/>
+    </xsl:copy>
+  </xsl:template>
+
+  <xsl:template match="iso:pattern[@abstract='true']"/>
+
+  <xsl:template match="iso:pattern[@is-a]">
+    <xsl:copy>
+      <xsl:copy-of select="@*[not(name()='is-a')]"/>
+      <xsl:variable name="ap" select="key('ap', @is-a)"/>
+      <xsl:if test="not($ap)">
+        <xsl:message terminate="no">
+          Cannot find abstract pattern <xsl:value-of select="@is-a"/> referred from pattern <xsl:value-of select="@id"/>.
+        </xsl:message>
+      </xsl:if>
+      <xsl:if test="$ap[2]">
+        <xsl:message terminate="no">
+          More than one definitions for abstract pattern <xsl:value-of select="@is-a"/> referred from pattern <xsl:value-of select="@id"/>.
+        </xsl:message>
+      </xsl:if>
+      <xsl:apply-templates
+        select="$ap[1]/node()"
+        mode="instantiate">
+        <xsl:with-param name="params" select="iso:param"/>
+      </xsl:apply-templates>
+    </xsl:copy>
+  </xsl:template>
+
+  <xsl:template match="node()" mode="instantiate">
+    <xsl:param name="params"/>
+    <xsl:copy>
+      <xsl:apply-templates select="node() | @*" mode="instantiate">
+        <xsl:with-param name="params" select="$params"/>
+      </xsl:apply-templates>
+    </xsl:copy>
+  </xsl:template>
+
+  <xsl:template match="@*" mode="instantiate">
+    <xsl:param name="params"/>
+    <xsl:choose>
+      <xsl:when test="contains(., '$')">
+        <xsl:attribute name="{name()}">
+          <xsl:call-template name="replaceParameters">
+            <xsl:with-param name="params" select="$params"/>
+            <xsl:with-param name="value" select="."/>
+          </xsl:call-template>
+        </xsl:attribute>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:copy/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+  <xsl:template name="replaceParameters">
+    <xsl:param name="params"/>
+    <xsl:param name="value"/>
+    <xsl:choose>
+      <xsl:when test="count($params)=0">
+        <xsl:value-of select="$value"/>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:call-template name="replaceParameters">
+          <xsl:with-param name="params" select="$params[position()>1]"/>
+          <xsl:with-param name="value">
+            <xsl:call-template name="replaceParameter">
+              <xsl:with-param name="param" select="$params[1]"/>
+              <xsl:with-param name="value" select="$value"/>
+            </xsl:call-template>
+          </xsl:with-param>
+        </xsl:call-template>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+  
+  <xsl:template name="replaceParameter">
+    <xsl:param name="value"/>
+    <xsl:param name="param"/>
+    <xsl:variable name="pname" select="concat('$',  $param/@name)"/>
+    <xsl:choose>
+      <xsl:when test="not(contains($value, $pname))">
+        <xsl:value-of select="$value"/>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:variable name="before" select="substring-before($value, $pname)"/>
+        <xsl:variable name="after" select="substring-after($value, $pname)"/>
+        <xsl:value-of select="$before"/>
+        <xsl:value-of select="$param/@value"/>
+        <xsl:call-template name="replaceParameter">
+          <xsl:with-param name="param" select="$param"/>
+          <xsl:with-param name="value" select="$after"/>
+        </xsl:call-template>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+</xsl:stylesheet>
diff --git a/src/main/util/sch/iso-sch-include.xsl b/src/main/util/sch/iso-sch-include.xsl
new file mode 100644
index 0000000..07fd00f
--- /dev/null
+++ b/src/main/util/sch/iso-sch-include.xsl
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 
+    xmlns:iso="http://purl.oclc.org/dsdl/schematron" exclude-result-prefixes="iso">
+
+    <xsl:template match="/">  
+        <xsl:choose>
+            <xsl:when test="namespace-uri(/*[1])='http://relaxng.org/ns/structure/1.0'">
+                <xsl:apply-templates/>
+            </xsl:when>
+            <xsl:when test="namespace-uri(/*[1])='http://www.w3.org/2001/XMLSchema'">
+                <xsl:apply-templates/>
+            </xsl:when>
+            <xsl:when test="namespace-uri(/*[1])='http://purl.oclc.org/dsdl/schematron'">
+                <xsl:apply-templates mode="resolveIncludes" select="."/>
+            </xsl:when>
+            <xsl:otherwise>
+                <xsl:copy-of select="/"/>
+            </xsl:otherwise>
+        </xsl:choose>
+    </xsl:template>
+    
+    
+    <xsl:template match="node() | @*" mode="resolveIncludes">
+        <xsl:copy>
+            <xsl:apply-templates select="node() | @*" mode="resolveIncludes"/>
+        </xsl:copy>
+    </xsl:template>
+    
+    <xsl:template match="iso:include" mode="resolveIncludes">
+        <xsl:choose>
+            <xsl:when test="contains(@href, '#')">
+                <xsl:variable name="document-uri" select="substring-before(@href, '#')"/>
+                <xsl:variable name="fragment-id" select="substring-after(@href, '#')"/>
+                <xsl:choose>
+                    <xsl:when test="$fragment-id!=''">
+                        <xsl:variable name="doc" select="document($document-uri,.)"/>
+                        <xsl:if test="not($doc)">
+                            <xsl:message terminate="no">
+                                <xsl:text>Unable to open referenced included file: </xsl:text>
+                                <xsl:value-of select="$document-uri"/>
+                            </xsl:message>
+                        </xsl:if>
+                        <xsl:apply-templates select="$doc/iso:*[@id=$fragment-id]" mode="resolveIncludes"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                        <xsl:message terminate="no">
+                            <xsl:text>Invalid href attribute value for include: </xsl:text>
+                            <xsl:value-of select="@href"/>
+                        </xsl:message>
+                    </xsl:otherwise>
+                </xsl:choose>
+            </xsl:when>
+            <xsl:otherwise>
+                <xsl:variable name="doc" select="document(@href,.)"/>
+                <xsl:if test="not($doc)">
+                    <xsl:message terminate="no">
+                        <xsl:text>Unable to open referenced included file: </xsl:text>
+                        <xsl:value-of select="@href"/>
+                    </xsl:message>
+                </xsl:if>
+                <xsl:if test="$doc/iso:schema">
+                    <xsl:message terminate="no">
+                        <xsl:text>The Schematron include should not point to a schema element,</xsl:text>
+                        <xsl:text> it should point to an element that is valid when it replaces the include: </xsl:text>
+                        <xsl:value-of select="@href"/>
+                    </xsl:message>
+                </xsl:if>
+                <xsl:apply-templates select="$doc/iso:*" mode="resolveIncludes"/>
+            </xsl:otherwise>
+        </xsl:choose>
+    </xsl:template>
+    
+    <xsl:template match="iso:include[normalize-space(@href)='']" mode="resolveIncludes">
+        <xsl:message terminate="no">
+            <xsl:text>Invalid empty href attribute value for include.</xsl:text>
+        </xsl:message>
+    </xsl:template>
+</xsl:stylesheet>
diff --git a/src/test/java/com/adobe/epubcheck/api/AbstractEpubCheckTest.java b/src/test/java/com/adobe/epubcheck/api/AbstractEpubCheckTest.java
new file mode 100644
index 0000000..2b552df
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/api/AbstractEpubCheckTest.java
@@ -0,0 +1,191 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.api;
+
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.opf.DocumentValidator;
+import com.adobe.epubcheck.util.*;
+
+import java.io.*;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public abstract class AbstractEpubCheckTest
+{
+
+
+  private String basepath;
+
+  protected AbstractEpubCheckTest(String basepath)
+  {
+    this.basepath = basepath;
+  }
+
+  public void testValidateDocument(String fileName, List<MessageId> errors, List<MessageId> warnings)
+  {
+    testValidateDocument(fileName, errors, warnings, new ArrayList<MessageId>(), false);
+  }
+
+  public void testValidateDocument(String fileName, List<MessageId> errors, List<MessageId> warnings, List<MessageId> fatalErrors)
+  {
+    testValidateDocument(fileName, errors, warnings, fatalErrors, false);
+  }
+
+  public void testValidateDocument(String fileName, List<MessageId> errors, List<MessageId> warnings, List<MessageId> fatalErrors,
+                                   boolean verbose)
+  {
+    testValidateDocument(fileName, errors, warnings, fatalErrors, null, verbose);
+  }
+
+  public void testValidateDocument(String fileName, List<MessageId> errors, List<MessageId> warnings, String resultFile)
+  {
+    testValidateDocument(fileName, errors, warnings, new ArrayList<MessageId>(), resultFile, false);
+  }
+  static ValidationReport savedReport;
+
+  public void testValidateDocument(String fileName, List<MessageId> errors, List<MessageId> warnings, List<MessageId> fatalErrors, String resultFile, boolean verbose)
+  {
+    DocumentValidator epubCheck;
+    outWriter.printf("Starting testValidateDocument('%s')\n", fileName);
+    ValidationReport testReport;
+    if (fileName.startsWith("http://") || fileName.startsWith("https://"))
+    {
+      GenericResourceProvider resourceProvider = new URLResourceProvider(fileName);
+      try
+      {
+        testReport = savedReport = new ValidationReport(fileName);
+        epubCheck = new EpubCheck(
+            resourceProvider.getInputStream(null), testReport, fileName);
+      }
+      catch (IOException e)
+      {
+        throw new RuntimeException(e);
+      }
+    }
+    else
+    {
+      File testFile;
+      try
+      {
+        URL url = this.getClass().getResource(basepath + fileName);
+        URI uri = url.toURI();
+        testFile = new File(uri);
+      }
+      catch (URISyntaxException e)
+      {
+        throw new IllegalStateException("Cannot find test file", e);
+      }
+      if (testFile.isDirectory())
+      {
+        Archive epub = new Archive(testFile.getPath());
+        testReport = savedReport = new ValidationReport(epub.getEpubName());
+        epub.createArchive();
+        epubCheck = new EpubCheck(epub.getEpubFile(), testReport);
+      }
+      else
+      {
+        testReport = savedReport = new ValidationReport(fileName);
+        epubCheck = new EpubCheck(new File(testFile.getPath()), testReport);
+      }
+    }
+
+
+    epubCheck.validate();
+
+    if (verbose)
+    {
+      outWriter.println(testReport);
+    }
+
+    assertEquals("The error results do not match", IdsToListOfString(errors), IdsToListOfString(testReport.getErrorIds()));
+    assertEquals("The warning results do not match", IdsToListOfString(warnings), IdsToListOfString(testReport.getWarningIds()));
+    assertEquals("The fatal error results do not match", IdsToListOfString(fatalErrors), IdsToListOfString(testReport.getFatalErrorIds()));
+
+    if (resultFile != null)
+    {
+      URL fileURL = this.getClass().getResource(basepath + resultFile);
+      File f;
+      try
+      {
+        f = new File(fileURL.toURI());
+      }
+      catch (URISyntaxException e)
+      {
+        throw new IllegalStateException("Cannot find test file", e);
+      }
+      assertTrue(f.getAbsolutePath() + " doesn't exist", f.exists());
+      BufferedReader in = null;
+      try
+      {
+        in = new BufferedReader(
+            new InputStreamReader(new FileInputStream(f), "utf-8"));
+        String line;
+        while ((line = in.readLine()) != null)
+        {
+          if (line.trim().length() != 0 && !line.startsWith("#"))
+          { // allow comments
+            assertTrue(line + " not found", testReport.hasInfoMessage(line));
+          }
+        }
+      }
+      catch (IOException e)
+      { /* IGNORE */
+      }
+      finally
+      {
+        if (in != null)
+        {
+          try
+          {
+            in.close();
+          }
+          catch (IOException e)
+          { /* IGNORE */ }
+        }
+      }
+    }
+    outWriter.printf("Completed testValidateDocument('%s')\n", fileName);
+  }
+
+  private final static String messageName = MessageId.class.getSimpleName();
+  private static List<String> IdsToListOfString(List<MessageId> ids)
+  {
+    if (ids != null && ids.size() > 0)
+    {
+      List<String> list = new ArrayList<String>(ids.size());
+      for (MessageId id : ids)
+      {
+        String s = String.format("%1$s.%2$s", messageName, id.name());
+        list.add(s);
+      }
+      return list;
+    }
+    return new ArrayList<String>(0);
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/api/Epub20CheckExpandedTest.java b/src/test/java/com/adobe/epubcheck/api/Epub20CheckExpandedTest.java
new file mode 100644
index 0000000..1fbf127
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/api/Epub20CheckExpandedTest.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.api;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.junit.Test;
+
+import com.adobe.epubcheck.messages.MessageId;
+
+public class Epub20CheckExpandedTest extends AbstractEpubCheckTest
+{
+
+
+  public Epub20CheckExpandedTest()
+  {
+    super("/20/expanded/");
+  }
+
+  @Test
+  public void testValidateEPUBPLoremBasic()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/lorem/lorem-basic", expectedErrors, expectedWarnings, "valid/lorem/lorem-basic.txt");
+  }
+
+  @Test
+  public void testValidateEPUBMimetype()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.PKG_007, MessageId.OPF_022, MessageId.PKG_007, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/lorem-mimetype", expectedErrors, expectedWarnings, "invalid/lorem-mimetype.txt");
+  }
+
+  @Test
+  public void testValidateEPUBUidSpaces()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //ascertain that leading/trailing space in 2.0 id values is accepted
+    //issue 163
+    testValidateDocument("valid/lorem-uidspaces", expectedErrors, expectedWarnings, "valid/lorem-uidspaces.txt");
+  }
+
+  @Test
+  public void testValidateEPUB20_circularFallback()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_045, MessageId.OPF_045, MessageId.OPF_045, MessageId.OPF_045, MessageId.MED_003);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/fallbacks-circular/", expectedErrors, expectedWarnings, "invalid/fallbacks-circular.txt");
+  }
+
+  @Test
+  public void testValidateEPUB20_okFallback()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/fallbacks/", expectedErrors, expectedWarnings, "valid/fallbacks.txt");
+  }
+
+  @Test
+  public void testValidateEPUB20_loremBasicDual()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/lorem-basic-dual/", expectedErrors, expectedWarnings, "valid/lorem-basic-dual.txt");
+  }
+
+  @Test
+  public void testValidateEPUB20_guideWithNcx()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_032);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/lorem-dual-guide/", expectedErrors, expectedWarnings, "valid/lorem-dual-guide.txt");
+  }
+
+  @Test
+  public void testValidateEPUB20_guideBrokenLink()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_032, MessageId.OPF_031, MessageId.RSC_007);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/lorem-dual-guide/", expectedErrors, expectedWarnings, "invalid/lorem-dual-guide.txt");
+  }
+
+  @Test
+  public void testValidateEPUB20_customNsAttr()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/custom-ns-attr/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB20_issue205()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/issue205/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB20_issue182()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_034);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //repeated spine items
+    testValidateDocument("invalid/issue182/", expectedErrors, expectedWarnings);
+  }
+	
+	@Test
+	public void testValidateEPUB20_issue256() {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    // Ignore .DS_Store, ._DS_Store, Thumbs.db, ehthumbs.db, .svn/, .git/ files in expanded mode. Valid EPUB expected.
+		testValidateDocument("valid/issue256/", expectedErrors, expectedWarnings);
+	}
+
+	@Test
+	public void testValidateEPUB20_issue267() {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/issue267/", expectedErrors, expectedWarnings, "valid/issue267.txt");
+	}
+	
+  @Test
+  public void testXHTMLExtension()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.HTM_014);
+    testValidateDocument("invalid/xhtml-extension", expectedErrors, expectedWarnings);
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/api/Epub20CheckTest.java b/src/test/java/com/adobe/epubcheck/api/Epub20CheckTest.java
new file mode 100644
index 0000000..0b3f212
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/api/Epub20CheckTest.java
@@ -0,0 +1,318 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.api;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.junit.Test;
+
+import com.adobe.epubcheck.messages.MessageId;
+
+public class Epub20CheckTest extends AbstractEpubCheckTest
+{
+
+
+  public Epub20CheckTest()
+  {
+    super("/20/epub/");
+  }
+
+  @Test
+  public void testValidateEPUBvalid20()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/lorem.epub", expectedErrors, expectedWarnings, "valid/lorem.txt");
+  }
+
+  @Test
+  public void testValidateEPUBInvalid20()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.PKG_007);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/lorem-mimetype.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBPageMap20()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("PageMap20.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBNoUniqueId20()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.OPF_030);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.OPF_055);
+    testValidateDocument("OPFIllegalElement_UniqueID20.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBOPFIllegalElement20()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.OPF_055);
+    testValidateDocument("OPFIllegalElement20.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBUnmanifested20()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.OPF_055, MessageId.OPF_003, MessageId.OPF_003);
+    testValidateDocument("Unmanifested20.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBPFileDeclaredInContainerNotOpf20()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("ContainerNotOPF20.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBFileInMetaInfIgnored()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("MetaInfNotOPF20.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBNullDate20()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_054);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.OPF_055);
+    testValidateDocument("NullDate20.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBNon8601Date20()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_054);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.OPF_055);
+    testValidateDocument("Non8601Date20.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBUnmanifestedGuideItems20()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_031, MessageId.RSC_007);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.OPF_055);
+    testValidateDocument("UnmanifestedGuideItems20.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBEmptyDir20()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.OPF_055, MessageId.PKG_014);
+    testValidateDocument("EmptyDir20.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBPvalid20()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.OPF_055);
+    testValidateDocument("Test20.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBPNoRootFiles()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_024, MessageId.RSC_003);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    List<MessageId> expectedFatalErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedFatalErrors, MessageId.OPF_019);
+    testValidateDocument("/invalid/no-rootfile.epub", expectedErrors, expectedWarnings, expectedFatalErrors);
+  }
+
+  @Test
+  public void testValidateEPUBPBadOpfNamespace()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_024, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.OPF_030);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.OPF_003, MessageId.OPF_003);
+    List<MessageId> expectedFatalErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedFatalErrors, MessageId.OPF_019);
+    testValidateDocument("/invalid/bad_opf_namespace.epub", expectedErrors, expectedWarnings, expectedFatalErrors);
+  }
+
+  @Test
+  public void testValidateEPUB_mimetypeAndVersion()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.PKG_006, MessageId.OPF_024, MessageId.OPF_001);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    List<MessageId> expectedFatalErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedFatalErrors, MessageId.OPF_019);
+    testValidateDocument("/invalid/mimetypeAndVersion.epub", expectedErrors, expectedWarnings, expectedFatalErrors);
+  }
+
+  @Test
+  public void testValidateEPUB_noLinearYes()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_033);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.OPF_003, MessageId.OPF_003, MessageId.OPF_003);
+    //+ 3 warnings that don't relate to linear
+    testValidateDocument("/invalid/no-linear-yes.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB_unusedImages()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_031, MessageId.RSC_007);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.OPF_003, MessageId.PKG_010, MessageId.OPF_003, MessageId.OPF_003, MessageId.PKG_010, MessageId.OPF_003);
+    //4 unused images in subfolder
+    testValidateDocument("/invalid/issue89.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB_issue138()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.OPF_055);
+    //warning for empty dc:title
+    testValidateDocument("/invalid/issue138.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB_ncxDupeID()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("/invalid/ncx-dupe-id.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB_unresolvedInternalLink()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_012);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("/invalid/unresolved-internal-xhtml-link.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBvalidIssue169()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/issue169.epub", expectedErrors, expectedWarnings, "valid/issue169.txt");
+  }
+
+  @Test // STA - This test LOCKS UP!!!!
+  public void testValidateEPUBvalidIssue194_1()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.HTM_009);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/issue194.bad.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBvalidIssue194_2()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/issue194.good.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30Issue170()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_032);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //ncx references not allowed in guide
+    testValidateDocument("invalid/issue170.epub", expectedErrors, expectedWarnings);
+	}
+	
+	@Test
+	public void testMissingFullpathAttributeIssue236() {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_001, MessageId.OPF_017, MessageId.OPF_016);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    List<MessageId> fatalErrors = new ArrayList<MessageId>();
+    //container.xml missing @full-path attribute or @full-path is empty
+		// issue 95 / issue 236
+		testValidateDocument("invalid/issue236.epub", expectedErrors, expectedWarnings, fatalErrors);
+	}
+	
+	@Test
+	public void testFilenameContainsSpacesIssue239() {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.PKG_010);
+    testValidateDocument("invalid/filenameSpacesErrorTwice_Issue239.epub", expectedErrors, expectedWarnings);
+  }
+	
+	@Test
+	public void testNcxIdIssue313() {
+		// ID syntax in NCX files should be checked
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/issue313.epub", expectedErrors, expectedWarnings);
+	}
+
+	@Test
+	public void testLinkedStylesheetCaseInsensitiveIssue316() {
+		// rel="stylesheet" must be checked case-insensitive
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/issue316.epub", expectedErrors, expectedWarnings);
+    List<MessageId> fatalErrors = new ArrayList<MessageId>();
+    testValidateDocument("invalid/issue316.epub", expectedErrors, expectedWarnings, fatalErrors);
+	}
+}
diff --git a/src/test/java/com/adobe/epubcheck/api/Epub30CheckExpandedTest.java b/src/test/java/com/adobe/epubcheck/api/Epub30CheckExpandedTest.java
new file mode 100644
index 0000000..c9404c8
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/api/Epub30CheckExpandedTest.java
@@ -0,0 +1,707 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.api;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.junit.Test;
+
+import com.adobe.epubcheck.messages.MessageId;
+
+public class Epub30CheckExpandedTest extends AbstractEpubCheckTest
+{
+
+
+  public Epub30CheckExpandedTest()
+  {
+    super("/30/expanded/");
+  }
+
+  @Test
+  public void testValidateEPUBPLoremBasic()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/lorem-basic", expectedErrors, expectedWarnings, "valid/lorem-basic.txt");
+  }
+
+  @Test
+  public void testValidateEPUBPLoremMultipleRenditions()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/lorem-xrenditions", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBPLoremMultipleRenditionsUnmanifested()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.OPF_003);
+    testValidateDocument("invalid/lorem-xrenditions-unmanifested", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBWastelandBasic()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/wasteland-basic", expectedErrors, expectedWarnings, "valid/wasteland-basic.txt");
+  }
+
+  @Test
+  public void testValidateEPUBLoremAudio()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.OPF_056);
+    testValidateDocument("valid/lorem-audio", expectedErrors, expectedWarnings, "valid/lorem-audio.txt");
+  }
+
+  @Test
+  public void testValidateEPUBLoremxhtmlrng1()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/lorem-xhtml-rng-1", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBLoremxhtmlsch1()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/lorem-xhtml-sch-1", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBPLoremBasicMathml()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/lorem-basic-mathml", expectedErrors, expectedWarnings);
+  }
+  
+  @Test
+  public void testValidateEPUBPMathmlNoAlt()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.ACC_009);
+    testValidateDocument("invalid/lorem-mathml-noalt", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBPLoremMimetype()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.PKG_007, MessageId.PKG_007);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/lorem-mimetype", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBPLoremMimetype2()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.PKG_007, MessageId.PKG_007);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/lorem-mimetype-2", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBPLoremBasicSwitch()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/lorem-basic-switch", expectedErrors, expectedWarnings, "valid/lorem-basic-switch.txt");
+  }
+
+  @Test
+  public void testValidateEPUBPLoremLink()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/lorem-link", expectedErrors, expectedWarnings, "valid/lorem-link.txt");
+  }
+
+  @Test
+  public void testValidateEPUBPLoremForeign()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/lorem-foreign", expectedErrors, expectedWarnings, "valid/lorem-foreign.txt");
+  }
+
+  @Test
+  public void testValidateEPUBPLoremObjectFallbacks()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/lorem-object-fallbacks", expectedErrors, expectedWarnings, "valid/lorem-object-fallbacks.txt");
+  }
+
+  @Test
+  public void testValidateEPUBPLoremBindings()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/lorem-bindings", expectedErrors, expectedWarnings, "valid/lorem-bindings.txt");
+  }
+
+  @Test
+  public void testValidateEPUBPLoremInvalidBindings()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.MED_002);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/lorem-bindings", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBPLoremPoster()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/lorem-poster", expectedErrors, expectedWarnings, "valid/lorem-poster.txt");
+  }
+
+  @Test
+  public void testValidateEPUBPLoremSvg()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/lorem-svg", expectedErrors, expectedWarnings, "valid/lorem-svg.txt");
+  }
+
+  @Test
+  public void testValidateEPUBPLoremImage()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/lorem-image", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBPLoremSvgHyperlink()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+      testValidateDocument("valid/lorem-svg-hyperlink", expectedErrors, expectedWarnings, "valid/lorem-svg-hyperlink.txt");
+  }
+  
+  @Test
+  public void testValidateEPUBPLoremSvgHyperlinkNoTitle()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.ACC_011);
+    testValidateDocument("invalid/lorem-svg-hyperlink-notitle", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBPInvalidLoremPoster()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.MED_001);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/lorem-poster", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBPInvalidLoremForeign()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_014);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/lorem-foreign", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30_navInvalid()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/nav-invalid/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30_issue134_1()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    // svg in both contentdocs, opf props set right
+    testValidateDocument("valid/lorem-svg-dual/", expectedErrors, expectedWarnings, "valid/lorem-svg-dual.txt");
+  }
+
+  @Test
+  public void testValidateEPUB30_issue134_2()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_014, MessageId.OPF_014);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    // svg in both contentdocs, no opf props set right
+    testValidateDocument("invalid/lorem-svg-dual/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30_issue134_3()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_014);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    // svg in both contentdocs, only one opf prop set right
+    testValidateDocument("invalid/lorem-svg-dual-2/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30_CSSImport_valid()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/lorem-css-import/", expectedErrors, expectedWarnings, "valid/lorem-css-import.txt");
+  }
+
+  @Test
+  public void testValidateEPUB30_CSSImport_invalid_1()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_001, MessageId.RSC_001);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/lorem-css-import-1/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30_CSSImport_invalid_2()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_008);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.OPF_003);
+    testValidateDocument("invalid/lorem-css-import-2/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30_CSSURLS_1()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_007);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //'imgs/table_header_bg_uni.jpg': referenced resource missing in the package
+    testValidateDocument("invalid/lorem-css-urls-1/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30_CSSURLS_2()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_027);
+    //'imgs/table_header_bg_uni.jpg': referenced resource missing in the package
+    testValidateDocument("invalid/lorem-css-urls-2/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30_CSSURLS_3()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.CSS_017);
+    //'imgs/table_header_bg_uni.jpg': referenced resource missing in the package
+    testValidateDocument("invalid/lorem-css-urls-3/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30_CSSFontFace_valid()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/wasteland-otf/", expectedErrors, expectedWarnings, "valid/wasteland-otf.txt");
+  }
+
+  @Test
+  public void testValidateEPUB30_CSSFontFace_invalid()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_001, MessageId.RSC_001, MessageId.RSC_001);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //referenced fonts missing
+    testValidateDocument("invalid/wasteland-otf/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30_CSSEncoding_invalid()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.CSS_003);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //@charset not utf
+    testValidateDocument("invalid/lorem-css-enc/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+	public void testValidateEPUB30_CSSMediaType_invalid()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+
+    Collections.addAll(expectedWarnings,MessageId.CSS_010);
+    //CSS with declared type 'xhtml/css' should raise a "no fallback" error
+		testValidateDocument("invalid/lorem-css-wrongtype/", expectedErrors, expectedWarnings);
+	}
+	@Test
+  public void testValidateEPUB30_remoteAudio_valid()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+	
+
+    // audio element with @src attribute
+    testValidateDocument("valid/lorem-remote/", expectedErrors, expectedWarnings, "valid/lorem-remote.txt");
+  }
+
+  @Test
+	public void testValidateEPUB30_remoteHttpsAudio_valid()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+
+    // remote audio element via HTTPS
+		testValidateDocument("valid/lorem-remote-https/", expectedErrors, expectedWarnings);
+	}
+	
+	@Test
+	public void testValidateEPUB30_remoteUrlWithQuery_valid()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+
+    // remote audio element via HTTPS
+		testValidateDocument("valid/lorem-remote-queryurl/", expectedErrors, expectedWarnings);
+	}
+
+	@Test
+  public void testValidateEPUB30_remoteAudioSources_valid()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+
+    // audio element with sources children
+    testValidateDocument("valid/lorem-remote-2/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30_remoteImg_invalid()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_006, MessageId.OPF_010);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //remote resource of invalid type (img) declared in opf
+    testValidateDocument("invalid/lorem-remote/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30_remoteImg_invalid2()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_014);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //remote audio, declared in opf, but missing 'remote-resources' property
+    testValidateDocument("invalid/lorem-remote-2/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30_remoteAudio_invalid()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.MED_002, MessageId.RSC_008);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //remote audio, not declared in the manifest
+    // we should only get one error here:
+    // the "no fallback" error is extra since no type info
+    // can be retrieved from the manifest...
+    testValidateDocument("invalid/lorem-remote-3/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30_remoteAudioSources_invalid()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.MED_002, MessageId.RSC_008, MessageId.RSC_008);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //audio element with a list of source children pointing to remote resources
+    // not declared in the manifest
+    // we should only get two errors here:
+    // the "no fallback" error is extra since no type info
+    // can be retrieved from the manifest...
+    testValidateDocument("invalid/lorem-remote-4/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30_circularFallback()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_045, MessageId.OPF_045, MessageId.OPF_045, MessageId.OPF_045, MessageId.MED_003);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/fallbacks-circular/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30_nonresolvingFallback()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.OPF_040, MessageId.MED_003);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //dupe messages, tbf
+    testValidateDocument("invalid/fallbacks-nonresolving/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30_okFallback()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/fallbacks/", expectedErrors, expectedWarnings, "valid/fallbacks.txt");
+  }
+
+  @Test
+  public void testValidateEPUB30_svgCoverImage()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/svg-cover/", expectedErrors, expectedWarnings, "valid/svg-cover.txt");
+  }
+
+  @Test
+  public void testValidateEPUB30_svgInSpine()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //svg in spine, svg cover image
+    testValidateDocument("valid/svg-in-spine/", expectedErrors, expectedWarnings, "valid/svg-in-spine.txt");
+  }
+
+  @Test
+  public void testValidateEPUB30_videoAudioTrigger()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/cc-shared-culture/", expectedErrors, expectedWarnings, "valid/cc-shared-culture.txt");
+  }
+
+  @Test
+  public void testValidateEPUB30_InvalidLinks()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_007, MessageId.RSC_012, MessageId.RSC_012, MessageId.RSC_012);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+
+    /*
+       * the valid counterpart is in the zipped section
+       *
+       * - one broken file ref in navdoc
+       * - one broken frag ref in navdoc
+       * - one broken internal frag ref in overview
+       * - one broken crossdoc frag ref in overview
+       */
+
+    testValidateDocument("invalid/epub30-spec/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30_basicDual()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/lorem-basic-dual/", expectedErrors, expectedWarnings, "valid/lorem-basic-dual.txt");
+  }
+
+  @Test
+  public void testValidateEPUB30_Base()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_006, MessageId.RSC_006);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //<base href set, see issue 155
+    testValidateDocument("invalid/lorem-basic-dual-base/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30_InvalidContainer()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/lorem-container/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30_InvalidSignatures()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/lorem-signatures/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30_InvalidEncryption()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.OPF_003, MessageId.PKG_010);
+    testValidateDocument("invalid/lorem-encryption/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30_customNsAttr()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/custom-ns-attr/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testIssue188()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //Image file name containing '+'
+    testValidateDocument("valid/issue188/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testIssue189()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //element "somebadxhtmlformatting" not allowed here
+    testValidateDocument("invalid/issue189/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testIssue198()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    //Collections.addAll(expectedErrors, );
+
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //also data-* removal
+    testValidateDocument("valid/issue198/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testIssue211a()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //figcaption and scoped styles alt 1
+    testValidateDocument("valid/issue211a/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testIssue211b()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //figcaption and scoped styles alt 2
+    testValidateDocument("valid/issue211b/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testIssue225()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //2 @href values 0-length and empty after ws norm
+    //issue225 asked for warning here, but we give none
+    //until we have a compat hint message type; the empty
+    //string is a valid URI
+    testValidateDocument("valid/issue225/", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testIssue226()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/issue226/", expectedErrors, expectedWarnings);
+  }
+	
+	@Test
+	public void testIssue237() {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    // namespace uri in css is not a remote resource...
+		testValidateDocument("valid/issue237/", expectedErrors, expectedWarnings);
+	}
+	
+	@Test
+	public void testIssue249() {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.OPF_018);
+		testValidateDocument("valid/issue249/", expectedErrors, expectedWarnings);
+	}
+
+	@Test
+	public void testValidateEPUB20_issue267() {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/issue267/", expectedErrors, expectedWarnings, "valid/issue267.txt");
+	}
+	
+	@Test
+	public void testIssue270() {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/issue270/", expectedErrors, expectedWarnings);
+	}
+	
+	@Test
+	public void testCollectionPreview() {
+	  List<MessageId> expectedErrors = new ArrayList<MessageId>();
+	  List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+	  List<MessageId> expectedFatals = new ArrayList<MessageId>();
+	  testValidateDocument("valid/collections-preview/", expectedErrors, expectedWarnings, expectedFatals,true);
+	}
+
+  @Test
+  public void testXHTMExtension()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    List<MessageId> expectedFatals = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.HTM_014a);
+    testValidateDocument("invalid/xhtml-extension", expectedErrors, expectedWarnings, expectedFatals, true);
+  }
+
+}
diff --git a/src/test/java/com/adobe/epubcheck/api/Epub30CheckTest.java b/src/test/java/com/adobe/epubcheck/api/Epub30CheckTest.java
new file mode 100644
index 0000000..29afc32
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/api/Epub30CheckTest.java
@@ -0,0 +1,308 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.api;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.junit.Test;
+
+import com.adobe.epubcheck.messages.MessageId;
+
+public class Epub30CheckTest extends AbstractEpubCheckTest
+{
+
+
+  public Epub30CheckTest()
+  {
+    super("/30/epub/");
+  }
+  // TODO -- check for fallback cycles
+
+  @Test
+  public void testValidateEPUBPFallbackCycle()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_045, MessageId.OPF_044, MessageId.OPF_045, MessageId.OPF_045, MessageId.OPF_045, MessageId.OPF_045);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/fallback-cycle.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBPvalid30()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/lorem.epub", expectedErrors, expectedWarnings, "valid/lorem.txt");
+  }
+
+  @Test
+  public void testValidateEPUBTestSvg()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/test_svg.epub", expectedErrors, expectedWarnings, "valid/test_svg.txt");
+  }
+
+  @Test
+  public void testValidateEPUBInvalidNcx()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_012, MessageId.RSC_012);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/invalid-ncx.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBMp3()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/mp3-in-manifest.epub", expectedErrors, expectedWarnings, "valid/mp3-in-manifest.txt");
+  }
+
+  @Test
+  public void testValidateEPUBInvalidMp3()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_043);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/mp3-in-spine-no-fallback.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBMp3WithFallback()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/mp3-with-fallback.epub", expectedErrors, expectedWarnings, "valid/mp3-with-fallback.txt");
+  }
+
+  @Test
+  public void testValidateEPUBFontNoFallback()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_043);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/font_no_fallback.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUBFontFallbackChain()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/font_fallback_chain.epub", expectedErrors, expectedWarnings, "valid/font_fallback_chain.txt");
+  }
+
+  @Test
+  public void testValidateEPUBvalid30()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/lorem.epub", expectedErrors, expectedWarnings, "valid/lorem.txt");
+  }
+
+  @Test
+  public void testValidateEPUB30_xhtmlsch()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    // 1 schematron error from xhtml validation
+    testValidateDocument("invalid/lorem-xht-sch-1.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30_xhtmlrng()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    // 1 rng error from xhtml validation
+    testValidateDocument("invalid/lorem-xht-rng-1.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30_navInvalid()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    // invalid nav issue reported by MattG
+    testValidateDocument("invalid/nav-invalid.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30ValidExtension1()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.PKG_016);
+    testValidateDocument("valid/extension-1.ePub", expectedErrors, expectedWarnings, "valid/extension-1.txt");
+  }
+
+  @Test
+  public void testValidateEPUB30CSSProfile()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //issue145; CSS3 pseudoselectors causing css2 lexers to bail out
+    testValidateDocument("valid/issue145.epub", expectedErrors, expectedWarnings, "valid/issue145.txt");
+  }
+
+  @Test
+  public void testValidateEPUB30Issue158()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //bad warning message, this should pass without warnings
+    testValidateDocument("valid/issue158.epub", expectedErrors, expectedWarnings, "valid/issue158.txt");
+  }
+
+  @Test
+  public void testValidateEPUB30Issue137a()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_006);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.OPF_055);
+    testValidateDocument("invalid/issue137a.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30Issue137b()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_006);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.OPF_055);
+    testValidateDocument("invalid/issue137b.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30specValid()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/epub30-spec.epub", expectedErrors, expectedWarnings, "valid/epub30-spec.txt");
+  }
+
+  @Test
+  public void testValidateEPUB30Issue203()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.HTM_004);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.HTM_015);
+    testValidateDocument("invalid/issue203.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30Issue176()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_001, MessageId.RSC_001, MessageId.RSC_001, MessageId.RSC_001);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.HTM_016, MessageId.HTM_016, MessageId.HTM_016);
+    testValidateDocument("invalid/issue176.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30Issue221()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.CSS_008, MessageId.CSS_008, MessageId.RSC_007, MessageId.RSC_007, MessageId.RSC_007, MessageId.RSC_007, MessageId.RSC_007, MessageId.RSC_007);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //syntax error in css that should not mask font-face
+    testValidateDocument("invalid/issue221.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30FontObfuscation()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.CSS_017);
+    testValidateDocument("valid/font-obfuscation.epub", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateEPUB30CFI()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/georgia-cfi.epub", expectedErrors, expectedWarnings);
+  }
+
+	@Test
+	public void testFilenameContainsSpacesIssue239() {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.PKG_010);
+    testValidateDocument("invalid/issue239.epub", expectedErrors, expectedWarnings);
+	}
+	
+	@Test
+	public void testDuplicateZipEntriesIssue265() {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+     List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+
+    // duplicate entries should raise an error
+		testValidateDocument("invalid/issue265.epub", expectedErrors, expectedWarnings);
+	}
+	
+	@Test
+	public void testDuplicateZipEntriesIssue265b() {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.PKG_012, MessageId.OPF_061, MessageId.OPF_003, MessageId.PKG_012);
+    // non-unique entry names (after NFC normalization) should raise a warning
+		testValidateDocument("invalid/issue265b.epub", expectedErrors, expectedWarnings);
+	}
+	
+	@Test
+	public void testDuplicateZipEntriesIssue265c() {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_060);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    // non-unique entry names (after case normalization) should raise an error
+		testValidateDocument("invalid/issue265c.epub", expectedErrors, expectedWarnings);
+	}
+	
+	@Test
+	public void testIssue262() {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/issue262.epub", expectedErrors, expectedWarnings);
+	}
+	@Test
+	public void testIssue271() { 
+		// Adobe page template xpgt with correct css fallback
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/issue271_xpgt_correctFallback.epub", expectedErrors, expectedWarnings);
+	}
+	
+}
diff --git a/src/test/java/com/adobe/epubcheck/cli/CLITest.java b/src/test/java/com/adobe/epubcheck/cli/CLITest.java
new file mode 100644
index 0000000..1bcef41
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/cli/CLITest.java
@@ -0,0 +1,229 @@
+package com.adobe.epubcheck.cli;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.net.URL;
+
+import org.junit.Test;
+
+import com.adobe.epubcheck.tool.EpubChecker;
+
+public class CLITest
+{
+  private static String epubPath = "/30/epub/";
+  private static String expPath = "/30/expanded/";
+  private static String singlePath = "/30/single/";
+
+  @Test
+  public void testNPE()
+  {
+    assertEquals(1, run(null));
+  }
+
+  //@Test // STA - test passes in UI but fails in Maven
+  public void testValidEPUB()
+  {
+    assertEquals(0, run(new String[]{epubPath + "valid/lorem.epub"}));
+  }
+
+  @Test
+  public void testValidEPUBArchive()
+  {
+    assertEquals(0, run(new String[]{expPath + "valid/lorem-basic-ncx/", "-mode", "exp", "-save"}));
+		
+		// since issue #255 we need the absolute path to check the saved outfile
+		File baseDirParent = new File(getAbsoluteBasedir(expPath + "valid/lorem-basic-ncx/")).getParentFile();
+		File out = new File(baseDirParent + File.separator + "lorem-basic-ncx.epub");
+		
+    assertTrue(out.exists());
+    if (out.exists())
+    {
+      out.delete();
+    }
+  }
+
+  @Test
+  public void testInvalidEPUB()
+  {
+    assertEquals(1, run(new String[]{epubPath + "invalid/lorem-xht-sch-1.epub"}));
+  }
+
+  @Test
+  public void testValidExp()
+  {
+    assertEquals(0, run(new String[]{expPath + "valid/lorem-basic/", "-mode", "exp"}));
+  }
+
+  @Test
+  public void testInvalidExp()
+  {
+    assertEquals(1, run(new String[]{expPath + "invalid/lorem-xhtml-rng-1/", "-mode", "exp"}));
+  }
+
+  @Test
+  public void testValidSingle()
+  {
+    assertEquals(0, run(new String[]{singlePath + "nav/valid/nav001.xhtml", "-mode", "nav"}));
+  }
+
+  @Test
+  public void testInvalidSingle()
+  {
+    assertEquals(1, run(new String[]{singlePath + "nav/invalid/noTocNav.xhtml", "-mode", "nav"}));
+  }
+
+	@Test
+	public void testValidExtension1()
+  {
+		assertEquals(0, run(new String[]{epubPath + "valid/extension-1.ePub"}));
+	}
+	
+	@Test
+	public void testOutputXMLCreation()
+  {
+		File xmlOut1 = new File("outfile.xml");
+		if(xmlOut1.exists()) xmlOut1.delete();
+		
+		assertEquals(0, run(new String[]{epubPath + "valid/lorem.epub", "-out", "outfile.xml"}));	
+		
+		assertTrue(xmlOut1.exists());
+		if(xmlOut1.exists()) xmlOut1.delete();
+	}
+
+  @Test
+	public void testOutputXMLCreation_ModeExpanded()
+  {
+		File xmlOut2 = new File("outfile2.xml");
+		if(xmlOut2.exists())
+    {
+      xmlOut2.delete();
+    }
+		
+		assertEquals(1, run(new String[]{expPath + "invalid/lorem-xhtml-rng-1/", "-mode", "exp", "-out", "outfile2.xml"}));	
+		
+		assertTrue(xmlOut2.exists());
+		if(xmlOut2.exists())
+    {
+      xmlOut2.delete();
+    }
+	}
+	
+	@Test
+	public void testQuietRun()
+  {
+  	PrintStream outOrig = System.out;
+		CountingOutStream outCount = new CountingOutStream();
+		System.setOut(new PrintStream(outCount));
+		String epubFilePath = getAbsoluteBasedir(epubPath + "valid/lorem.epub");
+    EpubChecker epubChecker = new EpubChecker();
+		int result = epubChecker.run(new String[]{ epubFilePath, "--quiet", "--failonwarnings" });
+		System.setOut(outOrig);
+		assertEquals(0, result);
+		// System.err.println("Output [" + outCount.getValue() + "]");
+		assertEquals("Output [" + outCount.getValue() + "]", 0, outCount.getCounts());
+	}
+
+	@Test
+	public void testQuietRunWithOutput()
+  {
+		final String xmlOutFileName = "outfile4.xml";
+		final File xmlOut = new File(xmlOutFileName);
+		if(xmlOut.exists()) xmlOut.delete();
+
+		PrintStream outOrig = System.out;
+		CountingOutStream outCount = new CountingOutStream();
+		System.setOut(new PrintStream(outCount));
+		String epubFilePath = getAbsoluteBasedir(epubPath + "valid/lorem.epub");
+    EpubChecker epubChecker = new EpubChecker();
+    int result = epubChecker.run(new String[]{ epubFilePath, "--quiet", "--out", xmlOutFileName});
+		System.setOut(outOrig);
+		assertEquals(0, result);
+		// System.err.println("Output [" + outCount.getValue() + "]");
+		assertEquals("Output [" + outCount.getValue() + "]", 0, outCount.getCounts());
+
+		assertTrue(xmlOut.exists());
+		if(xmlOut.exists())
+    {
+      xmlOut.delete();
+    }
+  }
+
+  private int run(String[] args, boolean verbose)
+  {
+    PrintStream outOrig = System.out;
+    PrintStream errOrig = System.err;
+    if (!verbose)
+    {
+      System.setOut(new NullPrintStream());
+      System.setErr(new NullPrintStream());
+    }
+
+    if (args != null)
+    {
+			args[0] = getAbsoluteBasedir(args[0]);
+    }
+    else
+    {
+      return 1;
+    }
+    EpubChecker checker = new EpubChecker();
+    int result = checker.run(args);
+    System.setOut(outOrig);
+    System.setErr(errOrig);
+    return result;
+  }
+
+  public int run(String[] args)
+  {
+    return run(args, false);
+  }
+
+	private String getAbsoluteBasedir(String base)
+  {
+		URL fileURL = this.getClass().getResource(base);
+		return fileURL!=null?fileURL.getPath():base;
+	}
+
+	class CountingOutStream extends OutputStream
+  {
+		int counts;
+		StringBuilder sb = new StringBuilder();
+		
+		public int getCounts()
+    {
+      return counts;
+    }
+
+    public String getValue()
+    {
+      return sb.toString();
+    }
+		
+    @Override
+    public void write(int b)
+    {
+      sb.append((char)b);
+        counts++;
+    }
+  }
+	
+	class NullPrintStream extends PrintStream
+  {
+		public NullPrintStream()
+    {
+			super(new OutputStream()
+        {
+          @Override
+          public void write(int b) throws IOException
+          {
+          }
+        });
+    }
+  }
+}	
+	
diff --git a/src/test/java/com/adobe/epubcheck/nav/NavCheckerTest.java b/src/test/java/com/adobe/epubcheck/nav/NavCheckerTest.java
new file mode 100644
index 0000000..edcfd57
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/nav/NavCheckerTest.java
@@ -0,0 +1,183 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.nav;
+
+import static org.junit.Assert.assertEquals;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.junit.Test;
+
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.FileResourceProvider;
+import com.adobe.epubcheck.util.GenericResourceProvider;
+import com.adobe.epubcheck.util.Messages;
+import com.adobe.epubcheck.util.URLResourceProvider;
+import com.adobe.epubcheck.util.ValidationReport;
+import com.adobe.epubcheck.util.outWriter;
+
+public class NavCheckerTest
+{
+
+  private static String basepath = "/30/single/nav/";
+
+  public void testValidateDocument(String fileName, List<MessageId> errors, List<MessageId> warnings)
+  {
+    testValidateDocument(fileName, errors, warnings, new ArrayList<MessageId>(), false);
+
+  }
+
+  public void testValidateDocument(String fileName, List<MessageId> errors, List<MessageId> warnings, List<MessageId> fatalErrors,
+                                   boolean verbose)
+  {
+    ValidationReport testReport = new ValidationReport(fileName, String.format(
+        Messages.get("single_file"), "nav", "3.0"));
+
+    GenericResourceProvider resourceProvider;
+    if (fileName.startsWith("http://") || fileName.startsWith("https://"))
+    {
+      resourceProvider = new URLResourceProvider(fileName);
+    }
+    else
+    {
+      URL fileURL = this.getClass().getResource(basepath + fileName);
+      String filePath = fileURL != null ? fileURL.getPath() : basepath + fileName;
+      resourceProvider = new FileResourceProvider(filePath);
+    }
+
+    NavChecker navChecker = new NavChecker(resourceProvider, testReport, basepath
+        + fileName, "application/xhtml+xml", EPUBVersion.VERSION_3);
+
+    navChecker.validate();
+
+    if (verbose)
+    {
+      outWriter.println(testReport);
+    }
+
+    assertEquals("The error results do not match", errors, testReport.getErrorIds());
+    assertEquals("The warning results do not match", warnings, testReport.getWarningIds());
+    assertEquals("The fatal error results do not match", fatalErrors, testReport.getFatalErrorIds());
+  }
+
+  // XXX The mimeType of the nav document should be nav; this way it can be
+  // tested as a nav file
+  @Test
+  public void testValidateDocumentValidMinimalNav()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/minimal.xhtml", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateDocumentValidNav001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    List<MessageId> expectedFatals = new ArrayList<MessageId>();
+    testValidateDocument("valid/nav001.xhtml", expectedErrors, expectedWarnings,expectedFatals,false);
+  }
+
+  @Test
+  public void testValidateDocumentNoTocNav()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/noTocNav.xhtml", expectedErrors, expectedWarnings);
+  }
+
+//	@Test
+//	public void testValidateDocumentNoTocNavFromURL() {
+//		testValidateDocument("http://www.interq.ro/bgd/noTocNav.xhtml", expectedErrors, expectedWarnings);
+//	}
+
+  @Test
+  public void testValidateDocumentHText()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/h-text.xhtml", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateDocumenNavLabels001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/nav-labels-001.xhtml", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateDocumentNavLabels002()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/nav-labels-001.xhtml", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateDocumentNavLandmarks001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/nav-landmarks-001.xhtml", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateDocumentNavNoPagelist001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/nav-pagelist-001.xhtml", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateDocumentNavNoToc()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/nav-no-toc.xhtml", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateDocumentNavReqHeading()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/req-heading.xhtml", expectedErrors, expectedWarnings);
+  }
+
+}
diff --git a/src/test/java/com/adobe/epubcheck/ocf/OCFCheckerTest.java b/src/test/java/com/adobe/epubcheck/ocf/OCFCheckerTest.java
new file mode 100644
index 0000000..79f57b4
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/ocf/OCFCheckerTest.java
@@ -0,0 +1,504 @@
+/* 
+  Copyright-Only Dedication (based on United States law)
+  
+  The person or persons who have associated their work with this
+  document (the "Dedicators") hereby dedicate whatever copyright they
+  may have in the work of authorship herein (the "Work") to the
+  public domain.
+  
+  Dedicators make this dedication for the benefit of the public at
+  large and to the detriment of Dedicators' heirs and successors.
+  Dedicators intend this dedication to be an overt act of
+  relinquishment in perpetuity of all present and future rights
+  under copyright law, whether vested or contingent, in the Work.
+  Dedicators understand that such relinquishment of all rights
+  includes the relinquishment of all rights to enforce (by lawsuit
+  or otherwise) those copyrights in the Work.
+  
+  Dedicators recognize that, once placed in the public domain, the
+  Work may be freely reproduced, distributed, transmitted, used,
+  modified, built upon, or otherwise exploited by anyone for any
+  purpose, commercial or non-commercial, and in any way, including
+  by methods that have not yet been invented or conceived.
+*/
+
+package com.adobe.epubcheck.ocf;
+
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.ValidationReport;
+import com.adobe.epubcheck.util.outWriter;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public class OCFCheckerTest
+{
+
+  private ValidationReport testOcfPackage(String fileName, EPUBVersion version)
+  {
+    OCFPackage ocf = new OCFMockPackage(fileName);
+
+    ValidationReport testReport = new ValidationReport(fileName, String.format(
+        "Package is being checked as ePub version %s", version == null ? "null" : version.toString()));
+
+    OCFChecker checker = new OCFChecker(ocf, testReport, version);
+
+    checker.runChecks();
+
+    return testReport;
+  }
+
+  /**
+   * Not a test of the OCFChecker, just a sanity check to be sure the Mock Package
+   * provider is working.
+   */
+  @Test
+  public void invalidPath()
+  {
+    ValidationReport testReport = testOcfPackage("/non-existent/", EPUBVersion.VERSION_2);
+    assertEquals(1, testReport.getFatalErrorCount());
+  }
+
+  @Test
+  public void testLoremBasic20()
+  {
+    ValidationReport testReport = testOcfPackage("/20/expanded/valid/lorem/lorem-basic/",
+        EPUBVersion.VERSION_2);
+    if (0 != testReport.getErrorCount()
+        || 0 != testReport.getWarningCount())
+    {
+      outWriter.println(testReport);
+    }
+    assertEquals(0, testReport.getErrorCount());
+    assertEquals(0, testReport.getWarningCount());
+    assertTrue(testReport.hasInfoMessage("[format version] 2.0"));
+    assertTrue(testReport.hasInfoMessage("[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314"));
+  }
+
+  @Test
+  public void testLoremBasic30()
+  {
+    ValidationReport testReport = testOcfPackage("/30/expanded/valid/lorem-basic/",
+        EPUBVersion.VERSION_3);
+    if (0 != testReport.getErrorCount()
+        || 0 != testReport.getWarningCount())
+    {
+      outWriter.println(testReport);
+    }
+    assertEquals(0, testReport.getErrorCount());
+    assertEquals(0, testReport.getWarningCount());
+
+    assertTrue(testReport.hasInfoMessage("[format version] 3.0"));
+  }
+
+  @Test
+  public void testLoremBasic30Against20()
+  {
+    ValidationReport testReport = testOcfPackage("/30/expanded/valid/lorem-basic/",
+        EPUBVersion.VERSION_2);
+    if (0 == testReport.getErrorCount()
+        || 1 != testReport.getWarningCount())
+    {
+      outWriter.println(testReport);
+    }
+    assertTrue(testReport.getErrorCount() > 0);
+    List<MessageId> warnings = new ArrayList<MessageId>();
+    Collections.addAll(warnings, MessageId.PKG_001);
+    assertEquals(warnings, testReport.getWarningIds());
+
+    assertTrue(testReport.hasInfoMessage("[format version] 3.0"));
+    assertTrue(testReport.hasInfoMessage("[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314"));
+  }
+
+  @Test
+  public void testLoremBasic20Against30()
+  {
+    ValidationReport testReport = testOcfPackage("/20/expanded/valid/lorem/lorem-basic/",
+        EPUBVersion.VERSION_3);
+    if (0 == testReport.getErrorCount()
+        || 1 != testReport.getWarningCount())
+    {
+      outWriter.println(testReport);
+    }
+    assertTrue(testReport.getErrorCount() > 0);
+    List<MessageId> warnings = new ArrayList<MessageId>();
+    Collections.addAll(warnings, MessageId.PKG_001);
+    assertEquals(warnings, testReport.getWarningIds());
+
+    assertTrue(testReport.hasInfoMessage("[format version] 2.0"));
+    assertTrue(testReport.hasInfoMessage("[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314"));
+  }
+
+  @Test
+  public void testLoremBasic30Switch()
+  {
+    ValidationReport testReport = testOcfPackage("/30/expanded/valid/lorem-basic-switch/",
+        EPUBVersion.VERSION_3);
+    if (0 != testReport.getErrorCount()
+        || 0 != testReport.getWarningCount()
+        )
+    {
+      outWriter.println(testReport);
+    }
+    assertEquals(0, testReport.getErrorCount());
+    assertEquals(0, testReport.getWarningCount());
+
+    assertTrue(testReport.hasInfoMessage("[format version] 3.0"));
+  }
+
+  @Test
+  public void testLoremAudio30()
+  {
+    ValidationReport testReport = testOcfPackage("/30/expanded/valid/lorem-audio/",
+        EPUBVersion.VERSION_3);
+    if (0 != testReport.getErrorCount()
+        || 0 != testReport.getWarningCount()
+        )
+    {
+      outWriter.println(testReport);
+    }
+    assertEquals(0, testReport.getErrorCount());
+    assertEquals(0, testReport.getWarningCount());
+    assertTrue(testReport.hasInfoMessage("[format version] 3.0"));
+  }
+
+  @Test
+  public void testLoremBindings30()
+  {
+    ValidationReport testReport = testOcfPackage("/30/expanded/valid/lorem-bindings/",
+        EPUBVersion.VERSION_3);
+    if (0 != testReport.getErrorCount()
+        || 0 != testReport.getWarningCount()
+        )
+    {
+      outWriter.println(testReport);
+    }
+    assertEquals(0, testReport.getErrorCount());
+    assertEquals(0, testReport.getWarningCount());
+
+    assertTrue(testReport.hasInfoMessage("[format version] 3.0"));
+  }
+
+  @Test
+  public void testLoremForeign30()
+  {
+    ValidationReport testReport = testOcfPackage("/30/expanded/valid/lorem-foreign/",
+        EPUBVersion.VERSION_3);
+    if (0 != testReport.getErrorCount()
+        || 0 != testReport.getWarningCount()
+        )
+    {
+      outWriter.println(testReport);
+    }
+    assertEquals(0, testReport.getErrorCount());
+    assertEquals(0, testReport.getWarningCount());
+
+    assertTrue(testReport.hasInfoMessage("[format version] 3.0"));
+  }
+
+  @Test
+  public void testLoremLink30()
+  {
+    ValidationReport testReport = testOcfPackage("/30/expanded/valid/lorem-link/",
+        EPUBVersion.VERSION_3);
+    if (0 != testReport.getErrorCount()
+        || 0 != testReport.getWarningCount()
+        )
+    {
+      outWriter.println(testReport);
+    }
+    assertEquals(0, testReport.getErrorCount());
+    assertEquals(0, testReport.getWarningCount());
+
+    assertTrue(testReport.hasInfoMessage("[format version] 3.0"));
+  }
+
+  @Test
+  public void testLoremFallbacks30()
+  {
+    ValidationReport testReport = testOcfPackage("/30/expanded/valid/lorem-object-fallbacks/",
+        EPUBVersion.VERSION_3);
+    if (0 != testReport.getErrorCount()
+        || 0 != testReport.getWarningCount()
+        )
+    {
+      outWriter.println(testReport);
+    }
+    assertEquals(0, testReport.getErrorCount());
+    assertEquals(0, testReport.getWarningCount());
+
+    assertTrue(testReport.hasInfoMessage("[format version] 3.0"));
+  }
+
+  @Test
+  public void testLoremPoster30()
+  {
+    ValidationReport testReport = testOcfPackage("/30/expanded/valid/lorem-poster/",
+        EPUBVersion.VERSION_3);
+    if (0 != testReport.getErrorCount()
+        || 0 != testReport.getWarningCount()
+        )
+    {
+      outWriter.println(testReport);
+    }
+    assertEquals(0, testReport.getErrorCount());
+    assertEquals(0, testReport.getWarningCount());
+
+    assertTrue(testReport.hasInfoMessage("[format version] 3.0"));
+  }
+
+  @Test
+  public void testLoremSVG30()
+  {
+    ValidationReport testReport = testOcfPackage("/30/expanded/valid/lorem-svg/",
+        EPUBVersion.VERSION_3);
+    if (0 != testReport.getErrorCount()
+        || 0 != testReport.getWarningCount()
+        )
+    {
+      outWriter.println(testReport);
+    }
+    assertEquals(0, testReport.getErrorCount());
+    assertEquals(0, testReport.getWarningCount());
+
+    assertTrue(testReport.hasInfoMessage("[format version] 3.0"));
+  }
+
+  @Test
+  public void testLoremHyperlink30()
+  {
+    ValidationReport testReport = testOcfPackage("/30/expanded/valid/lorem-svg-hyperlink/",
+        EPUBVersion.VERSION_3);
+    if (0 != testReport.getErrorCount()
+        || 0 != testReport.getWarningCount()
+        )
+    {
+      outWriter.println(testReport);
+    }
+    assertEquals(0, testReport.getErrorCount());
+    assertEquals(0, testReport.getWarningCount());
+
+    assertTrue(testReport.hasInfoMessage("[format version] 3.0"));
+  }
+
+  @Test
+  public void testLoremWasteland30()
+  {
+    ValidationReport testReport = testOcfPackage("/30/expanded/valid/wasteland-basic/",
+        EPUBVersion.VERSION_3);
+    if (0 != testReport.getErrorCount()
+        || 0 != testReport.getWarningCount()
+        )
+    {
+      outWriter.println(testReport);
+    }
+    assertEquals(0, testReport.getErrorCount());
+    assertEquals(0, testReport.getWarningCount());
+
+    assertTrue(testReport.hasInfoMessage("[format version] 3.0"));
+  }
+
+
+  @Test
+  public void testLoremMultipleRenditions20()
+  {
+    ValidationReport testReport = testOcfPackage("/20/expanded/valid/lorem-xrenditions-2ops/",
+        EPUBVersion.VERSION_2);
+    if (1 != testReport.getErrorCount()
+        || 0 != testReport.getWarningCount())
+    {
+      outWriter.println(testReport);
+    }
+    List<MessageId> errors = new ArrayList<MessageId>();
+    Collections.addAll(errors, MessageId.PKG_013);
+    assertEquals(errors, testReport.getErrorIds());
+    assertEquals(0, testReport.getWarningCount());
+
+  }
+
+  @Test
+  public void testLoremMultipleRenditionsSingleOPF20()
+  {
+    ValidationReport testReport = testOcfPackage("/20/expanded/valid/lorem-xrenditions-1ops/",
+        EPUBVersion.VERSION_2);
+    if (0 != testReport.getErrorCount()
+        || 0 != testReport.getWarningCount())
+    {
+      outWriter.println(testReport);
+    }
+    assertEquals(0, testReport.getErrorCount());
+    assertEquals(0, testReport.getWarningCount());
+
+  }
+
+  @Test
+  public void testLoremMultipleRenditions30()
+  {
+    ValidationReport testReport = testOcfPackage("/30/expanded/valid/lorem-xrenditions/",
+        EPUBVersion.VERSION_3);
+    if (0 != testReport.getErrorCount()
+        || 0 != testReport.getWarningCount())
+    {
+      outWriter.println(testReport);
+    }
+    assertEquals(0, testReport.getErrorCount());
+    assertEquals(0, testReport.getWarningCount());
+
+    assertTrue(testReport.hasInfoMessage("[EPUB renditions count] 2"));
+  }
+
+  // The following tests should all fail, as they point to invalid ePubs
+  @Test
+  public void testInvalidLoremBasic30()
+  {
+    ValidationReport testReport = testOcfPackage("/30/expanded/invalid/lorem-basic-switch/",
+        EPUBVersion.VERSION_3);
+    if (1 != testReport.getErrorCount()
+        || 0 != testReport.getWarningCount()
+        )
+    {
+      outWriter.println(testReport);
+    }
+        // there must be a message error about the missing 'mathml' property
+    assertTrue(testReport.errorList.get(0).message.contains(
+        "The property 'mathml' should be declared in the OPF file."));
+    List<MessageId> errors = new ArrayList<MessageId>();
+    Collections.addAll(errors, MessageId.OPF_014);
+    assertEquals(errors, testReport.getErrorIds());
+    assertEquals(0, testReport.getWarningCount());
+
+    assertTrue(testReport.hasInfoMessage("[format version] 3.0"));
+  }
+
+  @Test
+  public void testInvalidLoremBindings30()
+  {
+    ValidationReport testReport = testOcfPackage("/30/expanded/invalid/lorem-bindings/",
+        EPUBVersion.VERSION_3);
+    if (1 != testReport.getErrorCount()
+        || 0 != testReport.getWarningCount())
+    {
+      outWriter.println(testReport);
+    }
+    assertTrue(testReport.errorList.get(0).message.contains(
+        "Object element doesn't provide fallback"));
+    List<MessageId> errors = new ArrayList<MessageId>();
+    Collections.addAll(errors, MessageId.MED_002);
+    assertEquals(errors, testReport.getErrorIds());
+    assertEquals(0, testReport.getWarningCount());
+
+    assertTrue(testReport.hasInfoMessage("[format version] 3.0"));
+  }
+
+  @Test
+  public void testInvalidLoremForeign30()
+  {
+    ValidationReport testReport = testOcfPackage("/30/expanded/invalid/lorem-foreign/",
+        EPUBVersion.VERSION_3);
+    if (1 != testReport.getErrorCount()
+        || 0 != testReport.getWarningCount()
+        )
+    {
+      outWriter.println(testReport);
+    }
+        // there must be a message error about the missing 'remote-resources' property
+    assertTrue(testReport.errorList.get(0).message.contains(
+        "The property 'remote-resources' should be declared in the OPF file."));
+    List<MessageId> errors = new ArrayList<MessageId>();
+    Collections.addAll(errors, MessageId.OPF_014);
+    assertEquals(errors, testReport.getErrorIds());
+    assertEquals(0, testReport.getWarningCount());
+
+    assertTrue(testReport.hasInfoMessage("[format version] 3.0"));
+  }
+
+  @Test
+  public void testInvalidLoremMimetype30()
+  {
+    ValidationReport testReport = testOcfPackage("/30/expanded/invalid/lorem-mimetype/",
+        EPUBVersion.VERSION_3);
+    if (1 != testReport.getErrorCount()
+        || 0 != testReport.getWarningCount()
+        )
+    {
+      outWriter.println(testReport);
+    }
+
+    List<MessageId> errors = new ArrayList<MessageId>();
+    Collections.addAll(errors, MessageId.PKG_007);
+    assertEquals(errors, testReport.getErrorIds());
+    assertEquals(0, testReport.getWarningCount());
+
+    assertTrue(testReport.hasInfoMessage("[format version] 3.0"));
+  }
+
+  @Test
+  public void testInvalidLoremPoster30()
+  {
+    ValidationReport testReport = testOcfPackage("/30/expanded/invalid/lorem-poster/",
+        EPUBVersion.VERSION_3);
+    if (1 != testReport.getErrorCount()
+        || 0 != testReport.getWarningCount()
+        )
+    {
+      outWriter.println(testReport);
+    }
+
+    List<MessageId> errors = new ArrayList<MessageId>();
+    Collections.addAll(errors, MessageId.MED_001);
+    assertEquals(errors, testReport.getErrorIds());
+    assertEquals(0, testReport.getWarningCount());
+
+    assertTrue(testReport.hasInfoMessage("[format version] 3.0"));
+  }
+
+  @Test
+  public void testInvalidLoremRNG30()
+  {
+    ValidationReport testReport = testOcfPackage("/30/expanded/invalid/lorem-xhtml-rng-1/",
+        EPUBVersion.VERSION_3);
+    if (1 != testReport.getErrorCount()
+        || 0 != testReport.getWarningCount())
+    {
+      outWriter.println(testReport);
+    }
+    assertTrue(testReport.errorList.get(0).message.contains(
+        "element \"epub:x\" not allowed here"));
+    List<MessageId> errors = new ArrayList<MessageId>();
+    Collections.addAll(errors, MessageId.RSC_005);
+    assertEquals(errors, testReport.getErrorIds());
+    assertEquals(0, testReport.getWarningCount());
+
+    assertTrue(testReport.hasInfoMessage("[format version] 3.0"));
+  }
+
+  @Test
+  public void testInvalidLoremSCH30()
+  {
+    ValidationReport testReport = testOcfPackage("/30/expanded/invalid/lorem-xhtml-sch-1/",
+        EPUBVersion.VERSION_3);
+
+    if (1 != testReport.getErrorCount()
+            || 0 != testReport.getWarningCount())
+    {
+      outWriter.println(testReport);
+    }
+    if (testReport.errorList.size() > 0)
+    {
+      assertTrue(testReport.errorList.get(0).message.contains(
+          "The dfn element must not appear inside dfn elements"));
+    }
+    List<MessageId> errors = new ArrayList<MessageId>();
+    Collections.addAll(errors, MessageId.RSC_005);
+    assertEquals(errors, testReport.getErrorIds());
+    assertEquals(0, testReport.getWarningCount());
+
+    assertTrue(testReport.hasInfoMessage("[format version] 3.0"));
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/ocf/OCFFilenameCheckerTest.java b/src/test/java/com/adobe/epubcheck/ocf/OCFFilenameCheckerTest.java
new file mode 100644
index 0000000..36052c3
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/ocf/OCFFilenameCheckerTest.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.ocf;
+
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.Messages;
+import com.adobe.epubcheck.util.ValidationReport;
+import com.adobe.epubcheck.util.outWriter;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class OCFFilenameCheckerTest
+{
+
+  private ValidationReport testReport;
+
+  private boolean verbose = false;
+
+  /*
+    * TEST DEBUG FUNCTION
+    */
+  public void testValidateDocument(String fileName, String expected,
+                                   EPUBVersion version, boolean verbose)
+  {
+    if (verbose)
+    {
+      this.verbose = verbose;
+    }
+    testValidateDocument(fileName, expected, version);
+
+  }
+
+  public void testValidateDocument(String fileName, String expected,
+                                   EPUBVersion version)
+  {
+    testReport = new ValidationReport(fileName, String.format(
+        Messages.get("single_file"), "opf", version.toString()));
+
+
+    String result = OCFFilenameChecker.checkCompatiblyEscaped(fileName, testReport, version);
+
+    if (verbose)
+    {
+      verbose = false;
+      outWriter.println(testReport);
+      outWriter.println("Test result: " + result + " \nExpected: "
+          + expected);
+    }
+
+    assertEquals(expected, result);
+  }
+
+  @Test
+  public void testValidateDocumentTest001()
+  {
+    testValidateDocument("abc\u3053abc", "\u3053", EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentTest002()
+  {
+    testValidateDocument("www.google.ro.", ".", EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentTest003()
+  {
+    testValidateDocument("go gle/ro", " ", EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentTest004()
+  {
+    testValidateDocument("/foo/b>ar/quux", ">", EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentTest005()
+  {
+    testValidateDocument("/foo/b>ar/quu\uE000x", "\uE000>",
+        EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentTest006()
+  {
+    testValidateDocument("http://www% .google.ro", "",
+        EPUBVersion.VERSION_2);
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/ocf/OCFMockPackage.java b/src/test/java/com/adobe/epubcheck/ocf/OCFMockPackage.java
new file mode 100644
index 0000000..463e54f
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/ocf/OCFMockPackage.java
@@ -0,0 +1,114 @@
+package com.adobe.epubcheck.ocf;
+
+import com.adobe.epubcheck.api.Report;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+public class OCFMockPackage extends OCFPackage
+{
+  HashSet<String> dirEntries, mockEntries;
+  File containerFile;
+  int offset;
+
+  public OCFMockPackage(String containerPath)
+  {
+    URL containerURL = this.getClass().getResource(containerPath);
+    containerFile = new File(containerURL != null ? containerURL.getPath() : containerPath);
+    offset = containerFile.getPath().length() + 1;
+    dirEntries = new HashSet<String>();
+    mockEntries = new HashSet<String>();
+    addEntries(containerFile);
+  }
+
+
+  private void addEntries(File parent)
+  {
+    File files[] = parent.listFiles();
+    if (null != files)
+    {
+      for (File file : files)
+      {
+        if (file.isFile())
+        {
+          mockEntries.add(file.getPath().substring(offset).replace('\\', '/'));
+        }
+        else if (file.isDirectory() && !file.getName().startsWith("."))
+        {
+          dirEntries.add(file.getPath().substring(offset).replace('\\', '/'));
+          addEntries(file);
+        }
+      }
+    }
+  }
+
+  @Override
+  public boolean hasEntry(String name)
+  {
+    File entry = new File(containerFile, name);
+    return entry.exists();
+  }
+
+  @Override
+  public long getTimeEntry(String name)
+  {
+    return 1348240407L;
+  }
+
+  @Override
+  public InputStream getInputStream(String name) throws IOException
+  {
+    if (hasEntry(name))
+    {
+      return new FileInputStream(new File(containerFile, name));
+    }
+    else
+    {
+      throw new IOException("An unknown file, " + name + " was requested");
+    }
+  }
+
+  @Override
+  public Set<String> getFileEntries() throws IOException
+  {
+    return mockEntries;
+  }
+
+  @Override
+  public Set<String> getDirectoryEntries() throws IOException
+  {
+    return dirEntries;
+  }
+
+
+	@Override
+	public List<String> getEntries() throws IOException {
+		List<String> result = new LinkedList<String>();
+		result.addAll(mockEntries);
+		result.addAll(dirEntries);
+		return result;
+	}
+    
+
+  public void reportMetadata(String fileName, Report report)
+  {
+  }
+
+  public String getName()
+  {
+    return this.containerFile.getName();
+  }
+
+  @Override
+  public String getPackagePath()
+  {
+    return containerFile.getPath();
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/opf/OPFCheckerTest.java b/src/test/java/com/adobe/epubcheck/opf/OPFCheckerTest.java
new file mode 100644
index 0000000..a4660f5
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/opf/OPFCheckerTest.java
@@ -0,0 +1,690 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.opf;
+
+import static org.junit.Assert.assertEquals;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.FileResourceProvider;
+import com.adobe.epubcheck.util.GenericResourceProvider;
+import com.adobe.epubcheck.util.Messages;
+import com.adobe.epubcheck.util.URLResourceProvider;
+import com.adobe.epubcheck.util.ValidationReport;
+import com.adobe.epubcheck.util.outWriter;
+
+public class OPFCheckerTest
+{
+
+  private List<MessageId> expectedErrors;
+  private List<MessageId> expectedWarnings;
+  private List<MessageId> expectedFatalErrors;
+
+  public void testValidateDocument(String fileName, List<MessageId> errors, List<MessageId> warnings,
+      EPUBVersion version)
+  {
+    testValidateDocument(fileName, errors, warnings, new ArrayList<MessageId>(), version, false);
+
+  }
+
+  public void testValidateDocument(String fileName, List<MessageId> errors, List<MessageId> warnings,
+      List<MessageId> fatalErrors, EPUBVersion version)
+  {
+    testValidateDocument(fileName, errors, warnings, fatalErrors, version, false);
+
+  }
+
+  public void testValidateDocument(String fileName, List<MessageId> errors, List<MessageId> warnings,
+      List<MessageId> fatalErrors, EPUBVersion version, boolean verbose)
+  {
+    ValidationReport testReport = new ValidationReport(fileName, String.format(Messages.get("single_file"), "opf",
+        version.toString()));
+
+    GenericResourceProvider resourceProvider;
+    if (fileName.startsWith("http://") || fileName.startsWith("https://"))
+    {
+      resourceProvider = new URLResourceProvider(fileName);
+    } else
+    {
+      String basepath = null;
+      if (version == EPUBVersion.VERSION_2)
+      {
+        basepath = "/20/single/opf/";
+      } else if (version == EPUBVersion.VERSION_3)
+      {
+        basepath = "/30/single/opf/";
+      }
+      URL fileURL = this.getClass().getResource(basepath + fileName);
+      String filePath = fileURL != null ? fileURL.getPath() : basepath + fileName;
+      resourceProvider = new FileResourceProvider(filePath);
+    }
+
+    OPFChecker opfChecker = null;
+    if (version == EPUBVersion.VERSION_2)
+    {
+      opfChecker = new OPFChecker("test_single_opf", resourceProvider, testReport);
+    } else if (version == EPUBVersion.VERSION_3)
+    {
+      opfChecker = new OPFChecker30("test_single_opf", resourceProvider, testReport);
+    }
+
+    assert opfChecker != null;
+    opfChecker.validate();
+
+    if (verbose)
+    {
+      outWriter.println(testReport);
+    }
+
+    assertEquals("The error results do not match", errors, testReport.getErrorIds());
+    assertEquals("The warning results do not match", warnings, testReport.getWarningIds());
+    assertEquals("The fatal error results do not match", fatalErrors, testReport.getFatalErrorIds());
+  }
+
+  @Before
+  public void setup()
+  {
+    expectedErrors = new ArrayList<MessageId>();
+    expectedWarnings = new ArrayList<MessageId>();
+    expectedFatalErrors = new ArrayList<MessageId>();
+  }
+
+  @Test
+  public void testValidateDocumentValidOPFBase001()
+  {
+    testValidateDocument("valid/base-001.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentValidOPFBindings001()
+  {
+    testValidateDocument("valid/bindings-001.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentValidOPFMediaOverlay001()
+  {
+    testValidateDocument("valid/media-overlay-001.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentValidOPFMediaOverlay002()
+  {
+    testValidateDocument("valid/media-overlay-002.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentValidOPFMinimal()
+  {
+    testValidateDocument("valid/minimal.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidOPFDcDate1()
+  {
+    testValidateDocument("valid/date-1.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidOPFDcDate2()
+  {
+    testValidateDocument("valid/date-2.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidOPFDcDate3()
+  {
+    testValidateDocument("valid/date-3.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testInvalidOPFDcDate1()
+  {
+    Collections.addAll(expectedWarnings, MessageId.OPF_053);
+    testValidateDocument("invalid/date-1.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testInvalidOPFDcDate2()
+  {
+    Collections.addAll(expectedWarnings, MessageId.OPF_053);
+    testValidateDocument("invalid/date-2.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testInvalidOPFNullIdentifier()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    testValidateDocument("invalid/null-identifier.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_2);
+  }
+
+  @Test
+  public void testValidateDocumentValidOPFSvg()
+  {
+    testValidateDocument("valid/lorem-svg.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentValidOPFSvgFallback()
+  {
+    testValidateDocument("valid/lorem-svg-fallback.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentMalformed()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    Collections.addAll(expectedFatalErrors, MessageId.RSC_016);
+    testValidateDocument("invalid/malformed.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentNoMetadataElement()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005);
+    Collections.addAll(expectedFatalErrors, MessageId.RSC_016);
+    testValidateDocument("invalid/noMetadataElement.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentNoNav()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005);
+    testValidateDocument("invalid/noNav.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentInvalidMetaAbout()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005);
+    testValidateDocument("invalid/invalidMetaAbout.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentNoDcNamespace()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005);
+    Collections.addAll(expectedFatalErrors, MessageId.RSC_016);
+    testValidateDocument("invalid/noDcNamespace.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentBindings001()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    testValidateDocument("invalid/bindings-001.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentCoverImage()
+  {
+    Collections.addAll(expectedErrors, MessageId.OPF_012, MessageId.RSC_005);
+    testValidateDocument("invalid/cover-image.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentFallback001()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.OPF_040);
+    testValidateDocument("invalid/fallback-001.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentFallback002()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    testValidateDocument("invalid/fallback-002.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentIdUnique()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005);
+    testValidateDocument("invalid/id-unique.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentItemref001()
+  {
+    Collections.addAll(expectedErrors, MessageId.OPF_049, MessageId.RSC_005);
+    testValidateDocument("invalid/itemref-001.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentMediaOverlay001()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005);
+    testValidateDocument("invalid/media-overlay-001.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentMediaOverlay002()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    testValidateDocument("invalid/media-overlay-002.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentMediaOverlayMeta001()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005);
+    testValidateDocument("invalid/media-overlay-meta-001.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentMinlegth()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005,
+         MessageId.RSC_005, MessageId.RSC_005);
+    testValidateDocument("invalid/minlength.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentModifiedSyntax()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    testValidateDocument("invalid/modified-syntax.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentForeign()
+  {
+    Collections.addAll(expectedErrors, MessageId.OPF_010);
+    testValidateDocument("invalid/foreign.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentModified()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    testValidateDocument("invalid/modified.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentNav001()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    testValidateDocument("invalid/nav-001.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentNav002()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    testValidateDocument("invalid/nav-002.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentNav003()
+  {
+    Collections.addAll(expectedErrors, MessageId.OPF_012, MessageId.RSC_005);
+    testValidateDocument("invalid/nav-003.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentOrder()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005);
+    testValidateDocument("invalid/order.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentRefinesRelative()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    testValidateDocument("invalid/refines-relative.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentTocncx001()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    testValidateDocument("invalid/tocncx-001.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentTocncx002()
+  {
+    Collections.addAll(expectedErrors, MessageId.OPF_050, MessageId.RSC_005);
+    testValidateDocument("invalid/tocncx-002.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentUid001()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    testValidateDocument("invalid/uid-001.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentUid002()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    testValidateDocument("invalid/uid-002.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentValidPrefixes()
+  {
+    testValidateDocument("valid/prefixes.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentPrefixes001()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.OPF_025);
+    testValidateDocument("invalid/prefixes-001.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentPrefixes002()
+  {
+    Collections.addAll(expectedErrors, MessageId.OPF_027);
+    testValidateDocument("invalid/prefixes-002.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentPrefixes003()
+  {
+    Collections.addAll(expectedErrors, MessageId.OPF_028);
+    testValidateDocument("invalid/prefixes-003.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentPrefixes004()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    testValidateDocument("invalid/prefixes-004.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentScheme()
+  {
+    testValidateDocument("valid/scheme-001.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentInvalidScheme001()
+  {
+    Collections.addAll(expectedErrors, MessageId.OPF_027);
+    testValidateDocument("invalid/scheme-001.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentInvalidScheme002()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.OPF_025);
+    testValidateDocument("invalid/scheme-002.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentPrefixDeclaration()
+  {
+    Collections.addAll(expectedErrors, MessageId.OPF_004c, MessageId.OPF_004c);
+    testValidateDocument("invalid/prefix-declaration.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateDocumentItemProperties()
+  {
+    Collections.addAll(expectedErrors, MessageId.OPF_012);
+    testValidateDocument("invalid/item-properties.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateRedeclaredReservedPrefixes()
+  {
+    Collections.addAll(expectedErrors, MessageId.OPF_007b, MessageId.OPF_007b);
+    Collections.addAll(expectedWarnings, MessageId.OPF_007, MessageId.OPF_007);
+    // should generate 2 warnings (redeclaration of reserved prefixes) and 1 error (redeclaration of default vocab)
+    testValidateDocument("invalid/prefixes-redeclare.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testBadOPFNamespace20()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005,
+        MessageId.RSC_005, MessageId.RSC_005);
+    testValidateDocument("invalid/bad-opf-namespace.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_2);
+  }
+
+  @Test
+  public void testBadOPFDupeID()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005);
+    testValidateDocument("invalid/dupe-id.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_2);
+  }
+
+  @Test
+  public void testOPF_Issue216()
+  {
+    testValidateDocument("valid/issue216.opf", expectedErrors, expectedWarnings, EPUBVersion.VERSION_2);
+  }
+
+  @Test
+  public void testFilenameInManifestContainsSpacesIssue239_EPUB2()
+  {
+    Collections.addAll(expectedWarnings, MessageId.PKG_010);
+    testValidateDocument("invalid/filename_contains_spaces_issue239.opf", expectedErrors, expectedWarnings,
+        EPUBVersion.VERSION_2);
+  }
+
+  @Test
+  public void testFilenameInManifestContainsSpacesIssue239_EPUB3()
+  {
+    Collections.addAll(expectedWarnings, MessageId.PKG_010);
+    testValidateDocument("invalid/filename_contains_spaces_issue239.opf", expectedErrors, expectedWarnings,
+        EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testMultipleDCTypes()
+  {
+    testValidateDocument("valid/dc-type.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testMultipleDCSource()
+  {
+    testValidateDocument("valid/dc-source.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+  
+
+  @Test
+  public void testMetaSourceOf()
+  {
+    testValidateDocument("valid/meta-source-of.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testMetaSourceOfWrongValue()
+  {
+    expectedErrors.add(MessageId.RSC_005);
+    testValidateDocument("invalid/meta-source-of-wrongvalue.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+  
+  @Test
+  public void testMetaSourceOfNoRefines()
+  {
+    expectedErrors.add(MessageId.RSC_005);
+    testValidateDocument("invalid/meta-source-of-norefines.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+  
+  @Test
+  public void testMetaSourceWrongRefinesTarget()
+  {
+    expectedErrors.add(MessageId.RSC_005);
+    testValidateDocument("invalid/meta-source-of-wrongrefines.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+  
+  @Test
+  public void testRecordLink()
+  {
+    testValidateDocument("valid/link-rel-record.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+  
+  @Test
+  public void testRecordLinkNoMediaType()
+  {
+    expectedErrors.add(MessageId.RSC_005);
+    testValidateDocument("invalid/link-rel-record-no-mediatype.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+  
+  @Test
+  public void testRecordLinkWithRefines()
+  {
+    expectedErrors.add(MessageId.RSC_005);
+    testValidateDocument("invalid/link-rel-record-refines.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+  
+  @Test
+  public void testMetaBelongsToCollection()
+  {
+    testValidateDocument("valid/meta-collection.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+  
+  @Test
+  public void testMetaBelongsToCollectionWrongRefines()
+  {
+    expectedErrors.add(MessageId.RSC_005);
+    testValidateDocument("invalid/meta-collection-refine-noncollection.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+  
+  @Test
+  public void testMetaCollectionTypeNoRefines()
+  {
+    expectedErrors.add(MessageId.RSC_005);
+    testValidateDocument("invalid/meta-collection-type-norefines.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+  
+  @Test
+  public void testMetaCollectionTypeWrongRefines()
+  {
+    expectedErrors.add(MessageId.RSC_005);
+    testValidateDocument("invalid/meta-collection-type-refines-noncollection.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+  
+  @Test
+  public void testRenditionPropertiesValid()
+  {
+    testValidateDocument("valid/rendition-properties.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+  
+  @Test
+  public void testRenditionGlobalsValid()
+  {
+    testValidateDocument("valid/rendition-globals.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+  
+  @Test
+  public void testRenditionGlobalsWithRefines()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005);
+    testValidateDocument("invalid/rendition-globals-refines.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+  
+  @Test
+  public void testRenditionGlobalsDuplicated()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005);
+    testValidateDocument("invalid/rendition-globals-duplicate.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+  
+  @Test
+  public void testRenditionGlobalsBadValues()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005);
+    testValidateDocument("invalid/rendition-globals-badvalues.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+  
+  @Test
+  public void testRenditionOverridesConflicts()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005);
+    testValidateDocument("invalid/rendition-globals-badvalues.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+  
+  @Test
+  public void testCollectionValid() {
+    testValidateDocument("valid/collection-valid-001.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+    testValidateDocument("valid/collection-valid-002.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+  
+  @Test
+  public void testCollectionManifestInvalid() {
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    testValidateDocument("invalid/collection-invalid-manifest-001.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+  
+  @Test
+  public void testDOValid() {
+    testValidateDocument("valid/collection-valid-do-001.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+  
+  @Test
+  public void testDOInvalid() {
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    testValidateDocument("invalid/collection-invalid-do-sch-001.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+  
+  @Test
+  public void testMetaSchemaOrg() {
+    testValidateDocument("valid/meta-schemaorg.opf", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3);
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/opf/OPFCheckerTestChecks.java b/src/test/java/com/adobe/epubcheck/opf/OPFCheckerTestChecks.java
new file mode 100644
index 0000000..2c36cea
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/opf/OPFCheckerTestChecks.java
@@ -0,0 +1,30 @@
+/* 
+  Copyright-Only Dedication (based on United States law)
+  
+  The person or persons who have associated their work with this
+  document (the "Dedicators") hereby dedicate whatever copyright they
+  may have in the work of authorship herein (the "Work") to the
+  public domain.
+  
+  Dedicators make this dedication for the benefit of the public at
+  large and to the detriment of Dedicators' heirs and successors.
+  Dedicators intend this dedication to be an overt act of
+  relinquishment in perpetuity of all present and future rights
+  under copyright law, whether vested or contingent, in the Work.
+  Dedicators understand that such relinquishment of all rights
+  includes the relinquishment of all rights to enforce (by lawsuit
+  or otherwise) those copyrights in the Work.
+  
+  Dedicators recognize that, once placed in the public domain, the
+  Work may be freely reproduced, distributed, transmitted, used,
+  modified, built upon, or otherwise exploited by anyone for any
+  purpose, commercial or non-commercial, and in any way, including
+  by methods that have not yet been invented or conceived.
+*/
+
+package com.adobe.epubcheck.opf;
+
+public class OPFCheckerTestChecks
+{
+
+}
diff --git a/src/test/java/com/adobe/epubcheck/ops/OPSCheckerTest.java b/src/test/java/com/adobe/epubcheck/ops/OPSCheckerTest.java
new file mode 100644
index 0000000..0047b9b
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/ops/OPSCheckerTest.java
@@ -0,0 +1,719 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.ops;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.junit.Test;
+
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.ExtraReportTest;
+import com.adobe.epubcheck.util.FileResourceProvider;
+import com.adobe.epubcheck.util.GenericResourceProvider;
+import com.adobe.epubcheck.util.Messages;
+import com.adobe.epubcheck.util.URLResourceProvider;
+import com.adobe.epubcheck.util.ValidationReport;
+import com.adobe.epubcheck.util.ValidationReport.ItemReport;
+import com.adobe.epubcheck.util.outWriter;
+
+public class OPSCheckerTest
+{
+
+  public void testValidateDocument(String fileName, String mimeType,
+                                   List<MessageId> errors, List<MessageId> warnings, EPUBVersion version)
+  {
+    testValidateDocument(fileName, mimeType, errors, warnings, new ArrayList<MessageId>(), version, false);
+  }
+
+  public void testValidateDocument(String fileName, String mimeType,
+                                   List<MessageId> errors, List<MessageId> warnings, List<MessageId> fatalErrors, EPUBVersion version)
+  {
+    testValidateDocument(fileName, mimeType, errors, warnings, fatalErrors, version, false);
+
+  }
+	
+  public void testValidateDocument(String fileName, String mimeType,
+                                   List<MessageId> errors, List<MessageId> warnings, List<MessageId> fatalErrors, EPUBVersion version, boolean verbose)
+  {
+	  	testValidateDocument(fileName, mimeType, errors, warnings, fatalErrors, version, verbose, null);
+	}
+
+  public void testValidateDocument(String fileName, String mimeType,
+      List<MessageId> errors, List<MessageId> warnings, List<MessageId> fatalErrors, EPUBVersion version, ExtraReportTest extraTest)
+  {
+		testValidateDocument(fileName, mimeType, errors, warnings, fatalErrors, version, false, extraTest);
+  }
+
+	public void testValidateDocument(String fileName, String mimeType,
+			    List<MessageId> errors, List<MessageId> warnings, List<MessageId> fatalErrors, EPUBVersion version, boolean verbose, ExtraReportTest extraTest)
+  {
+    ValidationReport testReport = new ValidationReport(fileName, String.format(Messages.get("single_file"), mimeType, version));
+    String basepath = null;
+    if (version == EPUBVersion.VERSION_2)
+    {
+      basepath = "/20/single/";
+    }
+    else if (version == EPUBVersion.VERSION_3)
+    {
+      basepath = "/30/single/";
+    }
+
+    GenericResourceProvider resourceProvider = null;
+    if (fileName.startsWith("http://") || fileName.startsWith("https://"))
+    {
+      resourceProvider = new URLResourceProvider(fileName);
+    }
+    else
+    {
+      URL fileURL = this.getClass().getResource(basepath + fileName);
+      String filePath = fileURL != null ? fileURL.getPath() : basepath + fileName;
+      resourceProvider = new FileResourceProvider(filePath);
+    }
+
+    OPSChecker opsChecker = new OPSChecker(basepath + fileName, mimeType,
+        resourceProvider, testReport, version);
+
+    opsChecker.validate();
+
+    if (verbose)
+    {
+      outWriter.println(testReport);
+    }
+
+    assertEquals("The error results do not match", errors, testReport.getErrorIds());
+    assertEquals("The warning results do not match", warnings, testReport.getWarningIds());
+    assertEquals("The fatal error results do not match", fatalErrors, testReport.getFatalErrorIds());
+		if (extraTest != null)
+    {
+			extraTest.test(testReport);
+		}
+  }
+
+  @Test
+  public void testValidateSVGRectInvalid()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("svg/invalid/rect.svg", "image/svg+xml", expectedErrors, expectedWarnings,
+        EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateSVGRectValid()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("svg/valid/rect.svg", "image/svg+xml", expectedErrors, expectedWarnings,
+        EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLEdits001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/edits-001.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLEmbed001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    // Collections.addAll(expectedErrors, );
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/embed-001.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLForms001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/forms-001.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLGlobalAttrs001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    List<MessageId> expectedFatals = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/global-attrs-001.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, expectedFatals, EPUBVersion.VERSION_3, false);
+  }
+
+  @Test
+  public void testValidateXHTMLOps001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/ops-001.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLOPSMATHML001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/ops-mathml-001.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLLINK()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/link.xhtml", "application/xhtml+xml",
+        expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLLINKInvalid()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_027, MessageId.CSS_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/invalid/link.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLXml11()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.HTM_001);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/invalid/xml11.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLOPSMATHML002()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/ops-mathml-002.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLOPSSVG001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/ops-svg-001.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLOPSSVG002()
+  {
+	//assure that epub:type is allowed on svg elements
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    List<MessageId> expectedFatals = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/ops-svg-002.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, expectedFatals, EPUBVersion.VERSION_3, true);
+  }
+  
+  @Test
+  public void testValidateXHTMLRuby001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/ruby-001.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLCanvas()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/canvas.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLInvalidCanvasFallback()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.MED_002);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/invalid/canvas-fallback.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLSCH001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/sch-001.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLSections001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/sections-001.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLSSML()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/ssml.xhtml", "application/xhtml+xml",
+        expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLStyle001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/style-001.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLStyle002()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.CSS_008);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/invalid/style-001.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLSwitch001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/switch-001.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLTables001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/tables-001.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLText001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/text-001.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLTrigger()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/trigger.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLData()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/data.xhtml", "application/xhtml+xml",
+        expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLPrefixes001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/prefixes-001.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLInvalidPrefixes001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_028, MessageId.OPF_027);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/invalid/prefixes-001.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLVideo()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/video.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTML_OPSMATHML001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/invalid/ops-mathml-001.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTML_OPSMATHML002()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/invalid/ops-mathml-002.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTML_SCH001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    //Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.MED_002, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_ [...]
+    //mgy not sure what happened here, removed the first entry to make it pass
+    Collections.addAll(expectedErrors, MessageId.MED_002, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_00 [...]
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    List<MessageId> expectedFatalErrors = new ArrayList<MessageId>();
+
+    testValidateDocument("xhtml/invalid/sch-001.xhtml",
+				"application/xhtml+xml", expectedErrors, expectedWarnings, expectedFatalErrors,
+        EPUBVersion.VERSION_3,false,new ExtraReportTest() {
+					@Override
+					public void test(ValidationReport testReport) {
+						for (ItemReport error : testReport.errorList) {
+							assertTrue("Error '"+error.message+"' has no line number.",error.line != -1);
+							assertTrue("Error '"+error.message+"' has no column number.",error.column != -1);
+						}
+					}
+				});
+  }
+
+  @Test
+  public void testValidateXHTML_SVG001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/invalid/svg-001.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTML_Switch001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/invalid/switch-001.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTML_Trigger()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/invalid/trigger.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTML_UnresolvedDTD()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.HTM_004, MessageId.RSC_001);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("ops/invalid/unresolved-entity.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_2);
+  }
+
+  @Test
+  public void testValidateXHTML_DupeID()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("ops/invalid/dupe-id.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_2);
+  }
+
+  @Test
+  public void testValidateXHTML_httpequiv1()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/invalid/http-equiv-1.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTML_httpequiv2()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/http-equiv-1.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTML_SSMLemptyPh()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.HTM_007, MessageId.HTM_007);
+    testValidateDocument("xhtml/invalid/ssml-empty-ph.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTML_issue153_valid()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/issue153.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTML_issue153_invalid()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/invalid/issue153.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTML_issue166_valid()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("ops/valid/svg-foreignObject.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_2);
+  }
+
+  @Test
+  public void testValidateXHTML_doctype1_obsolete()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.HTM_004);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/invalid/doctype-1.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTML_doctype1()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //<!DOCTYPE html>
+    testValidateDocument("xhtml/valid/doctype-1.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTML_doctype2()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //<!DOCTYPE html SYSTEM "about:legacy-compat">
+    testValidateDocument("xhtml/valid/doctype-2.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLIssue204()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    Collections.addAll(expectedWarnings, MessageId.HTM_025);
+    testValidateDocument("xhtml/valid/issue204.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLStyleAttr001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/styleAttr001.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLStyleAttr002()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.CSS_008);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/invalid/styleAttr001.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  // this test should validate, see issue 173, need to wait for schema update.
+//	@Test
+//	public void testValidateXHTMLSVGwithRDF() { 
+//		testValidateDocument("xhtml/valid/svg-rdf-001.xhtml",
+//				"application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3, true);
+//	}
+
+  @Test
+  public void testValidateSVGIssue196()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("ops/valid/svg-font-face.svg",
+        "image/svg+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_2);
+  }
+
+  @Test
+  public void testValidateXHTMLIssue215()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("ops/valid/issue215.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_2);
+  }
+
+  @Test
+  public void testValidateSVGIssue219()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("svg/valid/issue219.svg",
+        "image/svg+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+
+  @Test
+  public void testValidateXHTMLIssue222_223_20()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //foreignObject allowed outside switch, and <body> allowed inside
+    testValidateDocument("ops/valid/issue222.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_2);
+  }
+
+  @Test
+  public void testValidateXHTMLIssue222_223_30()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    //in 3.0 foreignObject content must be flow as per
+    //http://idpf.org/epub/30/spec/epub30-contentdocs.html#confreq-svg-foreignObject
+    //so the document gives 1 error
+    testValidateDocument("svg/valid/issue222.xhtml",
+        "application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+	}
+	
+	@Test
+	public void testValidateXHTMLIssue248() {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/issue248.xhtml",
+				"application/xhtml+xml", expectedErrors, expectedWarnings, EPUBVersion.VERSION_3);
+  }
+	
+	@Test
+	public void testValidateXHTML301RDFaValid() {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    List<MessageId> expectedFatals = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/rdfa.xhtml",
+				"application/xhtml+xml", expectedErrors, expectedWarnings, expectedFatals, EPUBVersion.VERSION_3, false, null);
+  }
+	
+	@Test
+	public void testValidateXHTML301MDValid() {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    List<MessageId> expectedFatals = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/md.xhtml",
+				"application/xhtml+xml", expectedErrors, expectedWarnings, expectedFatals, EPUBVersion.VERSION_3, true, null);
+  }
+	
+	@Test
+	public void testValidateXHTML301MDInvalid() {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    List<MessageId> expectedFatals = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/invalid/md.xhtml",
+				"application/xhtml+xml", expectedErrors, expectedWarnings, expectedFatals, EPUBVersion.VERSION_3, false, null);
+  }
+	
+	@Test
+	public void testValidateXHTML301CustomAttributes() {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    List<MessageId> expectedFatals = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/custom-ns-attrs.xhtml",
+				"application/xhtml+xml", expectedErrors, expectedWarnings, expectedFatals, EPUBVersion.VERSION_3, false, null);
+  }
+	
+	@Test
+	public void testValidateXHTML301AriaDescribedAt() {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    List<MessageId> expectedFatals = new ArrayList<MessageId>();
+    testValidateDocument("xhtml/valid/aria-describedAt.xhtml",
+				"application/xhtml+xml", expectedErrors, expectedWarnings, expectedFatals, EPUBVersion.VERSION_3, false, null);
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/overlay/OverlayCheckerTest.java b/src/test/java/com/adobe/epubcheck/overlay/OverlayCheckerTest.java
new file mode 100644
index 0000000..ace1097
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/overlay/OverlayCheckerTest.java
@@ -0,0 +1,168 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.overlay;
+
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.util.*;
+import org.junit.Test;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+
+public class OverlayCheckerTest
+{
+
+  private static String basepath = "/30/single/overlays/";
+
+  public void testValidateDocument(String fileName, List<MessageId> errors, List<MessageId> warnings)
+  {
+    testValidateDocument(fileName, errors, warnings, new ArrayList<MessageId>(), false);
+  }
+
+  public void testValidateDocument(String fileName, List<MessageId> errors, List<MessageId> warnings, List<MessageId> fatalErrors)
+  {
+    testValidateDocument(fileName, errors, warnings, fatalErrors, false);
+  }
+
+  public void testValidateDocument(String fileName, List<MessageId> errors, List<MessageId> warnings, List<MessageId> fatalErrors, boolean verbose)
+  {
+    ValidationReport testReport = new ValidationReport(fileName, String.format(
+        Messages.get("single_file"), "media overlay", "3.0"));
+
+    GenericResourceProvider resourceProvider;
+    if (fileName.startsWith("http://") || fileName.startsWith("https://"))
+    {
+      resourceProvider = new URLResourceProvider(fileName);
+    }
+    else
+    {
+      URL fileURL = this.getClass().getResource(basepath + fileName);
+      String filePath = fileURL != null ? fileURL.getPath() : basepath + fileName;
+      resourceProvider = new FileResourceProvider(filePath);
+    }
+
+    OverlayChecker overlayChecker = new OverlayChecker(basepath + fileName, resourceProvider,
+        testReport);
+
+    overlayChecker.validate();
+
+    if (verbose)
+    {
+      outWriter.println(testReport);
+    }
+
+    assertEquals("The error results do not match", errors, testReport.getErrorIds());
+    assertEquals("The warning results do not match", warnings, testReport.getWarningIds());
+    assertEquals("The fatal error results do not match", fatalErrors, testReport.getFatalErrorIds());
+  }
+
+  @Test
+  public void testValidateDocumentValidOverlay001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/overlay-001.smil", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateDocumentValidOverlay002()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/overlay-002.smil", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateDocumentValidOverlay003()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/overlay-003.smil", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateDocumentInvalidOverlay001()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/overlay-001.smil", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateDocumentInvalidOverlay002()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/overlay-002.smil", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateDocumentInvalidOverlay003()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/overlay-003.smil", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateDocumentInvalidOverlay004()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/overlay-004.smil", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateDocumentInvalidOverlay005()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005, MessageId.RSC_005);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/overlay-005.smil", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateDocumentInvalidOverlay006()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    Collections.addAll(expectedErrors, MessageId.OPF_027, MessageId.OPF_027, MessageId.OPF_028, MessageId.OPF_027, MessageId.OPF_027);
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("invalid/overlay-006.smil", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testValidateDocumentValidOverlay007()
+  {
+    List<MessageId> expectedErrors = new ArrayList<MessageId>();
+    List<MessageId> expectedWarnings = new ArrayList<MessageId>();
+    testValidateDocument("valid/overlay-007.smil", expectedErrors, expectedWarnings);
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/stress/StressTest.java b/src/test/java/com/adobe/epubcheck/stress/StressTest.java
new file mode 100644
index 0000000..b2d1d58
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/stress/StressTest.java
@@ -0,0 +1,372 @@
+package com.adobe.epubcheck.stress;
+
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Iterator;
+
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathFactory;
+
+import org.junit.Ignore;
+import org.junit.Test;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import com.adobe.epubcheck.api.EpubCheck;
+import com.adobe.epubcheck.util.Archive;
+import com.adobe.epubcheck.util.ValidationReport;
+import com.google.common.io.Files;
+
+public class StressTest
+{
+
+  /*
+    * Keeping the test method commented out to not accidentally become part of
+    * "run all..." efforts. To run, - set the TEMP_DIR_PATH and GROW
+    * parameters, make sure the temp directory exists and is empty - uncomment
+    * and run.
+    */
+  String TEMP_DIR_PATH = "/Users/mgylling/ec_temp/";
+  int GROW = 2000;
+  String STRING_FMT = "%05d";
+
+  XPathFactory factory = XPathFactory.newInstance();
+  XPath xpath = factory.newXPath();
+
+  String OPF_NS = "http://www.idpf.org/2007/opf";
+  String XHT_NS = "http://www.w3.org/1999/xhtml";
+  File TEMP_DIR;
+  File SOURCE_DIR = new File(StressTest.class.getResource("/stress/")
+      .getFile());
+  File opfFile;
+  Document opfDoc;
+  Element manifest;
+  Element spine;
+  File navFile;
+  Document navDoc;
+  Element navOlElem;
+  File TEMP_CONTENT_DIR;
+  int counter = 0;
+
+  /*
+  @Ignore
+  @Test
+  public void testHighFileCount() throws Exception
+  {
+    setup();
+    try
+    {
+      outWriter.println("Building high file count stress test epub...");
+      build();
+      outWriter.println("Created epub has " +
+          manifest.getChildNodes().getLength() + " manifest items.");
+      outWriter.println("Validating...");
+      validate();
+      outWriter.println("done.");
+    }
+    finally
+    {
+      cleanDir(TEMP_DIR);
+      File[] files = TEMP_DIR.listFiles();
+      if (files != null && files.length > 0)
+      {
+        System.err.println("temp dir clean failed");
+      }
+    }
+  }
+  */
+  private void validate() throws Exception
+  {
+    Archive epub = new Archive(TEMP_DIR.getPath());
+    epub.createArchive();
+    ValidationReport report = new ValidationReport(TEMP_DIR.getName());
+    EpubCheck epubCheck = new EpubCheck(epub.getEpubFile(), report);
+    epubCheck.validate();
+    assertTrue(report.getErrorCount() < 1);
+    assertTrue(report.getWarningCount() < 1);
+    epub.deleteEpubFile();
+    // outWriter.println(report);
+  }
+
+  private void build() throws Exception
+  {
+    cleanDir(TEMP_DIR);
+    TEMP_DIR.delete();
+
+    doCopyDirectory(SOURCE_DIR, TEMP_DIR);
+    TEMP_CONTENT_DIR = new File(TEMP_DIR, "EPUB");
+    // new File(TEMP_CONTENT_DIR, "META-INF").delete(); // bug in phloc copy
+
+    opfFile = new File(TEMP_CONTENT_DIR, "package.opf");
+    opfDoc = build(opfFile);
+    manifest = (Element) opfDoc.getDocumentElement()
+        .getElementsByTagName("manifest").item(0);
+    spine = (Element) opfDoc.getDocumentElement()
+        .getElementsByTagName("spine").item(0);
+
+    navFile = new File(TEMP_CONTENT_DIR, "nav.xhtml");
+    navDoc = build(navFile);
+    navOlElem = (Element) xpath.evaluate("//xht:nav[1]/xht:ol",
+        navDoc.getDocumentElement(), XPathConstants.NODE);
+
+    for (int i = 0; i < GROW; i++)
+    {
+      counter++;
+
+      String newImageName = "image_" + String.format(STRING_FMT, counter)
+          + ".png";
+      Files.copy(new File(TEMP_CONTENT_DIR,
+          "image_00000.png"),
+          new File(TEMP_CONTENT_DIR, newImageName));
+      appendManifestItem(newImageName, "image/png", "img_");
+
+      String newCssName = "style_" + String.format(STRING_FMT, counter)
+          + ".css";
+      Files.copy(new File(TEMP_CONTENT_DIR,
+          "style_00000.css"), new File(TEMP_CONTENT_DIR, newCssName));
+      appendManifestItem(newCssName, "text/css", "css_");
+
+      String newXhtName = "content_" + String.format(STRING_FMT, counter)
+          + ".xhtml";
+      Document xhtDoc = build(new File(TEMP_CONTENT_DIR,
+          "content_00000.xhtml"));
+      xhtDoc = tweakXht(xhtDoc);
+      appendManifestItem(newXhtName, "application/xhtml+xml", "t_");
+      appendSpineItem("t_" + String.format(STRING_FMT, counter));
+      File xhtOut = new File(TEMP_CONTENT_DIR, newXhtName);
+      save(xhtDoc, xhtOut);
+
+      // add new content doc to nav doc
+      Element li = navDoc.createElementNS(XHT_NS, "li");
+      Element a = navDoc.createElementNS(XHT_NS, "a");
+      Attr href = navDoc.createAttribute("href");
+      href.appendChild(navDoc.createTextNode(newXhtName));
+      a.getAttributes().setNamedItem(href);
+      a.appendChild(navDoc.createTextNode("Lorem Ipsum "
+          + String.format(STRING_FMT, counter)));
+      li.appendChild(a);
+      navOlElem.appendChild(li);
+
+    }
+
+    save(navDoc, navFile);
+    save(opfDoc, opfFile);
+  }
+
+  private void doCopyDirectory(File srcDir, File destDir) throws Exception
+  {
+    File[] srcFiles = srcDir.listFiles();
+    if (srcFiles == null)
+    {
+      throw new IOException("Failed to list contents of " + srcDir);
+    }
+    if (destDir.exists())
+    {
+      if (!destDir.isDirectory())
+      {
+        throw new IOException("Destination '" + destDir + "' exists but is not a directory");
+      }
+    }
+    else
+    {
+      if (!destDir.mkdirs() && !destDir.isDirectory())
+      {
+        throw new IOException("Destination '" + destDir + "' directory cannot be created");
+      }
+    }
+    if (!destDir.canWrite())
+    {
+      throw new IOException("Destination '" + destDir + "' cannot be written to");
+    }
+
+    for (File srcFile : srcFiles)
+    {
+      File dstFile = new File(destDir, srcFile.getName());
+      if (srcFile.isDirectory())
+      {
+        doCopyDirectory(srcFile, dstFile);
+      }
+      else
+      {
+        Files.copy(srcFile, dstFile);
+      }
+
+    }
+
+  }
+
+  private Document tweakXht(Document xhtDoc) throws Exception
+  {
+    // <link type="text/css" rel="stylesheet" href="style_00000.css" />
+    Element link = (Element) xpath.evaluate("//xht:link[1]",
+        xhtDoc.getDocumentElement(), XPathConstants.NODE);
+    Attr href = link.getAttributeNode("href");
+    href.setNodeValue("style_" + String.format(STRING_FMT, counter)
+        + ".css");
+
+    // <h1>Lorem Ipsum 00000</h1>
+    Element h1 = (Element) xpath.evaluate("//xht:h1[1]",
+        xhtDoc.getDocumentElement(), XPathConstants.NODE);
+    h1.removeChild(h1.getFirstChild());
+    h1.appendChild(xhtDoc.createTextNode("Lorem Ipsum "
+        + String.format(STRING_FMT, counter)));
+
+    // <img src="image_00000.png"/>
+    Element img = (Element) xpath.evaluate("//xht:img[1]",
+        xhtDoc.getDocumentElement(), XPathConstants.NODE);
+    Attr src = img.getAttributeNode("src");
+    src.setNodeValue("image_" + String.format(STRING_FMT, counter) + ".png");
+
+    return xhtDoc;
+
+  }
+
+  private void appendSpineItem(String id)
+  {
+    Element itemref = opfDoc.createElementNS(OPF_NS, "itemref");
+    Attr idref = opfDoc.createAttribute("idref");
+    idref.appendChild(opfDoc.createTextNode(id));
+    itemref.getAttributes().setNamedItem(idref);
+
+    spine.appendChild(itemref);
+  }
+
+  private void appendManifestItem(String ref, String mimeType, String idPfx)
+  {
+    Element item = opfDoc.createElementNS(OPF_NS, "item");
+
+    Attr id = opfDoc.createAttribute("id");
+    id.appendChild(opfDoc.createTextNode(idPfx
+        + String.format(STRING_FMT, counter)));
+    item.getAttributes().setNamedItem(id);
+
+    Attr mt = opfDoc.createAttribute("media-type");
+    mt.appendChild(opfDoc.createTextNode(mimeType));
+    item.getAttributes().setNamedItem(mt);
+
+    Attr href = opfDoc.createAttribute("href");
+    href.appendChild(opfDoc.createTextNode(ref));
+    item.getAttributes().setNamedItem(href);
+
+    manifest.appendChild(item);
+
+  }
+
+  private void save(Document doc, File out) throws Exception
+  {
+    // some error with saxon on the classpath
+    System.setProperty("javax.xml.transform.TransformerFactory",
+        "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl");
+    TransformerFactory transformerFactory = TransformerFactory
+        .newInstance();
+    Transformer transformer = transformerFactory.newTransformer();
+
+    // TransformerFactory transformerFactory =
+    // com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newInstance();
+    // Transformer transformer = new
+    // com.sun.org.apache.xalan.internal.xsltc.trax.Transformer();
+    DOMSource source = new DOMSource(doc);
+    StreamResult streamResult = new StreamResult(out);
+    transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+    transformer.transform(source, streamResult);
+  }
+
+  private Document build(File f) throws Exception
+  {
+    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+    dbf.setNamespaceAware(true);
+    dbf.setValidating(false);
+    return dbf.newDocumentBuilder().parse(f);
+  }
+
+  private void setup()
+  {
+
+    TEMP_DIR = new File(TEMP_DIR_PATH);
+    if (!TEMP_DIR.exists())
+    {
+      throw new IllegalArgumentException("Path " + TEMP_DIR_PATH
+          + " does not exist");
+    }
+    if (!TEMP_DIR.isDirectory())
+    {
+      throw new IllegalArgumentException("Path " + TEMP_DIR_PATH
+          + " is not a directory");
+    }
+    if (TEMP_DIR.listFiles().length > 0)
+    {
+      throw new IllegalArgumentException("Directory " + TEMP_DIR_PATH
+          + " is not empty");
+    }
+    if (!SOURCE_DIR.exists() || !SOURCE_DIR.isDirectory())
+    {
+      throw new IllegalArgumentException("Source directory not found");
+    }
+
+    xpath.setNamespaceContext(new NamespaceContext()
+    {
+
+      @Override
+      public String getNamespaceURI(String prefix)
+      {
+        if (prefix.equals("xht"))
+        {
+          return XHT_NS;
+        }
+        return null;
+      }
+
+      @Override
+      public String getPrefix(String namespaceURI)
+      {
+        if (namespaceURI.equals(XHT_NS))
+        {
+          return "xht";
+        }
+        return null;
+      }
+
+      @Override
+      public Iterator getPrefixes(String namespaceURI)
+      {
+        throw new UnsupportedOperationException();
+      }
+    });
+
+  }
+
+  private void cleanDir(File path)
+  {
+    File[] files = path.listFiles();
+    if (files != null)
+    {
+      for (File f : files)
+      {
+        if (f.isDirectory())
+        {
+          cleanDir(f);
+          f.delete();
+        }
+        else
+        {
+          f.delete();
+        }
+      }
+      if (!path.equals(TEMP_DIR))
+      {
+        path.delete();
+      }
+    }
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/test/NoExitSecurityManager.java b/src/test/java/com/adobe/epubcheck/test/NoExitSecurityManager.java
new file mode 100644
index 0000000..ad62922
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/test/NoExitSecurityManager.java
@@ -0,0 +1,44 @@
+package com.adobe.epubcheck.test;
+
+import java.security.Permission;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: apond
+ * Date: 6/4/12
+ * Time: 9:24 AM
+ * To change this template use File | Settings | File Templates.
+ */
+
+
+public class NoExitSecurityManager extends SecurityManager
+{
+
+  protected static class ExitException extends SecurityException
+  {
+    public final int status;
+
+    public ExitException(int status)
+    {
+      super("There is no escape!");
+      this.status = status;
+    }
+  }
+
+  @Override
+  public void checkPermission(Permission perm)
+  {                 // allow anything.
+  }
+
+  @Override
+  public void checkPermission(Permission perm, Object context)
+  {                 // allow anything.
+  }
+
+  @Override
+  public void checkExit(int status)
+  {
+    super.checkExit(status);
+    throw new ExitException(status);
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/test/OutputDifferenceListener.java b/src/test/java/com/adobe/epubcheck/test/OutputDifferenceListener.java
new file mode 100644
index 0000000..5ef59a5
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/test/OutputDifferenceListener.java
@@ -0,0 +1,86 @@
+package com.adobe.epubcheck.test;
+
+import com.adobe.epubcheck.util.outWriter;
+import org.custommonkey.xmlunit.Difference;
+import org.custommonkey.xmlunit.DifferenceListener;
+import org.custommonkey.xmlunit.NodeDetail;
+import org.w3c.dom.Node;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: apond
+ * Date: 4/3/13
+ * Time: 11:02 AM
+ * To change this template use File | Settings | File Templates.
+ */
+public class OutputDifferenceListener implements DifferenceListener
+{
+  private int skippedComparisons = 0;
+
+  @Override
+  public int differenceFound(Difference difference)
+  {
+    NodeDetail expectedNode = difference.getControlNodeDetail();
+    NodeDetail actualNode = difference.getTestNodeDetail();
+    String expectedXPath = expectedNode.getXpathLocation();
+    String actualXPath = actualNode.getXpathLocation();
+    if (!expectedXPath.equals(actualXPath))
+    {
+      return DifferenceListener.RETURN_ACCEPT_DIFFERENCE;
+    }
+    String expectedValue = expectedNode.getValue();
+    expectedValue = expectedValue.replaceAll("\\s+", " ").trim();
+    String actualValue = actualNode.getValue();
+    actualValue = actualValue.replaceAll("\\s+", " ").trim();
+    if (expectedValue.equals(actualValue))
+    {
+      return DifferenceListener.RETURN_IGNORE_DIFFERENCE_NODES_SIMILAR;
+    }
+    if (expectedXPath.equals("/jhove[1]/@release")
+        || expectedXPath.equals("/jhove[1]/@date")
+        || expectedXPath.equals("/jhove[1]/date[1]/text()[1]")
+        || expectedXPath.equals("/jhove[1]/repInfo[1]/@uri"))
+    {
+      return DifferenceListener.RETURN_IGNORE_DIFFERENCE_NODES_SIMILAR;
+    }
+
+    if (isDate(expectedValue))
+    {
+      return DifferenceListener.RETURN_IGNORE_DIFFERENCE_NODES_SIMILAR;
+    }
+
+    return DifferenceListener.RETURN_ACCEPT_DIFFERENCE;
+
+  }
+
+  @Override
+  public void skippedComparison(Node node, Node node1)
+  {
+    outWriter.printf("Skipped Comparison " + node.toString());
+    skippedComparisons++;
+  }
+
+  public int getSkippedComparisons()
+  {
+    return this.skippedComparisons;
+  }
+
+  private boolean isDate(String value)
+  {
+    boolean result = true;
+    DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
+    try
+    {
+      format.parse(value);
+    }
+    catch (ParseException e)
+    {
+      result = false;
+    }
+    return result;
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/test/TestRunListener.java b/src/test/java/com/adobe/epubcheck/test/TestRunListener.java
new file mode 100644
index 0000000..2fbd6f4
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/test/TestRunListener.java
@@ -0,0 +1,72 @@
+package com.adobe.epubcheck.test;
+
+import com.adobe.epubcheck.api.MasterReport;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.util.outWriter;
+import org.junit.runner.Description;
+import org.junit.runner.Result;
+import org.junit.runner.notification.RunListener;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class TestRunListener extends RunListener
+{
+  @Override
+  public void testRunStarted(Description description)
+  {
+    File dumpFile = new File("ReportedMessages.txt");
+    if (dumpFile.exists())
+    {
+      dumpFile.delete();
+    }
+    File allFile = new File("AllMessages.txt");
+    if (!allFile.exists())
+    {
+      try
+      {
+        FileWriter fileWriter = new FileWriter(allFile);
+        for (MessageId id : MessageId.values())
+        {
+          fileWriter.write(id.toString());
+          fileWriter.write("\n");
+        }
+        fileWriter.close();
+      }
+      catch (Exception e)
+      {
+        outWriter.println(e.getMessage());
+      }
+    }
+  }
+
+  @Override
+  public void testRunFinished(Result result)
+  {
+    File dumpFile = new File("ReportedMessages.txt");
+    try
+    {
+      FileWriter fileWriter = new FileWriter(dumpFile);
+
+      MessageId[] messageIds = new MessageId[MasterReport.allReportedMessageIds.size()];
+      messageIds = MasterReport.allReportedMessageIds.toArray(messageIds);
+
+      List<MessageId> list = new ArrayList<MessageId>();
+      Collections.addAll(list, messageIds);
+      Collections.sort(list);
+      for (MessageId item : list)
+      {
+        fileWriter.write(item.toString());
+        fileWriter.write("\n");
+      }
+      fileWriter.close();
+    }
+    catch (Exception e)
+    {
+      outWriter.println(e.getMessage());
+    }
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/test/api_Test.java b/src/test/java/com/adobe/epubcheck/test/api_Test.java
new file mode 100644
index 0000000..78d8a98
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/test/api_Test.java
@@ -0,0 +1,81 @@
+package com.adobe.epubcheck.test;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.PrintWriter;
+import java.net.URL;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.adobe.epubcheck.api.EpubCheck;
+import com.adobe.epubcheck.api.Report;
+import com.adobe.epubcheck.util.WriterReportImpl;
+
+/**
+ * Test the various constructors for the EpubCheck Object.
+ */
+public class api_Test
+{
+  @Test
+  public void EpubCheck1_Test() throws Exception
+  {
+    File epub = getTestEpub();
+    EpubCheck check = new EpubCheck(epub);
+    Assert.assertEquals("The file should have generated errors.", 2, 2 & check.doValidate());
+  }
+
+  @Test
+  public void EpubCheck_PrintWriter_Test() throws Exception
+  {
+    File epub = getTestEpub();
+    URL expectedUrl = common.class.getResource("api");
+    String outputPath = expectedUrl.getPath();
+    File actualResults = new File(outputPath + "/PrintWriter_Actual.txt");
+    File expectedResults = new File(outputPath + "/PrintWriter_Expected.txt");
+    FileOutputStream outputStream = new FileOutputStream(actualResults);
+    PrintWriter out = new PrintWriter(outputStream);
+    EpubCheck check = new EpubCheck(epub, out);
+    Assert.assertEquals("The file should have generated errors.", 2, 2 & check.doValidate());
+    out.flush();
+    outputStream.close();
+    out.close();
+    Assert.assertTrue("The resulting file doesn't exist.", actualResults.exists());
+    Assert.assertTrue("The expected file doesn't exist.", expectedResults.exists());
+    common.compareText(expectedResults, actualResults);
+  }
+
+  @Test
+  public void EpubCheck_InputStream_Test() throws Exception
+  {
+    File epub = getTestEpub();
+    URL expectedUrl = common.class.getResource("api");
+    String outputPath = expectedUrl.getPath();
+    File actualResults = new File(outputPath + "/InputStream_Actual.txt");
+    File expectedResults = new File(outputPath + "/InputStream_Expected.txt");
+    FileOutputStream outputStream = new FileOutputStream(actualResults);
+    PrintWriter out = new PrintWriter(outputStream);
+
+    FileInputStream epubStream = new FileInputStream(epub);
+    Report report = new WriterReportImpl(out, "Testing 123");
+    EpubCheck check = new EpubCheck(epubStream, report, epub.getPath());
+    Assert.assertEquals("The file should have generated errors.", 2, 2 & check.doValidate());
+    out.flush();
+    outputStream.close();
+    out.close();
+    epubStream.close();
+    Assert.assertTrue("The resulting file doesn't exist.", actualResults.exists());
+    Assert.assertTrue("The expected file doesn't exist.", expectedResults.exists());
+    common.compareText(expectedResults, actualResults);
+  }
+
+  private File getTestEpub()
+  {
+    URL inputUrl = common.class.getResource("../../../../30/epub/invalid/font_no_fallback.epub");
+    String inputPath = inputUrl.getPath();
+    File epub = new File(inputPath);
+    Assert.assertTrue("Couldn't find resource: " + inputPath, epub.exists());
+    return epub;
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/test/command_line_Test.java b/src/test/java/com/adobe/epubcheck/test/command_line_Test.java
new file mode 100644
index 0000000..a4d5f96
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/test/command_line_Test.java
@@ -0,0 +1,408 @@
+package com.adobe.epubcheck.test;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.net.URL;
+
+import junit.framework.Assert;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.adobe.epubcheck.api.EpubCheck;
+import com.adobe.epubcheck.tool.Checker;
+import com.adobe.epubcheck.util.CheckUtil;
+import com.adobe.epubcheck.util.HandlerUtil;
+import com.adobe.epubcheck.util.Messages;
+import com.adobe.epubcheck.util.PathUtil;
+import com.adobe.epubcheck.util.ResourceUtil;
+
+public class command_line_Test
+{
+  private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
+  private final ByteArrayOutputStream errContent = new ByteArrayOutputStream();
+
+  private SecurityManager originalManager;
+  private PrintStream originalOut;
+  private PrintStream originalErr;
+
+
+  @Before
+  public void setUp() throws Exception
+  {
+    this.originalManager = System.getSecurityManager();
+    System.setSecurityManager(new NoExitSecurityManager());
+    originalOut = System.out;
+    originalErr = System.err;
+    System.setOut(new PrintStream(outContent));
+    System.setErr(new PrintStream(errContent));
+  }
+
+  @After
+  public void tearDown() throws Exception
+  {
+    System.setSecurityManager(this.originalManager);
+    System.setOut(originalOut);
+    System.setErr(originalErr);
+  }
+
+  @Test
+  public void static_class_Test()
+  {
+    //This will create an instance of classes that have nothing but static methods for the sake of code coverage.
+    Checker checker = new Checker();
+    Assert.assertTrue("Checker string isn't as expected", checker.toString().startsWith("com.adobe.epubcheck.tool.Checker"));
+
+    HandlerUtil handlerUtil = new HandlerUtil();
+    Assert.assertTrue("HandlerUtil string isn't as expected", handlerUtil.toString().startsWith("com.adobe.epubcheck.util.HandlerUtil"));
+
+    PathUtil pathUtil = new PathUtil();
+    Assert.assertTrue("PathUtil string isn't as expected", pathUtil.toString().startsWith("com.adobe.epubcheck.util.PathUtil"));
+
+    CheckUtil checkUtil = new CheckUtil();
+    Assert.assertTrue("CheckUtil string isn't as expected", checkUtil.toString().startsWith("com.adobe.epubcheck.util.CheckUtil"));
+
+    ResourceUtil resourceUtil = new ResourceUtil();
+    Assert.assertTrue("ResourceUtil string isn't as expected", resourceUtil.toString().startsWith("com.adobe.epubcheck.util.ResourceUtil"));
+  }
+
+  @Test
+  public void empty_Test()
+  {
+    common.runCustomTest("command_line", "empty", 1);
+    Assert.assertEquals("Command output not as expected", Messages.get("argument_needed"), errContent.toString().trim());
+  }
+
+  @Test
+  public void help_Test()
+  {
+    common.runCustomTest("command_line", "help", 1, true, "-?");
+    Assert.assertEquals("Command output not as expected", Messages.get("no_file_specified"), errContent.toString().trim());
+    String expected = String.format(Messages.get("help_text").replaceAll("[\\s]+", " "), EpubCheck.version());
+    String actual = outContent.toString();
+    actual = actual.replaceAll("[\\s]+", " ");
+    Assert.assertTrue("Help output isn't as expected", actual.contains(expected));
+  }
+
+  @Test
+  public void conflicting_output_Test()
+  {
+    common.runCustomTest("command_line", "conflicting_output", 1, "-o", "foo.xml", "-j", "bar.json");
+    Assert.assertEquals("Command output not as expected", Messages.get("output_type_conflict"), errContent.toString().trim());
+  }
+
+  @Test
+  public void SeveritiesUsage_Test()
+  {
+    runSeverityTest("severity", "command_line", "severity_usage", 1, "-u");
+  }
+
+  @Test
+  public void SeveritiesWarning_Test()
+  {
+    runSeverityTest("severity", "command_line", "severity_warning", 1, "-w");
+  }
+
+  @Test
+  public void SeveritiesError_Test()
+  {
+    runSeverityTest("severity", "command_line", "severity_error", 1, "-e");
+  }
+
+  @Test
+  public void SeveritiesFatal_Test()
+  {
+    runSeverityTest("severity", "command_line", "severity_fatal", 0, "-f");
+  }
+
+  @Test
+  public void SeveritiesOverrideOk_Test()
+  {
+    String testName = "severity_overrideOk";
+    URL inputUrl = common.class.getResource("command_line");
+    String inputPath = inputUrl.getPath();
+    String configFile = inputPath + "/" + testName + ".txt";
+    runSeverityTest("severity", "command_line", testName, 1, "-c", configFile, "-u");
+  }
+
+  @Test
+  public void SeveritiesOverrideMissingFile_Test()
+  {
+    String testName = "severity_overrideMissingFile";
+    URL inputUrl = common.class.getResource("command_line");
+    String inputPath = inputUrl.getPath();
+    String configFile = inputPath + "/" + testName + ".txt";
+    runSeverityTest("severity", "command_line", testName, 1, "-c", configFile, "-u");
+  }
+
+  @Test
+  public void SeveritiesOverrideBadId_Test()
+  {
+    String testName = "severity_overrideBadId";
+    URL inputUrl = common.class.getResource("command_line");
+    String inputPath = inputUrl.getPath();
+    String configFile = inputPath + "/" + testName + ".txt";
+    runSeverityTest("severity", "command_line", testName, 1, "-c", configFile, "-u");
+  }
+
+  @Test
+  public void SeveritiesOverrideBadSeverity_Test()
+  {
+    String testName = "severity_overrideBadSeverity";
+    URL inputUrl = common.class.getResource("command_line");
+    String inputPath = inputUrl.getPath();
+    String configFile = inputPath + "/" + testName + ".txt";
+    runSeverityTest("severity", "command_line", testName, 1, "-c", configFile, "-u");
+  }
+
+  @Test
+  public void SeveritiesOverrideBadMessage_Test()
+  {
+    String testName = "severity_overrideBadMessage";
+    URL inputUrl = common.class.getResource("command_line");
+    String inputPath = inputUrl.getPath();
+    String configFile = inputPath + "/" + testName + ".txt";
+    runSeverityTest("severity", "command_line", testName, 1, "-c", configFile, "-u");
+  }
+
+
+  @Test
+  public void SeveritiesList_Test()
+  {
+    //public static void runCustomTest(String epubName, String componentName, String testName, int expectedReturnCode, String... args)
+    URL inputUrl = common.class.getResource("command_line");
+    String inputPath = inputUrl.getPath();
+    String outputPath = inputPath + "/listSeverities" + "_actual_results.txt";
+    String expectedUrl = inputPath + "/listSeverities" + "_expected_results.txt";
+    common.runCustomTest("command_line", "listSeverities", 0, "--listChecks", outputPath);
+
+    File actualOutput = new File(outputPath);
+    Assert.assertTrue("Output file is missing.", actualOutput.exists());
+    File expectedOutput = new File(expectedUrl);
+    Assert.assertTrue("Expected file is missing.", expectedOutput.exists());
+
+    try
+    {
+      common.compareText(expectedOutput, actualOutput);
+    }
+    catch (Exception e)
+    {
+      e.printStackTrace();
+    }
+  }
+
+  @Test
+  public void passonwarnings_Test()
+  {
+    runExtraCommandLineArgTest("passonwarnings", 0, new String[0]);
+  }
+
+  @Test
+  public void jsonfile_Test()
+  {
+    common.runExpTest("command_line", "jsonfile", 0, true, true, new String[0]);
+  }
+
+  @Test
+  public void xmlfile_Test()
+  {
+    common.runExpTest("command_line", "xmlfile", 0, false, true, new String[0]);
+  }
+
+  @Test
+  public void failonwarnings_Test()
+  {
+    String[] extraArgs = {"--failonwarnings"};
+    runExtraCommandLineArgTest("failonwarnings", 1, extraArgs);
+  }
+
+
+  public static void runExtraCommandLineArgTest(String testName, int expectedReturnCode, String[] extraArgs)
+  {
+    common.runExpTest("command_line", testName, expectedReturnCode, true, false, extraArgs);
+  }
+
+  public static void runSeverityTest(String epubName, String componentName, String testName, int expectedReturnCode, String... args)
+  {
+    File actualOutput;
+    PrintStream ps = null;
+    PrintStream origErr = System.err;
+    PrintStream origOut = System.out;
+    try
+    {
+      String[] theArgs = new String[3 + args.length];
+      URL inputUrl = common.class.getResource(componentName + "/" + epubName);
+      Assert.assertNotNull("Input folder is missing.", inputUrl);
+      String inputPath = inputUrl.getPath();
+      String outputPath = inputPath + "/../" + testName + "_actual_results.txt";
+
+      theArgs[0] = inputPath;
+      theArgs[1] = "-mode";
+      theArgs[2] = "exp";
+      System.arraycopy(args, 0, theArgs, 3, args.length);
+
+      actualOutput = new File(outputPath);
+      ps = new PrintStream(actualOutput);
+      System.setErr(ps);
+      System.setOut(ps);
+      common.runCustomTest(componentName, testName, expectedReturnCode, theArgs);
+      System.setErr(origErr);
+      System.setOut(origOut);
+      ps.flush();
+      ps.close();
+      ps = null;
+
+      Assert.assertTrue("Output file is missing.", actualOutput.exists());
+      URL expectedUrl = common.class.getResource(componentName + "/" + testName + "_expected_results.txt");
+      Assert.assertNotNull("Expected file is missing.", expectedUrl);
+      File expectedOutput = new File(expectedUrl.getPath());
+      Assert.assertTrue("Expected file is missing.", expectedOutput.exists());
+      try
+      {
+        differ d = new differ(expectedOutput, actualOutput, 3);
+        Assert.assertTrue("expected file does not match actual file", d.areTheSame());
+      }
+      catch (Exception ex)
+      {
+        System.err.println(ex.getMessage());
+      }
+      File tempFile = new File(testName + ".epub");
+
+      Assert.assertFalse("Temp file left over after test: " + tempFile.getPath(), tempFile.exists());
+    }
+    catch (FileNotFoundException ex)
+    {
+      System.err.println("File not found: " + testName + "_actual_results.txt");
+    }
+    finally
+    {
+      if (ps != null)
+      {
+        System.setErr(origErr);
+        System.setOut(origOut);
+      }
+    }
+  }
+
+  private static class differ
+  {
+    File expected;
+    File actual;
+    int skip;
+
+    public differ(File expected, File actual, int skip)
+    {
+      this.expected = expected;
+      this.actual = actual;
+      this.skip = skip;
+    }
+
+    public boolean areTheSame()
+    {
+      BufferedReader aR = null;
+      BufferedReader eR = null;
+      try
+      {
+        int lineNumber = 0;
+        aR = new BufferedReader(new FileReader(actual));
+        eR = new BufferedReader(new FileReader(expected));
+
+        String a;
+        String e = null;
+
+        while (((a = aR.readLine()) != null) &&
+            ((e = eR.readLine()) != null))
+        {
+          if (++lineNumber > skip)
+          {
+            if (a != null && e != null)
+            {
+              int x1 = a.indexOf(": ");
+              int y1 = e.indexOf(": ");
+              Assert.assertEquals("lines do not match(" + lineNumber + ")", y1 >= 0 ? e.substring(0, y1) : "", x1 >= 0 ? a.substring(0, x1) : "");
+
+              int x2 = a.lastIndexOf("):");
+              int y2 = e.lastIndexOf("):");
+              if (x2 != -1 && y2 != -1)
+              {
+                Assert.assertEquals(a.length() - x2, e.length() - y2);
+              }
+
+              if (y1 > 0)
+              {
+                String x = a.substring(0, x1);
+                String y = e.substring(0, y1);
+                Assert.assertEquals("lines do not match(" + lineNumber + "): actual:'" + x + "' expected: '" + y + "'", 0, y.compareTo(x));
+              }
+              else
+              {
+                Assert.assertEquals(e, a);
+              }
+              if (y2 > 0)
+              {
+                String x = a.substring(x2);
+                String y = e.substring(y2);
+                Assert.assertEquals("lines do not match(" + lineNumber + "): actual:'" + x + "' expected: '" + y + "'", 0, y.compareTo(x));
+              }
+              else if (!a.contains("com.adobe.epubcheck"))
+              {
+                Assert.assertEquals("lines do not match(" + lineNumber + "): actual:'" + a + "' expected: '" + e + "'", e, a);
+              }
+            }
+          }
+        }
+        if (a != null && a.startsWith("Completed command_line test"))
+        {
+          a = null;
+        }
+        if (e != null && e.startsWith("Completed command_line test"))
+        {
+          e = null;
+        }
+        Assert.assertTrue("files are not the same length", ((a == null || a.length() == 0) && (e == null || e.length() == 0)));
+      }
+      catch (FileNotFoundException ex)
+      {
+        Assert.assertTrue("actual file not found", actual.exists());
+        Assert.assertTrue("expected file not found", expected.exists());
+      }
+      catch (IOException io)
+      {
+        io.printStackTrace();
+      }
+      finally
+      {
+        if (aR != null)
+        {
+          try
+          {
+            aR.close();
+          }
+          catch (IOException e1)
+          {
+            e1.printStackTrace();
+          }
+        }
+        if (eR != null)
+        {
+          try
+          {
+            eR.close();
+          }
+          catch (IOException e2)
+          {
+            e2.printStackTrace();
+          }
+        }
+      }
+      return true;
+    }
+  }
+
+}
diff --git a/src/test/java/com/adobe/epubcheck/test/common.java b/src/test/java/com/adobe/epubcheck/test/common.java
new file mode 100644
index 0000000..48c39d2
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/test/common.java
@@ -0,0 +1,178 @@
+package com.adobe.epubcheck.test;
+
+import com.adobe.epubcheck.tool.Checker;
+import com.adobe.epubcheck.util.Messages;
+import com.adobe.epubcheck.util.outWriter;
+import junit.framework.Assert;
+import org.custommonkey.xmlunit.DetailedDiff;
+import org.custommonkey.xmlunit.Diff;
+import org.custommonkey.xmlunit.ElementNameAndTextQualifier;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+public class common
+{
+  public static void runExpTest(String componentName, String testName, int expectedReturnCode, boolean isJson)
+  {
+    runExpTest(componentName, testName, expectedReturnCode, isJson, false, new String[0]);
+  }
+
+  public static void runExpTest(String componentName, String testName, int expectedReturnCode, boolean isJson, boolean useNullOutputPath, String... extraArgs)
+  {
+    ArrayList<String> args = new ArrayList<String>();
+    String extension = isJson ? "json" : "xml";
+    int extraArgsLength = extraArgs != null ? extraArgs.length : 0;
+    URL inputUrl = common.class.getResource(componentName + "/" + testName);
+    Assert.assertNotNull("Input folder is missing.", inputUrl);
+    String inputPath = inputUrl.getPath();
+    String outputPath =  inputPath + "/../" + testName + (useNullOutputPath ? "check." : "_actual_results.") + extension;
+    args.add(inputPath);
+    args.add("-mode");
+    args.add("exp");
+    args.add("-u");
+    for (int j = 0; j < extraArgsLength; ++j)
+    {
+      args.add(extraArgs[j]);
+    }
+    args.add((isJson) ? "-j" : "-o");
+    if (!useNullOutputPath && outputPath != null && !outputPath.isEmpty())
+    {
+      args.add(outputPath);
+    }
+
+    runCustomTest(componentName, testName, expectedReturnCode, args.toArray(new String[args.size()]));
+    File actualOutput = new File(outputPath);
+    Assert.assertTrue("Output file is missing.", actualOutput.exists());
+    URL expectedUrl = common.class.getResource(componentName + "/" + testName + "_expected_results." + extension);
+    Assert.assertNotNull("Expected file is missing.", expectedUrl);
+    File expectedOutput = new File(expectedUrl.getPath());
+    Assert.assertTrue("Expected file is missing.", expectedOutput.exists());
+    if (isJson)
+    {
+      compareJson(expectedOutput, actualOutput);
+    }
+    else
+    {
+      compareXml(expectedOutput, actualOutput);
+    }
+    File tempFile = new File(testName + ".epub");
+    Assert.assertFalse("Temp file left over after test: " + tempFile.getPath(), tempFile.exists());
+  }
+
+  public static void runCustomTest(String componentName, String testName, int expectedReturnCode, String... args)
+  {
+    runCustomTest(componentName, testName, expectedReturnCode, false, args);
+  }
+
+  public static void runCustomTest(String componentName, String testName, int expectedReturnCode, boolean quiet, String... args)
+  {
+    try
+    {
+      if (!quiet)
+      {
+        outWriter.printf("Start %s test('%s')\n", componentName, testName);
+      }
+      int result = Integer.MAX_VALUE;
+      try
+      {
+        Checker.main(args);
+      }
+      catch (NoExitSecurityManager.ExitException e)
+      {
+        result = e.status;
+      }
+
+      Assert.assertEquals("Return code", expectedReturnCode, result);
+
+    }
+    catch (Exception ex)
+    {
+      System.err.println(Messages.get("there_were_errors"));
+      ex.printStackTrace();
+      Assert.assertTrue(String.format("Error running %s test('%s')", componentName, testName), false);
+    }
+    if (!quiet)
+    {
+      outWriter.printf("Completed %s test('%s')\n", componentName, testName);
+    }
+  }
+
+  public static void compareText(File expectedOutput, File actualOutput) throws Exception
+  {
+    BufferedReader expectedReader = new BufferedReader(new FileReader(expectedOutput));
+    BufferedReader actualReader = new BufferedReader(new FileReader(actualOutput));
+    String expectedLine = expectedReader.readLine();
+    while (expectedLine != null)
+    {
+      String actualLine = actualReader.readLine();
+      Assert.assertNotNull("Expected: " + expectedLine + " Actual: null", actualLine);
+      actualLine = actualLine.trim();
+      expectedLine = expectedLine.trim();
+      Assert.assertEquals("Expected: " + expectedLine + " Actual: " + actualLine, expectedLine, actualLine);
+      expectedLine = expectedReader.readLine();
+    }
+    String overflow = actualReader.readLine();
+    Assert.assertNull("Expected: null Actual: " + overflow, overflow);
+    expectedReader.close();
+    actualReader.close();
+  }
+
+  public static void compareJson(File expectedOutput, File actualOutput)
+  {
+    ArrayList<String> ignoreFields = new ArrayList<String>();
+    ignoreFields.add("customMessageFileName");
+    ignoreFields.add("/checker/checkDate");
+    ignoreFields.add("/checker/checkerVersion");
+    ignoreFields.add("/checker/elapsedTime");
+    ignoreFields.add("/checker/path");
+    try
+    {
+      jsonCompare.compareJsonFiles(expectedOutput, actualOutput, ignoreFields);
+    }
+    catch (Exception ex)
+    {
+      System.err.println(Messages.get("there_were_errors"));
+      ex.printStackTrace();
+      Assert.assertTrue("Error performing the json comparison: ", false);
+    }
+  }
+
+  public static void compareXml(File expectedOutput, File actualOutput)
+  {
+    Diff diff;
+    try
+    {
+      FileReader expectedReader = new FileReader(expectedOutput);
+      FileReader actualReader = new FileReader(actualOutput);
+      diff = new Diff(expectedReader, actualReader);
+    }
+    catch (Exception ex)
+    {
+      System.err.println(Messages.get("there_were_errors"));
+      ex.printStackTrace();
+      Assert.assertTrue("Error performing the xml comparison: ", false);
+      return;
+    }
+    OutputDifferenceListener listener = new OutputDifferenceListener();
+    diff.overrideDifferenceListener(listener);
+    diff.overrideElementQualifier(new ElementNameAndTextQualifier());
+    Assert.assertTrue("There were skipped comparisons.", listener.getSkippedComparisons() == 0);
+    if (!diff.similar())
+    {
+      DetailedDiff details = new DetailedDiff(diff);
+      List differences = details.getAllDifferences();
+      StringBuilder sb = new StringBuilder();
+      for (Object difference : differences)
+      {
+        sb.append(difference.toString());
+      }
+
+      Assert.assertTrue("The expected xml was different: " + sb.toString(), diff.similar());
+    }
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/test/css_Test.java b/src/test/java/com/adobe/epubcheck/test/css_Test.java
new file mode 100644
index 0000000..afc90d0
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/test/css_Test.java
@@ -0,0 +1,135 @@
+package com.adobe.epubcheck.test;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class css_Test
+{
+  private SecurityManager originalManager;
+
+  @Before
+  public void setUp() throws Exception
+  {
+    this.originalManager = System.getSecurityManager();
+    System.setSecurityManager(new NoExitSecurityManager());
+  }
+
+  @After
+  public void tearDown() throws Exception
+  {
+    System.setSecurityManager(this.originalManager);
+  }
+
+  @Test
+  public void transform_Test() throws Exception
+  {
+    runCSSJsonTest("transform", 0);
+  }
+
+  @Test
+  public void columns_Test() throws Exception
+  {
+    runCSSJsonTest("columns", 0);
+  }
+
+  @Test
+  public void transition_Test() throws Exception
+  {
+    runCSSJsonTest("transition", 0);
+  }
+
+  @Test
+  public void keyframe_Test() throws Exception
+  {
+    runCSSJsonTest("keyframe", 0);
+  }
+
+  @Test
+  public void font_face_Test() throws Exception
+  {
+    runCSSJsonTest("font-face", 1);
+  }
+
+  // @Test
+  public void unused_epub3_Test() throws Exception
+  {
+    runCSSJsonTest("unused_epub3", 1);
+  }
+
+  @Test
+  public void discouraged_json_Test() throws Exception
+  {
+    runCSSJsonTest("discouraged", 1);
+  }
+
+  @Test
+  public void discouraged_xml_Test() throws Exception
+  {
+    runCSSXmlTest("discouraged", 1);
+  }
+
+  // @Test
+  public void unused_epub2_Test() throws Exception
+  {
+    runCSSJsonTest("unused_epub2", 1);
+  }
+
+  @Test
+  public void multiple_epub3_Test() throws Exception
+  {
+    runCSSJsonTest("multiple_epub3", 1);
+  }
+
+  // @Test
+  public void multiple_epub2_Test() throws Exception
+  {
+    runCSSJsonTest("multiple_epub2", 0);
+  }
+
+  @Test
+  public void excessive_epub3_Test() throws Exception
+  {
+    runCSSJsonTest("excessive_epub3", 0);
+  }
+
+  @Test
+  public void alternate_Test() throws Exception
+  {
+    runCSSJsonTest("alternate", 1);
+  }
+
+  @Test
+  public void font_encryption_unknown_Test() throws Exception
+  {
+    runCSSJsonTest("font_encryption_unknown", 1);
+  }
+
+  @Test
+  public void font_encryption_adobe_Test() throws Exception
+  {
+    runCSSJsonTest("font_encryption_adobe", 1);
+  }
+
+  @Test
+  public void font_encryption_idpf_Test() throws Exception
+  {
+    runCSSJsonTest("font_encryption_idpf", 0);
+  }
+
+  @Test
+  public void font_encryption_idpf_xml_Test() throws Exception
+  {
+    runCSSXmlTest("font_encryption_idpf", 0);
+  }
+
+  private void runCSSJsonTest(String testName, int expectedReturnCode) throws Exception
+  {
+    common.runExpTest("css", testName, expectedReturnCode, true);
+  }
+
+  private void runCSSXmlTest(String testName, int expectedReturnCode) throws Exception
+  {
+    common.runExpTest("css", testName, expectedReturnCode, false);
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/test/debug.java b/src/test/java/com/adobe/epubcheck/test/debug.java
new file mode 100644
index 0000000..6826185
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/test/debug.java
@@ -0,0 +1,42 @@
+package com.adobe.epubcheck.test;
+
+import com.adobe.epubcheck.messages.MessageDictionary;
+import com.adobe.epubcheck.tool.EpubChecker;
+import com.adobe.epubcheck.util.Messages;
+import org.junit.Test;
+
+import java.io.BufferedWriter;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.net.URL;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: apond
+ * Date: 2/7/13
+ * Time: 5:15 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class debug
+{
+  // Quick way to debug a one off epub file.
+  // @Test
+  public void run_local_epub_test()
+  {
+    String[] args = new String[3];
+    String inputPath = "9780307272119_epub.v10.epub";
+    args[0] = inputPath;
+    args[1] = "-j";
+    args[2] = inputPath + ".json";
+    try
+    {
+      EpubChecker checker = new EpubChecker();
+      int result = checker.run(args);
+    }
+    catch (Exception ex)
+    {
+      System.err.println(Messages.get("there_were_errors"));
+      ex.printStackTrace();
+    }
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/test/dtBook_Test.java b/src/test/java/com/adobe/epubcheck/test/dtBook_Test.java
new file mode 100644
index 0000000..9c46ff5
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/test/dtBook_Test.java
@@ -0,0 +1,46 @@
+package com.adobe.epubcheck.test;
+
+import org.junit.*;
+
+
+public class dtBook_Test
+{
+  private SecurityManager originalManager;
+
+  @Before
+  public void setUp() throws Exception
+  {
+    this.originalManager = System.getSecurityManager();
+    System.setSecurityManager(new NoExitSecurityManager());
+  }
+
+  @After
+  public void tearDown() throws Exception
+  {
+    System.setSecurityManager(this.originalManager);
+  }
+
+  @Test
+  public void Basic_JSON_Test() throws Exception
+  {
+    runDTBookJsonTest("Basic", 0);
+  }
+
+
+  @Test
+  public void Basic_XML_Test() throws Exception
+  {
+    runDTBookXmlTest("Basic", 0);
+  }
+
+  private void runDTBookJsonTest(String testName, int expectedReturnCode) throws Exception
+  {
+    common.runExpTest("DTBook", testName, expectedReturnCode, true);
+  }
+
+  private void runDTBookXmlTest(String testName, int expectedReturnCode) throws Exception
+  {
+    common.runExpTest("DTBook", testName, expectedReturnCode, false);
+  }
+
+}
diff --git a/src/test/java/com/adobe/epubcheck/test/jsonCompare.java b/src/test/java/com/adobe/epubcheck/test/jsonCompare.java
new file mode 100644
index 0000000..478aca4
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/test/jsonCompare.java
@@ -0,0 +1,152 @@
+package com.adobe.epubcheck.test;
+
+import junit.framework.Assert;
+import org.codehaus.jackson.JsonNode;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.node.ArrayNode;
+import org.codehaus.jackson.node.ObjectNode;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Map;
+
+public class jsonCompare
+{
+  public static void compareJsonFiles(File expected, File actual, ArrayList<String> ignoreFields) throws IOException
+  {
+    ObjectMapper mapper = new ObjectMapper();
+    JsonNode expectedRoot = mapper.readTree(expected);
+    JsonNode actualRoot = mapper.readTree(actual);
+    ArrayList<String> errors = new ArrayList<String>();
+    compareJsonNodes(expectedRoot, actualRoot, "", ignoreFields, errors);
+
+    Assert.assertEquals("Outputted json isn't as expected. \n" + join(errors, "\n"), 0, errors.size());
+  }
+
+  public static void compareJsonNodes(JsonNode expected, JsonNode actual, String currentFieldPath, ArrayList<String> ignoreFields, ArrayList<String> errors)
+  {
+    if (ignoreFields.contains(currentFieldPath.replaceAll("\\[\\d+\\]", "[]")))
+    {
+      return;
+    }
+
+    if (expected instanceof ObjectNode && actual instanceof ObjectNode)
+    {
+      compareObjectNodes((ObjectNode) expected, (ObjectNode) actual, currentFieldPath, ignoreFields, errors);
+    }
+    else if (expected instanceof ArrayNode && actual instanceof ArrayNode)
+    {
+      compareArrayNodes((ArrayNode) expected, (ArrayNode) actual, currentFieldPath, ignoreFields, errors);
+    }
+    else
+    {
+      String actualValue = (actual == null) ? "null" : actual.toString();
+      actualValue = normalizeLineEndings(actualValue);
+      String expectedValue = expected.toString();
+      expectedValue = normalizeLineEndings(expectedValue);
+      if (!expectedValue.equals(actualValue))
+      {
+        addError(errors, "Values do not match", currentFieldPath, expectedValue, actualValue);
+      }
+    }
+  }
+
+  public static void compareObjectNodes(ObjectNode expected, ObjectNode actual, String currentFieldPath, ArrayList<String> ignoreFields, ArrayList<String> errors)
+  {
+    if (expected.equals(actual))
+    {
+      return;
+    }
+    Iterator<Map.Entry<String, JsonNode>> expectedFields = expected.getFields();
+    ArrayList<String> expectedFieldNames = new ArrayList<String>();
+
+    while (expectedFields.hasNext())
+    {
+      Map.Entry<String, JsonNode> expectedField = expectedFields.next();
+      String fieldName = expectedField.getKey();
+      expectedFieldNames.add(fieldName);
+      String path = currentFieldPath + "/" + fieldName;
+      JsonNode expectedNode = expectedField.getValue();
+      JsonNode actualNode = actual.get(fieldName);
+      compareJsonNodes(expectedNode, actualNode, path, ignoreFields, errors);
+    }
+    Iterator<String> actualFields = actual.getFieldNames();
+    ArrayList<String> actualFieldNames = new ArrayList<String>();
+    while (actualFields.hasNext())
+    {
+      actualFieldNames.add(actualFields.next());
+    }
+    if (expectedFieldNames.size() != actualFieldNames.size())
+    {
+      Collections.sort(expectedFieldNames);
+      Collections.sort(actualFieldNames);
+      addError(errors, "The field names do no match for the object", currentFieldPath, join(expectedFieldNames, ","), join(actualFieldNames, ","));
+    }
+  }
+
+  public static void compareArrayNodes(ArrayNode expected, ArrayNode actual, String currentFieldPath, ArrayList<String> ignoreFields, ArrayList<String> errors)
+  {
+    if (expected.equals(actual))
+    {
+      return;
+    }
+    int expectedIndex = 0;
+    Iterator<JsonNode> expectedElements = expected.getElements();
+    while (expectedElements.hasNext())
+    {
+      String path = currentFieldPath + "[" + expectedIndex + "]";
+      JsonNode expectedElement = expectedElements.next();
+      JsonNode actualElement = actual.get(expectedIndex);
+      compareJsonNodes(expectedElement, actualElement, path, ignoreFields, errors);
+      expectedIndex++;
+    }
+
+    int actualIndex = 0;
+    Iterator<JsonNode> actualElements = actual.getElements();
+    while (actualElements.hasNext())
+    {
+      actualElements.next();
+      actualIndex++;
+    }
+    if (expectedIndex != actualIndex)
+    {
+      addError(errors, "The number of elements in the array do not match.", currentFieldPath, Integer.toString(expectedIndex), Integer.toString(actualIndex));
+    }
+  }
+
+  public static void addError(ArrayList<String> errors, String message, String path, String expected, String actual)
+  {
+    errors.add(message + "(" + path + ")\nExpected:\n" + expected + "\nActual:\n" + actual + "\n");
+  }
+
+  public static String join(ArrayList<String> coll, String delimiter)
+  {
+    if (coll.isEmpty())
+    {
+      return "";
+    }
+
+    StringBuilder sb = new StringBuilder();
+
+    for (String x : coll)
+    {
+      sb.append(x);
+      sb.append(delimiter);
+    }
+
+    sb.delete(sb.length() - delimiter.length(), sb.length());
+
+    return sb.toString();
+  }
+
+  private static String normalizeLineEndings(String value)
+  {
+    String result = value.replaceAll("\\\\r\\\\n", " ");
+    result = result.replaceAll("\\\\n", " ");
+    return result;
+
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/test/message_coverage.java b/src/test/java/com/adobe/epubcheck/test/message_coverage.java
new file mode 100644
index 0000000..e7691ed
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/test/message_coverage.java
@@ -0,0 +1,56 @@
+package com.adobe.epubcheck.test;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import com.adobe.epubcheck.messages.MessageId;
+
+/**
+ * Test the coverage of reported message ids by all the tests.  This test should run after all the others have completed.
+ */
+public class message_coverage
+{
+  @Test
+  public void MessageId_Coverage_Test() throws Exception
+  {
+    File dumpFile = new File("ReportedMessages.txt");
+    Assert.assertTrue("MessageId output file is missing: " + dumpFile.getAbsolutePath(), dumpFile.exists());
+    HashSet<MessageId> reportedMessageIds = new HashSet<MessageId>();
+    BufferedReader reader = new BufferedReader(new FileReader(dumpFile));
+    Assert.assertNotNull("Could not read the reported message file.", reader);
+    String line;
+    while ((line = reader.readLine()) != null)
+    {
+      line = line.trim();
+      if (!line.equals(""))
+      {
+        reportedMessageIds.add(MessageId.fromString(line));
+      }
+    }
+    reader.close();
+    List<MessageId> allMessageList = Arrays.asList(MessageId.values());
+    Assert.assertNotNull("Could not read the reported message file.", allMessageList);
+    Set<MessageId> allMessages = new HashSet<MessageId>(allMessageList);
+    allMessages.removeAll(reportedMessageIds);
+    Set<MessageId> expectedMissedCoverage = new HashSet<MessageId>();
+    expectedMissedCoverage.add(MessageId.HTM_002); //This message is in a code path that shouldn't be hit
+    expectedMissedCoverage.add(MessageId.HTM_011); //This message may never be reported.  Undeclared entities result in a Sax Parser Error and message RSC_005.
+    expectedMissedCoverage.add(MessageId.CHK_007); //This message is in a code path that shouldn't be hit, but is here in case there is some other error accessing the file.
+    expectedMissedCoverage.add(MessageId.CHK_006); //This message is in a code path that shouldn't ever be hit, but its here in case there is an error parsing the regex result.
+    expectedMissedCoverage.add(MessageId.OPF_011); //This is currently reported as RSC_005 in Schematron, but would be safer in prefix-checked code
+    expectedMissedCoverage.add(MessageId.PKG_015); //This is only reported in an exception that is difficult to generate in a test
+    expectedMissedCoverage.add(MessageId.PKG_005); //This is only reported in an exception that is difficult to generate in a test
+    expectedMissedCoverage.add(MessageId.RSC_017); //This message may never be reported.   Sax Parser Error and message RSC_005, but this covers SAX warnings, which may never happen.
+
+    Assert.assertEquals("Messages not covered by tests", expectedMissedCoverage, allMessages);
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/test/opf_Test.java b/src/test/java/com/adobe/epubcheck/test/opf_Test.java
new file mode 100644
index 0000000..61ac1d8
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/test/opf_Test.java
@@ -0,0 +1,215 @@
+package com.adobe.epubcheck.test;
+
+import org.junit.*;
+
+public class opf_Test
+{
+  private SecurityManager originalManager;
+
+  @Before
+  public void setUp() throws Exception
+  {
+    this.originalManager = System.getSecurityManager();
+    System.setSecurityManager(new NoExitSecurityManager());
+  }
+
+  @After
+  public void tearDown() throws Exception
+  {
+    System.setSecurityManager(this.originalManager);
+  }
+
+  @Test
+  public void Missing_NAV_epub3Test() throws Exception
+  {
+    runOpfJsonTest("Missing_NAV_epub3", 1);
+  }
+
+  @Test
+  public void Missing_NAV_epub2Test() throws Exception
+  {
+    runOpfJsonTest("Missing_NAV_epub2", 0);
+  }
+
+  @Test
+  public void Missing_NCX_epub3Test() throws Exception
+  {
+    runOpfJsonTest("Missing_NCX_epub3", 0);
+  }
+
+  @Test
+  public void Missing_NCX_epub2Test() throws Exception
+  {
+    runOpfJsonTest("Missing_NCX_epub2", 1);
+  }
+
+  @Test
+  public void Missing_Spine_epub3_json_Test() throws Exception
+  {
+    runOpfJsonTest("Missing_Spine_epub3", 1);
+  }
+
+  @Test
+  public void Missing_Spine_epub3_xml_Test() throws Exception
+  {
+    runOpfXmlTest("Missing_Spine_epub3", 1);
+  }
+
+  @Test
+  public void Missing_Spine_epub2Test() throws Exception
+  {
+    runOpfJsonTest("Missing_Spine_epub2", 1);
+  }
+
+  @Test
+  public void Epub3_marked_v2_json_Test() throws Exception
+  {
+    runOpfJsonTest("Epub3_marked_v2", 1);
+  }
+
+  @Test
+  public void Epub3_marked_v2_xml_Test() throws Exception
+  {
+    runOpfXmlTest("Epub3_marked_v2", 1);
+  }
+
+  @Test
+  public void Epub2_marked_v3_json_Test() throws Exception
+  {
+    runOpfJsonTest("Epub2_marked_v3", 1);
+  }
+
+  @Test
+  public void Epub2_marked_v3_xmlTest() throws Exception
+  {
+    runOpfXmlTest("Epub2_marked_v3", 1);
+  }
+
+  @Test
+  public void rendition_valid_Test() throws Exception
+  {
+    runOpfJsonTest("rendition_valid", 1);
+  }
+
+  @Test
+  public void viewport_Test() throws Exception
+  {
+    // viewport test is an epub where pre-paginated is set for the entire document
+    runOpfJsonTest("viewport", 1);
+  }
+
+  @Test
+  public void viewport2_Test() throws Exception
+  {
+    // viewport test is an epub where reflowable is set for the entire document
+    // and some spine items are set to fixed individually
+    runOpfJsonTest("viewport2", 1);
+  }
+
+  @Test
+  public void Missing_metadata_epub3Test() throws Exception
+  {
+    runOpfJsonTest("Missing_metadata_epub3", 1);
+  }
+
+  @Test
+  public void Missing_metadata_epub2Test() throws Exception
+  {
+    runOpfJsonTest("Missing_metadata_epub2", 1);
+  }
+
+
+  @Test
+  public void Excessive_Spine_Items_epub3_Test() throws Exception
+  {
+    runOpfJsonTest("Excessive_Spine_Items_epub3", 0);
+  }
+
+  @Test
+  public void Excessive_Spine_Items_epub2_Test() throws Exception
+  {
+    runOpfJsonTest("Excessive_Spine_Items_epub2", 0);
+  }
+
+  @Test
+  public void Excessive_Spine_Items_epub3_fixed_format_Test() throws Exception
+  {
+    runOpfJsonTest("Excessive_Spine_Items_epub3_fixed_format", 1);
+  }
+
+  @Test
+  public void Excessive_Spine_Items_epub3_fixed_format_properties_Test() throws Exception
+  {
+    runOpfJsonTest("Excessive_Spine_Items_epub3_fixed_format_properties", 1);
+  }
+
+  @Test
+  public void Publication_Metadata_epub3_json_Test()
+  {
+    runOpfJsonTest("Publication_Metadata_epub3", 0);
+  }
+
+  @Test
+  public void Publication_Metadata_epub3_xml_Test()
+  {
+    runOpfXmlTest("Publication_Metadata_epub3", 0);
+  }
+
+  @Test
+  public void Media_type_handler_Test()
+  {
+    runOpfJsonTest("Media-type_handler", 1);
+  }
+
+  @Test
+  public void Mismatched_mimetypes_epub3_Test()
+  {
+    runOpfJsonTest("Mismatched_mimetypes_epub3", 1);
+  }
+
+  @Test
+  public void Mismatched_mimetypes_epub2_Test()
+  {
+    runOpfJsonTest("Mismatched_mimetypes_epub2", 1);
+  }
+
+  @Test
+  public void Properties_Test()
+  {
+    runOpfJsonTest("Properties", 1);
+  }
+
+  @Test
+  public void oebps12_Test()
+  {
+    runOpfJsonTest("oebps12", 1);
+  }
+
+  @Test
+  public void Fallbacks_epub3_Test()
+  {
+    runOpfJsonTest("Fallbacks_epub3", 1);
+  }
+
+  @Test
+  public void Fallbacks_epub2_Test()
+  {
+    runOpfJsonTest("Fallbacks_epub2", 1);
+  }
+
+  @Test
+  public void Missing_unique_id_Test()
+  {
+    runOpfJsonTest("Missing_unique_id", 1);
+  }
+
+  private void runOpfJsonTest(String testName, int expectedReturnCode)
+  {
+    common.runExpTest("opf", testName, expectedReturnCode, true);
+  }
+
+  private void runOpfXmlTest(String testName, int expectedReturnCode)
+  {
+    common.runExpTest("opf", testName, expectedReturnCode, false);
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/test/package_Test.java b/src/test/java/com/adobe/epubcheck/test/package_Test.java
new file mode 100644
index 0000000..701096c
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/test/package_Test.java
@@ -0,0 +1,299 @@
+package com.adobe.epubcheck.test;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.Assert;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.adobe.epubcheck.api.EpubCheck;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.ocf.OCFMockPackage;
+import com.adobe.epubcheck.ocf.OCFPackage;
+import com.adobe.epubcheck.opf.OPFChecker;
+import com.adobe.epubcheck.reporting.CheckingReport;
+import com.adobe.epubcheck.util.EPUBVersion;
+import com.adobe.epubcheck.util.ValidationReport;
+
+public class package_Test
+{
+  private SecurityManager originalManager;
+
+  @Before
+  public void setUp() throws Exception
+  {
+    this.originalManager = System.getSecurityManager();
+    System.setSecurityManager(new NoExitSecurityManager());
+  }
+
+  @After
+  public void tearDown() throws Exception
+  {
+    System.setSecurityManager(this.originalManager);
+  }
+
+  @Test
+  public void Missing_toc_file_Test() throws Exception
+  {
+    runPackageJsonTest("missing_toc_file", 1);
+  }
+
+  @Test
+  public void Missing_ncx_file_Test() throws Exception
+  {
+    runPackageJsonTest("missing_ncx_file", 1);
+  }
+
+  @Test
+  public void missing_mimetype_file_epub3_Test() throws Exception
+  {
+    runPackageJsonTest("missing_mimetype_file_epub3", 1);
+  }
+
+  @Test
+  public void missing_mimetype_file_epub2_Test() throws Exception
+  {
+    runPackageJsonTest("missing_mimetype_file_epub2", 1);
+  }
+
+  @Test
+  public void missing_container_file_epub3_Test() throws Exception
+  {
+    runPackageJsonTest("missing_container_file_epub3", 1);
+  }
+
+  @Test
+  public void missing_container_file_epub2_Test() throws Exception
+  {
+    runPackageJsonTest("missing_container_file_epub2", 1);
+  }
+
+  @Test
+  public void missing_opf_file_Test() throws Exception
+  {
+    runPackageJsonTest("missing_opf_file", 1);
+  }
+
+  @Test
+  public void interesting_paths_epub2_Test() throws Exception
+  {
+    runPackageJsonTest("interesting_paths_epub2", 0);
+  }
+
+  @Test
+  public void interesting_paths_epub2_xml_Test() throws Exception
+  {
+    runPackageXmlTest("interesting_paths_epub2", 0);
+  }
+
+  @Test
+  public void interesting_paths_epub3_json_Test() throws Exception
+  {
+    runPackageJsonTest("interesting_paths_epub3", 1);
+  }
+
+  @Test
+  public void interesting_paths_epub3_xml_Test() throws Exception
+  {
+    runPackageXmlTest("interesting_paths_epub3", 1);
+  }
+
+  @Test
+  public void empty_mimetype_Test() throws Exception
+  {
+    runPackageJsonTest("empty_mimetype", 1);
+  }
+
+  @Test
+  public void image_types_Test() throws Exception
+  {
+    runPackageJsonTest("image_types", 0);
+  }
+
+  @Test
+  public void path_resolution_Test() throws Exception
+  {
+    runPackageJsonTest("path_resolution", 0);
+  }
+
+  @Test
+  public void empty_dir_Test() throws Exception
+  {
+    String[] args = new String[3];
+    URL inputUrl = common.class.getResource("package");
+    String inputPath = inputUrl.getPath();
+    String outputPath = inputPath + "/empty_dir_actual_results.json";
+    String expectedOutputPath = inputPath + "/empty_dir_expected_results.json";
+    inputPath += "/empty_dir.epub";
+    args[0] = inputPath;
+    args[1] = "-j";
+    args[2] = outputPath;
+    common.runCustomTest("package", "empty_dir", 1, args);
+    File actualOutput = new File(outputPath);
+    Assert.assertTrue("Output file is missing.", actualOutput.exists());
+    File expectedOutput = new File(expectedOutputPath);
+    Assert.assertTrue("Expected output file is missing.", expectedOutput.exists());
+    common.compareJson(expectedOutput, actualOutput);
+  }
+
+  @Test
+  public void corrupt_file_Test() throws Exception
+  {
+    String[] args = new String[3];
+    URL inputUrl = common.class.getResource("package");
+    String inputPath = inputUrl.getPath();
+    String outputPath = inputPath + "/corrupt_file_actual_results.json";
+    String expectedOutputPath = inputPath + "/corrupt_file_expected_results.json";
+    inputPath += "/corrupt_file.epub";
+    args[0] = inputPath;
+    args[1] = "-j";
+    args[2] = outputPath;
+    common.runCustomTest("package", "corrupt_file", 1, args);
+    File actualOutput = new File(outputPath);
+    Assert.assertTrue("Output file is missing.", actualOutput.exists());
+    File expectedOutput = new File(expectedOutputPath);
+    Assert.assertTrue("Expected output file is missing.", expectedOutput.exists());
+    common.compareJson(expectedOutput, actualOutput);
+  }
+
+  @Test
+  public void blank_file_Test() throws Exception
+  {
+    URL inputUrl = common.class.getResource("package");
+    String inputPath = inputUrl.getPath();
+    inputPath += "/blank.epub";
+    ValidationReport report = new ValidationReport(inputPath);
+    report.initialize();
+    File inputEpub = new File(inputPath);
+    EpubCheck check = new EpubCheck(inputEpub, report);
+    Assert.assertEquals("The file should have generated warnings.", 6, check.doValidate());
+    report.generate();
+    List<MessageId> fatals = new ArrayList<MessageId>();
+    fatals.add(MessageId.PKG_008);
+    List<MessageId> errors = new ArrayList<MessageId>();
+    errors.add(MessageId.PKG_003);
+    Assert.assertEquals("The fatal results do not match", fatals, report.getFatalErrorIds());
+    Assert.assertEquals("The error results do not match", errors, report.getErrorIds());
+    Assert.assertEquals("The warning results do not match", 0, report.getWarningCount());
+  }
+
+  @Test
+  public void wrong_type_Test() throws Exception
+  {
+    String[] args = new String[3];
+    URL inputUrl = common.class.getResource("package");
+    String inputPath = inputUrl.getPath();
+    String outputPath = inputPath + "/wrong_type_actual_results.json";
+    String expectedOutputPath = inputPath + "/wrong_type_expected_results.json";
+    inputPath += "/PlaceHolder.epub";
+    args[0] = inputPath;
+    args[1] = "-j";
+    args[2] = outputPath;
+    common.runCustomTest("package", "wrong_type", 1, args);
+    File actualOutput = new File(outputPath);
+    Assert.assertTrue("Output file is missing.", actualOutput.exists());
+    File expectedOutput = new File(expectedOutputPath);
+    Assert.assertTrue("Expected output file is missing.", expectedOutput.exists());
+    common.compareJson(expectedOutput, actualOutput);
+  }
+
+  // @Test There are different results when running through IntelliJ and running with Maven.
+  // Different OS's also produce different results.
+  public void empty_archive_Test() throws Exception
+  {
+    String[] args = new String[3];
+    URL inputUrl = common.class.getResource("package");
+    String inputPath = inputUrl.getPath();
+    String outputPath = inputPath + "/empty_archive_actual_results.json";
+    String expectedOutputPath = inputPath + "/empty_archive_expected_results.json";
+    inputPath += "/empty_archive.epub";
+    args[0] = inputPath;
+    args[1] = "-j";
+    args[2] = outputPath;
+    common.runCustomTest("package", "empty_archive", 1, args);
+    File actualOutput = new File(outputPath);
+    Assert.assertTrue("Output file is missing.", actualOutput.exists());
+    File expectedOutput = new File(expectedOutputPath);
+    Assert.assertTrue("Expected output file is missing.", expectedOutput.exists());
+    common.compareJson(expectedOutput, actualOutput);
+  }
+
+  @Test
+  public void wrong_extension_Test() throws Exception
+  {
+    URL inputUrl = common.class.getResource("package");
+    String inputPath = inputUrl.getPath();
+    String outputPath = inputPath + "/wrong_extension_actual_results.json";
+    String expectedOutputPath = inputPath + "/wrong_extension_expected_results.json";
+    inputPath += "/wrong_extension.zip";
+    CheckingReport report = new CheckingReport(inputPath, outputPath);
+    report.initialize();
+    File inputEpub = new File(inputPath);
+    EpubCheck check = new EpubCheck(inputEpub, report);
+    org.junit.Assert.assertEquals("The file should have generated warnings.", 1, check.doValidate());
+    report.generate();
+    File actualOutput = new File(outputPath);
+    Assert.assertTrue("Output file is missing.", actualOutput.exists());
+    File expectedOutput = new File(expectedOutputPath);
+    Assert.assertTrue("Expected output file is missing.", expectedOutput.exists());
+    common.compareJson(expectedOutput, actualOutput);
+  }
+
+  @Test
+  public void missing_file_Test() throws Exception
+  {
+    URL inputUrl = common.class.getResource("package");
+    String inputPath = inputUrl.getPath();
+    String outputPath = inputPath + "/missing_file_actual_results.json";
+    String expectedOutputPath = inputPath + "/missing_file_expected_results.json";
+    inputPath += "/no_existence.epub";
+    CheckingReport report = new CheckingReport(inputPath, outputPath);
+    report.initialize();
+    File inputEpub = new File(inputPath);
+    EpubCheck check = new EpubCheck(inputEpub, report);
+    org.junit.Assert.assertEquals("The file should have generated warnings.", 2, check.doValidate());
+    report.generate();
+    File actualOutput = new File(outputPath);
+    Assert.assertTrue("Output file is missing.", actualOutput.exists());
+    File expectedOutput = new File(expectedOutputPath);
+    Assert.assertTrue("Expected output file is missing.", expectedOutput.exists());
+    common.compareJson(expectedOutput, actualOutput);
+  }
+
+  @Test
+  public void missing_opf_epub_file_Test() throws Exception
+  {
+    URL inputUrl = common.class.getResource("package");
+    String inputPath = inputUrl.getPath();
+    String outputPath = inputPath + "/missing_opf_epub_file_actual_results.json";
+    String expectedOutputPath = inputPath + "/missing_opf_epub_file_expected_results.json";
+    inputPath += "/missing_opf_file";
+    OCFPackage ocf = new OCFMockPackage(inputPath);
+    CheckingReport report = new CheckingReport(inputPath, outputPath);
+    report.initialize();
+    ocf.setReport(report);
+    OPFChecker opfChecker = new OPFChecker(ocf, report, "test_single_opf", EPUBVersion.VERSION_3);
+    opfChecker.runChecks();
+    report.generate();
+    File actualOutput = new File(outputPath);
+    Assert.assertTrue("Output file is missing.", actualOutput.exists());
+    File expectedOutput = new File(expectedOutputPath);
+    Assert.assertTrue("Expected output file is missing.", expectedOutput.exists());
+    common.compareJson(expectedOutput, actualOutput);
+  }
+
+  private void runPackageJsonTest(String testName, int expectedReturnCode) throws Exception
+  {
+    common.runExpTest("package", testName, expectedReturnCode, true);
+  }
+
+  private void runPackageXmlTest(String testName, int expectedReturnCode) throws Exception
+  {
+    common.runExpTest("package", testName, expectedReturnCode, false);
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/test/script_Test.java b/src/test/java/com/adobe/epubcheck/test/script_Test.java
new file mode 100644
index 0000000..99b7e09
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/test/script_Test.java
@@ -0,0 +1,62 @@
+package com.adobe.epubcheck.test;
+
+import org.junit.*;
+
+public class script_Test
+{
+  private SecurityManager originalManager;
+
+  @Before
+  public void setUp() throws Exception
+  {
+    this.originalManager = System.getSecurityManager();
+    System.setSecurityManager(new NoExitSecurityManager());
+  }
+
+  @After
+  public void tearDown() throws Exception
+  {
+    System.setSecurityManager(this.originalManager);
+  }
+
+  @Test
+  public void scriptPropertiesTest() throws Exception
+  {
+    runScriptTest("properties", 1);
+  }
+
+  @Test
+  public void unused_script_Test() throws Exception
+  {
+    runScriptTest("unused", 0);
+  }
+
+  @Test
+  public void eval_script_Test() throws Exception
+  {
+    runScriptTest("eval", 0);
+  }
+
+  @Test
+  public void XMLHttpRequest_script_Test() throws Exception
+  {
+    runScriptTest("XMLHttpRequest", 0);
+  }
+
+  @Test
+  public void Storage_script_Test() throws Exception
+  {
+    runScriptTest("storage", 0);
+  }
+
+  @Test
+  public void epub2_script_Test() throws Exception
+  {
+    runScriptTest("epub2", 1);
+  }
+
+  private void runScriptTest(String testName, int expectedReturnCode) throws Exception
+  {
+    common.runExpTest("scripts", testName, expectedReturnCode, true);
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/test/single_file_Test.java b/src/test/java/com/adobe/epubcheck/test/single_file_Test.java
new file mode 100644
index 0000000..0d89e88
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/test/single_file_Test.java
@@ -0,0 +1,53 @@
+package com.adobe.epubcheck.test;
+
+import com.adobe.epubcheck.util.Messages;
+import junit.framework.Assert;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+
+/**
+ * Test the processing of single files that are not ePubs
+ */
+public class single_file_Test
+{
+  private SecurityManager originalManager;
+
+  @Before
+  public void setUp() throws Exception
+  {
+    this.originalManager = System.getSecurityManager();
+    System.setSecurityManager(new NoExitSecurityManager());
+  }
+
+  @After
+  public void tearDown() throws Exception
+  {
+    System.setSecurityManager(this.originalManager);
+  }
+
+  @Test
+  public void remote_Test() throws Exception
+  {
+    ByteArrayOutputStream outContent = new ByteArrayOutputStream();
+    ByteArrayOutputStream errContent = new ByteArrayOutputStream();
+    PrintStream originalOut = System.out;
+    PrintStream originalErr = System.err;
+    System.setOut(new PrintStream(outContent));
+    System.setErr(new PrintStream(errContent));
+    common.runCustomTest("command_line", "remote", 1, true, "-mode", "nav", "-v", "3.0", "http://localhost:8080/noexist.nav");
+
+    //The exception string is different on iOS than it is on Windows.
+    //This is why we are examining the command line rather than comparing json files.
+    String actualErr = errContent.toString();
+    Assert.assertTrue("Missing errors message", actualErr.contains(Messages.get("there_were_errors")));
+    Assert.assertTrue("Missing message", actualErr.contains("PKG-008"));
+    System.setOut(originalOut);
+    System.setErr(originalErr);
+    outContent.close();
+    errContent.close();
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/test/toc_Test.java b/src/test/java/com/adobe/epubcheck/test/toc_Test.java
new file mode 100644
index 0000000..c92b359
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/test/toc_Test.java
@@ -0,0 +1,46 @@
+package com.adobe.epubcheck.test;
+
+import org.junit.*;
+
+
+public class toc_Test
+{
+  private SecurityManager originalManager;
+
+  @Before
+  public void setUp() throws Exception
+  {
+    this.originalManager = System.getSecurityManager();
+    System.setSecurityManager(new NoExitSecurityManager());
+  }
+
+  @After
+  public void tearDown() throws Exception
+  {
+    System.setSecurityManager(this.originalManager);
+  }
+
+  @Test
+  public void Missing_epub_type_Test() throws Exception
+  {
+    runTocTest("missing_epub_type", 1);
+  }
+
+  @Test
+  public void fragments_Test() throws Exception
+  {
+    runTocTest("fragments", 0);
+  }
+
+  @Test
+  public void invalid_ncx_Test() throws Exception
+  {
+    runTocTest("invalid_ncx", 1);
+  }
+
+  private void runTocTest(String testName, int expectedReturnCode) throws Exception
+  {
+    common.runExpTest("toc", testName, expectedReturnCode, true);
+  }
+
+}
diff --git a/src/test/java/com/adobe/epubcheck/test/xhtml_Test.java b/src/test/java/com/adobe/epubcheck/test/xhtml_Test.java
new file mode 100644
index 0000000..736a58c
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/test/xhtml_Test.java
@@ -0,0 +1,133 @@
+package com.adobe.epubcheck.test;
+
+import org.junit.*;
+import java.util.Locale;
+
+public class xhtml_Test
+{
+  private SecurityManager originalManager;
+  private Locale originalLocale;
+
+  @Before
+  public void setUp() throws Exception
+  {
+    this.originalManager = System.getSecurityManager();
+    System.setSecurityManager(new NoExitSecurityManager());
+    this.originalLocale = Locale.getDefault();
+    Locale.setDefault(Locale.US);
+  }
+
+  @After
+  public void tearDown() throws Exception
+  {
+    System.setSecurityManager(this.originalManager);
+    Locale.setDefault(this.originalLocale);
+  }
+
+  @Test
+  public void hyperlinksTest() throws Exception
+  {
+    runXhtmlTest("hyperlinks", 1);
+  }
+
+  @Test
+  public void nestingTest() throws Exception
+  {
+    runXhtmlTest("nesting", 0);
+  }
+
+  @Test
+  public void html5_epub2Test() throws Exception
+  {
+    runXhtmlTest("html5_epub2", 1);
+  }
+
+  @Test
+  public void html5_epub3Test() throws Exception
+  {
+    runXhtmlTest("html5_epub3", 1);
+  }
+
+  @Test
+  public void html5_deprecated_epub3Test() throws Exception
+  {
+    runXhtmlTest("html5_deprecated_epub3", 1);
+  }
+
+  @Test
+  public void lang_Test() throws Exception
+  {
+    runXhtmlTest("lang", 1);
+  }
+
+  @Test
+  public void epubcfi_Test() throws Exception
+  {
+    runXhtmlTest("epubcfi", 0);
+  }
+
+  @Test
+  public void external_media_test()
+  {
+    runXhtmlTest("External_media", 0);
+  }
+
+  @Test
+  public void dtd_test()
+  {
+    runXhtmlTest("dtd", 1);
+  }
+
+  @Test
+  public void media_overlays_test()
+  {
+    runXhtmlTest("media_overlays", 1);
+  }
+
+  @Test
+  public void lorem_noxmlns_test()
+  {
+    runXhtmlTest("lorem_noxmlns", 1);
+  }
+
+  @Test
+  public void lorem_pagemaps1_test()
+  {
+    runXhtmlTest("lorem_pagemaps1", 1);
+  }
+
+  @Test
+  public void lorem_pagemaps2_test()
+  {
+    runXhtmlTest("lorem_pagemaps2", 0);
+  }
+
+  @Test
+  public void lorem_pagemaps3_test()
+  {
+    runXhtmlTest("lorem_pagemaps3", 1);
+  }
+
+  @Test
+  public void accessibility_test()
+  {
+    runXhtmlTest("accessibility", 1);
+  }
+
+  @Test
+  public void namespaces_test()
+  {
+    runXhtmlTest("namespaces", 1);
+  }
+
+  @Test
+  public void singleline_test()
+  {
+    runXhtmlTest("singleline", 1);
+  }
+
+  private void runXhtmlTest(String testName, int expectedReturnCode)
+  {
+    common.runExpTest("xhtml", testName, expectedReturnCode, true);
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/util/ExtraReportTest.java b/src/test/java/com/adobe/epubcheck/util/ExtraReportTest.java
new file mode 100644
index 0000000..394e153
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/util/ExtraReportTest.java
@@ -0,0 +1,5 @@
+package com.adobe.epubcheck.util;
+
+public interface ExtraReportTest {
+	public void test(ValidationReport testReport);
+}
diff --git a/src/test/java/com/adobe/epubcheck/util/OPFPeekerTest.java b/src/test/java/com/adobe/epubcheck/util/OPFPeekerTest.java
new file mode 100644
index 0000000..da2e646
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/util/OPFPeekerTest.java
@@ -0,0 +1,247 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.util;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.opf.OPFData;
+import com.adobe.epubcheck.opf.OPFPeeker;
+import com.google.common.collect.Sets;
+
+public class OPFPeekerTest
+{
+
+  private List<MessageId> expectedErrors;
+  private List<MessageId> expectedWarnings;
+
+  private final GenericResourceProvider provider = new GenericResourceProvider()
+  {
+    private static final String basepath = "/30/single/opf/peekData/";
+
+    @Override
+    public InputStream getInputStream(String path)
+      throws IOException
+    {
+      return this.getClass().getResourceAsStream(basepath+path);
+    }
+  };
+  /*
+   * TEST DEBUG FUNCTION
+   */
+  public OPFData retrieveData(String fileName, List<MessageId> errors,
+      List<MessageId> warnings)
+  {
+    return retrieveData(fileName, errors, warnings, new ArrayList<MessageId>(), false);
+  }
+
+  public OPFData retrieveData(String fileName, List<MessageId> errors,
+      List<MessageId> warnings, List<MessageId> fatalErrors)
+  {
+    return retrieveData(fileName, errors, warnings, fatalErrors, false);
+  }
+
+  public OPFData retrieveData(String fileName, List<MessageId> errors,
+      List<MessageId> warnings, List<MessageId> fatalErrors, boolean verbose)
+  {
+    OPFData result = null;
+    ValidationReport testReport = new ValidationReport(fileName,
+        Messages.get("opv_version_test"));
+    try
+    {
+      OPFPeeker peeker = new OPFPeeker(fileName, testReport, provider);
+      result = peeker.peek();
+    } catch (InvalidVersionException e)
+    {
+      testReport.message(MessageId.RSC_005, new MessageLocation(fileName, -1,
+          -1), e.getMessage());
+    } catch (IOException e) {
+      throw new RuntimeException(e);
+    }
+
+    if (verbose)
+    {
+      outWriter.println(testReport);
+    }
+
+    assertEquals("The error results do not match", errors,
+        testReport.getErrorIds());
+    assertEquals("The warning results do not match", warnings,
+        testReport.getWarningIds());
+    assertEquals("The fatal error results do not match", fatalErrors,
+        testReport.getFatalErrorIds());
+
+    return result;
+  }
+
+  @Before
+  public void setup()
+  {
+    expectedErrors = new ArrayList<MessageId>();
+    expectedWarnings = new ArrayList<MessageId>();
+  }
+
+  @Test
+  public void testRetrieveVersionValidVersion()
+  {
+    retrieveData("validVersion.opf", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testRetrieveVersionNoPackageElement()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    retrieveData("noPackageElement.opf", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testRetrieveVersionNoVersionAttribute()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    retrieveData("noVersion.opf", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testRetrieveVersionNoEqualSign()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005);
+    retrieveData("noEqual.opf", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testRetrieveVersionValueWithoutQuotes()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005, MessageId.RSC_005);
+    retrieveData("valueWithoutQuotes.opf", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testRetrieveVersionSpacesBetweenQuotes()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    retrieveData("spacesBetweenQuotes.opf", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testRetrieveVersionSpacesInValue()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    retrieveData("spacesInValue.opf", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testRetrieveVersionVersion123323()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    retrieveData("version123.323.opf", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testRetrieveVersionNoPointInValue()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    retrieveData("noPointInValue.opf", expectedErrors, expectedWarnings);
+  }
+
+  @Test
+  public void testRetrieveVersionNegativeVersion()
+  {
+    Collections.addAll(expectedErrors, MessageId.RSC_005);
+    retrieveData("negativeVersion.opf", expectedErrors, expectedWarnings);
+  }
+  
+  @Test
+  public void testRetrieveType()
+  {
+    OPFData data = retrieveData("singleDCType.opf",expectedErrors,expectedWarnings);
+    assertEquals(Sets.newHashSet("foo"), data.getTypes());
+  }
+  
+  @Test
+  public void testRetrieveMultipleTypes()
+  {
+    OPFData data = retrieveData("multipleDCType.opf",expectedErrors,expectedWarnings);
+    assertEquals(Sets.newHashSet("foo","bar"), data.getTypes());
+  }
+  
+  @Test
+  public void testRetrieveOnlyTopLevelTypes()
+  {
+    OPFData data = retrieveData("collectionDCType.opf",expectedErrors,expectedWarnings);
+    assertEquals(Sets.newHashSet("foo"), data.getTypes());
+  }
+  
+  @Test
+  public void testRetrieveTypeWithWhiteSpace()
+  {
+    OPFData data = retrieveData("whitespaceInDCType.opf",expectedErrors,expectedWarnings);
+    assertEquals(Sets.newHashSet("foo bar"), data.getTypes());
+  }
+  
+  @Test
+  public void testRetrieveID()
+  {
+    OPFData data = retrieveData("uniqueId.opf",expectedErrors,expectedWarnings);
+    assertEquals("foo", data.getUniqueIdentifier());
+  }
+  
+  @Test
+  public void testEmptyID()
+  {
+    OPFData data = retrieveData("emptyId.opf",expectedErrors,expectedWarnings);
+    assertEquals(null, data.getUniqueIdentifier());
+  }
+  
+  @Test
+  public void tesMissingID()
+  {
+    OPFData data = retrieveData("missingId.opf",expectedErrors,expectedWarnings);
+    assertEquals(null, data.getUniqueIdentifier());
+  }
+  
+  @Test
+  public void testMultipleIDs()
+  {
+    OPFData data = retrieveData("multipleIds.opf",expectedErrors,expectedWarnings);
+    assertEquals("foo", data.getUniqueIdentifier());
+  }
+  
+  @Test
+  public void testIDWithWhiteSpace()
+  {
+    OPFData data = retrieveData("whitespaceInDCIdentifier.opf",expectedErrors,expectedWarnings);
+    assertEquals("foo", data.getUniqueIdentifier());
+  }
+  
+
+}
diff --git a/src/test/java/com/adobe/epubcheck/util/PathUtilTest.java b/src/test/java/com/adobe/epubcheck/util/PathUtilTest.java
new file mode 100644
index 0000000..80bc7a2
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/util/PathUtilTest.java
@@ -0,0 +1,44 @@
+package com.adobe.epubcheck.util;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+public class PathUtilTest {
+
+	@Test
+	public void testNormalizePath() {
+		// Test nothing to do
+		String url1 = "foo/bar";
+		assertEquals("foo/bar", PathUtil.normalizePath(url1));
+		
+		// Test remove of .
+		String url21 = "foo/./bar";
+		assertEquals("foo/bar", PathUtil.normalizePath(url21));
+		String url22 = "./bar";
+		assertEquals("bar", PathUtil.normalizePath(url22));
+
+		// Test jump of ..
+		String url31 = "foo/../bar";
+		assertEquals("bar", PathUtil.normalizePath(url31));
+
+		String url32 = "../bar";
+		try {
+			PathUtil.normalizePath(url32);
+			fail("Should raise an exception with " + url32);
+		} catch (IllegalArgumentException e) {
+		
+		}
+
+
+	}
+
+	@Test
+	public void testRemoveAnchor() {
+		String urlWithoutAnchor = "a/b";
+		String urlWithAnchor = urlWithoutAnchor + "#c";
+		assertEquals(urlWithoutAnchor, PathUtil.removeAnchor(urlWithAnchor));
+		assertEquals(urlWithoutAnchor, PathUtil.removeAnchor(urlWithoutAnchor));
+	}
+
+}
diff --git a/src/test/java/com/adobe/epubcheck/util/ValidationReport.java b/src/test/java/com/adobe/epubcheck/util/ValidationReport.java
new file mode 100644
index 0000000..ee67c0d
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/util/ValidationReport.java
@@ -0,0 +1,265 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.util;
+
+import com.adobe.epubcheck.api.MasterReport;
+import com.adobe.epubcheck.messages.Message;
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.messages.Severity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ValidationReport extends MasterReport
+{
+  String info = "";
+  public ArrayList<ItemReport> errorList, warningList, exceptionList, infoList, fatalErrorList, hintList;
+  public String fileName;
+
+  public class ItemReport
+  {
+		public final String resource;
+		public final int line;
+		public final int column;
+		public final String message;
+    MessageId id;
+
+    public ItemReport(String resource, int line, int column, String message, MessageId id)
+    {
+      this.resource = resource;
+      this.line = line;
+      this.column = column;
+      this.message = message;
+      this.id = id;
+    }
+  }
+
+  public ValidationReport(String file)
+  {
+    fileName = PathUtil.removeWorkingDirectory(file);
+    errorList = new ArrayList<ItemReport>();
+    warningList = new ArrayList<ItemReport>();
+    exceptionList = new ArrayList<ItemReport>();
+    infoList = new ArrayList<ItemReport>();
+    fatalErrorList = new ArrayList<ItemReport>();
+		hintList = new ArrayList<ItemReport>();
+  }
+
+  public ValidationReport(String file, String info)
+  {
+    fileName = file;
+    if (!info.equals(""))
+    {
+      info = info + "\n";
+    }
+    this.info = info;
+    errorList = new ArrayList<ItemReport>();
+    warningList = new ArrayList<ItemReport>();
+    exceptionList = new ArrayList<ItemReport>();
+    infoList = new ArrayList<ItemReport>();
+    fatalErrorList = new ArrayList<ItemReport>();
+    hintList = new ArrayList<ItemReport>();
+  }
+
+  @Override
+  public void message(Message message, MessageLocation location, Object... args)
+  {
+    if (message.getSeverity().equals(Severity.ERROR))
+    {
+      error(PathUtil.removeWorkingDirectory(location.getFileName()), location.getLine(), location.getColumn(), message.getMessage(args), message.getID());
+    }
+    else if (message.getSeverity().equals(Severity.WARNING))
+    {
+      warning(PathUtil.removeWorkingDirectory(location.getFileName()), location.getLine(), location.getColumn(), message.getMessage(args), message.getID());
+    }
+    else if (message.getSeverity().equals(Severity.FATAL))
+    {
+      fatalError(PathUtil.removeWorkingDirectory(location.getFileName()), location.getLine(), location.getColumn(), message.getMessage(args), message.getID());
+    }
+  }
+
+  private void error(String resource, int line, int column, String message, MessageId id)
+  {
+    ItemReport item = new ItemReport(resource, line, column, fixMessage(message), id);
+    errorList.add(item);
+  }
+
+  private void fatalError(String resource, int line, int column, String message, MessageId id)
+  {
+    ItemReport item = new ItemReport(resource, line, column, fixMessage(message), id);
+    fatalErrorList.add(item);
+  }
+
+  private void warning(String resource, int line, int column, String message, MessageId id)
+  {
+    ItemReport item = new ItemReport(resource, line, column, fixMessage(message), id);
+    warningList.add(item);
+  }
+
+  public String toString()
+  {
+    StringBuilder buffer = new StringBuilder();
+
+    buffer.append(fileName);
+    buffer.append(": ");
+    buffer.append(info);
+
+    buffer.append("Errors: ");
+    buffer.append(this.getErrorCount());
+
+    buffer.append("; Warnings: ");
+    buffer.append(this.getWarningCount());
+
+    buffer.append("\n");
+
+
+    for (ItemReport exception : exceptionList)
+    {
+      buffer.append("FATAL: ");
+      buffer.append(fileName);
+      buffer.append(exception.resource != null ? ":" + exception.resource : "");
+      buffer.append(exception.message);
+      buffer.append("\n");
+        for (int i = 0; i < hintList.size(); i++) {
+            ItemReport item = (ItemReport) hintList.get(i);
+            buffer.append("HINT: " + fileName
+                    + (item.resource != null ? ":" + item.resource : "")
+                    + item.message + "\n");
+        }
+    }
+
+    for (ItemReport error : errorList)
+    {
+      buffer.append("ERROR: ");
+      buffer.append(fileName);
+      buffer.append(error.resource != null ? ":" + error.resource : "");
+      buffer.append(error.line > 0 ? "(" + error.line + (error.column > 0 ? "," + error.column : "") + ")" : "");
+      buffer.append(": ");
+      buffer.append(error.message);
+      buffer.append("\n");
+    }
+
+    for (ItemReport warning : warningList)
+    {
+      buffer.append("WARNING: ");
+      buffer.append(fileName);
+      buffer.append(warning.resource != null ? ":" + warning.resource : "");
+      buffer.append(warning.line > 0 ? "(" + warning.line + (warning.column > 0 ? "," + warning.column : "") + ")" : "");
+      buffer.append(": ");
+      buffer.append(warning.message);
+      buffer.append("\n");
+    }
+
+    for (ItemReport info : getInfoList())
+    {
+      buffer.append("INFO: ");
+      buffer.append(fileName);
+      buffer.append(info.resource != null ? ":" + info.resource : "");
+      buffer.append(info.message);
+      buffer.append("\n");
+    }
+    return buffer.toString();
+  }
+
+  private String fixMessage(String message)
+  {
+    if (message == null)
+    {
+      return "No message";
+    }
+    return message.replaceAll("[\\s]+", " ");
+  }
+
+  @Override
+  public void info(String resource, FeatureEnum feature, String value)
+  {
+    ItemReport item = new ItemReport(resource, 0, 0, fixMessage("[" + feature + "] " + value), null);
+    getInfoList().add(item);
+  }
+
+  public void hint(String resource, int line, int column, String message)
+  {
+    ItemReport item = new ItemReport(resource, line, column, fixMessage(message), null);
+    hintList.add(item);
+  }
+    
+  /**
+   * @return the infoList
+   */
+  public ArrayList<ItemReport> getInfoList()
+  {
+    return infoList;
+  }
+
+  public boolean hasInfoMessage(String msg)
+  {
+    for (ItemReport it : getInfoList())
+    {
+      if (it.message.equals(msg))
+      {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  public void initialize()
+  {
+  }
+
+  public int generate()
+  {
+    return 0;
+  }
+
+  public List<MessageId> getWarningIds()
+  {
+    List<MessageId> result = new ArrayList<MessageId>();
+    for (ItemReport it : warningList)
+    {
+      result.add(it.id);
+    }
+    return result;
+  }
+
+  public List<MessageId> getErrorIds()
+  {
+    List<MessageId> result = new ArrayList<MessageId>();
+    for (ItemReport it : errorList)
+    {
+      result.add(it.id);
+    }
+    return result;
+  }
+
+  public List<MessageId> getFatalErrorIds()
+  {
+    List<MessageId> result = new ArrayList<MessageId>();
+    for (ItemReport it : fatalErrorList)
+    {
+      result.add(it.id);
+    }
+    return result;
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/vocab/PrefixParsingTest.java b/src/test/java/com/adobe/epubcheck/vocab/PrefixParsingTest.java
new file mode 100644
index 0000000..84d34ca
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/vocab/PrefixParsingTest.java
@@ -0,0 +1,188 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.vocab;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.util.ValidationReport;
+import com.adobe.epubcheck.util.outWriter;
+import com.google.common.collect.ImmutableMap;
+
+public class PrefixParsingTest
+{
+
+  private static final MessageLocation loc = new MessageLocation("file", 42, 42);
+  private static final Map<String, String> foobarMap = ImmutableMap.of("foo", "http://example.org/foo#", "bar",
+      "http://example.org/bar#");
+  private static final Map<String, String> emptyMap = ImmutableMap.of();
+  private List<MessageId> expectedErrors;
+  private List<MessageId> expectedWarnings;
+  private List<MessageId> expectedFatalErrors;
+  private Map<String, String> actual;
+
+  private Map<String, String> test(String value)
+  {
+    return test(value, false);
+  }
+
+  private Map<String, String> test(String value, boolean verbose)
+  {
+    ValidationReport testReport = new ValidationReport(PrefixParsingTest.class.getSimpleName());
+
+    Map<String, String> result = PrefixDeclarationParser.parsePrefixMappings(value, testReport, loc);
+
+    if (verbose)
+    {
+      outWriter.println(testReport);
+    }
+
+    assertEquals("The error results do not match", expectedErrors, testReport.getErrorIds());
+    assertEquals("The warning results do not match", expectedWarnings, testReport.getWarningIds());
+    assertEquals("The fatal error results do not match", expectedFatalErrors, testReport.getFatalErrorIds());
+
+    return result;
+  }
+
+  @Before
+  public void setup()
+  {
+    expectedErrors = new ArrayList<MessageId>();
+    expectedWarnings = new ArrayList<MessageId>();
+    expectedFatalErrors = new ArrayList<MessageId>();
+  }
+
+  @Test
+  public void testValidPrefixDeclaration()
+  {
+    actual = test("foo: http://example.org/foo# bar: http://example.org/bar#");
+    assertEquals(foobarMap, actual);
+  }
+
+  @Test
+  public void testEmptyPrefixDeclaration()
+  {
+    actual = test("");
+    assertEquals(emptyMap, actual);
+  }
+  
+  @Test
+  public void testNullPrefixDeclaration()
+  {
+    actual = test(null);
+    assertEquals(emptyMap, actual);
+  }
+
+  @Test
+  public void testTrailingWhitespace()
+  {
+    expectedWarnings.add(MessageId.OPF_004);
+    expectedWarnings.add(MessageId.OPF_004);
+    actual = test("  foo:   http://example.org/foo# \n\t\r bar:   http://example.org/bar#   ");
+    assertEquals(foobarMap, actual);
+  }
+
+  @Test
+  public void testEmptyPrefix()
+  {
+    expectedErrors.add(MessageId.OPF_004a);
+    expectedErrors.add(MessageId.OPF_004a);
+    actual = test(": http://example.org/foo# : http://example.org/bar#");
+    assertEquals(emptyMap, actual);
+  }
+  
+  @Test
+  public void testInvalidPrefixName()
+  {
+    expectedErrors.add(MessageId.OPF_004b);
+    actual = test("123: http://example.org/foo#");
+    assertEquals(emptyMap, actual);
+  }
+  
+  @Test
+  public void testInvalidColonAfterPrefix()
+  {
+    expectedErrors.add(MessageId.OPF_004c);
+    expectedErrors.add(MessageId.OPF_004c);
+    actual = test("foo http://example.org/foo# bar  : http://example.org/bar#");
+    assertEquals(emptyMap, actual);
+  }
+  
+  @Test
+  public void testNoSpaceAfterColon()
+  {
+    expectedErrors.add(MessageId.OPF_004d);
+    actual = test("foo:http://example.org/foo#");
+    assertEquals(emptyMap, actual);
+  }
+  
+  @Test
+  public void testIllegalWhitespace()
+  {
+    expectedWarnings.add(MessageId.OPF_004e);
+    expectedWarnings.add(MessageId.OPF_004f);
+    actual = test("foo:\t http://example.org/foo# \u2003 bar: http://example.org/bar#");
+    assertEquals(foobarMap, actual);
+  }
+  
+  @Test
+  public void testNoURIForPrefix()
+  {
+    expectedErrors.add(MessageId.OPF_005);
+    actual = test("foo: http://example.org/foo# bar: http://example.org/bar# baz");
+    assertEquals(foobarMap, actual);
+  }
+
+  @Test
+  public void testNoURIForPrefix2()
+  {
+    expectedErrors.add(MessageId.OPF_005);
+    actual = test("foo: http://example.org/foo# bar: http://example.org/bar# baz:");
+    assertEquals(foobarMap, actual);
+  }
+  
+  @Test
+  public void testNoURIForPrefix3()
+  {
+    expectedErrors.add(MessageId.OPF_005);
+    actual = test("foo: http://example.org/foo# bar: http://example.org/bar# baz: ");
+    assertEquals(foobarMap, actual);
+  }
+  
+  @Test
+  public void testInvalidURI() {
+    expectedErrors.add(MessageId.OPF_006);
+    actual = test("bad: [bad] foo: http://example.org/foo# bar: http://example.org/bar#");
+    assertEquals(foobarMap, actual);
+  }
+  
+
+}
diff --git a/src/test/java/com/adobe/epubcheck/vocab/PropertyTest.java b/src/test/java/com/adobe/epubcheck/vocab/PropertyTest.java
new file mode 100644
index 0000000..55dbf5c
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/vocab/PropertyTest.java
@@ -0,0 +1,70 @@
+package com.adobe.epubcheck.vocab;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+import static org.junit.matchers.JUnitMatchers.hasItems;
+
+import java.util.Set;
+
+import org.junit.Test;
+
+import com.google.common.collect.ImmutableSet;
+
+public class PropertyTest
+{
+
+  private enum LETTERS
+  {
+    A,
+    B,
+    C
+  }
+
+  private enum NUMBERS
+  {
+    ONE,
+    TWO,
+    THREE
+  }
+
+  private static String FOO_URI = "http://example.org/foo#";
+  private static String LETTERS_URI = "http://example.org/letters#";
+  private static String NUMBERS_URI = "http://example.org/numbers#";
+
+  @Test
+  public void testFilter()
+  {
+    Set<LETTERS> letters = Property.filter(
+        new ImmutableSet.Builder<Property>().add(Property.newFrom("foo", FOO_URI, "foo"))
+            .add(Property.newFrom("foo", FOO_URI, "foo"))
+            .add(Property.newFrom("a", LETTERS_URI, "", LETTERS.A))
+            .add(Property.newFrom("one", NUMBERS_URI, "", NUMBERS.ONE))
+            .add(Property.newFrom("bar", FOO_URI, "foo"))
+            .add(Property.newFrom("c", LETTERS_URI, "", LETTERS.C))
+            .add(Property.newFrom("one", NUMBERS_URI, "", NUMBERS.TWO))
+            .add(Property.newFrom("one", NUMBERS_URI, "", NUMBERS.THREE))
+            .add(Property.newFrom("baz", FOO_URI, "foo")).build(), LETTERS.class);
+    assertThat(letters.size(), is(2));
+    assertThat(letters, hasItems(LETTERS.A, LETTERS.C));
+  }
+  @Test
+  public void testFilterNoMatch()
+  {
+    Set<LETTERS> letters = Property.filter(
+        new ImmutableSet.Builder<Property>().add(Property.newFrom("foo", FOO_URI, "foo"))
+        .add(Property.newFrom("foo", FOO_URI, "foo"))
+        .add(Property.newFrom("one", NUMBERS_URI, "", NUMBERS.ONE))
+        .add(Property.newFrom("bar", FOO_URI, "foo"))
+        .add(Property.newFrom("one", NUMBERS_URI, "", NUMBERS.TWO))
+        .add(Property.newFrom("one", NUMBERS_URI, "", NUMBERS.THREE))
+        .add(Property.newFrom("baz", FOO_URI, "foo")).build(), LETTERS.class);
+    assertEquals(letters, ImmutableSet.of());
+  }
+
+  @Test
+  public void testFilterNull()
+  {
+    assertEquals(Property.filter(null, NUMBERS.class), ImmutableSet.of());
+  }
+}
diff --git a/src/test/java/com/adobe/epubcheck/vocab/VocabTest.java b/src/test/java/com/adobe/epubcheck/vocab/VocabTest.java
new file mode 100644
index 0000000..e9103ee
--- /dev/null
+++ b/src/test/java/com/adobe/epubcheck/vocab/VocabTest.java
@@ -0,0 +1,281 @@
+/*
+ * Copyright (c) 2011 Adobe Systems Incorporated
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy of
+ *  this software and associated documentation files (the "Software"), to deal in
+ *  the Software without restriction, including without limitation the rights to
+ *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ *  the Software, and to permit persons to whom the Software is furnished to do so,
+ *  subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in all
+ *  copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+package com.adobe.epubcheck.vocab;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.junit.Assert.*;
+import static org.junit.matchers.JUnitMatchers.hasItems;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import com.adobe.epubcheck.messages.MessageId;
+import com.adobe.epubcheck.messages.MessageLocation;
+import com.adobe.epubcheck.util.ValidationReport;
+import com.adobe.epubcheck.util.outWriter;
+import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+
+public class VocabTest
+{
+
+  private static final MessageLocation loc = new MessageLocation("file", 42, 42);
+
+  private static enum FOOBAR
+  {
+    FOO,
+    BAR,
+    FOO_BAR
+  }
+
+  private static final Vocab FOOBAR_VOCAB = new EnumVocab(FOOBAR.class,
+      "http://example.org/foobar#");
+
+  private static enum NUMBERS
+  {
+    ONE,
+    TWO,
+    THREE
+  }
+
+  private static final Vocab NUMBERS_VOCAB = new EnumVocab(NUMBERS.class,
+      "http://example.org/number#", "num");
+  private static final Vocab BAZ_UNCHECKED_VOCAB = new UncheckedVocab(
+      "http://example.org/number#baz", "baz");
+
+  private static final Map<String, Vocab> PREDEF_VOCABS = ImmutableMap.of("", FOOBAR_VOCAB, "num",
+      NUMBERS_VOCAB, "baz", BAZ_UNCHECKED_VOCAB);
+  private static final Map<String, Vocab> KNOWN_VOCABS = ImmutableMap.of(
+      "http://example.org/foobar#", FOOBAR_VOCAB, "http://example.org/number#", NUMBERS_VOCAB,
+      "http://example.org/number#baz", BAZ_UNCHECKED_VOCAB);
+  private static final Set<String> FORBIDDEN_URIS = ImmutableSet.of("http://example.org/default#",
+      "http://example.org/forbidden#");
+
+  private List<MessageId> expectedErrors;
+  private List<MessageId> expectedWarnings;
+  private List<MessageId> expectedFatalErrors;
+
+  private Set<Property> testPropertyList(String value, Map<String, Vocab> vocabs)
+  {
+    return testPropertyList(value, vocabs, false);
+  }
+
+  private Set<Property> testPropertyList(String value, Map<String, Vocab> vocabs, boolean verbose)
+  {
+    ValidationReport testReport = new ValidationReport(VocabTest.class.getSimpleName());
+
+    Set<Property> props = VocabUtil.parsePropertyList(value, vocabs, testReport, loc);
+
+    if (verbose)
+    {
+      outWriter.println(testReport);
+    }
+
+    assertEquals("The error results do not match", expectedErrors, testReport.getErrorIds());
+    assertEquals("The warning results do not match", expectedWarnings, testReport.getWarningIds());
+    assertEquals("The fatal error results do not match", expectedFatalErrors,
+        testReport.getFatalErrorIds());
+
+    return props;
+  }
+
+  private Optional<Property> testProperty(String value, Map<String, Vocab> vocabs)
+  {
+    return testProperty(value, vocabs, false);
+  }
+
+  private Optional<Property> testProperty(String value, Map<String, Vocab> vocabs, boolean verbose)
+  {
+    ValidationReport testReport = new ValidationReport(VocabTest.class.getSimpleName());
+
+    Optional<Property> prop = VocabUtil.parseProperty(value, vocabs, testReport, loc);
+
+    if (verbose)
+    {
+      outWriter.println(testReport);
+    }
+
+    assertEquals("The error results do not match", expectedErrors, testReport.getErrorIds());
+    assertEquals("The warning results do not match", expectedWarnings, testReport.getWarningIds());
+    assertEquals("The fatal error results do not match", expectedFatalErrors,
+        testReport.getFatalErrorIds());
+
+    return prop;
+  }
+
+  private Map<String, Vocab> testVocabs(String value)
+  {
+    return testVocabs(value, false);
+  }
+
+  private Map<String, Vocab> testVocabs(String value, boolean verbose)
+  {
+    ValidationReport testReport = new ValidationReport(VocabTest.class.getSimpleName());
+
+    Map<String, Vocab> result = VocabUtil.parsePrefixDeclaration(value, PREDEF_VOCABS,
+        KNOWN_VOCABS, FORBIDDEN_URIS, testReport, loc);
+
+    if (verbose)
+    {
+      outWriter.println(testReport);
+    }
+
+    assertEquals("The error results do not match", expectedErrors, testReport.getErrorIds());
+    assertEquals("The warning results do not match", expectedWarnings, testReport.getWarningIds());
+    assertEquals("The fatal error results do not match", expectedFatalErrors,
+        testReport.getFatalErrorIds());
+
+    return result;
+  }
+
+  @Before
+  public void setup()
+  {
+    expectedErrors = new ArrayList<MessageId>();
+    expectedWarnings = new ArrayList<MessageId>();
+    expectedFatalErrors = new ArrayList<MessageId>();
+  }
+
+  @Test(expected = NullPointerException.class)
+  public void testVocabsRequired()
+  {
+    testPropertyList("prop1 prop2", null, true);
+  }
+
+  @Test
+  public void testSingle()
+  {
+    Optional<Property> prop = testProperty("foo", PREDEF_VOCABS);
+    assertTrue(prop.isPresent());
+  }
+  
+  @Test
+  public void testSingleInvalid()
+  {
+    expectedErrors.add(MessageId.OPF_025);
+    Optional<Property> prop = testProperty("foo bar", PREDEF_VOCABS);
+    assertFalse(prop.isPresent());
+  }
+  
+  @Test
+  public void testList()
+  {
+    testPropertyList("  foo bar  ", PREDEF_VOCABS);
+  }
+
+
+  @Test
+  public void testMalformed()
+  {
+    expectedErrors.add(MessageId.OPF_026);
+    expectedErrors.add(MessageId.OPF_026);
+    expectedErrors.add(MessageId.OPF_026);
+    testPropertyList(":world :world :", PREDEF_VOCABS);
+  }
+
+  @Test
+  public void testNotAllowed()
+  {
+    expectedErrors.add(MessageId.OPF_027);
+    expectedErrors.add(MessageId.OPF_027);
+    testPropertyList("foo num:one num:foo baz foo-bar", PREDEF_VOCABS);
+  }
+
+  @Test
+  public void testNotDeclared()
+  {
+    expectedErrors.add(MessageId.OPF_028);
+    expectedErrors.add(MessageId.OPF_028);
+    testPropertyList("foo foo:bar bar:bar num:one", PREDEF_VOCABS);
+  }
+
+  @Test
+  public void testUncheckedVocab()
+  {
+    testPropertyList("foo baz:foo baz:bar num:one", PREDEF_VOCABS);
+  }
+
+  @Test
+  public void testNullPrefix()
+  {
+    Map<String, Vocab> actual = testVocabs(null);
+    assertThat(actual.entrySet().size(), is(3));
+  }
+
+  @Test
+  public void testPrefix()
+  {
+    Map<String, Vocab> actual = testVocabs("hello: http://example.org/hello# world: http://example.org/world#");
+    assertThat(actual.entrySet().size(), is(5));
+    assertThat(actual.keySet(), hasItems("hello", "world"));
+    assertThat(actual.get("hello"), is(UncheckedVocab.class));
+    assertThat(actual.get("world"), is(UncheckedVocab.class));
+  }
+
+  @Test
+  public void testRedeclaredPrefix()
+  {
+    expectedWarnings.add(MessageId.OPF_007);
+    Map<String, Vocab> actual = testVocabs("num: http://example.org/hello#");
+    assertThat(actual.entrySet().size(), is(3));
+    assertThat(actual.keySet(), hasItems("num"));
+    assertThat(actual.get("num"), is(UncheckedVocab.class));
+  }
+
+  @Test
+  public void testRedeclaredKnownVocab()
+  {
+    Map<String, Vocab> actual = testVocabs("int: http://example.org/number#");
+    assertThat(actual.entrySet().size(), is(4));
+    assertThat(actual.keySet(), hasItems("num", "int"));
+    assertThat(actual.get("int"), is(EnumVocab.class));
+  }
+
+  @Test
+  public void testUnderscorePrefix()
+  {
+    expectedErrors.add(MessageId.OPF_007a);
+    Map<String, Vocab> actual = testVocabs("_: http://example.org/hello# hello: http://example.org/hello#");
+    assertThat(actual.entrySet().size(), is(4));
+    assertThat(actual.keySet(), not(hasItems("_")));
+    assertThat(actual.keySet(), hasItems("hello"));
+  }
+
+  @Test
+  public void testDefaultDeclaredPrefix()
+  {
+    expectedErrors.add(MessageId.OPF_007b);
+    Map<String, Vocab> actual = testVocabs("default: http://example.org/default# hello: http://example.org/hello#");
+    assertThat(actual.entrySet().size(), is(4));
+    assertThat(actual.keySet(), not(hasItems("default")));
+    assertThat(actual.keySet(), hasItems("hello"));
+  }
+
+}
diff --git a/src/test/java/org/idpf/epubcheck/util/css/CssInputStreamTest.java b/src/test/java/org/idpf/epubcheck/util/css/CssInputStreamTest.java
new file mode 100644
index 0000000..49b254d
--- /dev/null
+++ b/src/test/java/org/idpf/epubcheck/util/css/CssInputStreamTest.java
@@ -0,0 +1,109 @@
+package org.idpf.epubcheck.util.css;
+
+import org.junit.Test;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+
+import static org.junit.Assert.*;
+
+public class CssInputStreamTest {
+	public static final String PATH_TEST_BASE = "/css/";
+
+	@Test
+	public void test10() throws Exception {
+		CssInputStream cis = exec("none.css");
+		assertFalse(cis.bom.isPresent());
+		assertFalse(cis.charset.isPresent());
+	}
+
+	@Test
+	public void test20() throws Exception {
+		CssInputStream cis = exec("charset-utf8.css");
+		assertFalse(cis.bom.isPresent());
+		assertTrue(cis.charset.isPresent());
+		assertEquals("UTF-8", cis.charset.get());
+	}
+
+	@Test
+	public void test30() throws Exception {
+		CssInputStream cis = exec("bom-charset15.css");
+		assertTrue(cis.bom.isPresent());
+		assertEquals("UTF-8", cis.bom.get());
+		assertTrue(cis.charset.isPresent());
+		assertEquals("iso-8859-15", cis.charset.get());
+	}
+
+	@Test
+	public void test40() throws Exception {
+		CssInputStream cis = exec("bom-utf16le.css");
+		assertTrue(cis.bom.isPresent());
+		assertEquals("UTF-16LE", cis.bom.get());
+		assertFalse(cis.charset.isPresent());
+	}
+
+	@Test
+	public void test50() throws Exception {
+		CssInputStream cis = exec("bom-utf16be.css");
+		assertTrue(cis.bom.isPresent());
+		assertEquals("UTF-16BE", cis.bom.get());
+		assertFalse(cis.charset.isPresent());
+	}
+
+	@Test
+	public void test60() throws Exception {
+		CssInputStream cis = exec("bom-utf16be-charset.css");
+		assertTrue(cis.bom.isPresent());
+		assertEquals("UTF-16BE", cis.bom.get());
+		assertTrue(cis.charset.isPresent());
+		assertEquals("UTF-16BE", cis.charset.get());
+	}
+
+	@Test
+	public void test65() throws Exception {
+		CssInputStream cis = exec("bom-utf16le-charset.css");
+		assertTrue(cis.bom.isPresent());
+		assertEquals("UTF-16LE", cis.bom.get());
+		assertTrue(cis.charset.isPresent());
+		assertEquals("UTF-16LE", cis.charset.get());
+	}
+
+	@Test
+	public void test70() throws Exception {
+		CssInputStream cis = exec("charset-malformed.css");
+		assertFalse(cis.bom.isPresent());
+		assertFalse(cis.charset.isPresent());
+	}
+
+	@Test
+	public void test80() throws Exception {
+		CssInputStream cis = exec("other-rule.css");
+		assertFalse(cis.bom.isPresent());
+		assertFalse(cis.charset.isPresent());
+	}
+
+	@Test
+	public void test90() throws Exception {
+		CssInputStream cis = exec("charset-empty.css");
+		assertFalse(cis.bom.isPresent());
+		assertFalse(cis.charset.isPresent());
+	}
+
+	@Test
+	public void test95() throws Exception {
+		CssInputStream cis = exec("other.txt");
+		assertFalse(cis.bom.isPresent());
+		assertFalse(cis.charset.isPresent());
+	}
+
+	private CssInputStream exec(String file) throws IOException {		
+		URL fileURL = this.getClass().getResource(PATH_TEST_BASE + file);
+		CssSource cs = new CssSource(fileURL.toString(), fileURL.openStream());
+		return cs.getInputStream();
+	}
+	
+}
diff --git a/src/test/java/org/idpf/epubcheck/util/css/CssParserTest.java b/src/test/java/org/idpf/epubcheck/util/css/CssParserTest.java
new file mode 100644
index 0000000..91c3ede
--- /dev/null
+++ b/src/test/java/org/idpf/epubcheck/util/css/CssParserTest.java
@@ -0,0 +1,1700 @@
+package org.idpf.epubcheck.util.css;
+
+import static org.idpf.epubcheck.util.css.CssTokenList.Filters.FILTER_NONE;
+import static org.idpf.epubcheck.util.css.CssTokenList.Filters.FILTER_S_CMNT;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.io.PrintStream;
+import java.io.StringReader;
+import java.net.URL;
+import java.util.List;
+
+import org.idpf.epubcheck.util.css.CssExceptions.CssException;
+import org.idpf.epubcheck.util.css.CssExceptions.CssScannerException;
+import org.idpf.epubcheck.util.css.CssGrammar.CssAtRule;
+import org.idpf.epubcheck.util.css.CssGrammar.CssConstruct;
+import org.idpf.epubcheck.util.css.CssGrammar.CssDeclaration;
+import org.idpf.epubcheck.util.css.CssGrammar.CssFunction;
+import org.idpf.epubcheck.util.css.CssGrammar.CssQuantity;
+import org.idpf.epubcheck.util.css.CssGrammar.CssSelector;
+import org.idpf.epubcheck.util.css.CssGrammar.CssSelectorCombinator;
+import org.idpf.epubcheck.util.css.CssGrammar.CssSimpleSelectorSequence;
+import org.idpf.epubcheck.util.css.CssGrammar.CssURI;
+import org.idpf.epubcheck.util.css.CssToken.Type;
+import org.idpf.epubcheck.util.css.CssTokenList.CssTokenIterator;
+import org.junit.Test;
+
+import com.google.common.base.Joiner;
+import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
+
+public class CssParserTest {
+	private static final CssLocation MOCK_LOCATION = new CssLocation(-1,-1,0,CssLocation.NO_SID);
+	
+	@Test
+	public void testParser000() throws Exception {
+		String s = " ";
+		checkBasics(exec(s));
+	}
+	
+	@Test
+	public void testParser000b() throws Exception {
+		String s = "";
+		checkBasics(exec(s));
+	}
+	
+	@Test
+	public void testParser001() throws Exception {
+		String s = "@charset \t 'UTF-8'; <!-- ";
+		HandlerImpl handler = checkBasics(exec(s));
+		assertTrue(handler.startAtRuleCount == 1);
+		assertTrue(handler.atRules.size() == 1);
+		assertTrue(handler.atRules.get(0).getComponents().size() == 1);
+		assertTrue(handler.atRules.get(0).getComponents().get(0).type == CssConstruct.Type.STRING);
+		assertEquals("'UTF-8'", handler.atRules.get(0).getComponents().get(0).toCssString());
+	}
+	
+	@Test
+	public void testParser002() throws Exception {
+		String s = "@charset \t 'UTF-8'; <!-- @namespace 'http://foo/ns' ; --> ";
+		HandlerImpl handler = checkBasics(exec(s));	
+		
+		assertTrue(handler.startAtRuleCount == 2);
+		assertTrue(handler.atRules.size() == 2);
+		assertTrue(handler.atRules.get(0).toCssString().startsWith("@charset"));
+		assertTrue(handler.atRules.get(1).toCssString().startsWith("@namespace"));
+		assertTrue(handler.atRules.get(0).getComponents().size() == 1);
+		assertTrue(handler.atRules.get(1).getComponents().size() == 1);
+		assertTrue(handler.atRules.get(0).getComponents().get(0).type == CssConstruct.Type.STRING);
+		assertTrue(handler.atRules.get(1).getComponents().get(0).type == CssConstruct.Type.STRING);
+		assertEquals("'UTF-8'", handler.atRules.get(0).getComponents().get(0).toCssString());
+		assertEquals("'http://foo/ns'", handler.atRules.get(1).getComponents().get(0).toCssString());
+		
+	}
+	
+	@Test
+	public void testParser003() throws Exception {
+		String s = "@charset 'UTF-8'; selector1 { name1a : property1a ; name1b : property1b } " 
+				+ "selector2 { name2a : property2a ; name2b : property2b ; } ";
+		HandlerImpl handler = checkBasics(exec(s));		
+		assertTrue(handler.atRules.size() == 1);
+		assertTrue(handler.selectors.size() == 2);
+		assertTrue(handler.declarations.size() == 4);	
+	}
+	
+	@Test
+	public void testParser004() throws Exception {
+		String s = "E { } E{}";
+		HandlerImpl handler = checkBasics(exec(s));		
+		assertTrue(handler.atRules.size() == 0);
+		assertTrue(handler.selectors.size() == 2);
+		assertTrue(handler.declarations.size() == 0);	
+	}
+	
+	@Test
+	public void testParser005() throws Exception {
+		String s = "E { border : 1px 2px 3px 4px } ";
+		HandlerImpl handler = checkBasics(exec(s));		
+		assertEquals(1, handler.selectors.size());
+		assertEquals(1, handler.declarations.size());
+		assertEquals(4, handler.declarations.get(0).components.size());
+		for(CssConstruct cc : handler.declarations.get(0).components) {
+			assertTrue(cc instanceof CssQuantity);
+			assertTrue(((CssQuantity)cc).subType == CssQuantity.Unit.LENGTH);
+		}
+	}
+	
+	@Test
+	public void testParser006() throws Exception {
+		String s = "E { foo : bar(1px 2em 'foo' bar) } ";
+		HandlerImpl handler = checkBasics(exec(s));		
+		assertEquals(1, handler.selectors.size());
+		assertEquals(1, handler.declarations.size());
+		assertEquals(1, handler.declarations.get(0).components.size());
+		assertTrue(handler.declarations.get(0).components.get(0) instanceof CssFunction);		
+	}
+	
+	@Test
+	public void testParser007() throws Exception {		
+		HandlerImpl handler = checkBasics(exec(css1));		
+		assertEquals(0, handler.errors.size());
+	}
+	
+	@Test
+	public void testParser008() throws Exception {		
+		HandlerImpl handler = checkBasics(exec(css2));		
+		assertEquals(0, handler.errors.size());
+	}
+	
+	@Test
+	public void testParser009() throws Exception {		
+		HandlerImpl handler = checkBasics(exec(css3));		
+		assertEquals(0, handler.errors.size());
+	}
+	
+	@Test
+	public void testParser010() throws Exception {		
+		HandlerImpl handler = checkBasics(exec(css4));		
+		assertEquals(0, handler.errors.size());
+	}
+	
+	@Test
+	public void testParser011() throws Exception {		
+		HandlerImpl handler = checkBasics(exec(css5));		
+		assertEquals(0, handler.errors.size());
+	}
+	
+	@Test
+	public void testParser012() throws Exception {		
+		HandlerImpl handler = checkBasics(exec(css6));		
+		assertEquals(0, handler.errors.size());
+	}
+	
+	@Test
+	public void testParser013() throws Exception {		
+		HandlerImpl handler = checkBasics(exec(css7));		
+		assertEquals(0, handler.errors.size());
+	}
+			
+	@Test
+	public void testParserAtRule001() throws Exception {
+		//@rule with declaration block
+		String s = "@rule {n1:v1;n2:v2;} ";
+		HandlerImpl handler = checkBasics(exec(s));
+		assertTrue(handler.atRules.get(0).hasBlock);
+		assertEquals(0, handler.selectors.size());		
+		assertEquals(2, handler.declarations.size());		
+	}
+	
+	@Test
+	public void testParserAtRule002() throws Exception {
+		//@rule with ruleset
+		String s = "@rule{s1{n1:v1}s2{n2:v2}} ";
+		HandlerImpl handler = checkBasics(exec(s));	
+		assertTrue(handler.atRules.get(0).hasBlock);
+		assertEquals(2, handler.selectors.size());
+		assertEquals(2, handler.declarations.size());			
+	}
+		
+	@Test
+	public void testParserAtRule003() throws Exception {
+		//@rule with no block
+		String s = "@rule;";
+		HandlerImpl handler = checkBasics(exec(s));	
+		assertFalse(handler.atRules.get(0).hasBlock);			
+	}
+	
+	@Test
+	public void testParserAtRule004() throws Exception {
+		//@rule with ruleset and nested declblock atrule
+		String s = "@rule1{ s1 {n1:v1} @rule2 {n2:v2} } ";
+		HandlerImpl handler = checkBasics(exec(s));	
+		assertEquals(2, handler.atRules.size());
+		assertTrue(handler.atRules.get(0).hasBlock);
+		assertTrue(handler.atRules.get(1).hasBlock);		
+		assertEquals(1, handler.selectors.size());
+		assertEquals(2, handler.declarations.size());			
+	}
+	
+	@Test
+	public void testParserAtRule005() throws Exception {
+		String s = "@rule1{ E1 {n1:v1} @rule2 {n2:v2} } @rule3 { E2 { n3:v3; } }";
+		HandlerImpl handler = checkBasics(exec(s));	
+		assertEquals(3, handler.atRules.size());
+		assertTrue(handler.atRules.get(0).hasBlock);
+		assertTrue(handler.atRules.get(1).hasBlock);		
+		assertEquals(2, handler.selectors.size());
+		assertEquals(3, handler.declarations.size());			
+	}
+
+	@Test
+	public void testParserAtRule006() throws Exception {
+		String s = "@media all and (min-width: 60em) and (min-height: 50em) { E { p1:v1;} }";
+		HandlerImpl handler = checkBasics(exec(s));	
+		assertEquals(1, handler.atRules.size());
+		assertEquals(5, handler.atRules.get(0).getComponents().size());
+		assertTrue(handler.atRules.get(0).hasBlock);		
+		assertEquals(1, handler.selectors.size());
+		assertEquals(1, handler.declarations.size());			
+	}
+	
+	@Test
+	public void testParserAtRule007() throws Exception {
+		String s = "@rule one, 2, [3,4], (5,6)  { E { p1:v1;} }";
+		HandlerImpl handler = checkBasics(exec(s));	
+		assertEquals(1, handler.atRules.size());
+		assertEquals(7, handler.atRules.get(0).getComponents().size());
+		assertTrue(handler.atRules.get(0).hasBlock);		
+		assertEquals(1, handler.selectors.size());
+		assertEquals(1, handler.declarations.size());			
+	}
+	
+	@Test
+	public void testParserAtRule008() throws Exception {
+		String s = "@rule one, 2, [3,4], (5,6);";
+		HandlerImpl handler = checkBasics(exec(s));	
+		assertEquals(1, handler.atRules.size());
+		assertEquals(7, handler.atRules.get(0).getComponents().size());
+		assertFalse(handler.atRules.get(0).hasBlock);		
+		assertEquals(0, handler.selectors.size());
+		assertEquals(0, handler.declarations.size());			
+	}
+	
+	
+	
+	@Test
+	public void testParserSelector001() throws Exception {
+		String s = "E1 {}";
+		HandlerImpl handler = checkBasics(exec(s));		
+		assertEquals(1, handler.selectors.size());
+		assertEquals(1, handler.selectors.get(0).size());
+		
+		List<CssSelector> selectors = handler.selectors.get(0);
+		assertEquals(1, selectors.size());
+		CssSelector first = selectors.get(0);
+		assertTrue(first.getComponents().get(0) instanceof CssSimpleSelectorSequence);		
+		CssSimpleSelectorSequence seq = (CssSimpleSelectorSequence)first.getComponents().get(0);		
+		assertEquals("E1", seq.getComponents().get(0).toCssString());
+		
+								
+	}
+	
+	@Test
+	public void testParserSelector002() throws Exception {
+		
+		String s = "E1,E2,E3 {}";
+		HandlerImpl handler = checkBasics(exec(s));		
+		assertEquals(1, handler.selectors.size());
+		
+		List<CssSelector> selectors = handler.selectors.get(0);
+		assertEquals(3, selectors.size());
+		
+		CssSelector first = selectors.get(0);
+		assertTrue(first.getComponents().get(0) instanceof CssSimpleSelectorSequence);		
+		CssSimpleSelectorSequence seq = (CssSimpleSelectorSequence)first.getComponents().get(0);		
+		assertEquals("E1", seq.getComponents().get(0).toCssString());
+		
+		CssSelector third = selectors.get(2);
+		assertTrue(third.getComponents().get(0) instanceof CssSimpleSelectorSequence);		
+		CssSimpleSelectorSequence seq2 = (CssSimpleSelectorSequence)third.getComponents().get(0);		
+		assertEquals("E3", seq2.getComponents().get(0).toCssString());
+						
+	}
+	
+	@Test
+	public void testParserSelector003() throws Exception {		
+		String s = "E1 E2 {}";
+		HandlerImpl handler = checkBasics(exec(s));
+		
+		assertEquals(1, handler.selectors.size());		
+		List<CssSelector> selectors = handler.selectors.get(0);
+		assertEquals(1, selectors.size());		
+		CssSelector first = selectors.get(0);
+		assertTrue(first.getComponents().get(0) instanceof CssSimpleSelectorSequence);
+		
+		CssSimpleSelectorSequence seq = (CssSimpleSelectorSequence)first.getComponents().get(0);		
+		assertEquals("E1", seq.getComponents().get(0).toCssString());
+		assertTrue(first.getComponents().get(1) instanceof CssSelectorCombinator);
+		assertTrue(first.getComponents().get(2) instanceof CssSimpleSelectorSequence);
+								
+	}
+	
+	@Test
+	public void testParserSelector004() throws Exception {
+		String s = "A B C D > E + F {} ";
+		HandlerImpl handler = checkBasics(exec(s));
+		assertEquals(1, handler.selectors.get(0).size());
+	}
+	
+	@Test
+	public void testParserSelector005() throws Exception {
+		String s = "A, B, C  , D > E, F + G {} ";
+		HandlerImpl handler = checkBasics(exec(s));	
+		assertEquals(5, handler.selectors.get(0).size());
+	}
+	
+	@Test
+	public void testParserSelector006() throws Exception {
+		String s = "html|*:not(:link):not(:visited) { float: right; }";
+		checkBasics(exec(s));		
+	}
+	
+	@Test
+	public void testParserSelector007() throws Exception {
+		String s = "a:focus:hover {}";
+		checkBasics(exec(s));		
+	}
+	
+	@Test
+	public void testParserSelectorsFunctionalPseudoValid001() throws Exception {
+		String s = 
+			 "tr:nth-child(2n+1) {} /* represents every odd row of an HTML table */"
+			+"tr:nth-child(odd)  {}/* same */"
+			+"tr:nth-child(2n+0) {}/* represents every even row of an HTML table */"
+			+"tr:nth-child(even) {}/* same */"
+			+"/* Alternate paragraph colours in CSS */"
+			+"p:nth-child(4n+1) { color: navy; }"
+			+"p:nth-child(4n+2) { color: green; }"
+			+"p:nth-child(4n+3) { color: maroon; }"
+			+"p:nth-child(4n+4) { color: purple; }"
+			+":nth-child(10n-1)  {}/* represents the 9th, 19th, 29th, etc, element */"
+			+":nth-child(10n+9)  {}/* Same */"
+			+":nth-child( 3n + 1 ) {}"
+			+":nth-child( +3n - 2 ) {}"
+			+":nth-child( -n+ 6) {}"
+			+":nth-child( +6 ) {}";			
+		checkBasics(exec(s));		
+	}
+	
+	@Test
+	public void testParserSelectorsFunctionalPseudoInvalid001() throws Exception {
+		//all invalid TODO these pass without exception, break at parser level or leave to validator...
+		String s = 
+			 ":nth-child(10n+-1) {}"
+			+":nth-child(3 n) {}"
+			+":nth-child(+ 2n) {}"
+			+":nth-child(+ 2) {}";
+		checkBasics(exec(s));		
+	}
+	
+	@Test
+	public void testParserSelectorsKeyword() throws Exception {
+		//w3c css validator has parse error here too
+		
+		String s = "not {}";			
+		checkBasics(exec(s), true);		
+	}
+	
+	@Test
+	public void testParserAttrAndChildSelector() throws Exception {			
+		String s = "*[compact='yes']>li { margin-top: 0em;}";			
+		HandlerImpl handler = checkBasics(exec(s));
+		assertEquals(1, handler.selectors.get(0).size());
+		assertEquals(1, handler.declarations.size());
+	}
+
+	@Test
+	public void testParserSelectorsEscapedInit1() throws Exception {
+		String s = "\\hot {}";			
+		checkBasics(exec(s), false);				
+	}
+		
+	@Test 
+	public void testParserSelectorBulk() throws Exception {
+		String s = "*  {} " +
+				"E {} " +
+				"*|E {} " +
+				"ns|E {} " +
+				"|E {} " +
+				"E[foo] {} " +
+				"E[foo='bar'] {} " +
+				"E[foo~='bar'] {} " +
+				"E[foo^='bar'] {} " +
+				"E[foo$='bar'] {} " +
+				"E[foo*='bar'] {} " +
+				"E[foo|='en'] {} " +
+				"E:root {} " +
+				"E:nth-child(n) {} " +
+				"E:nth-last-child(n) {} " +
+				"E:nth-of-type(n) {} " +
+				"E:nth-last-of-type(n) {} " +
+				"E:first-child {} " +
+				"E:last-child {} " +
+				"E:first-of-type {} " +
+				"E:last-of-type {} " +
+				"E:only-child {} " +
+				"E:only-of-type {} " +
+				"E:empty {} " +
+				"E:link {} " +
+				"E:visited {} " +
+				"E:active {} " +
+				"E:hover {} " +
+				"E:focus {} " +
+				"E:target {} " +
+				"E:lang(fr) {} " +
+				"E:enabled {} " +
+				"E:disabled {} " +
+				"E:checked {} " +
+				"E::first-line {} " +
+				"E::first-letter {} " +
+				"E::before {} " +
+				"E::after {} " +
+				"E.warning {} " +
+				"E#myid {} " +
+				"E:not(s) {} " +
+				"E F	 {} " +
+				"E > F {} " +
+				"E + F {} " +
+				"E ~ F {} " +
+				"A B C D > E + F {} ";
+		HandlerImpl handler = checkBasics(exec(s));
+		assertEquals(46, handler.selectors.size());
+	}
+	
+	@Test
+	public void testParserSelectorErr001() throws Exception {
+		String s = "E1,E2, {}";
+		HandlerImpl handler = checkBasics(exec(s), true);		
+		assertEquals(0, handler.selectors.size());
+		assertEquals(1, handler.errors.size());						
+	}
+	
+	@Test
+	public void testParserSelectorErr002() throws Exception {
+		String s = ",E1,E2 {}";
+		HandlerImpl handler = checkBasics(exec(s), true);		
+		assertEquals(0, handler.selectors.size());
+		assertEquals(1, handler.errors.size());						
+	}
+	
+	@Test
+	public void testParserSelectorErr003() throws Exception {
+		String s = "E1,,E2 {}";
+		HandlerImpl handler = checkBasics(exec(s), true);		
+		assertEquals(0, handler.selectors.size());
+		assertEquals(1, handler.errors.size());						
+	}
+	
+	@Test
+	public void testParserSelectorErr004() throws Exception {
+		String s = "E1,E2 $ {}"; 
+		HandlerImpl handler = checkBasics(exec(s), true);		
+		assertEquals(0, handler.selectors.size());
+		assertEquals(1, handler.errors.size());						
+	}
+	
+	@Test
+	public void testParserSelectorErr005() throws Exception {
+		String s = "E[att=123] {}"; 
+		HandlerImpl handler = checkBasics(exec(s), true);		
+		assertEquals(0, handler.selectors.size());
+		assertEquals(1, handler.errors.size());						
+	}
+	
+	@Test
+	public void testParserSelectorErr006() throws Exception {
+		String s = "E[att 'val'] {}"; 
+		HandlerImpl handler = checkBasics(exec(s), true);		
+		assertEquals(0, handler.selectors.size());
+		assertEquals(1, handler.errors.size());						
+	}
+	
+	@Test
+	public void testParserSelectorErr007() throws Exception {
+		String s = "E['val'] {}"; 
+		HandlerImpl handler = checkBasics(exec(s), true);		
+		assertEquals(0, handler.selectors.size());
+		assertEquals(1, handler.errors.size());						
+	}
+	
+	@Test
+	public void testParserSelectorErr008() throws Exception {
+		String s = "E[*|2] {}"; 
+		HandlerImpl handler = checkBasics(exec(s), true);		
+		assertEquals(0, handler.selectors.size());
+		assertEquals(1, handler.errors.size());						
+	}
+	
+	@Test
+	public void testParserSelectorErr009() throws Exception {
+		String s = "E[|2] {}"; 
+		HandlerImpl handler = checkBasics(exec(s), true);		
+		assertEquals(0, handler.selectors.size());
+		assertEquals(1, handler.errors.size());						
+	}
+	
+	@Test
+	public void testParserSelectorCombinatorTyping001() throws Exception {
+		String s = "A B {}"; 
+		HandlerImpl handler = checkBasics(exec(s), true);		
+		assertEquals(1, handler.selectors.size());
+		CssSelector selector = handler.selectors.get(0).get(0);
+		assertEquals(3, selector.components.size());
+		
+		CssSimpleSelectorSequence seq = (CssSimpleSelectorSequence)selector.components.get(0);
+		assertEquals(CssConstruct.Type.TYPE_SELECTOR, seq.getComponents().get(0).type);
+		
+		assertEquals(CssConstruct.Type.COMBINATOR, selector.components.get(1).type);
+		CssSelectorCombinator comb = (CssSelectorCombinator) selector.components.get(1);
+		assertEquals(CssSelectorCombinator.Type.DESCENDANT, comb.subType);
+		
+		seq = (CssSimpleSelectorSequence)selector.components.get(2);
+		assertEquals(CssConstruct.Type.TYPE_SELECTOR, seq.getComponents().get(0).type);
+						
+	}
+	
+	@Test
+	public void testParserSelectorCombinatorTyping002a() throws Exception {
+		String s = "A > B {}"; 
+		HandlerImpl handler = checkBasics(exec(s), true);		
+		assertEquals(1, handler.selectors.size());
+		CssSelector selector = handler.selectors.get(0).get(0);
+		assertEquals(3, selector.components.size());
+		
+		CssSimpleSelectorSequence seq = (CssSimpleSelectorSequence)selector.components.get(0);
+		assertEquals(CssConstruct.Type.TYPE_SELECTOR, seq.getComponents().get(0).type);
+		
+		assertEquals(CssConstruct.Type.COMBINATOR, selector.components.get(1).type);
+		CssSelectorCombinator comb = (CssSelectorCombinator) selector.components.get(1);
+		assertEquals(CssSelectorCombinator.Type.CHILD, comb.subType);
+		
+		seq = (CssSimpleSelectorSequence)selector.components.get(2);
+		assertEquals(CssConstruct.Type.TYPE_SELECTOR, seq.getComponents().get(0).type);						
+	}
+	
+	@Test
+	public void testParserSelectorCombinatorTyping002b() throws Exception {
+		String s = "A>B {}"; 
+		HandlerImpl handler = checkBasics(exec(s), true);		
+		assertEquals(1, handler.selectors.size());
+		CssSelector selector = handler.selectors.get(0).get(0);
+		assertEquals(3, selector.components.size());
+		
+		CssSimpleSelectorSequence seq = (CssSimpleSelectorSequence)selector.components.get(0);
+		assertEquals(CssConstruct.Type.TYPE_SELECTOR, seq.getComponents().get(0).type);
+		
+		assertEquals(CssConstruct.Type.COMBINATOR, selector.components.get(1).type);
+		CssSelectorCombinator comb = (CssSelectorCombinator) selector.components.get(1);
+		assertEquals(CssSelectorCombinator.Type.CHILD, comb.subType);
+		
+		seq = (CssSimpleSelectorSequence)selector.components.get(2);
+		assertEquals(CssConstruct.Type.TYPE_SELECTOR, seq.getComponents().get(0).type);						
+	}
+	
+	@Test
+	public void testParserSelectorCombinatorTyping003a() throws Exception {
+		String s = "A + B {}"; 
+		HandlerImpl handler = checkBasics(exec(s), true);		
+		assertEquals(1, handler.selectors.size());
+		CssSelector selector = handler.selectors.get(0).get(0);
+		assertEquals(3, selector.components.size());
+		
+		CssSimpleSelectorSequence seq = (CssSimpleSelectorSequence)selector.components.get(0);
+		assertEquals(CssConstruct.Type.TYPE_SELECTOR, seq.getComponents().get(0).type);
+		
+		assertEquals(CssConstruct.Type.COMBINATOR, selector.components.get(1).type);
+		CssSelectorCombinator comb = (CssSelectorCombinator) selector.components.get(1);
+		assertEquals(CssSelectorCombinator.Type.ADJACENT_SIBLING, comb.subType);
+		
+		seq = (CssSimpleSelectorSequence)selector.components.get(2);
+		assertEquals(CssConstruct.Type.TYPE_SELECTOR, seq.getComponents().get(0).type);						
+	}
+	
+	@Test
+	public void testParserSelectorCombinatorTyping003b() throws Exception {
+		String s = "A+B {}"; 
+		HandlerImpl handler = checkBasics(exec(s), true);		
+		assertEquals(1, handler.selectors.size());
+		CssSelector selector = handler.selectors.get(0).get(0);
+		assertEquals(3, selector.components.size());
+		
+		CssSimpleSelectorSequence seq = (CssSimpleSelectorSequence)selector.components.get(0);
+		assertEquals(CssConstruct.Type.TYPE_SELECTOR, seq.getComponents().get(0).type);
+		
+		assertEquals(CssConstruct.Type.COMBINATOR, selector.components.get(1).type);
+		CssSelectorCombinator comb = (CssSelectorCombinator) selector.components.get(1);
+		assertEquals(CssSelectorCombinator.Type.ADJACENT_SIBLING, comb.subType);
+		
+		seq = (CssSimpleSelectorSequence)selector.components.get(2);
+		assertEquals(CssConstruct.Type.TYPE_SELECTOR, seq.getComponents().get(0).type);						
+	}
+	
+	@Test
+	public void testParserSelectorCombinatorTyping004a() throws Exception {
+		String s = "A ~ B {}"; 
+		HandlerImpl handler = checkBasics(exec(s), true);		
+		assertEquals(1, handler.selectors.size());
+		CssSelector selector = handler.selectors.get(0).get(0);
+		assertEquals(3, selector.components.size());
+		
+		CssSimpleSelectorSequence seq = (CssSimpleSelectorSequence)selector.components.get(0);
+		assertEquals(CssConstruct.Type.TYPE_SELECTOR, seq.getComponents().get(0).type);
+		
+		assertEquals(CssConstruct.Type.COMBINATOR, selector.components.get(1).type);
+		CssSelectorCombinator comb = (CssSelectorCombinator) selector.components.get(1);
+		assertEquals(CssSelectorCombinator.Type.GENERAL_SIBLING, comb.subType);
+		
+		seq = (CssSimpleSelectorSequence)selector.components.get(2);
+		assertEquals(CssConstruct.Type.TYPE_SELECTOR, seq.getComponents().get(0).type);						
+	}
+	
+	@Test
+	public void testParserSelectorCombinatorTyping004b() throws Exception {
+		String s = "A~B {}"; 
+		HandlerImpl handler = checkBasics(exec(s), true);		
+		assertEquals(1, handler.selectors.size());
+		CssSelector selector = handler.selectors.get(0).get(0);
+		assertEquals(3, selector.components.size());
+		
+		CssSimpleSelectorSequence seq = (CssSimpleSelectorSequence)selector.components.get(0);
+		assertEquals(CssConstruct.Type.TYPE_SELECTOR, seq.getComponents().get(0).type);
+		
+		assertEquals(CssConstruct.Type.COMBINATOR, selector.components.get(1).type);
+		CssSelectorCombinator comb = (CssSelectorCombinator) selector.components.get(1);
+		assertEquals(CssSelectorCombinator.Type.GENERAL_SIBLING, comb.subType);
+		
+		seq = (CssSimpleSelectorSequence)selector.components.get(2);
+		assertEquals(CssConstruct.Type.TYPE_SELECTOR, seq.getComponents().get(0).type);						
+	}
+	
+	@Test
+	public void testParserImportant001() throws Exception {
+		String s = "E { n1 : v1 !important } E2 { n2 : v2 !important}"; 
+		HandlerImpl handler = checkBasics(exec(s));		
+		assertEquals(2, handler.selectors.size());
+		assertEquals(0, handler.errors.size());
+		assertEquals(2, handler.declarations.size());
+		for(CssDeclaration decl : handler.declarations) {
+			assertTrue(decl.important);
+		}
+	}
+	
+	@Test
+	public void testParserImportant002() throws Exception {
+		String s = "E { n1 : v1 !important ; n2 : v2;}"; 
+		HandlerImpl handler = checkBasics(exec(s));		
+		assertEquals(1, handler.selectors.size());
+		assertEquals(0, handler.errors.size());
+		assertEquals(2, handler.declarations.size());
+		assertTrue(handler.declarations.get(0).important);
+		assertFalse(handler.declarations.get(1).important);		
+	}
+	
+	@Test
+	public void testParserImportant003() throws Exception {
+		String s = "E { n1 : v1 !important ; n2 : v2 !important}"; 
+		HandlerImpl handler = checkBasics(exec(s));		
+		assertEquals(1, handler.selectors.size());
+		assertEquals(0, handler.errors.size());
+		assertEquals(2, handler.declarations.size());
+		for(CssDeclaration decl : handler.declarations) {
+			assertTrue(decl.important);
+		}
+	}
+	
+	@Test
+	public void testParserImportant004() throws Exception {
+		String s = "E { n1 : !important }"; 
+		HandlerImpl handler = checkBasics(exec(s), true);		
+		assertEquals(1, handler.selectors.size());
+		assertEquals(1, handler.errors.size());
+		assertEquals(0, handler.declarations.size());
+		
+	}
+	
+	@Test
+	public void testParserErr001() throws Exception {
+		String s = "@charset ";
+		HandlerImpl handler = checkBasics(exec(s), true);		
+		assertTrue(handler.atRules.size() == 1);
+		assertEquals(1, handler.errors.size());
+		assertEquals(CssExceptions.CssErrorCode.GRAMMAR_PREMATURE_EOF
+				, handler.errors.get(0).errorCode);
+	}
+	
+	@Test
+	public void testParserErr002() throws Exception {
+		//first atrule skipped
+		String s = "@charset } ; @namespace 'http://foo.ns' ; ";
+		HandlerImpl handler = checkBasics(exec(s), true);		
+		assertTrue(handler.atRules.size() == 1);
+		assertTrue(handler.atRules.get(0).toCssString().startsWith("@namespace"));
+		assertEquals(1, handler.errors.size());
+		assertEquals(CssExceptions.CssErrorCode.GRAMMAR_UNEXPECTED_TOKEN
+				, handler.errors.get(0).errorCode);		
+	}
+	
+
+	@Test
+	public void testParserErr003() throws Exception {
+		// note the skip algo goes to '}' 
+		String s = " E { name1 : ; name2 : value2 }";
+		HandlerImpl handler = checkBasics(exec(s), true);						
+		assertEquals(1, handler.errors.size());
+		assertEquals(CssExceptions.CssErrorCode.GRAMMAR_EXPECTING_TOKEN, handler.errors.get(0).errorCode);
+		assertEquals(0, handler.declarations.size());
+	}
+	
+	@Test
+	public void testParserErr004() throws Exception {
+		//no value for second token, first decl should be retained
+		String s = " E { name1 : value1 ; : value2 }";
+		HandlerImpl handler = checkBasics(exec(s), true);						
+		assertEquals(1, handler.errors.size());
+		assertEquals(CssExceptions.CssErrorCode.GRAMMAR_EXPECTING_TOKEN, handler.errors.get(0).errorCode);
+		assertEquals(1, handler.declarations.size());
+		assertEquals("name1", handler.declarations.get(0).getName().get());
+	}
+	
+	@Test
+	public void testParserErr005() throws Exception {
+		//a stray delim following first decl
+		String s = " E { name1 : value1 ; : }";
+		HandlerImpl handler = checkBasics(exec(s), true);						
+		assertEquals(1, handler.errors.size());
+		assertEquals(CssExceptions.CssErrorCode.GRAMMAR_EXPECTING_TOKEN, handler.errors.get(0).errorCode);
+		assertEquals(1, handler.declarations.size());
+		assertEquals("name1", handler.declarations.get(0).getName().get());
+	}
+	
+	@Test
+	public void testParserErr006() throws Exception {
+		//first propname not ident, second should be retained
+		String s = " E { 10% : 20% ; name2 : value2 }";
+		HandlerImpl handler = checkBasics(exec(s), true);						
+		assertEquals(1, handler.errors.size());
+		assertEquals(CssExceptions.CssErrorCode.GRAMMAR_EXPECTING_TOKEN, handler.errors.get(0).errorCode);
+		assertEquals(1, handler.declarations.size());
+		assertEquals("name2", handler.declarations.get(0).getName().get());
+	}
+	
+	@Test
+	public void testParserErr007() throws Exception {
+		String s = " E { ;:;:;:;:;:;:;:;:; } E { foo : bar }";
+		HandlerImpl handler = checkBasics(exec(s), true);						
+		assertTrue(handler.errors.size() > 0 );
+		assertEquals(CssExceptions.CssErrorCode.GRAMMAR_EXPECTING_TOKEN, handler.errors.get(0).errorCode);
+		assertEquals(1, handler.declarations.size());
+		assertEquals("foo", handler.declarations.get(0).getName().get());	
+	}
+	
+	@Test
+	public void testParserErr008() throws Exception {
+		String s = " E {{ p1 : v1 ; p2 : v2; }";
+		HandlerImpl handler = checkBasics(exec(s), true);						
+		assertEquals(1, handler.errors.size());
+		assertEquals(CssExceptions.CssErrorCode.GRAMMAR_EXPECTING_TOKEN, handler.errors.get(0).errorCode);
+		assertEquals(1, handler.declarations.size());
+		assertEquals("p2", handler.declarations.get(0).getName().get());			
+	}
+	
+	@Test
+	public void testParserErr009() throws Exception {
+		String s = " E {{ p1 : v1 ; p2 : v2; ";
+		HandlerImpl handler = checkBasics(exec(s), true);						
+		assertEquals(2, handler.errors.size());
+		assertEquals(CssExceptions.CssErrorCode.GRAMMAR_EXPECTING_TOKEN, handler.errors.get(0).errorCode);
+		assertEquals(CssExceptions.CssErrorCode.GRAMMAR_PREMATURE_EOF, handler.errors.get(1).errorCode);
+		assertEquals(1, handler.declarations.size());
+		assertEquals("p2", handler.declarations.get(0).getName().get());		
+	}
+	
+	@Test
+	public void testParserErr010() throws Exception {
+		//extra '}' which causes entire second ruleset to be skipped too
+		String s = " E1 {p1a:v1a;p1b:v1b;}} E2 {p2a:v2a;p2b:v2b;}";
+		HandlerImpl handler = checkBasics(exec(s), true);						
+		assertEquals(1, handler.errors.size());
+		assertEquals(CssExceptions.CssErrorCode.GRAMMAR_UNEXPECTED_TOKEN, handler.errors.get(0).errorCode);		
+		assertEquals(2, handler.declarations.size());
+		assertEquals("p1b", handler.declarations.get(1).getName().get());
+		assertEquals(1, handler.selectors.size());				
+	}
+	
+	@Test
+	public void testParserErr011a() throws Exception {
+		//function not closing
+		String s = " E1 { foo : bar( 1px, 2px, 3px ; } E2 { foo2 : bar2 }";
+		HandlerImpl handler = checkBasics(exec(s), true);						
+		assertEquals(1, handler.errors.size());
+		assertEquals(CssExceptions.CssErrorCode.GRAMMAR_UNEXPECTED_TOKEN, handler.errors.get(0).errorCode);		
+		assertEquals(1, handler.declarations.size());
+		assertEquals("foo2", handler.declarations.get(0).getName().get());						
+			
+	}
+	
+	@Test
+	public void testParserErr011b() throws Exception {
+		//function not closing, because err token is '}' next decl is skipped too...
+		String s = " E1 { foo : bar( 1px, 2px, 3px } E2 { foo2 : bar2 }";
+		HandlerImpl handler = checkBasics(exec(s), true);						
+		assertEquals(1, handler.errors.size());
+		assertEquals(CssExceptions.CssErrorCode.GRAMMAR_UNEXPECTED_TOKEN, handler.errors.get(0).errorCode);		
+		assertEquals(0, handler.declarations.size());										
+	}
+	
+	@Test
+	public void testParserErr011ok() throws Exception {
+		//function not closing
+		String s = " E1 { foo : bar( 1px, 2px, 3px ); } E2 { foo2 : bar2 }";
+		HandlerImpl handler = checkBasics(exec(s), true);						
+		assertEquals(0, handler.errors.size());				
+		assertEquals(2, handler.declarations.size());
+		assertEquals("foo2", handler.declarations.get(1).getName().get());							
+	}
+	
+	@Test
+	public void testParserErr012() throws Exception {
+		//prop value
+		String s = " E { foo : {23 } E2 {foo2:bar}";
+		HandlerImpl handler = checkBasics(exec(s), true);						
+		assertEquals(1, handler.errors.size());
+		assertEquals(CssExceptions.CssErrorCode.GRAMMAR_UNEXPECTED_TOKEN, handler.errors.get(0).errorCode);		
+		assertEquals(1, handler.declarations.size());
+		assertEquals("foo2", handler.declarations.get(0).getName().get());						
+			
+	}
+	
+	@Test
+	public void testParserErr013() throws Exception {
+		//check that at-rule skip-to-} skips past nested blocks
+		String s = "@outer } { @inner1 { p1:v1 } @inner2 { p1:v1 } } E { p2:v2 }";
+		HandlerImpl handler = checkBasics(exec(s), true);						
+		assertEquals(1, handler.errors.size());
+		assertEquals(CssExceptions.CssErrorCode.GRAMMAR_UNEXPECTED_TOKEN, handler.errors.get(0).errorCode);		
+		assertEquals(1, handler.declarations.size());
+		assertEquals("p2", handler.declarations.get(0).getName().get());						
+				
+	}
+	
+	@Test
+	public void testParserFile001() throws Exception {		
+		HandlerImpl handler = checkBasics(execFile("counter-styles.css", false));						
+		assertEquals(31, handler.atRules.size());
+	}
+	
+	@Test
+	public void testParserFile002() throws Exception {		
+		checkBasics(execFile("counter-styles.css", false));								
+	}
+	
+	@Test
+	public void testParserFile003() throws Exception {		
+		checkBasics(execFile("counter-styles.css", false));								
+	}
+	
+	@Test
+	public void testParserFile004() throws Exception {		
+		checkBasics(execFile("counter-styles.css", false));								
+	}
+	
+	@Test
+	public void testGrammarToCssString001() throws Exception {				
+		String s = "E {color:black}";
+		HandlerImpl handler = checkBasics(exec(s));												
+		assertEquals(1, handler.declarations.size());
+		assertEquals("color : black ;", handler.declarations.get(0).toCssString());							
+	}
+	
+	@Test
+	public void testGrammarToCssString002() throws Exception {				
+		String s = "@foo 'bar'; @baz quux('qing'); ";
+		HandlerImpl handler = checkBasics(exec(s));												
+		assertEquals(2, handler.atRules.size());
+		assertEquals("@foo 'bar'", handler.atRules.get(0).toCssString());
+		assertEquals("@baz quux('qing')", handler.atRules.get(1).toCssString());
+	}
+	@Test
+	public void testGrammarToCssString003() throws Exception {				
+		String s = "A,B,C {}";
+		HandlerImpl handler = checkBasics(exec(s));												
+		assertEquals(1, handler.selectors.size());
+		List<CssSelector> list = handler.selectors.get(0);
+		assertEquals("A", list.get(0).toCssString());
+		assertEquals("B", list.get(1).toCssString());
+		assertEquals("C", list.get(2).toCssString());			
+	}
+	
+	@Test
+	public void testGrammarToCssString004() throws Exception {				
+		String s = "A>B {}";
+		HandlerImpl handler = checkBasics(exec(s));												
+		assertEquals(1, handler.selectors.size());
+		assertEquals("A>B", handler.selectors.get(0).get(0).toCssString());		
+	}
+	
+	@Test
+	public void testGrammarToCssString005() throws Exception {				
+		String s = "A B {}";
+		HandlerImpl handler = checkBasics(exec(s));												
+		assertEquals(1, handler.selectors.size());
+		assertEquals("A B", handler.selectors.get(0).get(0).toCssString());		
+	}
+	
+	@Test
+	public void testGrammarToCssString006() throws Exception {				
+		String s = "tr:nth-child(odd)  {}";
+		HandlerImpl handler = checkBasics(exec(s));												
+		assertEquals(1, handler.selectors.size());
+		assertEquals("tr:nth-child(odd)", handler.selectors.get(0).get(0).toCssString());		
+	}
+	
+	@Test
+	public void testGrammarToCssString007() throws Exception {				
+		String s = "E:first-child {}";
+		HandlerImpl handler = checkBasics(exec(s));												
+		assertEquals(1, handler.selectors.size());
+		assertEquals("E:first-child", handler.selectors.get(0).get(0).toCssString());		
+	}
+	
+	@Test
+	public void testGrammarToCssString008() throws Exception {				
+		String s = "*|E {}";
+		HandlerImpl handler = checkBasics(exec(s));												
+		assertEquals(1, handler.selectors.size());
+		assertEquals("*|E", handler.selectors.get(0).get(0).toCssString());		
+	}
+	
+	@Test
+	public void testGrammarToCssString009() throws Exception {				
+		String s = "E[foo='bar'] {}";
+		HandlerImpl handler = checkBasics(exec(s));												
+		assertEquals(1, handler.selectors.size());
+		assertEquals("E[foo='bar']", handler.selectors.get(0).get(0).toCssString());		
+	}
+	
+	@Test
+	public void testGrammarToCssString010() throws Exception {				
+		String s = "E:not(s) {}";
+		HandlerImpl handler = checkBasics(exec(s));												
+		assertEquals(1, handler.selectors.size());
+		assertEquals("E:not(s)", handler.selectors.get(0).get(0).toCssString());		
+	}
+	
+	@Test
+	public void testGrammarToCssString011() throws Exception {				
+		String s = "E::first-letter {}";
+		HandlerImpl handler = checkBasics(exec(s));												
+		assertEquals(1, handler.selectors.size());
+		assertEquals("E::first-letter", handler.selectors.get(0).get(0).toCssString());		
+	}
+	
+	@Test
+	public void testGrammarToCssString012() throws Exception {				
+		String s = "E[foo^='bar'] {}";
+		HandlerImpl handler = checkBasics(exec(s));												
+		assertEquals(1, handler.selectors.size());
+		assertEquals("E[foo^='bar']", handler.selectors.get(0).get(0).toCssString());		
+	}
+	
+	@Test
+	public void testGrammarToCssString013() throws Exception {				
+		String s = "E[a='b'][c='d'] {}";
+		HandlerImpl handler = checkBasics(exec(s));												
+		assertEquals(1, handler.selectors.size());
+		assertEquals("E[a='b'][c='d']", handler.selectors.get(0).get(0).toCssString());		
+	}
+	
+	@Test
+	public void testGrammarToCssString014() throws Exception {				
+		String s = "E[*|a='b'][p|c='d'] {}";
+		HandlerImpl handler = checkBasics(exec(s));												
+		assertEquals(1, handler.selectors.size());
+		assertEquals("E[*|a='b'][p|c='d']", handler.selectors.get(0).get(0).toCssString());		
+	}
+	
+	@Test
+	public void testGrammarToCssString015() throws Exception {				
+		String s = "tr:nth-child(2n+0) {}";
+		HandlerImpl handler = checkBasics(exec(s));												
+		assertEquals(1, handler.selectors.size());
+		assertEquals("tr:nth-child(2n+0)", handler.selectors.get(0).get(0).toCssString());		
+	}
+		
+	@Test
+	public void testGrammarToCssString016() throws Exception {				
+		String s = "body > h2:not(:first-of-type):not(:last-of-type) {}";
+		HandlerImpl handler = checkBasics(exec(s));												
+		assertEquals(1, handler.selectors.size());
+		assertEquals("body>h2:not(:first-of-type):not(:last-of-type)", handler.selectors.get(0).get(0).toCssString());		
+	}
+	
+	@Test
+	public void testGrammarToCssString017() throws Exception {				
+		String s = "E {color:black}";
+		HandlerImpl handler = checkBasics(exec(s));												
+		assertEquals("color : black ;", handler.declarations.get(0).toCssString());		
+	}
+	
+	@Test
+	public void testGrammarToURIString001() throws Exception {				
+		String s = "url(foo)";
+		CssURI cu = new CssURI(s, MOCK_LOCATION);
+		assertEquals("foo", cu.toUriString());				
+	}
+	
+	@Test
+	public void testGrammarToURIString002() throws Exception {				
+		String s = "url('foo')";
+		CssURI cu = new CssURI(s, MOCK_LOCATION);
+		assertEquals("foo", cu.toUriString());				
+	}
+	
+	@Test
+	public void testGrammarToURIString003() throws Exception {				
+		String s = "url(\"foo\")";
+		CssURI cu = new CssURI(s, MOCK_LOCATION);
+		assertEquals("foo", cu.toUriString());				
+	}
+	
+	@Test
+	public void testGrammarToURIString004() throws Exception {				
+		String s = "url(  \"foo\"  )";
+		CssURI cu = new CssURI(s, MOCK_LOCATION);
+		assertEquals("foo", cu.toUriString());				
+	}
+	
+	@Test
+	public void testGrammarToURIString005() throws Exception {				
+		String s = "url(  \'foo\'  )";
+		CssURI cu = new CssURI(s, MOCK_LOCATION);
+		assertEquals("foo", cu.toUriString());				
+	}
+	
+	@Test
+	public void testGrammarToURIString006() throws Exception {				
+		String s = "url(  \"f o o\"  )";
+		CssURI cu = new CssURI(s, MOCK_LOCATION);
+		assertEquals("f o o", cu.toUriString());				
+	}
+	
+	@Test
+	public void testGrammarToURIString007() throws Exception {				
+		String s = "url(  \"  f o o  \"  )";
+		CssURI cu = new CssURI(s, MOCK_LOCATION);
+		assertEquals("f o o", cu.toUriString());				
+	}
+	
+	@Test
+	public void testGrammarToURIString008() throws Exception {				
+		String s = "url()";
+		CssURI cu = new CssURI(s, MOCK_LOCATION);
+		assertEquals("", cu.toUriString());				
+	}
+	
+	@Test
+	public void testGrammarToURIString009() throws Exception {				
+		String s = "url('')";
+		CssURI cu = new CssURI(s, MOCK_LOCATION);
+		assertEquals("", cu.toUriString());				
+	}
+	
+	@Test
+	public void testGrammarToURIString010() throws Exception {				
+		String s = "url( ' ' )";
+		CssURI cu = new CssURI(s, MOCK_LOCATION);
+		assertEquals("", cu.toUriString());				
+	}
+	
+	@Test
+	public void testParseStyleAttribute001() throws Exception {				
+		String s = "color:black";
+		HandlerImpl handler = execStyleAttr(s, false);												
+		assertEquals(1, handler.declarations.size());
+		assertEquals(0, handler.errors.size());				
+	}
+	
+	@Test
+	public void testParseStyleAttribute002() throws Exception {				
+		String s = "color:black; color:green";
+		HandlerImpl handler = execStyleAttr(s, false);												
+		assertEquals(2, handler.declarations.size());
+		assertEquals(0, handler.errors.size());				
+	}
+	
+	@Test
+	public void testParseStyleAttribute003() throws Exception {				
+		String s = " color:black; color:green; color : blue ; ";
+		HandlerImpl handler = execStyleAttr(s, false);												
+		assertEquals(3, handler.declarations.size());
+		assertEquals(0, handler.errors.size());				
+	}
+	
+	@Test
+	public void testParseStyleAttribute004() throws Exception {				
+		String s = " color:black !important";
+		HandlerImpl handler = execStyleAttr(s, false);												
+		assertEquals(1, handler.declarations.size());
+		assertEquals(true, handler.declarations.get(0).important);
+		assertEquals(0, handler.errors.size());				
+	}
+	
+	@Test
+	public void testParseStyleAttribute005() throws Exception {				
+		String s = "{color:black}";
+		HandlerImpl handler = execStyleAttr(s, false);												
+		assertEquals(0, handler.declarations.size());		
+		assertEquals(1, handler.errors.size());				
+	}
+	
+	@Test
+	public void testParseStyleAttribute006() throws Exception {				
+		String s = "color:black}";
+		HandlerImpl handler = execStyleAttr(s, false);												
+		assertEquals(0, handler.declarations.size());		
+		assertEquals(1, handler.errors.size());
+	}
+	
+	@Test
+	public void testParseStyleAttribute007() throws Exception {				
+		String s = "color";
+		HandlerImpl handler = execStyleAttr(s, false);												
+		assertEquals(0, handler.declarations.size());		
+		assertEquals(1, handler.errors.size());
+	}
+	
+	@Test
+	public void testParseStyleAttribute008() throws Exception {				
+		String s = ": color";
+		HandlerImpl handler = execStyleAttr(s, false);												
+		assertEquals(0, handler.declarations.size());		
+		assertEquals(1, handler.errors.size());
+	}
+	
+	@Test
+	public void testParseStyleAttribute009() throws Exception {
+		//Issue 238
+		String s = ";font-size:83%;";
+		HandlerImpl handler = execStyleAttr(s, false);	
+		assertEquals(1, handler.declarations.size());		
+		assertEquals(0, handler.errors.size());
+	}
+	
+	@Test
+	public void testIssue231() throws Exception {
+		//line numbers, CR+LF lf=\n, cr=\r
+		HandlerImpl handler = execFile("issue231-crlf.css", false);
+		int line = handler.errors.get(0).location.line;
+		int col = handler.errors.get(0).location.col;
+		assertEquals(102, line);		
+		assertEquals(1, col);
+		
+		handler = execFile("issue231-lf.css", false);
+		line = handler.errors.get(0).location.line;
+		col = handler.errors.get(0).location.col;
+		assertEquals(102, line);		
+		assertEquals(1, col);
+	}
+	
+	@Test
+	public void testIssue240_1() throws Exception {
+		HandlerImpl handler = execFile("issue240-1.css", false);
+		assertEquals(0, handler.errors.size());		
+	}
+	
+	@Test
+	public void testIssue240_2() throws Exception {
+		HandlerImpl handler = execFile("issue240-2.css", false);
+		assertEquals(0, handler.errors.size());		
+	}
+		
+	@Test
+	public void testIssue241() throws Exception {
+		HandlerImpl handler = execFile("issue241.css", false);
+		assertEquals(0, handler.errors.size());			
+	}
+	
+	@Test
+	public void testIssue262() throws Exception {
+		HandlerImpl handler = execFile("issue262.css", false);
+		assertEquals(0, handler.errors.size());		
+	}
+	
+	HandlerImpl exec(String css, boolean debug) throws IOException, CssException {		
+		HandlerImpl handler = new HandlerImpl(debug);
+		new CssParser().parse(new StringReader(css), CssLocation.NO_SID, handler, handler);
+		return handler;
+	}
+	
+	HandlerImpl execStyleAttr(String css, boolean debug) throws IOException, CssException {		
+		HandlerImpl handler = new HandlerImpl(debug);
+		new CssParser().parseStyleAttribute(new StringReader(css), CssLocation.NO_SID, handler, handler);
+		return handler;
+	}
+	
+	HandlerImpl execFile(String file, boolean debug) throws IOException, CssException {		
+		HandlerImpl handler = new HandlerImpl(debug);
+		URL fileURL = this.getClass().getResource(CssInputStreamTest.PATH_TEST_BASE + file);
+		CssSource cs = new CssSource(fileURL.toString(), fileURL.openStream());
+		new CssParser().parse(cs.newReader(), CssLocation.NO_SID, handler, handler);
+		cs.getInputStream().close();
+		return handler;
+	}
+	
+	HandlerImpl exec(String css) throws IOException, CssException {
+		return exec(css, false);
+	}
+	
+	HandlerImpl checkBasics(HandlerImpl handler) {
+		return checkBasics(handler, false);
+	}
+	
+	HandlerImpl checkBasics(HandlerImpl handler, boolean expectErrors) {
+		assertTrue("No #startDocument", handler.sawStartDocument);
+		assertTrue("No #endDocument", handler.sawEndDocument);
+		assertTrue("Uneven start+end atrule count: " + handler.startAtRuleCount + ", " + handler.endAtRuleCount, handler.startAtRuleCount == handler.endAtRuleCount);
+		for(CssAtRule atRule : handler.atRules) {
+			assertFalse("No keyword in atrule", Strings.isNullOrEmpty(atRule.getName().get()));
+			assertTrue("No start '@' in atrule", atRule.getName().get().startsWith("@"));
+			assertTrue("Null parameters in atrule", atRule.getComponents() != null);
+		}
+
+		if(handler.errors.size() > 0 && !expectErrors) {
+			for(CssException exc :handler.errors) {
+				System.err.println(exc.getMessage() + ": " + exc.getLocation().getLine() + " " + exc.getErrorCode());
+			}
+		}
+		
+		if(!expectErrors)
+			assertTrue(handler.errors.size() == 0);
+
+		return handler;
+	}
+	
+	static class HandlerImpl implements CssErrorHandler, CssContentHandler {
+		List<CssException> errors = Lists.newArrayList();
+		List<CssAtRule> atRules = Lists.newArrayList();
+		List<CssDeclaration> declarations = Lists.newArrayList();
+		List<List<CssSelector>> selectors = Lists.newArrayList();
+		boolean sawStartDocument = false;
+		boolean sawEndDocument = false;
+		boolean print = false;
+		int startAtRuleCount;
+		int endAtRuleCount;		
+		PrintStream out = System.out;
+		int callbacks;
+		
+		HandlerImpl(boolean printStdOut) {
+			this.print = printStdOut;
+		}
+		
+		public void startDocument() {
+			sawStartDocument = true;	
+			callbacks++;
+			if(print) {
+				out.println("#startDocument");
+			}
+		}
+
+		public void endDocument() {
+			sawEndDocument = true;
+			callbacks++;
+			if(print) {
+				out.println("#endDocument");
+			}	
+		}
+
+		public void startAtRule(CssAtRule atRule) {
+			startAtRuleCount++;		
+			callbacks++;
+			if(print) {
+				out.println("#" + atRule.toString());				
+			}
+			atRules.add(atRule);
+		}
+
+		public void endAtRule(String name) {
+			endAtRuleCount++;
+			callbacks++;
+			if(print) {
+				out.println("#endAtRule");
+			}
+		}
+
+		public void selectors(List<CssSelector> sel) {
+			selectors.add(sel);
+			callbacks++;
+			if(print) {
+				out.println("#selectors: " +  Joiner.on(", ").join(sel));
+			}
+		}
+
+    @Override
+    public void endSelectors(List<CssSelector> sel) {
+      // do nothing
+    }
+
+    public void declaration(CssDeclaration declaration) {
+			declarations.add(declaration);
+			callbacks++;
+			if(print) {
+				out.println("#" + declaration.toString());
+			}
+			
+		}
+
+		public void error(CssException e) throws CssException {
+			errors.add(e);
+			callbacks++;
+			if(print) {
+				out.println("#error: " + e.toString());
+			}
+		}
+		
+	}
+	
+		
+	static final CssLocation loc = new CssLocation(1, 1, 1, CssLocation.NO_SID);
+	static final List<CssScannerException> err = Lists.newArrayList();
+	static final String text = "text";
+	static final CssToken com = new CssToken(Type.COMMENT, loc, text, err);
+	static final CssToken cdo = new CssToken(Type.CDO, loc, "<!--", err);
+	static final CssToken chr = new CssToken(Type.CHAR, loc, "x", err);
+	static final CssToken spc = new CssToken(Type.S, loc, " ", err);
+	
+	@Test
+	public void testTokenList10() throws Exception {		
+		CssTokenList ctl = new CssTokenList();		
+		assertEquals(0, countTokens(ctl.iterator(FILTER_NONE)));
+	}
+	
+	@Test
+	public void testTokenList11() throws Exception {		
+		CssTokenList ctl = new CssTokenList();
+		ctl.add(com);		
+		assertEquals(1, countTokens(ctl.iterator(FILTER_NONE)));
+	}
+		
+	@Test
+	public void testTokenList12() throws Exception {		
+		CssTokenList ctl = new CssTokenList();
+		ctl.add(spc);
+		ctl.add(chr);
+		ctl.add(chr);
+		ctl.add(com);
+		ctl.add(chr);
+		CssTokenIterator iter = ctl.iterator(FILTER_S_CMNT);
+		assertEquals(3, countTokens(iter));
+		assertEquals(4, iter.index());
+	}
+		
+	private int countTokens(CssTokenIterator iter) {
+		int c = 0;
+		while(iter.hasNext()) {
+			iter.next();
+			c++;
+		}
+		return c;
+	}
+	
+	
+	public static String css1 = ".linkparent1 { color: #a00; }" 
+			+ " .linkparent1:hover span " 
+			+"{" 
+			+ "		left: auto;"
+			+ "}  " 
+			+ "/* this hover on the link changes the nested span's left value to auto */"
+			+ " .linkparent1 span " 
+			+ "{" 
+			+ "  	position: absolute; " 
+			+ " 	left: -999em; "
+			+ " 	border: 1px solid white; " 
+			+ "		background: #446;" 
+			+ " 	color: white;"
+			+ " 	font-weight: bold;" 
+			+ " 	padding: 2px 4px;" 
+			+ " 	text-decoration: none; "
+			+ " }  /* tooltip may be custom styled as desired */ " 
+			+ " "
+			+ ".linkparent1:hover { "
+			+ "    background: url(bgfix.gif); " 
+			+ "}";
+
+	public static String css2 = ".gradient-bg {"
+			+ " background-color: #1a82f7; "
+			+ " background-image: url(images/fallback-gradient.png); "
+			+ " background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#2F2727), to(#1a82f7)); "
+			+ " background-image: -webkit-linear-gradient(top, #2F2727, #1a82f7); "
+			+ " background-image:    -moz-linear-gradient(top, #2F2727, #1a82f7); "
+			+ " background-image:     -ms-linear-gradient(top, #2F2727, #1a82f7); "
+			+ " background-image:      -o-linear-gradient(top, #2F2727, #1a82f7); " + "} ";
+
+	public static String css3 = " /* fallback font - size: 4.5MB */ " + " @font-face { "
+			+ " font-family: DroidSans; " + " src: url(DroidSansFallback.ttf);  "
+			+ " /* no range specified, defaults to entire range */  " + " }  " + "   "
+			+ " /* Japanese glyphs - size: 1.2MB */  " + " @font-face {  "
+			+ "   font-family: DroidSans;  " + "   src: url(DroidSansJapanese.ttf);  "
+			+ "   unicode-range: U+3000-9FFF  " + " }  " + "  " //U+ff??
+			+ " /* Latin, Greek, Cyrillic along with some  "
+			+ "   punctuation and symbols - size: 190KB */  " + " @font-face {  "
+			+ "   font-family: DroidSans;  " + "   src: url(DroidSans.ttf);  "
+			+ "   unicode-range: U+000-5FF, U+1e00-1fff, U+2000-2300;  " + " }"
+			+ " *:lang(ja-jp) { font: 900 14pt/16pt \"Heisei Mincho W9\", serif; } "
+			+ " *:lang(zh-tw) { font: 800 14pt/16.5pt \"Li Sung\", serif; } ";
+	
+	public static String css4 = "E {" +
+	"background-image: url(flower.png), url(ball.png), url(grass1.png);"
+	+"background-position: center center, 20% 80%, top left;"
+	+"background-origin: border-box, content-box, border-box;"
+	+"background-repeat: no-repeat, no-repeat, no-repeat; }";
+	
+	public static String css5 = 
+			 "body"
+					+ "{ "
+					+ "	font-family: \"Chaparral Pro\", serif;"
+					+ "	line-height: 1.5;"
+					+ "}"
+					+ ""
+					+ "p"
+					+ "{ "
+					+ "	margin: 0px;"
+					+ "	text-align: justify;"
+					+ "}"
+					+ ""
+					+ ".cp"
+					+ "{"
+					+ "	text-indent: 1.5em;"
+					+ "}"
+					+ ""
+					+ ".pull-quote-cont"
+					+ "{"
+					+ "	float: right;"
+					+ "	clear: right;"
+					+ "	max-width: 28em;"
+					+ "	line-height: 1.25;"
+					+ "	margin-bottom: 1em;"
+					+ "	background-color: #FFBBBB;"
+					+ "}"
+					+ ""
+					+ ".pull-quote"
+					+ "{"
+					+ "	font-family: \"Menlo\", sans-serif;"
+					+ "	font-size: 1.5em;"
+					+ "	font-variant: small-caps;"
+					+ "	text-align: right;"
+					+ "}"
+					+ ""
+					+ ".sidebar-cont"
+					+ "{"
+					+ "	float: right;"
+					+ "	clear: right;"
+					+ "	width: 30em;"
+					+ "}"
+					+ ""
+					+ ".sidebar-cont img"
+					+ "{"
+					+ "	width: 100%;"
+					+ "}"
+					+ ""
+					+ ".header"
+					+ "{"
+					+ "	background: black;"
+					+ "	color: white;"
+					+ "	padding: 1em;"
+					+ "	font-family: \"Menlo\", sans-serif;"
+					+ "}"
+					+ ""
+					+ "@-epubx-page-template"
+					+ "{"
+					+ ""
+					+ ".header"
+					+ "{"
+					+ "	-epubx-flow-options: static;"
+					+ "	-epubx-flow-into: top;"
+					+ "}"
+					+ ""
+					+ ".pull-quote-cont"
+					+ "{"
+					+ "	float: none;"
+					+ "	clear: none;"
+					+ "	width: 29em;"
+					+ "	padding: 1em 3em 1em 2em;"
+					+ "	-epubx-flow-into: pull-quote;"
+					+ "	-epubx-flow-options: last exclusive;"
+					+ "	-epubx-flow-linger: 2;"
+					+ "}"
+					+ ""
+					+ ".sidebar-cont"
+					+ "{ "
+					+ "	float: none;"
+					+ "	clear: none;"
+					+ "	-epubx-flow-into: sidebar;"
+					+ "}"
+					+ ""
+					+ ".pict"
+					+ "{"
+					+ "	-epubx-flow-into: pict;"
+					+ "	display: block;"
+					+ "	margin: 15px;"
+					+ "}"
+					+ ""
+					+ ".kill-pull-quote"
+					+ "{"
+					+ "	-epubx-flow-into: pull-quote;"
+					+ "	-epubx-flow-options: exclusive;"
+					+ "	-epubx-flow-priority: 2;"
+					+ "}"
+					+ ""
+					+ "@media all and (min-width: 60em) and (min-height: 50em)"
+					+ "{"
+					+ ""
+					+ "@-epubx-page-master sidebar-width-pull-quote"
+					+ "{	"
+					+ "	@-epubx-partition"
+					+ "	{"
+					+ "		-epubx-flow-from: body;"
+					+ "		overflow: visible;"
+					+ "		margin-left: 3em;"
+					+ "		margin-right: 3em;"
+					+ "		margin-bottom: 0.5em;"
+					+ "		top: 4.5em;"
+					+ "		column-width: 20em;"
+					+ "		column-gap: 1.3em;"
+					+ "	}	"
+					+ "	"
+					+ "	@-epubx-partition"
+					+ "	{"
+					+ "		-epubx-flow-from: pull-quote;"
+					+ "		-epubx-min-page-width: 35em;"
+					+ "		top: 50%;"
+					+ "		margin: 2em 1em 0.5em 0px;"
+					+ "		width: 33em;"
+					+ "		left: 0px;"
+					+ "	}"
+					+ "	"
+					+ "	@-epubx-partition"
+					+ "	{"
+					+ "		-epubx-flow-from: sidebar;"
+					+ "		-epubx-required: true;"
+					+ "		-epubx-min-page-width: 40em;"
+					+ "		top: 3.5em;"
+					+ "		margin: 0px 0px 0.5em 1em;"
+					+ "		width: 30em;"
+					+ "		right: 0px;"
+					+ "	}"
+					+ ""
+					+ "	@-epubx-partition"
+					+ "	{"
+					+ "		-epubx-flow-from: top;"
+					+ "		background: black;"
+					+ "		height: 3.5em;"
+					+ "		z-index: 1;"
+					+ "	}"
+					+ "	"
+					+ "	"
+					+ "}"
+					+ ""
+					+ "}"
+					+ ""
+					+ "@-epubx-region .black"
+					+ "{"
+					+ "	p { color: white; }"
+					+ "}"
+					+ ""
+					+ ""
+					+ "@-epubx-page-master yin-yang"
+					+ "{"
+					+ "	@-epubx-partition"
+					+ "	{"
+					+ "		-epubx-flow-from: body;"
+					+ "		padding-right: 3em;"
+					+ "		padding-left: 1em;"
+					+ "		left: 50%;"
+					+ "		padding-top: 1em;"
+					+ "		padding-bottom: 1em;"
+					+ "		column-width: 20em;"
+					+ "		column-gap: 1.3em;"
+					+ "	}"
+					+ "	"
+					+ "	@-epubx-partition class(black)"
+					+ "	{"
+					+ "		-epubx-flow-from: body;"
+					+ "		padding-left: 3em;"
+					+ "		padding-right: 1em;"
+					+ "		padding-top: 1em;"
+					+ "		padding-bottom: 1em;"
+					+ "		right: 50%;"
+					+ "		background: black;"
+					+ "		column-width: 20em;"
+					+ "		column-gap: 1.3em;"
+					+ "	}"
+					+ "		"
+					+ "	@-epubx-partition"
+					+ "	{"
+					+ "		-epubx-required: true;"
+					+ "		-epubx-flow-from: pict;"
+					+ "		-epubx-shape-outside: polygon(50%,0%, 34.5%,2.4%, 20.6%,9.5%, 9.5%,20.6%, 2.4%,34.5%, 0%,50%, 2.4%,65.5%, 9.5%,79.4%, 20.6%,90.5%, 34.5%,97.6%, 50%,100%, 65.5%,97.6%, 79.4%,90.5%, 90.5%,79.4%, 97.6%,65.5%, 100%,50%, 97.6%,34.5%, 90.5%,20.6%, 79.4%,9.5%, 65.5%,2.4%); "
+					+ "		top: -epubx-expr(50% - 100px); /* 50% - 100px */"
+					+ "		left: -epubx-expr(f oo);		/* 50% - 100px */		"
+					+ "		width: 200px;"
+					+ "		height: 200px;"
+					+ "		z-index: 1;"
+					+ "	}"
+					+ "}"
+					+ ""
+					+ "@-epubx-page-master sidebar-only"
+					+ "{	"
+					+ "	@-epubx-partition"
+					+ "	{"
+					+ "		-epubx-flow-from: body;"
+					+ "		overflow: visible;"
+					+ "		margin-left: 3em;"
+					+ "		margin-right: 3em;"
+					+ "		margin-bottom: 0.5em;"
+					+ "		top: 4.5em;"
+					+ "		column-width: 20em;"
+					+ "		column-gap: 1.3em;"
+					+ "	}	"
+					+ "	"
+					+ "	@-epubx-partition"
+					+ "	{"
+					+ "		-epubx-flow-from: sidebar;"
+					+ "		-epubx-required: true;"
+					+ "		-epubx-min-page-width: 40em;"
+					+ "		top: 3.5em;"
+					+ "		margin: 0px 0px 0.5em 1em;"
+					+ "		width: 30em;"
+					+ "		right: 0px;"
+					+ "	}"
+					+ ""
+					+ "	@-epubx-partition"
+					+ "	{"
+					+ "		-epubx-flow-from: top;"
+					+ "		background: black;"
+					+ "		height: 3.5em;"
+					+ "		z-index: 1;"
+					+ "	}"
+					+ "}"
+					+ ""
+					+ "@-epubx-page-master pull-quote-only"
+					+ "{	"
+					+ "	"
+					+ "	@-epubx-partition"
+					+ "	{"
+					+ "		-epubx-flow-from: body;"
+					+ "		overflow: visible;"
+					+ "		margin-left: 3em;"
+					+ "		margin-right: 3em;"
+					+ "		margin-bottom: 0.5em;"
+					+ "		top: 4.5em;"
+					+ "		column-width: 20em;"
+					+ "		column-gap: 1.3em;"
+					+ "	}"
+					+ "		"
+					+ "	@-epubx-partition"
+					+ "	{"
+					+ "		-epubx-flow-from: pull-quote;"
+					+ "		-epubx-min-page-width: 35em;"
+					+ "		top: 40%;"
+					+ "		margin: 2em 0px 0.5em 1em;"
+					+ "		width: 33em;"
+					+ "		right: 0px;"
+					+ "	}"
+					+ ""
+					+ "	@-epubx-partition"
+					+ "	{"
+					+ "		-epubx-flow-from: top;"
+					+ "		background: black;"
+					+ "		height: 3.5em;"
+					+ "	}"
+					+ "}"
+					+ "}";
+	
+	public static String css6 = 
+			"p { color: red; font-size: 12pt } \n "
+			+ "a:link { color: blue } \n "
+			+" p::first-line { color: blue } \n "
+			+" html|*:not(:link):not(:visited) { float: right; } \n"
+			+" *|*:not(*) { float: right; } \n"
+			+" img:nth-of-type(2n+1) { float: right; } \n"
+			+" body>h2:nth-of-type(n+2):nth-last-of-type(n+2) { float: right; } \n"
+			+" body>h2:not(:first-of-type):not(:last-of-type) { float: right; } \n";
+	
+	public static String css7 = "@counter-style disc { system: cyclic; symbols: \2022; /* • */ suffix: ''; } \n " +
+			"@counter-style circle { system: cyclic; symbols: \25E6; /* ◦ */ suffix: ''; } \n " +
+			"@counter-style square { system: cyclic; symbols: \25FE; /* ◾ */ suffix: ''; }"; 
+	
+}
diff --git a/src/test/java/org/idpf/epubcheck/util/css/CssScannerTest.java b/src/test/java/org/idpf/epubcheck/util/css/CssScannerTest.java
new file mode 100644
index 0000000..bd0da76
--- /dev/null
+++ b/src/test/java/org/idpf/epubcheck/util/css/CssScannerTest.java
@@ -0,0 +1,1909 @@
+package org.idpf.epubcheck.util.css;
+
+
+import com.adobe.epubcheck.util.outWriter;
+import com.google.common.collect.Lists;
+import org.idpf.epubcheck.util.css.CssExceptions.CssErrorCode;
+import org.idpf.epubcheck.util.css.CssExceptions.CssException;
+import org.idpf.epubcheck.util.css.CssToken.CssTokenConsumer;
+import org.idpf.epubcheck.util.css.CssToken.Type;
+import org.junit.Test;
+
+import java.io.StringReader;
+import java.util.List;
+
+import static org.junit.Assert.*;
+
+public class CssScannerTest {
+	
+	@Test
+	public void testLexerNull() throws Exception {
+		String s = "";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(0, tokens.size());
+		assertEquals(0, exceptions.size());			
+	}
+	
+	@Test
+	public void testLexerSpace_10() throws Exception {
+		String s = "  ";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.S, tokens.get(0).getType());		
+	}
+	
+	@Test
+	public void testLexerSpace_20() throws Exception {
+		String s = " \n \t \f ";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.S, tokens.get(0).getType());		
+	}
+	
+	@Test
+	public void testLexerCDOCDC_10() throws Exception {
+		String s = "<!--";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.CDO, tokens.get(0).getType());		
+	}
+	
+	@Test
+	public void testLexerCDOCDC_20() throws Exception {
+		String s = "-->";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.CDC, tokens.get(0).getType());		
+	}
+	
+	@Test
+	public void testLexerCDOCDC_30() throws Exception {
+		String s = "<!--/*c*/-->";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(3, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.CDO, tokens.get(0).getType());
+		assertEquals(CssToken.Type.COMMENT, tokens.get(1).getType());
+		assertEquals(1, tokens.get(1).getChars().length());
+		assertEquals(CssToken.Type.CDC, tokens.get(2).getType());
+	}
+	
+	@Test
+	public void testLexerCDOCDC_40() throws Exception {		
+		/* 
+		 * http://www.w3.org/TR/CSS2/syndata.html#tokenization:
+		 * 
+		 * For example, the rule of the longest match means that 
+		 * "red-->" is tokenized as the IDENT "red--" followed by 
+		 * the DELIM ">", rather than as an IDENT followed by a CDC.
+		 * 
+		 */
+		String s = "red-->";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(2, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.IDENT, tokens.get(0).getType());
+		assertTrue(tokens.get(0).getChars().equals("red--"));
+		assertEquals(CssToken.Type.CHAR, tokens.get(1).getType());
+		assertTrue(tokens.get(1).getChars().equals(">"));
+	}
+		
+	@Test
+	public void testLexerString_10() throws Exception {
+		String s = "'string'";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.STRING, tokens.get(0).getType());
+		assertEquals(6, tokens.get(0).getChars().length());
+	}
+	
+	@Test
+	public void testLexerString_20() throws Exception {
+		String s = "\"string\"";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.STRING, tokens.get(0).getType());
+		assertEquals(6, tokens.get(0).getChars().length());
+	}
+	
+	@Test
+	public void testLexerString_30() throws Exception {
+		String s = "''";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.STRING, tokens.get(0).getType());
+		assertEquals(0, tokens.get(0).getChars().length());
+	}
+	
+	@Test
+	public void testLexerString_40() throws Exception {
+		String s = "\"string string\"";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.STRING, tokens.get(0).getType());
+		assertEquals(13, tokens.get(0).getChars().length());
+	}
+	
+	@Test
+	public void testLexerString_50() throws Exception {
+		// literal nl not allowed
+		String s = "\"string\nstring\"";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(1, exceptions.size());				
+	}
+	
+	/*
+	User agents must close strings upon reaching the end of a line 
+	(i.e., before an unescaped line feed, carriage return or form feed character), 
+	but then drop the construct (declaration or rule) in which the string was found. 
+	For example:
+	      p {
+	        color: green;
+	        font-family: 'Courier New Times
+	        color: red;
+	        color: green;
+	      }
+	...would be treated the same as:
+	      p { color: green; color: green; }
+	...because the second declaration (from 'font-family' to the 
+	semicolon after 'color: red') is invalid and is dropped.
+	*/
+	
+	@Test
+	public void testLexerString_51() throws Exception {
+		// literal nl not allowed; check forwarding as per 2.1
+		// note that the lexer keeps the erronuous property, 
+		// but it has an error flag
+		String s = "p { color: green; font-family: 'Courier New Times\n color: red; color: green; }";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(15, stripTokens(Type.S, tokens).size());
+		assertEquals(1, exceptions.size());				
+	}
+	
+	@Test
+	public void testLexerComment_10() throws Exception {
+		String s = "/* comment */";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.COMMENT, tokens.get(0).getType());
+		assertEquals(9, tokens.get(0).getChars().length());
+	}
+	
+	@Test
+	public void testLexerComment_15() throws Exception {
+		String s = "/**/";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.COMMENT, tokens.get(0).getType());
+		assertEquals(0, tokens.get(0).getChars().length());
+	}
+	
+//http://test.csswg.org/suites/css2.1/20110323/xhtml1/comments-002.xht	
+//    <meta name="assert" content="Comments cannot be nested." />
+//    <style type="text/css">
+//        div
+//        {
+//            /*/**/color:green;*/
+//        }
+//    </style>
+//</head>
+//<body>
+//    <p>Test passes if the "Filler Text" below is green.</p>
+//    <div>Filler Text</div>
+//</body>
+	
+	@Test
+	public void testLexerComment_16() throws Exception {
+		String s = "div { /*/**/color:green;*/}";		
+		List<CssToken> tokens = execScan(s);
+		//the scanner just closes at the first occurence
+		//of comment close; error will not be detected
+		//until grammar level		
+		assertEquals(1, getTokenTypeCount(Type.COMMENT, tokens));
+		assertTrue(hasIdent(tokens, "color"));
+		assertTrue(hasIdent(tokens, "green"));
+		assertEquals(Type.CHAR, tokens.get(tokens.size()-2).getType());
+		assertEquals(Type.CHAR, tokens.get(tokens.size()-3).getType());
+	}
+	
+	
+	
+//http://test.csswg.org/suites/css2.1/20110323/xhtml1/comments-003.xht
+//    <meta name="flags" content="invalid" />
+//    <meta name="assert" content="SGML comment delimiters do not delimit CSS comments." />
+//    <style type="text/css">
+//        <![CDATA[
+//        div
+//        {
+//          color: green;
+//        }
+//        <!--
+//        /*
+//        #div1
+//        {
+//            color: red;
+//        }
+//        -->
+//        #div1
+//        {
+//            color: red;
+//        }
+//        ]]>
+//    </style>
+//</head>
+//<body>
+//    <p>Test passes if the "Filler Text" below is green.</p>
+//    <div id="div1">Filler Text</div>
+//</body>
+		
+	@Test
+	public void testLexerComment_17() throws Exception {
+		String s = "div {color: green;}<!--/*#div1{color: red;}-->#div1{color: red;}";		
+		List<CssToken> tokens = execScan(s);
+		assertFalse(hasIdent(tokens, "red"));
+	}
+	
+	
+	
+	
+//http://test.csswg.org/suites/css2.1/20110323/xhtml1/comments-004.xht
+//    <meta name="flags" content="invalid" />
+//    <meta name="assert" content="Comments that are invalid are ignored." />
+//    <style type="text/css">
+//        div
+//        {
+//            /*/*/color: green;
+//        }
+//    </style>
+//</head>
+//<body>
+//    <p>Test passes if the "Filler Text" below is green.</p>
+//    <div>Filler Text</div>
+//</body>
+
+	//TODO ignored??
+	
+//http://test.csswg.org/suites/css2.1/20110323/xhtml1/comments-005.xht
+//    <meta name="flags" content="invalid" />
+//    <meta name="assert" content="A slash '/' escaped with a backslash will remove its special meaning." />
+//    <style type="text/css">
+//        div
+//        {
+//            /* *\/*/color: green;
+//        }
+//    </style>
+//</head>
+//<body>
+//    <p>Test passes if the "Filler Text" below is green.</p>
+//    <div>Filler Text</div>
+//</body>
+		
+	@Test
+	public void testLexerComment_18() throws Exception {
+		//TODO this is a grammar-level test
+		String s = "div{/* *\\/*/color: green;}";		
+		List<CssToken> tokens = execScan(s);
+		assertEquals(0, exceptions.size());	
+		assertEquals(1, getTokenTypeCount(Type.COMMENT, tokens));
+		assertEquals(" *\\/", getFirstTokenOfType(Type.COMMENT, tokens).getChars());
+		assertTrue(hasIdent(tokens, "color"));
+		assertTrue(hasIdent(tokens, "green"));
+	}
+	
+	
+	
+	
+//http://test.csswg.org/suites/css2.1/20110323/xhtml1/comments-006.xht
+//	<meta name="assert" content="A star '*' escaped with a backslash will not remove its special meaning." />
+//    <style type="text/css">
+//        *
+//        {
+//            color: green;
+//        }
+//        p
+//        {
+//            color: black;
+//        }
+//        div
+//        {
+//            /*\*/*/color: red;
+//        }
+//    </style>
+//</head>
+//<body>
+//    <p>Test passes if the "Filler Text" below is green.</p>
+//    <div>Filler Text</div>
+//</body>
+//
+	
+	//TODO this is a grammar-level recovery issue
+	
+	
+//http://test.csswg.org/suites/css2.1/20110323/xhtml1/comments-008.xht
+//    <meta name="flags" content="invalid" />
+//    <meta name="assert" content="Escaping a slash '/' for an opening comment makes the comment invalid." />
+//    <style type="text/css">
+//        div
+//        {
+//            \/*;color: green;*/
+//        }
+//    </style>
+//</head>
+//<body>
+//    <p>Test passes if the "Filler Text" below is green.</p>
+//    <div>Filler Text</div>
+//</body>
+	
+	@Test
+	public void testLexerComment_20() throws Exception {
+		String s = "div{\\/*;color: green;*/}";		
+		List<CssToken> tokens = execScan(s);		
+		assertTrue(hasIdent(tokens, "color"));
+		assertTrue(hasIdent(tokens, "green"));
+	}
+	
+//http://test.csswg.org/suites/css2.1/20110323/xhtml1/comments-009.xht
+//    <meta name="flags" content="invalid" />
+//    <meta name="assert" content="Escaping a star '*' for an opening comment makes the comment invalid." />
+//    <style type="text/css">
+//        div
+//        {
+//            /\*;color: green;*/
+//        }
+//    </style>
+	
+		
+	@Test
+	public void testLexerComment_21() throws Exception {
+		String s = "div{/\\*;color: green;*/}";		
+		List<CssToken> tokens = execScan(s);		
+		assertTrue(hasIdent(tokens, "color"));
+		assertTrue(hasIdent(tokens, "green"));
+	}
+	
+	@Test
+	public void testLexerSpaceAndComment_10() throws Exception {
+		String s = "  /* c1 */  /* c2 */\t";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(5, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.S, tokens.get(0).getType());
+		assertEquals(CssToken.Type.COMMENT, tokens.get(1).getType());
+		assertEquals(CssToken.Type.S, tokens.get(2).getType());
+		assertEquals(CssToken.Type.COMMENT, tokens.get(3).getType());
+		assertEquals(CssToken.Type.S, tokens.get(4).getType());
+	}
+	
+	@Test
+	public void testLexerIdent_10() throws Exception {
+		String s = "ident";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.IDENT, tokens.get(0).getType());	
+		assertEquals("ident", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerIdent_20() throws Exception {
+		String s = "-ident";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.IDENT, tokens.get(0).getType());
+		assertEquals("-ident", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerIdent_21() throws Exception {
+		String s = "-ident-ident";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.IDENT, tokens.get(0).getType());
+		assertEquals("-ident-ident", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerIdent_22() throws Exception {
+		String s = "a";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.IDENT, tokens.get(0).getType());
+		assertEquals("a", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerIdent_23() throws Exception {
+		String s = "-a";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.IDENT, tokens.get(0).getType());
+		assertEquals("-a", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerAtKeyword_10() throws Exception {
+		String s = "@ident";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.ATKEYWORD, tokens.get(0).getType());	
+		assertEquals("@ident", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerAtKeyword_20() throws Exception {
+		String s = "@-ident";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.ATKEYWORD, tokens.get(0).getType());	
+		assertEquals("@-ident", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerAtKeyword_30() throws Exception {
+		String s = "@z";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.ATKEYWORD, tokens.get(0).getType());	
+		assertEquals("@z", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerAtKeyword_40() throws Exception {
+		String s = "@- ";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(3, tokens.size());		
+		assertTrue(CssToken.Type.CHAR == tokens.get(0).getType());
+		assertTrue(CssToken.Type.CHAR == tokens.get(1).getType());
+		assertTrue(CssToken.Type.S == tokens.get(2).getType());
+	}
+	
+	@Test
+	public void testLexerAtKeyword_41() throws Exception {
+		String s = "@-";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(2, tokens.size());		
+		assertTrue(CssToken.Type.CHAR == tokens.get(0).getType());
+		assertTrue(CssToken.Type.CHAR == tokens.get(1).getType());			
+	}
+	
+	@Test
+	public void testLexerAtKeyword_42() throws Exception {
+		String s = "@\\zoo";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.ATKEYWORD, tokens.get(0).getType());	
+		assertEquals("@zoo", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerAtKeyword_43() throws Exception {
+		String s = "@zo\\o";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.ATKEYWORD, tokens.get(0).getType());	
+		assertEquals("@zoo", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerUri_10() throws Exception {
+		String s = "url(\"foo\")";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.URI, tokens.get(0).getType());	
+		assertEquals("url('foo')", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerUri_11() throws Exception {
+		String s = "url(  \"foo\"  )";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.URI, tokens.get(0).getType());	
+		assertEquals("url('foo')", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerUri_20() throws Exception {
+		String s = "url('foo')";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.URI, tokens.get(0).getType());	
+		assertEquals("url('foo')", tokens.get(0).getChars());
+	}
+	
+	
+	@Test
+	public void testLexerUri_30() throws Exception {
+		String s = "url(foo)";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.URI, tokens.get(0).getType());	
+		assertEquals("url(foo)", tokens.get(0).getChars());
+	}
+	
+	
+	@Test
+	public void testLexerUri_31() throws Exception {
+		String s = "url(  foo  )";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.URI, tokens.get(0).getType());	
+		assertEquals("url(foo)", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerUri_40() throws Exception {
+		String s = "UrL(fOo)";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.URI, tokens.get(0).getType());	
+		assertEquals("url(fOo)", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerUri_50() throws Exception {		
+//		Note that COMMENT tokens cannot occur within other tokens: thus, 
+//      'url(/*x*/pic.png)' denotes the URI '/*x*/pic.png', not 'pic.png'. 
+		
+		String s = "url(/*x*/pic.png)";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.URI, tokens.get(0).getType());	
+		assertEquals("url(/*x*/pic.png)", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerUri_51() throws Exception {		
+//		Note that COMMENT tokens cannot occur within other tokens: thus, 
+//      'url(/*x*/pic.png)' denotes the URI '/*x*/pic.png', not 'pic.png'. 
+		
+		String s = "url(pic/*x*/.png)";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.URI, tokens.get(0).getType());	
+		assertEquals("url(pic/*x*/.png)", tokens.get(0).getChars());
+	}
+
+//	"url("{w}{string}{w}")" {return URI;}
+//	"url("{w}{url}{w}")"    {return URI;}
+//	baduri1         url\({w}([!#$%&*-\[\]-~]|{nonascii}|{escape})*{w}
+//	baduri2         url\({w}{string}{w}
+//	baduri3         url\({w}{badstring}
+//	badstring       {badstring1}|{badstring2}
+//	badstring1      \"([^\n\r\f\\"]|\\{nl}|{escape})*\\?
+//	badstring2      \'([^\n\r\f\\']|\\{nl}|{escape})*\\?	
+	
+	@Test
+	public void testLexerUriBad_10() throws Exception {
+		String s = "url(pic.png";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(1, exceptions.size());		
+	}
+	
+	@Test
+	public void testLexerUriBad_11() throws Exception {
+		String s = "url('pic.png";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(1, exceptions.size());		
+	}
+	
+	@Test
+	public void testLexerUriBad_12() throws Exception {
+		// ')' is lexically ok in the string type
+		// therefore we get premature eof
+		String s = "url('pic.png) foo";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(1, exceptions.size());		
+	}
+	
+	@Test
+	public void testLexerUriBad_13() throws Exception {		
+		String s = "url('pic.png' foo";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(2, tokens.size());
+		assertEquals(1, exceptions.size());		
+	}
+	
+	@Test
+	public void testLexerFunction_10() throws Exception {
+		String s = "ident(";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.FUNCTION, tokens.get(0).getType());	
+		assertEquals("ident(", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerNum_10() throws Exception {
+		String s = "1";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.INTEGER, tokens.get(0).getType());	
+		assertEquals("1", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerNum_11() throws Exception {
+		String s = "1.1";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.NUMBER, tokens.get(0).getType());	
+		assertEquals("1.1", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerNum_12() throws Exception {
+		String s = "1.11";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.NUMBER, tokens.get(0).getType());	
+		assertEquals("1.11", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerNum_13() throws Exception {
+		String s = ".1";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.NUMBER, tokens.get(0).getType());	
+		assertEquals(".1", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerNum_14() throws Exception {
+		String s = ".11";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.NUMBER, tokens.get(0).getType());	
+		assertEquals(".11", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerNum_15() throws Exception {
+		String s = "1.";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(2, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.INTEGER, tokens.get(0).getType());
+		assertEquals(CssToken.Type.CHAR, tokens.get(1).getType());
+		
+	}
+	
+	@Test
+	public void testLexerNum_16() throws Exception {
+		String s = ".";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.CHAR, tokens.get(0).getType());		
+	}
+
+  @Test
+  public void testLexerQnty_10() throws Exception {
+    String s = "10em";
+
+    List<CssToken> tokens = execScan(s);
+    assertEquals(1, tokens.size());
+    assertEquals(0, exceptions.size());
+    assertEquals(CssToken.Type.QNTY_EMS, tokens.get(0).getType());
+    assertEquals("10em", tokens.get(0).getChars());
+  }
+
+  @Test
+  public void testLexerQnty_10REM() throws Exception {
+    String s = "10rem";
+
+    List<CssToken> tokens = execScan(s);
+    assertEquals(1, tokens.size());
+    assertEquals(0, exceptions.size());
+    assertEquals(CssToken.Type.QNTY_REMS, tokens.get(0).getType());
+    assertEquals("10rem", tokens.get(0).getChars());
+  }
+
+  @Test
+	public void testLexerQnty_11() throws Exception {
+		String s = "10ex";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.QNTY_EXS, tokens.get(0).getType());
+		assertEquals("10ex", tokens.get(0).getChars());				
+	}
+	
+	@Test
+	public void testLexerQnty_12() throws Exception {
+		String s = "10%";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());		
+		assertEquals(CssToken.Type.QNTY_PERCENTAGE, tokens.get(0).getType());
+		assertEquals("10%", tokens.get(0).getChars());				
+	}
+	
+	@Test
+	public void testLexerQnty_13() throws Exception {
+		// QNTY_LENGTH, {num}cm, {num}px, {num}mm, {num}in, {num}pt, {num}pc
+		String s = "10cm 10px 10mm 10in 10pt 10pc";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(11, tokens.size());
+		assertEquals(0, exceptions.size());
+		int c = 0;
+		for(CssToken tk : tokens) {
+			if(tk.getType() == CssToken.Type.QNTY_LENGTH) {
+				c++;
+				assertEquals(4, tk.getChars().length());
+			}
+		}
+		assertEquals(6, c);						
+	}
+	
+	@Test
+	public void testLexerQnty_14() throws Exception {
+		// QNTY_ANGLE, {num}deg, {num}rad, {num}grad
+		String s = "10deg 10rad 10grad";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(5, tokens.size());
+		assertEquals(0, exceptions.size());
+		int c = 0;
+		for(CssToken tk : tokens) {
+			if(tk.getType() == CssToken.Type.QNTY_ANGLE) {
+				c++;
+			}
+		}
+		assertEquals(3, c);						
+	}
+	
+	@Test
+	public void testLexerQnty_15() throws Exception {
+		// QNTY_TIME {num}ms, {num}s
+		String s = "10ms 10s";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(3, tokens.size());
+		assertEquals(0, exceptions.size());
+		int c = 0;
+		for(CssToken tk : tokens) {
+			if(tk.getType() == CssToken.Type.QNTY_TIME) {
+				c++;
+			}
+		}
+		assertEquals(2, c);						
+	}
+	
+	@Test
+	public void testLexerQnty_16() throws Exception {
+		// FREQ {num}Hz, {num}kHz
+		String s = "10hz 10khz";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(3, tokens.size());
+		assertEquals(0, exceptions.size());
+		int c = 0;
+		for(CssToken tk : tokens) {
+			if(tk.getType() == CssToken.Type.QNTY_FREQ) {
+				c++;
+			}
+		}
+		assertEquals(2, c);						
+	}
+	
+	@Test
+	public void testLexerQnty_17() throws Exception {
+		// QNTY_RESOLUTION	{num}{D}{P}{I}, {num}{D}{P}{C}{M}
+		String s = "10DPI 10dpcm";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(3, tokens.size());
+		assertEquals(0, exceptions.size());
+		int c = 0;
+		for(CssToken tk : tokens) {
+			if(tk.getType() == CssToken.Type.QNTY_RESOLUTION) {
+				c++;
+			}
+		}
+		assertEquals(2, c);						
+	}
+	
+	@Test
+	public void testLexerQnty_20() throws Exception {
+		//{num}{ident}
+		String s = "10foo";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.QNTY_DIMEN, tokens.get(0).getType());
+		assertEquals("10foo", tokens.get(0).getChars());								
+	}
+	
+	@Test
+	public void testLexerQnty_21() throws Exception {
+		//{num}{ident}
+		String s = "10emFOO";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.QNTY_DIMEN, tokens.get(0).getType());
+		assertEquals("10emFOO", tokens.get(0).getChars());
+								
+	}
+	
+	@Test
+	public void testLexerQnty_22() throws Exception {
+		String s = "10em10em";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.QNTY_DIMEN, tokens.get(0).getType());
+	}
+	
+	@Test
+	public void testLexerQnty_23() throws Exception {
+		String s = "10emFoo,10emBAR,10emBIP";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(5, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.QNTY_DIMEN, tokens.get(0).getType());
+		assertEquals(CssToken.Type.QNTY_DIMEN, tokens.get(2).getType());
+		assertEquals(CssToken.Type.QNTY_DIMEN, tokens.get(4).getType());
+		assertEquals(CssToken.Type.CHAR, tokens.get(1).getType());
+		assertEquals(CssToken.Type.CHAR, tokens.get(3).getType());
+		
+	}
+	
+	@Test
+	public void testLexerQnty_24() throws Exception {
+		String s = "10emX";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.QNTY_DIMEN, tokens.get(0).getType());		
+	}
+	
+	@Test
+	public void testLexerQnty_25() throws Exception {
+		String s = "10\\px";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.QNTY_LENGTH, tokens.get(0).getType());
+		assertEquals("10px", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerQnty_26() throws Exception {
+		String s = "10e\\m";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.QNTY_EMS, tokens.get(0).getType());		
+	}
+	
+	@Test
+	public void testLexerQnty_27() throws Exception {
+		String s = "1 10 -10 +10 +.10 -.10";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(6, stripTokens(Type.S, tokens).size());
+		assertEquals(0, exceptions.size());
+		assertEquals(2, getTokenTypeCount(Type.NUMBER, tokens));
+		assertEquals(4, getTokenTypeCount(Type.INTEGER, tokens));
+	}
+
+  @Test
+  public void testLexerQnty_28REM() throws Exception {
+    String s = "1rem 10rem -10rem +10rem +.10rem -.10rem";
+    List<CssToken> tokens = execScan(s);
+    assertEquals(6, stripTokens(Type.S, tokens).size());
+    assertEquals(0, exceptions.size());
+    assertEquals(6, getTokenTypeCount(Type.QNTY_REMS, tokens));
+  }
+  @Test
+  public void testLexerQnty_28() throws Exception {
+    String s = "1em 10em -10em +10em +.10em -.10em";
+    List<CssToken> tokens = execScan(s);
+    assertEquals(6, stripTokens(Type.S, tokens).size());
+    assertEquals(0, exceptions.size());
+    assertEquals(6, getTokenTypeCount(Type.QNTY_EMS, tokens));
+  }
+
+
+  @Test
+	public void testLexerQnty_29() throws Exception {
+		String s = "1em,10em,-10em,+10em,+.10em,-.10em";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(6, stripTokens(Type.CHAR, tokens).size());
+		assertEquals(0, exceptions.size());
+		assertEquals(6, getTokenTypeCount(Type.QNTY_EMS, tokens));
+	}
+	
+	@Test
+	public void testLexerQnty_30() throws Exception {
+		String s = "1,10,-10,+10,+.10,-.10";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(6, stripTokens(Type.CHAR, tokens).size());
+		assertEquals(0, exceptions.size());
+		assertEquals(2, getTokenTypeCount(Type.NUMBER, tokens));
+		assertEquals(4, getTokenTypeCount(Type.INTEGER, tokens));
+	}
+	
+	
+	@Test
+	public void testLexerQnty_40() throws Exception {
+		//all lengths in 3
+		String s = "1vmin 1cm 1px 1mm 1in 1pt 1pc 1ch 1vw 1vh";
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(10, stripTokens(Type.S, tokens).size());
+		assertEquals(0, exceptions.size());
+		assertEquals(10, getTokenTypeCount(Type.QNTY_LENGTH, tokens));
+	}
+	@Test
+	public void testLexerQnty_41() throws Exception {
+		//all angles in 3
+		String s = "1grad 1turn 1deg 1rad";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(4, stripTokens(Type.S, tokens).size());
+		assertEquals(0, exceptions.size());
+		assertEquals(4, getTokenTypeCount(Type.QNTY_ANGLE, tokens));		
+	}
+	
+	@Test
+	public void testLexerQnty_42() throws Exception {
+		//all resolution in 3
+		String s = "1dpcm 1dppx 1dpi";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(3, stripTokens(Type.S, tokens).size());
+		assertEquals(0, exceptions.size());
+		assertEquals(3, getTokenTypeCount(Type.QNTY_RESOLUTION, tokens));		
+	}
+
+	@Test
+	public void testLexerMQ_10() throws Exception {
+		String s = "only";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.ONLY, tokens.get(0).getType());
+		assertEquals("only", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerMQ_11() throws Exception {
+		String s = "ONLy";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.ONLY, tokens.get(0).getType());
+		assertEquals("only", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerMQ_12() throws Exception {
+		String s = "onlyFOO";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.IDENT, tokens.get(0).getType());				
+	}
+	
+	@Test
+	public void testLexerMQ_20() throws Exception {
+		String s = "not";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.NOT, tokens.get(0).getType());
+		assertEquals("not", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerMQ_21() throws Exception {
+		String s = "NoT";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.NOT, tokens.get(0).getType());
+		assertEquals("not", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerMQ_22() throws Exception {
+		String s = "notFOO";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.IDENT, tokens.get(0).getType());				
+	}
+	
+	@Test
+	public void testLexerMQ_30() throws Exception {
+		String s = "and";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.AND, tokens.get(0).getType());
+		assertEquals("and", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerMQ_31() throws Exception {
+		String s = "AND";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.AND, tokens.get(0).getType());
+		assertEquals("and", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerMQ_32() throws Exception {
+		String s = "andFOO";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.IDENT, tokens.get(0).getType());				
+	}
+	
+	@Test
+	public void testLexerIncludes10() throws Exception {
+		String s = "~=";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.INCLUDES, tokens.get(0).getType());				
+	}
+	
+	@Test
+	public void testLexerDashmatch10() throws Exception {
+		String s = "|=";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.DASHMATCH, tokens.get(0).getType());				
+	}
+	
+	@Test
+	public void testLexerSelectors3_10() throws Exception {
+//		PREFIXMATCH,		//		"^="
+//		SUFFIXMATCH,		//		"$="             
+//		SUBSTRINGMATCH,		//		"*="             
+		String s = "^= $= *=";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(5, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.PREFIXMATCH, tokens.get(0).getType());
+		assertEquals(CssToken.Type.SUFFIXMATCH, tokens.get(2).getType());
+		assertEquals(CssToken.Type.SUBSTRINGMATCH, tokens.get(4).getType());
+	}
+	
+	@Test
+	public void testLexerSelectors3_20() throws Exception {             
+		String s = "p[title*='hello']";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(6, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.IDENT, tokens.get(0).getType());
+		assertEquals(CssToken.Type.SUBSTRINGMATCH, tokens.get(3).getType());
+	}
+		
+	@Test
+	public void testLexerHash10() throws Exception {
+		String s = "#n";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.HASHNAME, tokens.get(0).getType());
+		assertEquals("#n", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerHash20() throws Exception {
+		String s = "#name";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.HASHNAME, tokens.get(0).getType());	
+		assertEquals("#name", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerHash30() throws Exception {
+		String s = "#";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.CHAR, tokens.get(0).getType());			
+	}
+	
+	@Test
+	public void testLexerHash40() throws Exception {
+		String s = "#!";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(2, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.CHAR, tokens.get(0).getType());
+		assertEquals(CssToken.Type.CHAR, tokens.get(1).getType());
+	}
+	
+	@Test
+	public void testLexerHash50() throws Exception {
+		String s = "#name 89";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(3, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.HASHNAME, tokens.get(0).getType());
+		assertEquals(CssToken.Type.S, tokens.get(1).getType());
+		assertEquals(CssToken.Type.INTEGER, tokens.get(2).getType());
+	}
+	
+	@Test
+	public void testLexerHash51() throws Exception {
+		String s = "#\\name\\name";		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.HASHNAME, tokens.get(0).getType());
+		assertEquals("#namename", tokens.get(0).getChars());
+		
+	}
+	
+	@Test
+	public void testLexerImportant10() throws Exception {
+		String s = "!important";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.IMPORTANT, tokens.get(0).getType());		
+	}
+	
+	@Test
+	public void testLexerImportant20() throws Exception {
+		String s = "!  \t\t\t\r\n\fimportant";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.IMPORTANT, tokens.get(0).getType());
+		
+	}
+	
+	@Test
+	public void testLexerImportant30() throws Exception {
+		String s = "!  IMPORTANT";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(1, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.IMPORTANT, tokens.get(0).getType());
+	}
+	
+	@Test
+	public void testLexerImportant40() throws Exception {
+		String s = "!importan  ";
+		
+		List<CssToken> tokens = execScan(s);		
+		assertEquals(3, tokens.size());
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.CHAR, tokens.get(0).getType());
+		assertEquals(CssToken.Type.IDENT, tokens.get(1).getType());
+		assertEquals(CssToken.Type.S, tokens.get(2).getType());
+	}
+	
+	@Test
+	public void testLexerUrange10() throws Exception {
+		String s = "U+A5 U+0-7F U+590-5ff U+4E00-9FFF U+30?? U+FF00-FF9F U+??? U+0??? ";		
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(0, exceptions.size());
+		assertEquals(8, getTokenTypeCount(Type.URANGE, tokens));
+		
+	}
+	
+	@Test
+	public void testLexerUrange20() throws Exception {
+		String s = "U+A5,U+0-7F,U+590-5ff,U+4E00-9FFF,U+30??,U+FF00-FF9F,U+???,U+0???";		
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(0, exceptions.size());
+		assertEquals(8, getTokenTypeCount(Type.URANGE, tokens));
+	}
+	
+	@Test
+	public void testLexerUrange30() throws Exception {
+		//first invalid URANGE, second not even an URANGE, instead expect IDENT (u) and CHAR (+)
+		String s = "U+0?????? U+ "; 	
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(1, exceptions.size());
+		assertEquals(CssToken.Type.URANGE, tokens.get(0).getType());
+		assertEquals(1, getTokenTypeCount(Type.URANGE, tokens));
+		assertEquals(1, getTokenTypeCount(Type.IDENT, tokens));
+		assertEquals(1, getTokenTypeCount(Type.CHAR, tokens));
+		
+	}
+	
+	@Test
+	public void testLexerUrange40() throws Exception {		
+		String s = "U+0????? U+00000A-00000F "; 	
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(0, exceptions.size());		
+		assertEquals(2, getTokenTypeCount(Type.URANGE, tokens));		
+	}
+	
+	@Test
+	public void testLexerUrange50() throws Exception {		
+		String s = "\\U+A U+A"; 	
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(0, exceptions.size());		
+		assertEquals(1, getTokenTypeCount(Type.URANGE, tokens));		
+	}
+	
+	@Test
+	public void testLexerEscape09() throws Exception {
+		String s = "\\";		
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(1, exceptions.size());
+		assertEquals(CssToken.Type.CHAR, tokens.get(0).getType());		
+	}
+	
+	@Test
+	public void testLexerEscape10() throws Exception {
+		//STRING: backslash + literal new skipped
+		String s = "'a not s\\\no very long title'";		
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.STRING, tokens.get(0).getType());
+		assertEquals("a not so very long title", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerEscape11() throws Exception {
+		//STRING: propertly escaped newlines kept literally
+		String s = "'an escaped newline: \\A'";		
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.STRING, tokens.get(0).getType());	
+		assertEquals("an escaped newline: \\A", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerEscape12() throws Exception {
+		//IDENT: base test
+		String s = "\\64";		
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.IDENT, tokens.get(0).getType());	
+		assertEquals("d", tokens.get(0).getChars());
+				
+	}
+	
+	@Test
+	public void testLexerEscape13() throws Exception {
+		//IDENT: base test
+		String s = "\\p";		
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.IDENT, tokens.get(0).getType());
+		assertEquals("p", tokens.get(0).getChars());
+		
+	}
+	
+	@Test
+	public void testLexerEscape14() throws Exception {
+		//IDENT: base test
+		String s = "\\px";		
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.IDENT, tokens.get(0).getType());
+		assertEquals("px", tokens.get(0).getChars());
+		
+	}
+	
+	@Test
+	public void testLexerEscape15() throws Exception {
+		//IDENT: base test
+		String s = "\\64 \\64 ";		
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.IDENT, tokens.get(0).getType());	
+		assertEquals("dd", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerEscape16() throws Exception {
+		String s = "#f\\oo";		
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(0, exceptions.size());
+		assertEquals(CssToken.Type.HASHNAME, tokens.get(0).getType());	
+		assertEquals("#foo", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerEscape17() throws Exception {
+		//http://test.csswg.org/suites/css2.1/20110323/xhtml1/escaped-ident-001.xht
+		String s = "\\64\\69\\76{\\63\\6F\\6C\\6F\\72:\\67\\72\\65\\65\\6E;}";		
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(0, exceptions.size());
+		assertEquals(7, tokens.size());
+		assertEquals(Type.IDENT, tokens.get(0).getType());
+		assertEquals("div", tokens.get(0).getChars());
+		assertEquals(Type.CHAR, tokens.get(1).getType());
+		assertEquals("{", tokens.get(1).getChars());		
+		assertEquals(Type.IDENT, tokens.get(2).getType());
+		assertEquals("color", tokens.get(2).getChars());
+		assertEquals(Type.CHAR, tokens.get(3).getType());
+		assertEquals(":", tokens.get(3).getChars());
+		assertEquals(Type.IDENT, tokens.get(4).getType());
+		assertEquals("green", tokens.get(4).getChars());
+		assertEquals(Type.CHAR, tokens.get(5).getType());
+		assertEquals(";", tokens.get(5).getChars());
+		assertEquals(Type.CHAR, tokens.get(6).getType());
+		assertEquals("}", tokens.get(6).getChars());
+	}
+	
+	@Test
+	public void testLexerEscape18() throws Exception {
+		//http://test.csswg.org/suites/css2.1/20110323/xhtml1/escaped-ident-char-001.xht
+		//Escaped characters are treated as normal characters.
+		String s = "di\\v{c\\o\\l\\o\\r:green;}";		
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(0, exceptions.size());
+		assertEquals(7, tokens.size());
+		assertEquals(Type.IDENT, tokens.get(0).getType());
+		assertEquals("div", tokens.get(0).getChars());
+		assertEquals(Type.CHAR, tokens.get(1).getType());
+		assertEquals("{", tokens.get(1).getChars());		
+		assertEquals(Type.IDENT, tokens.get(2).getType());
+		assertEquals("color", tokens.get(2).getChars());
+		assertEquals(Type.CHAR, tokens.get(3).getType());
+		assertEquals(":", tokens.get(3).getChars());
+		assertEquals(Type.IDENT, tokens.get(4).getType());
+		assertEquals("green", tokens.get(4).getChars());
+		assertEquals(Type.CHAR, tokens.get(5).getType());
+		assertEquals(";", tokens.get(5).getChars());
+		assertEquals(Type.CHAR, tokens.get(6).getType());
+		assertEquals("}", tokens.get(6).getChars());
+	}
+	
+	@Test
+	public void testLexerEscape19() throws Exception {
+		//http://test.csswg.org/suites/css2.1/20110323/xhtml1/escaped-ident-spaces-001.xht
+		//Escaped identifiers are parsed and spaces between them are ignored.	
+		String s = "\\64\\69\\76 {\\63 \\6F \\6C \\6F \\72 :\\67 \\72 \\65 \\65 \\6E ;}";		
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(0, exceptions.size());
+		assertEquals(7, tokens.size());
+		assertEquals(Type.IDENT, tokens.get(0).getType());
+		assertEquals("div", tokens.get(0).getChars());
+		assertEquals(Type.CHAR, tokens.get(1).getType());
+		assertEquals("{", tokens.get(1).getChars());		
+		assertEquals(Type.IDENT, tokens.get(2).getType());
+		assertEquals("color", tokens.get(2).getChars());
+		assertEquals(Type.CHAR, tokens.get(3).getType());
+		assertEquals(":", tokens.get(3).getChars());
+		assertEquals(Type.IDENT, tokens.get(4).getType());
+		assertEquals("green", tokens.get(4).getChars());
+		assertEquals(Type.CHAR, tokens.get(5).getType());
+		assertEquals(";", tokens.get(5).getChars());
+		assertEquals(Type.CHAR, tokens.get(6).getType());
+		assertEquals("}", tokens.get(6).getChars());
+	}
+	
+	@Test
+	public void testLexerEscape20() throws Exception {
+		//http://test.csswg.org/suites/css2.1/20110323/xhtml1/escaped-ident-spaces-001.xht
+		//Escaped identifiers are parsed and spaces between them are ignored.	
+		String s = "\\64\\69\\76 {\\63 \\6F \\6C \\6F \\72 :\\67 \\72 \\65 \\65 \\6E ;}";		
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(0, exceptions.size());
+		assertEquals(7, tokens.size());
+		assertEquals(Type.IDENT, tokens.get(0).getType());
+		assertEquals("div", tokens.get(0).getChars());
+		assertEquals(Type.CHAR, tokens.get(1).getType());
+		assertEquals("{", tokens.get(1).getChars());		
+		assertEquals(Type.IDENT, tokens.get(2).getType());
+		assertEquals("color", tokens.get(2).getChars());
+		assertEquals(Type.CHAR, tokens.get(3).getType());
+		assertEquals(":", tokens.get(3).getChars());
+		assertEquals(Type.IDENT, tokens.get(4).getType());
+		assertEquals("green", tokens.get(4).getChars());
+		assertEquals(Type.CHAR, tokens.get(5).getType());
+		assertEquals(";", tokens.get(5).getChars());
+		assertEquals(Type.CHAR, tokens.get(6).getType());
+		assertEquals("}", tokens.get(6).getChars());
+	}
+	
+	@Test
+	public void testLexerEscape21() throws Exception {
+		//http://test.csswg.org/suites/css2.1/20110323/xhtml1/escaped-ident-spaces-002.xht
+		//Escaped character sequences are terminated by white space.	
+		String s = "div{\\63 \\06F \\006C \\0006F \\72 :\\067 \\0072 \\00065 \\00065 \\6E ;}";		
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(0, exceptions.size());
+		assertEquals(7, tokens.size());
+		assertEquals(Type.IDENT, tokens.get(0).getType());
+		assertEquals("div", tokens.get(0).getChars());
+		assertEquals(Type.CHAR, tokens.get(1).getType());
+		assertEquals("{", tokens.get(1).getChars());		
+		assertEquals(Type.IDENT, tokens.get(2).getType());
+		assertEquals("color", tokens.get(2).getChars());
+		assertEquals(Type.CHAR, tokens.get(3).getType());
+		assertEquals(":", tokens.get(3).getChars());
+		assertEquals(Type.IDENT, tokens.get(4).getType());
+		assertEquals("green", tokens.get(4).getChars());
+		assertEquals(Type.CHAR, tokens.get(5).getType());
+		assertEquals(";", tokens.get(5).getChars());
+		assertEquals(Type.CHAR, tokens.get(6).getType());
+		assertEquals("}", tokens.get(6).getChars());
+	}
+	
+	@Test
+	public void testLexerEscape22() throws Exception {
+		//http://test.csswg.org/suites/css2.1/20110323/xhtml1/escaped-ident-spaces-003.xht
+		//Escaped character sequences are terminated by exactly six hex digits.			
+		String s = "div{c\\00006Fl\\00006Fr:\\000067r\\000065e\\00006E;}";		
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(0, exceptions.size());
+		assertEquals(7, tokens.size());
+		assertEquals(Type.IDENT, tokens.get(0).getType());
+		assertEquals("div", tokens.get(0).getChars());
+		assertEquals(Type.CHAR, tokens.get(1).getType());
+		assertEquals("{", tokens.get(1).getChars());		
+		assertEquals(Type.IDENT, tokens.get(2).getType());
+		assertEquals("color", tokens.get(2).getChars());
+		assertEquals(Type.CHAR, tokens.get(3).getType());
+		assertEquals(":", tokens.get(3).getChars());
+		assertEquals(Type.IDENT, tokens.get(4).getType());
+		assertEquals("green", tokens.get(4).getChars());
+		assertEquals(Type.CHAR, tokens.get(5).getType());
+		assertEquals(";", tokens.get(5).getChars());
+		assertEquals(Type.CHAR, tokens.get(6).getType());
+		assertEquals("}", tokens.get(6).getChars());
+	}
+	
+	@Test
+	public void testLexerEscape23() throws Exception {
+		//http://test.csswg.org/suites/css2.1/20110323/xhtml1/escaped-ident-spaces-004.xht
+		//Escaped character sequences are terminated by exactly six hex digits and white space.			
+		String s = "div{\\000063 \\00006F \\00006C \\00006F \\000072 :\\000067 \\000072 \\000065 \\000065 \\00006E ;}";		
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(0, exceptions.size());
+		assertEquals(7, tokens.size());
+		assertEquals(Type.IDENT, tokens.get(0).getType());
+		assertEquals("div", tokens.get(0).getChars());
+		assertEquals(Type.CHAR, tokens.get(1).getType());
+		assertEquals("{", tokens.get(1).getChars());		
+		assertEquals(Type.IDENT, tokens.get(2).getType());
+		assertEquals("color", tokens.get(2).getChars());
+		assertEquals(Type.CHAR, tokens.get(3).getType());
+		assertEquals(":", tokens.get(3).getChars());
+		assertEquals(Type.IDENT, tokens.get(4).getType());
+		assertEquals("green", tokens.get(4).getChars());
+		assertEquals(Type.CHAR, tokens.get(5).getType());
+		assertEquals(";", tokens.get(5).getChars());
+		assertEquals(Type.CHAR, tokens.get(6).getType());
+		assertEquals("}", tokens.get(6).getChars());
+	}
+
+	@Test
+	public void testLexerEscape24() throws Exception {
+		//http://test.csswg.org/suites/css2.1/20110323/xhtml1/escaped-ident-spaces-005.xht
+		//Escaped character sequences are terminated by white space.			
+		String s = "div{\\63 \\06F \\006C \\0006F \\72 :\\067 \\0072 \\00065 \\00065 \\6E ;}";		
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(0, exceptions.size());
+		assertEquals(7, tokens.size());
+		assertEquals(Type.IDENT, tokens.get(0).getType());
+		assertEquals("div", tokens.get(0).getChars());
+		assertEquals(Type.CHAR, tokens.get(1).getType());
+		assertEquals("{", tokens.get(1).getChars());		
+		assertEquals(Type.IDENT, tokens.get(2).getType());
+		assertEquals("color", tokens.get(2).getChars());
+		assertEquals(Type.CHAR, tokens.get(3).getType());
+		assertEquals(":", tokens.get(3).getChars());
+		assertEquals(Type.IDENT, tokens.get(4).getType());
+		assertEquals("green", tokens.get(4).getChars());
+		assertEquals(Type.CHAR, tokens.get(5).getType());
+		assertEquals(";", tokens.get(5).getChars());
+		assertEquals(Type.CHAR, tokens.get(6).getType());
+		assertEquals("}", tokens.get(6).getChars());
+	}
+	
+	@Test
+	public void testLexerEscape25() throws Exception {
+		//http://test.csswg.org/suites/css2.1/20110323/xhtml1/escaped-ident-spaces-006.xht
+		//Escaped character sequences (two hex digits) are terminated by white space.			
+		String s = "div{\\63 \\6F \\6C \\6F \\72 :\\67 \\72 ee\\6E ;}";		
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(0, exceptions.size());
+		assertEquals(7, tokens.size());
+		assertEquals(Type.IDENT, tokens.get(0).getType());
+		assertEquals("div", tokens.get(0).getChars());
+		assertEquals(Type.CHAR, tokens.get(1).getType());
+		assertEquals("{", tokens.get(1).getChars());		
+		assertEquals(Type.IDENT, tokens.get(2).getType());
+		assertEquals("color", tokens.get(2).getChars());
+		assertEquals(Type.CHAR, tokens.get(3).getType());
+		assertEquals(":", tokens.get(3).getChars());
+		assertEquals(Type.IDENT, tokens.get(4).getType());
+		assertEquals("green", tokens.get(4).getChars());
+		assertEquals(Type.CHAR, tokens.get(5).getType());
+		assertEquals(";", tokens.get(5).getChars());
+		assertEquals(Type.CHAR, tokens.get(6).getType());
+		assertEquals("}", tokens.get(6).getChars());
+	}
+	
+	@Test
+	public void testLexerEscape26() throws Exception {
+		//http://test.csswg.org/suites/css2.1/20110323/xhtml1/escaped-ident-spaces-007.xht
+		//Escaped character sequences (less than six hex digits) are terminated by white space, tabs and linefeeds.			
+		String s = "div{\\63\n\\06F\fl\\0006F\rr:g\\0072\t\\00065\r\fe\\6E ;}";		
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(0, exceptions.size());
+		assertEquals(7, tokens.size());
+		assertEquals(Type.IDENT, tokens.get(0).getType());
+		assertEquals("div", tokens.get(0).getChars());
+		assertEquals(Type.CHAR, tokens.get(1).getType());
+		assertEquals("{", tokens.get(1).getChars());		
+		assertEquals(Type.IDENT, tokens.get(2).getType());
+		assertEquals("color", tokens.get(2).getChars());
+		assertEquals(Type.CHAR, tokens.get(3).getType());
+		assertEquals(":", tokens.get(3).getChars());
+		assertEquals(Type.IDENT, tokens.get(4).getType());
+		assertEquals("green", tokens.get(4).getChars());
+		assertEquals(Type.CHAR, tokens.get(5).getType());
+		assertEquals(";", tokens.get(5).getChars());
+		assertEquals(Type.CHAR, tokens.get(6).getType());
+		assertEquals("}", tokens.get(6).getChars());
+	}
+	
+	@Test
+	public void testLexerEscape27() throws Exception {
+		String s = "\\0020red";		
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(0, exceptions.size());
+		assertEquals(1, tokens.size());
+		assertEquals(Type.IDENT, tokens.get(0).getType());
+		assertEquals("\\0020red", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerEscape28() throws Exception {
+		String s = "\\0020red\\0020red\\0020";		
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(0, exceptions.size());
+		assertEquals(1, tokens.size());
+		assertEquals(Type.IDENT, tokens.get(0).getType());
+		assertEquals("\\0020red\\0020red\\0020", tokens.get(0).getChars());
+	}
+	
+	@Test
+	public void testLexerEscape29() throws Exception {
+		String s = "\\000020 red\\000020 red\\000020";		
+		List<CssToken> tokens = execScan(s);				
+		assertEquals(0, exceptions.size());
+		assertEquals(1, tokens.size());
+		assertEquals(Type.IDENT, tokens.get(0).getType());
+		assertEquals("\\000020 red\\000020 red\\000020", tokens.get(0).getChars());
+	}
+	
+	/*
+    
+    	
+http://test.csswg.org/suites/css2.1/20110323/xhtml1/escapes-014.xht  
+	CSS Test: Escaping and spaces with declarations
+
+   .test { color: white; background: green; }
+   .test { color:\0020yellow; background:\0020red; }
+
+	<p class="test">This line should be green.</p>
+
+	
+	
+	
+    
+    
+    
+	   
+      
+		  
+	
+	
+    
+http://test.csswg.org/suites/css2.1/20110323/xhtml1/escaped-ident-002.xht
+    escaped "1st'Class'"    
+    .\31st\'Class\27 
+            {
+                color: green;
+            }
+
+http://test.csswg.org/suites/css2.1/20110323/xhtml1/escaped-ident-003.xht
+    invalid: Newlines cannot be escaped within identifiers.            
+            #my\
+id
+            {
+                color: red;
+            }
+
+
+http://test.csswg.org/suites/css2.1/20110323/xhtml1/escaped-ident-004.xht
+	The {unicode} chars are not treated like {escape} chars.
+	
+	.\a\b\c\1\2\3
+	    {
+	        color: red;
+	    }
+	    
+
+
+
+            
+
+            
+
+
+
+            
+
+
+http://test.csswg.org/suites/css2.1/20110323/xhtml1/escapes-000.xht
+	values identical
+	  p.one:before { content: "This "; }
+	  p.two:before { content: "Th\
+	is "; }
+	
+http://test.csswg.org/suites/css2.1/20110323/xhtml1/escapes-001.xht
+	  p { background: red; color: white; }
+  	  p { font-family: "\"", '\'', serif; background: green; }
+  	  
+http://test.csswg.org/suites/css2.1/20110323/xhtml1/escapes-002.xht
+  	CSS Test: Invalid Punctuation Escapes
+  	  p.class#id { background: green; color: white; }
+	  p\.class#id { background: red; }	
+	  p.class\#id { background: red; }	
+	  p.class#id { background\: red; }	
+	  p.class#id { background: red\; }	
+	  p.class#id \{ background: red; \}
+	  p.class#id { background: red; } 
+	  
+http://test.csswg.org/suites/css2.1/20110323/xhtml1/escapes-003.xht
+	  CSS Test: Class and Keyword Letter Escapes
+	    p.class { background: red; color: white; }
+  		p.c\lass { bac\kground: g\reen; }
+
+http://test.csswg.org/suites/css2.1/20110323/xhtml1/escapes-004.xht  	
+  	CSS Test: Unicode Escapes	
+  p.class { background: red; color: white; }
+  p.c\00006Cas\000073 { back\000067round: gr\000065en; }
+  
+http://test.csswg.org/suites/css2.1/20110323/xhtml1/escapes-005.xht  
+  	CSS Test: Unicode Escapes and Case Insensitivity
+    p.class { background: red; color: white; }
+  	p.c\00006Cas\000073 { back\000047round: gr\000045en; }
+  
+http://test.csswg.org/suites/css2.1/20110323/xhtml1/escapes-006.xht  
+	CSS Test: Incorrect Letter Escape (Class Selector)  
+	  p.class { background: green; color: white; }
+  	  p.cl\ass { background: red; }
+
+http://test.csswg.org/suites/css2.1/20110323/xhtml1/escapes-007.xht
+	CSS Test: Space-terminated Unicode Escapes
+	  p.class { background: red; color: white; }
+	  p.c\06C ass { back\67 round: gr\000065 en; }
+  
+
+http://test.csswg.org/suites/css2.1/20110323/xhtml1/escapes-008.xht
+	Invalid
+	CSS Test: Invalid Space-terminated Character Escapes    
+	      p.class { background: green; color: white; }
+	  p.c\06C  ass { back\67round: r\000065 ed; }
+	  p.c\06Cass { back\67
+	 round: r\000065ed; }
+	  p.c\06Cass { back\67round: r\000065 
+	ed; }
+
+http://test.csswg.org/suites/css2.1/20110323/xhtml1/escapes-009.xht
+	CSS Test: Characters and case: Escaping a character inside a keyword
+	Invalid
+	p {color: green}
+	p {color: r\ed}
+
+http://test.csswg.org/suites/css2.1/20110323/xhtml1/escapes-010.xht
+	Unicode escapes cannot substitute for '{' or '}' in CSS syntax.
+	This text should be green, not red.
+
+	p { color: green }
+	p \7B color: red \7D
+
+http://test.csswg.org/suites/css2.1/20110323/xhtml1/escapes-012.xht
+	This text should be green.
+	'grEen'
+	p { color: red; color: \g\r\45\65\n; } 
+
+
+http://test.csswg.org/suites/css2.1/20110323/xhtml1/escapes-011.xht
+	'\r\e\d' is 'r^N^M', which isn't valid
+	p { color: green; color: \r\e\d; } 
+
+
+http://test.csswg.org/suites/css2.1/20110323/xhtml1/escapes-013.xht
+	CSS Test: Escaping and spaces with classes
+   .css\0031 p { color: yellow; background: red; }
+   .css\0032 p { color: white; background: green; }
+   
+     <div class="css1"><p>This line should be unstyled.</p></div>
+  <p class="css2p">This line should be green.</p>
+  
+
+
+*/	
+	
+	@Test
+	public void testMessages() throws Exception {
+		//tests the l12n properties file				
+		for (CssErrorCode cec : CssExceptions.CssErrorCode.values()) {
+			String s = Messages.get(cec.name());
+			//the key is returned if there is no value
+			assertTrue(!s.equals(cec.toString()));			
+		}
+	}
+	
+	private List<CssToken> execScan(String css, boolean debug) throws Exception {	
+		exceptions.clear();
+		final CssTokenList tokens = new CssTokenList();
+		CssScanner lexer = new CssScanner(new StringReader(css), CssLocation.NO_SID, new ErrorListener(), new CssTokenConsumer() {			
+			public void add(CssToken token) {
+				tokens.add(token);				
+			}
+		});
+		lexer.scan();
+		if(debug) {
+			outWriter.println("input: " + css);
+			for(CssToken t : tokens) {
+				outWriter.println('\t' + t.toString());
+			}
+			outWriter.println();
+		}
+		
+		return tokens;
+	}
+	
+	private List<CssToken> execScan(String css) throws Exception {		
+		return execScan(css, false);
+	}
+	
+	List<CssException> exceptions = Lists.newArrayList();
+	class ErrorListener implements CssErrorHandler {
+		public void error(CssException e) throws CssException {
+			exceptions.add(e);			
+		}		
+	}
+		
+	private List<CssToken> stripTokens(Type type, List<CssToken> tokens) {	
+		List<CssToken> list = Lists.newArrayList();
+		for(CssToken tk : tokens) {
+			if(tk.getType() != type) {
+				list.add(tk);
+			}
+		}
+		return list;
+	}	
+	
+	private int getTokenTypeCount(CssToken.Type type, List<CssToken> tokens) {
+		int c = 0;
+		for(CssToken tk : tokens) {
+			if(tk.getType() == type) {
+				c++;
+			}
+		}
+		return c;
+	}
+	
+	private CssToken getFirstTokenOfType(CssToken.Type type, List<CssToken> tokens) {		
+		for(CssToken tk : tokens) {
+			if(tk.getType() == type) {
+				return tk;
+			}
+		}
+		return null;
+	}
+	
+	private boolean hasIdent(List<CssToken> tokens, String ident) {
+		for(CssToken tk : tokens) {
+			if(tk.getType() == Type.IDENT && tk.getChars().equals(ident)) {
+				return true;
+			}
+		}
+		return false;
+	}
+		
+}
diff --git a/src/test/resources/20/epub/ContainerNotOPF20.epub b/src/test/resources/20/epub/ContainerNotOPF20.epub
new file mode 100644
index 0000000..3a635bf
Binary files /dev/null and b/src/test/resources/20/epub/ContainerNotOPF20.epub differ
diff --git a/src/test/resources/20/epub/EmptyDir20.epub b/src/test/resources/20/epub/EmptyDir20.epub
new file mode 100644
index 0000000..0e77dda
Binary files /dev/null and b/src/test/resources/20/epub/EmptyDir20.epub differ
diff --git a/src/test/resources/20/epub/Issue21.epub b/src/test/resources/20/epub/Issue21.epub
new file mode 100644
index 0000000..865590e
Binary files /dev/null and b/src/test/resources/20/epub/Issue21.epub differ
diff --git a/src/test/resources/20/epub/Issue25.epub b/src/test/resources/20/epub/Issue25.epub
new file mode 100644
index 0000000..1992e77
Binary files /dev/null and b/src/test/resources/20/epub/Issue25.epub differ
diff --git a/src/test/resources/20/epub/Issue95.epub b/src/test/resources/20/epub/Issue95.epub
new file mode 100644
index 0000000..abfdd16
Binary files /dev/null and b/src/test/resources/20/epub/Issue95.epub differ
diff --git a/src/test/resources/20/epub/MetaInfNotOPF20.epub b/src/test/resources/20/epub/MetaInfNotOPF20.epub
new file mode 100644
index 0000000..d5e55b6
Binary files /dev/null and b/src/test/resources/20/epub/MetaInfNotOPF20.epub differ
diff --git a/src/test/resources/20/epub/Non8601Date20.epub b/src/test/resources/20/epub/Non8601Date20.epub
new file mode 100644
index 0000000..8635121
Binary files /dev/null and b/src/test/resources/20/epub/Non8601Date20.epub differ
diff --git a/src/test/resources/20/epub/NullDate20.epub b/src/test/resources/20/epub/NullDate20.epub
new file mode 100644
index 0000000..978b649
Binary files /dev/null and b/src/test/resources/20/epub/NullDate20.epub differ
diff --git a/src/test/resources/20/epub/OPFIllegalElement20.epub b/src/test/resources/20/epub/OPFIllegalElement20.epub
new file mode 100644
index 0000000..a5c4cc9
Binary files /dev/null and b/src/test/resources/20/epub/OPFIllegalElement20.epub differ
diff --git a/src/test/resources/20/epub/OPFIllegalElement_UniqueID20.epub b/src/test/resources/20/epub/OPFIllegalElement_UniqueID20.epub
new file mode 100644
index 0000000..3d93615
Binary files /dev/null and b/src/test/resources/20/epub/OPFIllegalElement_UniqueID20.epub differ
diff --git a/src/test/resources/20/epub/PageMap20.epub b/src/test/resources/20/epub/PageMap20.epub
new file mode 100644
index 0000000..30ea1af
Binary files /dev/null and b/src/test/resources/20/epub/PageMap20.epub differ
diff --git a/src/test/resources/20/epub/Test20.epub b/src/test/resources/20/epub/Test20.epub
new file mode 100644
index 0000000..a5c6711
Binary files /dev/null and b/src/test/resources/20/epub/Test20.epub differ
diff --git a/src/test/resources/20/epub/UniqueIDNotUsed20.epub b/src/test/resources/20/epub/UniqueIDNotUsed20.epub
new file mode 100644
index 0000000..0da2877
Binary files /dev/null and b/src/test/resources/20/epub/UniqueIDNotUsed20.epub differ
diff --git a/src/test/resources/20/epub/Unmanifested20.epub b/src/test/resources/20/epub/Unmanifested20.epub
new file mode 100644
index 0000000..235f3e1
Binary files /dev/null and b/src/test/resources/20/epub/Unmanifested20.epub differ
diff --git a/src/test/resources/20/epub/UnmanifestedGuideItems20.epub b/src/test/resources/20/epub/UnmanifestedGuideItems20.epub
new file mode 100644
index 0000000..c1c583a
Binary files /dev/null and b/src/test/resources/20/epub/UnmanifestedGuideItems20.epub differ
diff --git a/src/test/resources/20/epub/invalid/bad_opf_namespace.epub b/src/test/resources/20/epub/invalid/bad_opf_namespace.epub
new file mode 100644
index 0000000..5ec4c34
Binary files /dev/null and b/src/test/resources/20/epub/invalid/bad_opf_namespace.epub differ
diff --git a/src/test/resources/20/epub/invalid/filenameSpacesErrorTwice_Issue239.epub b/src/test/resources/20/epub/invalid/filenameSpacesErrorTwice_Issue239.epub
new file mode 100644
index 0000000..0623aa8
Binary files /dev/null and b/src/test/resources/20/epub/invalid/filenameSpacesErrorTwice_Issue239.epub differ
diff --git a/src/test/resources/20/epub/invalid/issue138.epub b/src/test/resources/20/epub/invalid/issue138.epub
new file mode 100644
index 0000000..a4ff047
Binary files /dev/null and b/src/test/resources/20/epub/invalid/issue138.epub differ
diff --git a/src/test/resources/20/epub/invalid/issue170.epub b/src/test/resources/20/epub/invalid/issue170.epub
new file mode 100644
index 0000000..b17083e
Binary files /dev/null and b/src/test/resources/20/epub/invalid/issue170.epub differ
diff --git a/src/test/resources/20/epub/invalid/issue236.epub b/src/test/resources/20/epub/invalid/issue236.epub
new file mode 100644
index 0000000..f2207f7
Binary files /dev/null and b/src/test/resources/20/epub/invalid/issue236.epub differ
diff --git a/src/test/resources/20/epub/invalid/issue313.epub b/src/test/resources/20/epub/invalid/issue313.epub
new file mode 100644
index 0000000..9f1c6a0
Binary files /dev/null and b/src/test/resources/20/epub/invalid/issue313.epub differ
diff --git a/src/test/resources/20/epub/invalid/issue316.epub b/src/test/resources/20/epub/invalid/issue316.epub
new file mode 100644
index 0000000..99825d6
Binary files /dev/null and b/src/test/resources/20/epub/invalid/issue316.epub differ
diff --git a/src/test/resources/20/epub/invalid/issue89.epub b/src/test/resources/20/epub/invalid/issue89.epub
new file mode 100644
index 0000000..340c714
Binary files /dev/null and b/src/test/resources/20/epub/invalid/issue89.epub differ
diff --git a/src/test/resources/20/epub/invalid/lorem-mimetype.epub b/src/test/resources/20/epub/invalid/lorem-mimetype.epub
new file mode 100644
index 0000000..ebbae07
Binary files /dev/null and b/src/test/resources/20/epub/invalid/lorem-mimetype.epub differ
diff --git a/src/test/resources/20/epub/invalid/mimetypeAndVersion.epub b/src/test/resources/20/epub/invalid/mimetypeAndVersion.epub
new file mode 100644
index 0000000..4a407f9
Binary files /dev/null and b/src/test/resources/20/epub/invalid/mimetypeAndVersion.epub differ
diff --git a/src/test/resources/20/epub/invalid/ncx-dupe-id.epub b/src/test/resources/20/epub/invalid/ncx-dupe-id.epub
new file mode 100644
index 0000000..d94efc1
Binary files /dev/null and b/src/test/resources/20/epub/invalid/ncx-dupe-id.epub differ
diff --git a/src/test/resources/20/epub/invalid/no-linear-yes.epub b/src/test/resources/20/epub/invalid/no-linear-yes.epub
new file mode 100644
index 0000000..cf82418
Binary files /dev/null and b/src/test/resources/20/epub/invalid/no-linear-yes.epub differ
diff --git a/src/test/resources/20/epub/invalid/no-rootfile.epub b/src/test/resources/20/epub/invalid/no-rootfile.epub
new file mode 100644
index 0000000..c8a0c68
Binary files /dev/null and b/src/test/resources/20/epub/invalid/no-rootfile.epub differ
diff --git a/src/test/resources/20/epub/invalid/unresolved-internal-xhtml-link.epub b/src/test/resources/20/epub/invalid/unresolved-internal-xhtml-link.epub
new file mode 100644
index 0000000..0f242f0
Binary files /dev/null and b/src/test/resources/20/epub/invalid/unresolved-internal-xhtml-link.epub differ
diff --git a/src/test/resources/20/epub/issues.xml b/src/test/resources/20/epub/issues.xml
new file mode 100644
index 0000000..6f8b7f5
--- /dev/null
+++ b/src/test/resources/20/epub/issues.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<testsuite>
+  <test>
+    <file>Issue21.epub</file>
+    <description>NCX has wrong media-type in the OPF and an invalid date.</description>
+    <result valid="false">
+      <errors>2</errors>
+      <warnings>0</warnings>
+    </result>
+  </test>
+  <test>
+    <file>Issue25.epub</file>
+    <description>The toc attribute is missing from the spine (it is a required attribute.)</description>
+    <result valid="false">
+      <errors>4</errors>
+      <warnings>3</warnings>
+    </result>
+  </test>
+  <test>
+    <file>Issue95.epub</file>
+    <description>epubcheck should not crash with an NPE when the "rootfile" element is missing the required attribute "full-path"
+      we should get only an error.</description>
+    <result valid="false">
+      <errors>1</errors>
+      <warnings>0</warnings>
+    </result>
+  </test>
+</testsuite>
diff --git a/src/test/resources/20/epub/tests20.xml b/src/test/resources/20/epub/tests20.xml
new file mode 100644
index 0000000..455d7ae
--- /dev/null
+++ b/src/test/resources/20/epub/tests20.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<testsuite>
+    <test>
+      <file>PageMap.epub</file>
+      <description>This ePub has a PageMap. Having a page-map will cause a validation error.</description>
+      <result valid="false">
+	<errors>1</errors>
+	<warnings>0</warnings>
+      </result>
+    </test>
+    <test>
+      <file>OPFIllegalElement_UniqueID.epub</file>
+      <description>This ePub has an illegal element in the opf, and is missing the unique-id.</description>
+      <result valid="false">
+	  	<errors>2</errors>
+		<warnings>0</warnings>
+	  </result>
+    </test>
+    <test>
+      <file>OPFIllegalElement.epub</file>
+      <description>This ePub has an illegal element in the opf.</description>
+      <result valid="false">
+	  	<errors>1</errors>
+		<warnings>0</warnings>
+	  </result>
+    </test>
+    <test>
+      <file>Unmanifested.epub</file>
+      <description>This ePub has two files which are not listed in its manifest.</description>
+      <result valid="false">
+	  	<errors>0</errors>
+		<warnings>2</warnings>
+	  </result>
+    </test>
+    <test>
+      <file>ContainerNotOPF.epub</file>
+      <description>This ePub has a file which is not listed in the OPF manifest, but is listed in container.xml.</description>
+      <result valid="true">
+	  	<errors>0</errors>
+		<warnings>0</warnings>
+	  </result>
+    </test>
+    <test>
+      <file>MetaInfNotOPF.epub</file>
+      <description>This ePub has a file in META-INF which is not listed in the OPF manifest.</description>
+      <result valid="true">
+	  	<errors>0</errors>
+		<warnings>0</warnings>
+	  </result>
+    </test>
+    <test>
+      <file>NullDate.epub</file>
+      <description>This ePub has a null date field in the OPF manifest.</description>
+      <result valid="false">
+	  	<errors>1</errors>
+		<warnings>0</warnings>
+	  </result>
+    </test>
+    <test>
+      <file>Non8601Date.epub</file>
+      <description>This ePub has a date field in the OPF manifest which does not conform to the ISO 8601 date format.</description>
+      <result valid="false">
+	  	<errors>1</errors>
+		<warnings>0</warnings>
+	  </result>
+    </test>
+    <test>
+      <file>UnmanifestedGuideItems.epub</file>
+      <description>This ePub has two items declared in the "guide" element in its OPF. One of these items is declared in the OPF's manifest and should not generate an error, but the other one is not declared in the OPF and should generate an error.</description>
+      <result valid="false">
+	  	<errors>1</errors>
+		<warnings>0</warnings>
+	  </result>
+    </test>
+    <test>
+      <file>EmptyDir.epub</file>
+      <description>This ePub has an empty directory in it, which will cause a warning message.</description>
+      <result valid="false">
+	  	<errors>0</errors>
+		<warnings>1</warnings>
+	  </result>
+    </test>
+    <test>
+      <file>Test.epub</file>
+      <description>This ePub is valid.</description>
+      <result valid="true">
+	  	<errors>0</errors>
+		<warnings>0</warnings>
+	  </result>
+    </test>
+</testsuite>
diff --git a/src/test/resources/20/epub/valid/issue169.epub b/src/test/resources/20/epub/valid/issue169.epub
new file mode 100644
index 0000000..deb9f07
Binary files /dev/null and b/src/test/resources/20/epub/valid/issue169.epub differ
diff --git a/src/test/resources/20/epub/valid/issue169.txt b/src/test/resources/20/epub/valid/issue169.txt
new file mode 100644
index 0000000..0aed40f
--- /dev/null
+++ b/src/test/resources/20/epub/valid/issue169.txt
@@ -0,0 +1,22 @@
+[creation date] 2011-05-19T15:41:42Z
+[format version] 2.0
+[format name] application/epub+zip
+[creator] Gourévitch Jean-Paul
+[title] LA FRANCE EN AFRIQUE
+[rights] © 2006 et 2008 pour la mise à jour, Acropole, un département de
+[language] fr
+[unique identifier] 9782735703579
+[items count] 40
+[declared mimetype] application/xhtml+xml
+[declared mimetype] application/x-dtbncx+xml
+[declared mimetype] text/css
+[declared mimetype] image/jpeg
+[declared mimetype] application/font-tdpfr
+[font embedded] Times
+[font embedded] TimesBold
+[font embedded] TimesItalic
+[font embedded] TimesBoldItalic
+[reference] http://www.leplaisir.net
+[reference] http://www.nordcompo.fr
+[reference] http://www.mediaalter.org
+[reference] http://www.grioo.com
diff --git a/src/test/resources/20/epub/valid/issue194.bad.epub b/src/test/resources/20/epub/valid/issue194.bad.epub
new file mode 100644
index 0000000..0e2a92a
Binary files /dev/null and b/src/test/resources/20/epub/valid/issue194.bad.epub differ
diff --git a/src/test/resources/20/epub/valid/issue194.good.epub b/src/test/resources/20/epub/valid/issue194.good.epub
new file mode 100644
index 0000000..f211b4d
Binary files /dev/null and b/src/test/resources/20/epub/valid/issue194.good.epub differ
diff --git a/src/test/resources/20/epub/valid/lorem.epub b/src/test/resources/20/epub/valid/lorem.epub
new file mode 100644
index 0000000..f211b4d
Binary files /dev/null and b/src/test/resources/20/epub/valid/lorem.epub differ
diff --git a/src/test/resources/20/epub/valid/lorem.txt b/src/test/resources/20/epub/valid/lorem.txt
new file mode 100644
index 0000000..13fb9b3
--- /dev/null
+++ b/src/test/resources/20/epub/valid/lorem.txt
@@ -0,0 +1,11 @@
+[creation date] 2011-09-01T17:16:54Z
+[format version] 2.0
+[format name] application/epub+zip
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[items count] 3
+[declared mimetype] application/xhtml+xml
+[declared mimetype] application/x-dtbncx+xml
+[declared mimetype] text/css
diff --git a/src/test/resources/20/expanded/invalid/custom-ns-attr/EPUB/lorem.css b/src/test/resources/20/expanded/invalid/custom-ns-attr/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/custom-ns-attr/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/custom-ns-attr/EPUB/lorem.ncx b/src/test/resources/20/expanded/invalid/custom-ns-attr/EPUB/lorem.ncx
new file mode 100644
index 0000000..fe3524a
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/custom-ns-attr/EPUB/lorem.ncx
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/"
+    xmlns="http://www.daisy.org/z3986/2005/ncx/"
+    version="2005-1"
+    xml:lang="en">
+    <head>
+        <meta name="dtb:uid" content="urn:uuid:550e8400-e29b-41d4-a716-4466674412314"/>
+        <meta name="dtb:depth" content="1"/>
+        <meta name="dtb:totalPageCount" content="0"/>
+        <meta name="dtb:maxPageNumber" content="0"/>
+    </head>
+    <docTitle>
+        <text>Lorem Ipsum</text>
+    </docTitle>
+    <navMap>
+        <navPoint id="ch1" playOrder="1">
+            <navLabel>
+                <text>Chapter 1</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch1"/>
+        </navPoint>
+        <navPoint id="ch2" playOrder="2">
+            <navLabel>
+                <text>Chapter 2</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch2"/>
+        </navPoint>
+    </navMap>
+</ncx>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/custom-ns-attr/EPUB/lorem.opf b/src/test/resources/20/expanded/invalid/custom-ns-attr/EPUB/lorem.opf
new file mode 100644
index 0000000..ca73a3c
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/custom-ns-attr/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>        
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" media-type="application/xhtml+xml" /> 
+        <item id="ncx" href="lorem.ncx" media-type="application/x-dtbncx+xml" /> 
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/custom-ns-attr/EPUB/lorem.xhtml b/src/test/resources/20/expanded/invalid/custom-ns-attr/EPUB/lorem.xhtml
new file mode 100644
index 0000000..32d74c2
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/custom-ns-attr/EPUB/lorem.xhtml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:foo="http://foo" xml:lang="la" lang="la">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>		
+		<div id="ch1">
+			<h2>Chapter 1</h2>
+			<p foo:bar="quuz">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/20/expanded/invalid/custom-ns-attr/META-INF/container.xml b/src/test/resources/20/expanded/invalid/custom-ns-attr/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/custom-ns-attr/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/custom-ns-attr/mimetype b/src/test/resources/20/expanded/invalid/custom-ns-attr/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/custom-ns-attr/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/fallbacks-circular.txt b/src/test/resources/20/expanded/invalid/fallbacks-circular.txt
new file mode 100644
index 0000000..84db5df
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/fallbacks-circular.txt
@@ -0,0 +1,13 @@
+[format name] application/epub+zip
+[format version] 2.0
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[items count] 6
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[declared mimetype] image/xyz
+[declared mimetype] image/abc
+[declared mimetype] image/jpeg
+[declared mimetype] application/x-dtbncx+xml
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/fallbacks-circular/EPUB/image.abc b/src/test/resources/20/expanded/invalid/fallbacks-circular/EPUB/image.abc
new file mode 100755
index 0000000..4d55c1e
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/fallbacks-circular/EPUB/image.abc
@@ -0,0 +1 @@
+<xyz/>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/fallbacks-circular/EPUB/image.jpeg b/src/test/resources/20/expanded/invalid/fallbacks-circular/EPUB/image.jpeg
new file mode 100644
index 0000000..ff336a5
Binary files /dev/null and b/src/test/resources/20/expanded/invalid/fallbacks-circular/EPUB/image.jpeg differ
diff --git a/src/test/resources/20/expanded/invalid/fallbacks-circular/EPUB/image.xyz b/src/test/resources/20/expanded/invalid/fallbacks-circular/EPUB/image.xyz
new file mode 100755
index 0000000..4d55c1e
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/fallbacks-circular/EPUB/image.xyz
@@ -0,0 +1 @@
+<xyz/>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/fallbacks-circular/EPUB/lorem.css b/src/test/resources/20/expanded/invalid/fallbacks-circular/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/fallbacks-circular/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/fallbacks-circular/EPUB/lorem.ncx b/src/test/resources/20/expanded/invalid/fallbacks-circular/EPUB/lorem.ncx
new file mode 100644
index 0000000..fe3524a
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/fallbacks-circular/EPUB/lorem.ncx
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/"
+    xmlns="http://www.daisy.org/z3986/2005/ncx/"
+    version="2005-1"
+    xml:lang="en">
+    <head>
+        <meta name="dtb:uid" content="urn:uuid:550e8400-e29b-41d4-a716-4466674412314"/>
+        <meta name="dtb:depth" content="1"/>
+        <meta name="dtb:totalPageCount" content="0"/>
+        <meta name="dtb:maxPageNumber" content="0"/>
+    </head>
+    <docTitle>
+        <text>Lorem Ipsum</text>
+    </docTitle>
+    <navMap>
+        <navPoint id="ch1" playOrder="1">
+            <navLabel>
+                <text>Chapter 1</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch1"/>
+        </navPoint>
+        <navPoint id="ch2" playOrder="2">
+            <navLabel>
+                <text>Chapter 2</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch2"/>
+        </navPoint>
+    </navMap>
+</ncx>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/fallbacks-circular/EPUB/lorem.opf b/src/test/resources/20/expanded/invalid/fallbacks-circular/EPUB/lorem.opf
new file mode 100644
index 0000000..723040c
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/fallbacks-circular/EPUB/lorem.opf
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+        <item id="img1" href="image.xyz" media-type="image/xyz" fallback="img2"/>
+        <item id="img2" href="image.abc" media-type="image/abc" fallback="img1"/>
+        <item id="img3" href="image.jpeg" media-type="image/jpeg"/>
+        <item id="ncx" href="lorem.ncx" media-type="application/x-dtbncx+xml"/>
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/20/expanded/invalid/fallbacks-circular/EPUB/lorem.xhtml b/src/test/resources/20/expanded/invalid/fallbacks-circular/EPUB/lorem.xhtml
new file mode 100644
index 0000000..199a354
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/fallbacks-circular/EPUB/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<div>
+			<h2>Table of Contents</h2>
+			<div>
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</div>
+		</div>
+		<div id="ch1">
+			<h2>Chapter 1</h2>
+			<img src="image.xyz" alt=""/>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/20/expanded/invalid/fallbacks-circular/META-INF/container.xml b/src/test/resources/20/expanded/invalid/fallbacks-circular/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/fallbacks-circular/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/fallbacks-circular/mimetype b/src/test/resources/20/expanded/invalid/fallbacks-circular/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/fallbacks-circular/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/issue182/EPUB/1-lorem.xhtml b/src/test/resources/20/expanded/invalid/issue182/EPUB/1-lorem.xhtml
new file mode 100644
index 0000000..6bce358
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/issue182/EPUB/1-lorem.xhtml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>		
+		<div id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/20/expanded/invalid/issue182/EPUB/2-lorem.xhtml b/src/test/resources/20/expanded/invalid/issue182/EPUB/2-lorem.xhtml
new file mode 100644
index 0000000..b738945
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/issue182/EPUB/2-lorem.xhtml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<div id="ch3">
+			<h2>Chapter 3</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch4">
+			<h2>Chapter 4</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/20/expanded/invalid/issue182/EPUB/lorem.css b/src/test/resources/20/expanded/invalid/issue182/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/issue182/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/issue182/EPUB/lorem.opf b/src/test/resources/20/expanded/invalid/issue182/EPUB/lorem.opf
new file mode 100644
index 0000000..946910e
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/issue182/EPUB/lorem.opf
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:998e8400-a29c-41d4-a716-2278971238567</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="1-lorem.xhtml" media-type="application/xhtml+xml" />
+        <item id="t2" href="2-lorem.xhtml" media-type="application/xhtml+xml" />
+        <item id="ncx" href="nav.ncx" media-type="application/x-dtbncx+xml" />
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="t1" />    
+        <itemref idref="t2" />
+        <itemref idref="t1" />
+    </spine>    
+</package>
diff --git a/src/test/resources/20/expanded/invalid/issue182/EPUB/nav.ncx b/src/test/resources/20/expanded/invalid/issue182/EPUB/nav.ncx
new file mode 100644
index 0000000..ae4acde
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/issue182/EPUB/nav.ncx
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/"
+    xmlns="http://www.daisy.org/z3986/2005/ncx/"
+    version="2005-1"
+    xml:lang="en">
+    <head>
+        <meta name="dtb:uid" content="urn:uuid:998e8400-a29c-41d4-a716-2278971238567"/>
+    </head>
+    <docTitle>
+        <text>Lorem Ipsum</text>
+    </docTitle>
+    <navMap>
+        <navPoint id="ch1">
+            <navLabel>
+                <text>Chapter 1</text>
+            </navLabel>
+            <content src="1-lorem.xhtml#ch1"/>
+        </navPoint>
+        <navPoint id="ch2">
+            <navLabel>
+                <text>Chapter 2</text>
+            </navLabel>
+            <content src="1-lorem.xhtml#ch2"/>
+        </navPoint>
+        <navPoint id="ch3">
+            <navLabel>
+                <text>Chapter 3</text>
+            </navLabel>
+            <content src="2-lorem.xhtml#ch3"/>
+        </navPoint>
+        <navPoint id="ch4">
+            <navLabel>
+                <text>Chapter 4</text>
+            </navLabel>
+            <content src="2-lorem.xhtml#ch4"/>
+        </navPoint>
+    </navMap>
+</ncx>
diff --git a/src/test/resources/20/expanded/invalid/issue182/META-INF/container.xml b/src/test/resources/20/expanded/invalid/issue182/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/issue182/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/issue182/mimetype b/src/test/resources/20/expanded/invalid/issue182/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/issue182/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/lorem-dual-guide.txt b/src/test/resources/20/expanded/invalid/lorem-dual-guide.txt
new file mode 100644
index 0000000..84af072
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/lorem-dual-guide.txt
@@ -0,0 +1,10 @@
+[format name] application/epub+zip
+[format version] 2.0
+[unique identifier] urn:uuid:998e8400-a29c-41d4-a716-2278971238567
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[items count] 4
+[declared mimetype] application/xhtml+xml
+[declared mimetype] application/x-dtbncx+xml
+[declared mimetype] text/css
diff --git a/src/test/resources/20/expanded/invalid/lorem-dual-guide/EPUB/1-lorem.xhtml b/src/test/resources/20/expanded/invalid/lorem-dual-guide/EPUB/1-lorem.xhtml
new file mode 100644
index 0000000..6bce358
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/lorem-dual-guide/EPUB/1-lorem.xhtml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>		
+		<div id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/20/expanded/invalid/lorem-dual-guide/EPUB/2-lorem.xhtml b/src/test/resources/20/expanded/invalid/lorem-dual-guide/EPUB/2-lorem.xhtml
new file mode 100644
index 0000000..b738945
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/lorem-dual-guide/EPUB/2-lorem.xhtml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<div id="ch3">
+			<h2>Chapter 3</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch4">
+			<h2>Chapter 4</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/20/expanded/invalid/lorem-dual-guide/EPUB/lorem.css b/src/test/resources/20/expanded/invalid/lorem-dual-guide/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/lorem-dual-guide/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/lorem-dual-guide/EPUB/lorem.opf b/src/test/resources/20/expanded/invalid/lorem-dual-guide/EPUB/lorem.opf
new file mode 100644
index 0000000..0e103df
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/lorem-dual-guide/EPUB/lorem.opf
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:998e8400-a29c-41d4-a716-2278971238567</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="1-lorem.xhtml" media-type="application/xhtml+xml" />
+        <item id="t2" href="2-lorem.xhtml" media-type="application/xhtml+xml" />
+        <item id="ncx" href="nav.ncx" media-type="application/x-dtbncx+xml" />
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="t1" />    
+        <itemref idref="t2" />    
+    </spine>    
+    <guide>        
+        <reference type="toc" title="Table of Contents" href="nav.ncx" />        
+        <reference type="text" title="Contents start" href="nonexisting.xhtml" />
+    </guide>
+</package>
diff --git a/src/test/resources/20/expanded/invalid/lorem-dual-guide/EPUB/nav.ncx b/src/test/resources/20/expanded/invalid/lorem-dual-guide/EPUB/nav.ncx
new file mode 100644
index 0000000..ae4acde
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/lorem-dual-guide/EPUB/nav.ncx
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/"
+    xmlns="http://www.daisy.org/z3986/2005/ncx/"
+    version="2005-1"
+    xml:lang="en">
+    <head>
+        <meta name="dtb:uid" content="urn:uuid:998e8400-a29c-41d4-a716-2278971238567"/>
+    </head>
+    <docTitle>
+        <text>Lorem Ipsum</text>
+    </docTitle>
+    <navMap>
+        <navPoint id="ch1">
+            <navLabel>
+                <text>Chapter 1</text>
+            </navLabel>
+            <content src="1-lorem.xhtml#ch1"/>
+        </navPoint>
+        <navPoint id="ch2">
+            <navLabel>
+                <text>Chapter 2</text>
+            </navLabel>
+            <content src="1-lorem.xhtml#ch2"/>
+        </navPoint>
+        <navPoint id="ch3">
+            <navLabel>
+                <text>Chapter 3</text>
+            </navLabel>
+            <content src="2-lorem.xhtml#ch3"/>
+        </navPoint>
+        <navPoint id="ch4">
+            <navLabel>
+                <text>Chapter 4</text>
+            </navLabel>
+            <content src="2-lorem.xhtml#ch4"/>
+        </navPoint>
+    </navMap>
+</ncx>
diff --git a/src/test/resources/20/expanded/invalid/lorem-dual-guide/META-INF/container.xml b/src/test/resources/20/expanded/invalid/lorem-dual-guide/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/lorem-dual-guide/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/lorem-dual-guide/mimetype b/src/test/resources/20/expanded/invalid/lorem-dual-guide/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/lorem-dual-guide/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/lorem-mimetype.txt b/src/test/resources/20/expanded/invalid/lorem-mimetype.txt
new file mode 100644
index 0000000..bfa8112
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/lorem-mimetype.txt
@@ -0,0 +1,10 @@
+[format version] 2.0
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[items count] 3
+[declared mimetype] application/xhtml+xml
+[declared mimetype] application/x-dtbncx+xml
+[declared mimetype] text/css
+[characters count] 5988
diff --git a/src/test/resources/20/expanded/invalid/lorem-mimetype/EPUB/lorem.css b/src/test/resources/20/expanded/invalid/lorem-mimetype/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/lorem-mimetype/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/lorem-mimetype/EPUB/lorem.ncx b/src/test/resources/20/expanded/invalid/lorem-mimetype/EPUB/lorem.ncx
new file mode 100644
index 0000000..e06ffd7
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/lorem-mimetype/EPUB/lorem.ncx
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/"
+    xmlns="http://www.daisy.org/z3986/2005/ncx/"
+    version="2005-1"
+    xml:lang="en">
+    <head>
+        <meta name="dtb:uid" content="urn:uuid:550e8400-e29b-41d4-a716-4466674412314"/>
+        <meta name="dtb:depth" content="1"/>
+        <meta name="dtb:totalPageCount" content="0"/>
+        <meta name="dtb:maxPageNumber" content="0"/>
+    </head>
+    <docTitle>
+        <text>Lorem Ipsum</text>
+    </docTitle>
+    <navMap>
+        <navPoint id="ch1" playOrder="1">
+            <navLabel>
+                <text>Chapter 1</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch1"/>
+        </navPoint>
+        <navPoint id="ch2" playOrder="2">
+            <navLabel>
+                <text>Chapter 2</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch2"/>
+        </navPoint>
+             <navPoint id="thisIsABadOne" playOrder="3">
+                 <navLabel>
+                     <text>bogus</text>
+                 </navLabel>
+             <content src="../../AppData/Local/Temp/www.NotARealWebsite.com"/>
+        </navPoint>
+    </navMap>
+</ncx>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/lorem-mimetype/EPUB/lorem.opf b/src/test/resources/20/expanded/invalid/lorem-mimetype/EPUB/lorem.opf
new file mode 100644
index 0000000..ca73a3c
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/lorem-mimetype/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>        
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" media-type="application/xhtml+xml" /> 
+        <item id="ncx" href="lorem.ncx" media-type="application/x-dtbncx+xml" /> 
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/lorem-mimetype/EPUB/lorem.xhtml b/src/test/resources/20/expanded/invalid/lorem-mimetype/EPUB/lorem.xhtml
new file mode 100644
index 0000000..6bce358
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/lorem-mimetype/EPUB/lorem.xhtml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>		
+		<div id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/20/expanded/invalid/lorem-mimetype/META-INF/container.xml b/src/test/resources/20/expanded/invalid/lorem-mimetype/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/lorem-mimetype/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/lorem-mimetype/mimetype b/src/test/resources/20/expanded/invalid/lorem-mimetype/mimetype
new file mode 100644
index 0000000..8f3a928
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/lorem-mimetype/mimetype
@@ -0,0 +1 @@
+application/something+else
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/xhtml-extension/EPUB/lorem.css b/src/test/resources/20/expanded/invalid/xhtml-extension/EPUB/lorem.css
new file mode 100644
index 0000000..59fa2ed
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/xhtml-extension/EPUB/lorem.css
@@ -0,0 +1,4 @@
+body {
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/xhtml-extension/EPUB/lorem.foo b/src/test/resources/20/expanded/invalid/xhtml-extension/EPUB/lorem.foo
new file mode 100644
index 0000000..52731c6
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/xhtml-extension/EPUB/lorem.foo
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>		
+		<div id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/20/expanded/invalid/xhtml-extension/EPUB/lorem.ncx b/src/test/resources/20/expanded/invalid/xhtml-extension/EPUB/lorem.ncx
new file mode 100644
index 0000000..143423c
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/xhtml-extension/EPUB/lorem.ncx
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/"
+    xmlns="http://www.daisy.org/z3986/2005/ncx/"
+    version="2005-1"
+    xml:lang="en">
+    <head>
+        <meta name="dtb:uid" content="urn:uuid:550e8400-e29b-41d4-a716-4466674412314"/>
+        <meta name="dtb:depth" content="1"/>
+        <meta name="dtb:totalPageCount" content="0"/>
+        <meta name="dtb:maxPageNumber" content="0"/>
+    </head>
+    <docTitle>
+        <text>Lorem Ipsum</text>
+    </docTitle>
+    <navMap>
+        <navPoint id="ch1" playOrder="1">
+            <navLabel>
+                <text>Chapter 1</text>
+            </navLabel>
+            <content src="lorem.foo#ch1"/>
+        </navPoint>
+        <navPoint id="ch2" playOrder="2">
+            <navLabel>
+                <text>Chapter 2</text>
+            </navLabel>
+            <content src="lorem.foo#ch2"/>
+        </navPoint>
+    </navMap>
+</ncx>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/xhtml-extension/EPUB/lorem.opf b/src/test/resources/20/expanded/invalid/xhtml-extension/EPUB/lorem.opf
new file mode 100644
index 0000000..063de9f
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/xhtml-extension/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>        
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.foo" media-type="application/xhtml+xml" /> 
+        <item id="ncx" href="lorem.ncx" media-type="application/x-dtbncx+xml" /> 
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/xhtml-extension/META-INF/container.xml b/src/test/resources/20/expanded/invalid/xhtml-extension/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/xhtml-extension/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/invalid/xhtml-extension/mimetype b/src/test/resources/20/expanded/invalid/xhtml-extension/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/20/expanded/invalid/xhtml-extension/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/fallbacks.txt b/src/test/resources/20/expanded/valid/fallbacks.txt
new file mode 100644
index 0000000..0581de4
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/fallbacks.txt
@@ -0,0 +1,13 @@
+[format version] 2.0
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[items count] 7
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[declared mimetype] image/xyz
+[declared mimetype] image/abc
+[declared mimetype] image/jpeg
+[declared mimetype] application/x-dtbncx+xml
+[declared mimetype] application/vnd.adobe-page-template+xml
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/fallbacks/EPUB/image.abc b/src/test/resources/20/expanded/valid/fallbacks/EPUB/image.abc
new file mode 100755
index 0000000..4d55c1e
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/fallbacks/EPUB/image.abc
@@ -0,0 +1 @@
+<xyz/>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/fallbacks/EPUB/image.jpeg b/src/test/resources/20/expanded/valid/fallbacks/EPUB/image.jpeg
new file mode 100644
index 0000000..ff336a5
Binary files /dev/null and b/src/test/resources/20/expanded/valid/fallbacks/EPUB/image.jpeg differ
diff --git a/src/test/resources/20/expanded/valid/fallbacks/EPUB/image.xyz b/src/test/resources/20/expanded/valid/fallbacks/EPUB/image.xyz
new file mode 100755
index 0000000..4d55c1e
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/fallbacks/EPUB/image.xyz
@@ -0,0 +1 @@
+<xyz/>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/fallbacks/EPUB/lorem.css b/src/test/resources/20/expanded/valid/fallbacks/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/fallbacks/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/fallbacks/EPUB/lorem.ncx b/src/test/resources/20/expanded/valid/fallbacks/EPUB/lorem.ncx
new file mode 100644
index 0000000..fe3524a
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/fallbacks/EPUB/lorem.ncx
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/"
+    xmlns="http://www.daisy.org/z3986/2005/ncx/"
+    version="2005-1"
+    xml:lang="en">
+    <head>
+        <meta name="dtb:uid" content="urn:uuid:550e8400-e29b-41d4-a716-4466674412314"/>
+        <meta name="dtb:depth" content="1"/>
+        <meta name="dtb:totalPageCount" content="0"/>
+        <meta name="dtb:maxPageNumber" content="0"/>
+    </head>
+    <docTitle>
+        <text>Lorem Ipsum</text>
+    </docTitle>
+    <navMap>
+        <navPoint id="ch1" playOrder="1">
+            <navLabel>
+                <text>Chapter 1</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch1"/>
+        </navPoint>
+        <navPoint id="ch2" playOrder="2">
+            <navLabel>
+                <text>Chapter 2</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch2"/>
+        </navPoint>
+    </navMap>
+</ncx>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/fallbacks/EPUB/lorem.opf b/src/test/resources/20/expanded/valid/fallbacks/EPUB/lorem.opf
new file mode 100644
index 0000000..d011644
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/fallbacks/EPUB/lorem.opf
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+        <item id="img1" href="image.xyz" media-type="image/xyz" fallback="img2"/>
+        <item id="img2" href="image.abc" media-type="image/abc" fallback="img3"/>
+        <item id="img3" href="image.jpeg" media-type="image/jpeg"/>
+    	<item id="ncx" href="lorem.ncx" media-type="application/x-dtbncx+xml"/>
+    	<item id="xpgt" href="page-template.xpgt" media-type="application/vnd.adobe-page-template+xml" fallback-style="css"/>
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/20/expanded/valid/fallbacks/EPUB/lorem.xhtml b/src/test/resources/20/expanded/valid/fallbacks/EPUB/lorem.xhtml
new file mode 100644
index 0000000..d43ef0c
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/fallbacks/EPUB/lorem.xhtml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+		<link rel="stylesheet" type="application/vnd.adobe-page-template+xml" href="page-template.xpgt"/>
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<div>
+			<h2>Table of Contents</h2>
+			<div>
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</div>
+		</div>
+		<div id="ch1">
+			<h2>Chapter 1</h2>
+			<img src="image.xyz" alt=""/>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/20/expanded/valid/fallbacks/EPUB/page-template.xpgt b/src/test/resources/20/expanded/valid/fallbacks/EPUB/page-template.xpgt
new file mode 100755
index 0000000..d260589
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/fallbacks/EPUB/page-template.xpgt
@@ -0,0 +1,44 @@
+<?xml version='1.0' encoding='utf-8'?>
+<ade:template xmlns="http://www.w3.org/1999/xhtml" xmlns:ade="http://ns.adobe.com/2006/ade" xmlns:fo="http://www.w3.org/1999/XSL/Format">
+	
+	<fo:layout-master-set>
+		
+		<fo:simple-page-master master-name="single_column">
+			<fo:region-body margin-bottom="1.5em" margin-top="1.5em" margin-left="1.5em" margin-right="1.5em"/>
+		</fo:simple-page-master>
+		
+		<fo:simple-page-master master-name="two_column" margin-bottom="1em" margin-top="1em" margin-left="1em" margin-right="1em">
+			<fo:region-body column-count="2" column-gap="10pt"/>
+		</fo:simple-page-master>
+		
+		<fo:simple-page-master master-name="two_column_head" margin-bottom="1em" margin-top="1em" margin-left="1em" margin-right="1em">
+			<fo:region-before extent="8.3em"/>
+			<fo:region-body column-count="2" column-gap="10pt"/>
+		</fo:simple-page-master>
+		
+		<fo:simple-page-master master-name="three_column" margin-bottom="0.5em" margin-top="0.5em" margin-left="0.5em" margin-right="0.5em">
+			<fo:region-body column-count="3" column-gap="10pt"/>
+		</fo:simple-page-master>
+		
+		<fo:simple-page-master master-name="three_column_head" margin-bottom="0.5em" margin-top="0.5em" margin-left="0.5em" margin-right="0.5em">
+			<fo:region-before extent="8.3em"/>
+			<fo:region-body column-count="3" column-gap="10pt"/>
+		</fo:simple-page-master>
+		
+		<fo:page-sequence-master>
+			<fo:repeatable-page-master-alternatives>
+				<fo:conditional-page-master-reference master-reference="three_column_head" page-position="first" ade:min-page-width="80em"/>
+				<fo:conditional-page-master-reference master-reference="three_column" ade:min-page-width="80em"/>
+				<fo:conditional-page-master-reference master-reference="two_column_head" page-position="first" ade:min-page-width="50em"/>
+				<fo:conditional-page-master-reference master-reference="two_column" ade:min-page-width="50em"/>
+				<fo:conditional-page-master-reference master-reference="single_column"/>
+			</fo:repeatable-page-master-alternatives>
+		</fo:page-sequence-master>
+		
+	</fo:layout-master-set>
+	
+	<ade:style>
+		<ade:styling-rule selector=".title_box" display="adobe-other-region" adobe-region="xsl-region-before"/>
+	</ade:style>
+	
+</ade:template>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/fallbacks/META-INF/container.xml b/src/test/resources/20/expanded/valid/fallbacks/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/fallbacks/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/fallbacks/mimetype b/src/test/resources/20/expanded/valid/fallbacks/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/fallbacks/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/issue205/EPUB/lorem.css b/src/test/resources/20/expanded/valid/issue205/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/issue205/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/issue205/EPUB/lorem.ncx b/src/test/resources/20/expanded/valid/issue205/EPUB/lorem.ncx
new file mode 100644
index 0000000..fe3524a
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/issue205/EPUB/lorem.ncx
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/"
+    xmlns="http://www.daisy.org/z3986/2005/ncx/"
+    version="2005-1"
+    xml:lang="en">
+    <head>
+        <meta name="dtb:uid" content="urn:uuid:550e8400-e29b-41d4-a716-4466674412314"/>
+        <meta name="dtb:depth" content="1"/>
+        <meta name="dtb:totalPageCount" content="0"/>
+        <meta name="dtb:maxPageNumber" content="0"/>
+    </head>
+    <docTitle>
+        <text>Lorem Ipsum</text>
+    </docTitle>
+    <navMap>
+        <navPoint id="ch1" playOrder="1">
+            <navLabel>
+                <text>Chapter 1</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch1"/>
+        </navPoint>
+        <navPoint id="ch2" playOrder="2">
+            <navLabel>
+                <text>Chapter 2</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch2"/>
+        </navPoint>
+    </navMap>
+</ncx>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/issue205/EPUB/lorem.opf b/src/test/resources/20/expanded/valid/issue205/EPUB/lorem.opf
new file mode 100644
index 0000000..dadec5f
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/issue205/EPUB/lorem.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" xmlns:opf="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>        
+        <dc:creator opf:role="clr" opf:file-as="Crabtree, Bill">Bill Crabtree</dc:creator>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" media-type="application/xhtml+xml" /> 
+        <item id="ncx" href="lorem.ncx" media-type="application/x-dtbncx+xml" /> 
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/20/expanded/valid/issue205/EPUB/lorem.xhtml b/src/test/resources/20/expanded/valid/issue205/EPUB/lorem.xhtml
new file mode 100644
index 0000000..851a1d5
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/issue205/EPUB/lorem.xhtml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>		
+		<div id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/20/expanded/valid/issue205/META-INF/container.xml b/src/test/resources/20/expanded/valid/issue205/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/issue205/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/issue205/mimetype b/src/test/resources/20/expanded/valid/issue205/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/issue205/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/issue256/.DS_Store b/src/test/resources/20/expanded/valid/issue256/.DS_Store
new file mode 100644
index 0000000..dd70dbe
Binary files /dev/null and b/src/test/resources/20/expanded/valid/issue256/.DS_Store differ
diff --git a/src/test/resources/20/expanded/valid/issue256/._DS_Store b/src/test/resources/20/expanded/valid/issue256/._DS_Store
new file mode 100644
index 0000000..e69de29
diff --git a/src/test/resources/20/expanded/valid/issue256/EPUB/images/Thumbs.db b/src/test/resources/20/expanded/valid/issue256/EPUB/images/Thumbs.db
new file mode 100644
index 0000000..e69de29
diff --git a/src/test/resources/20/expanded/valid/issue256/EPUB/images/ehthumbs.db b/src/test/resources/20/expanded/valid/issue256/EPUB/images/ehthumbs.db
new file mode 100644
index 0000000..e69de29
diff --git a/src/test/resources/20/expanded/valid/issue256/EPUB/images/image.jpg b/src/test/resources/20/expanded/valid/issue256/EPUB/images/image.jpg
new file mode 100644
index 0000000..ff336a5
Binary files /dev/null and b/src/test/resources/20/expanded/valid/issue256/EPUB/images/image.jpg differ
diff --git a/src/test/resources/20/expanded/valid/issue256/EPUB/lorem.css b/src/test/resources/20/expanded/valid/issue256/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/issue256/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/issue256/EPUB/lorem.ncx b/src/test/resources/20/expanded/valid/issue256/EPUB/lorem.ncx
new file mode 100644
index 0000000..863b251
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/issue256/EPUB/lorem.ncx
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/"
+    xmlns="http://www.daisy.org/z3986/2005/ncx/"
+    version="2005-1"
+    xml:lang="en">
+    <head>
+        <meta name="dtb:uid" content="urn:uuid:a4d4f780-93aa-11e2-9e96-0800200c9a66"/>
+        <meta name="dtb:depth" content="1"/>
+        <meta name="dtb:totalPageCount" content="0"/>
+        <meta name="dtb:maxPageNumber" content="0"/>
+    </head>
+    <docTitle>
+        <text>Lorem Ipsum</text>
+    </docTitle>
+    <navMap>
+        <navPoint id="ch1" playOrder="1">
+            <navLabel>
+                <text>Chapter 1</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch1"/>
+        </navPoint>
+        <navPoint id="ch2" playOrder="2">
+            <navLabel>
+                <text>Chapter 2</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch2"/>
+        </navPoint>
+    </navMap>
+</ncx>
diff --git a/src/test/resources/20/expanded/valid/issue256/EPUB/lorem.opf b/src/test/resources/20/expanded/valid/issue256/EPUB/lorem.opf
new file mode 100644
index 0000000..2b08971
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/issue256/EPUB/lorem.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:a4d4f780-93aa-11e2-9e96-0800200c9a66</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2013-03-23</dc:date>        
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" media-type="application/xhtml+xml" />
+        <item id="ncx" href="lorem.ncx" media-type="application/x-dtbncx+xml" />
+        <item id="css" href="lorem.css" media-type="text/css" />
+        <item id="image" href="images/image.jpg" media-type="image/jpeg" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/20/expanded/valid/issue256/EPUB/lorem.xhtml b/src/test/resources/20/expanded/valid/issue256/EPUB/lorem.xhtml
new file mode 100644
index 0000000..8214c9d
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/issue256/EPUB/lorem.xhtml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>		
+		<div id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+			
+			<p><img src="images/image.jpg" alt="An image"/></p>
+			
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/20/expanded/valid/issue256/META-INF/container.xml b/src/test/resources/20/expanded/valid/issue256/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/issue256/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/issue256/mimetype b/src/test/resources/20/expanded/valid/issue256/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/issue256/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/issue267.txt b/src/test/resources/20/expanded/valid/issue267.txt
new file mode 100644
index 0000000..48389f6
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/issue267.txt
@@ -0,0 +1,9 @@
+[format version] 2.0
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[items count] 3
+[declared mimetype] application/xhtml+xml
+[declared mimetype] application/x-dtbncx+xml
+[declared mimetype] text/css
diff --git a/src/test/resources/20/expanded/valid/issue267/EPUB/lorem.css b/src/test/resources/20/expanded/valid/issue267/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/issue267/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/issue267/EPUB/lorem.ncx b/src/test/resources/20/expanded/valid/issue267/EPUB/lorem.ncx
new file mode 100644
index 0000000..fe3524a
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/issue267/EPUB/lorem.ncx
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/"
+    xmlns="http://www.daisy.org/z3986/2005/ncx/"
+    version="2005-1"
+    xml:lang="en">
+    <head>
+        <meta name="dtb:uid" content="urn:uuid:550e8400-e29b-41d4-a716-4466674412314"/>
+        <meta name="dtb:depth" content="1"/>
+        <meta name="dtb:totalPageCount" content="0"/>
+        <meta name="dtb:maxPageNumber" content="0"/>
+    </head>
+    <docTitle>
+        <text>Lorem Ipsum</text>
+    </docTitle>
+    <navMap>
+        <navPoint id="ch1" playOrder="1">
+            <navLabel>
+                <text>Chapter 1</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch1"/>
+        </navPoint>
+        <navPoint id="ch2" playOrder="2">
+            <navLabel>
+                <text>Chapter 2</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch2"/>
+        </navPoint>
+    </navMap>
+</ncx>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/issue267/EPUB/lorem.opf b/src/test/resources/20/expanded/valid/issue267/EPUB/lorem.opf
new file mode 100644
index 0000000..bf5a4b1
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/issue267/EPUB/lorem.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="uid">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+    <dc:title>Lorem Ipsum</dc:title>
+    <dc:title>Second title</dc:title>
+    <dc:language>la</dc:language>
+    <dc:date>2011-09-01</dc:date>        
+  </metadata> 
+  <manifest>
+    <item id="t1" href="lorem.xhtml" media-type="application/xhtml+xml" /> 
+    <item id="ncx" href="lorem.ncx" media-type="application/x-dtbncx+xml" /> 
+    <item id="css" href="lorem.css" media-type="text/css" />
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="t1" />        
+  </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/issue267/EPUB/lorem.xhtml b/src/test/resources/20/expanded/valid/issue267/EPUB/lorem.xhtml
new file mode 100644
index 0000000..851a1d5
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/issue267/EPUB/lorem.xhtml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>		
+		<div id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/20/expanded/valid/issue267/META-INF/container.xml b/src/test/resources/20/expanded/valid/issue267/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/issue267/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/issue267/mimetype b/src/test/resources/20/expanded/valid/issue267/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/issue267/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem-basic-dual.txt b/src/test/resources/20/expanded/valid/lorem-basic-dual.txt
new file mode 100644
index 0000000..c53ff22
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-basic-dual.txt
@@ -0,0 +1,9 @@
+[format version] 2.0
+[unique identifier] urn:uuid:998e8400-a29c-41d4-a716-2278971238567
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[items count] 4
+[declared mimetype] application/xhtml+xml
+[declared mimetype] application/x-dtbncx+xml
+[declared mimetype] text/css
diff --git a/src/test/resources/20/expanded/valid/lorem-basic-dual/EPUB/1-lorem.xhtml b/src/test/resources/20/expanded/valid/lorem-basic-dual/EPUB/1-lorem.xhtml
new file mode 100644
index 0000000..6bce358
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-basic-dual/EPUB/1-lorem.xhtml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>		
+		<div id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/20/expanded/valid/lorem-basic-dual/EPUB/2-lorem.xhtml b/src/test/resources/20/expanded/valid/lorem-basic-dual/EPUB/2-lorem.xhtml
new file mode 100644
index 0000000..b738945
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-basic-dual/EPUB/2-lorem.xhtml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<div id="ch3">
+			<h2>Chapter 3</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch4">
+			<h2>Chapter 4</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/20/expanded/valid/lorem-basic-dual/EPUB/lorem.css b/src/test/resources/20/expanded/valid/lorem-basic-dual/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-basic-dual/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem-basic-dual/EPUB/lorem.opf b/src/test/resources/20/expanded/valid/lorem-basic-dual/EPUB/lorem.opf
new file mode 100644
index 0000000..d699199
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-basic-dual/EPUB/lorem.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:998e8400-a29c-41d4-a716-2278971238567</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="1-lorem.xhtml" media-type="application/xhtml+xml" />
+        <item id="t2" href="2-lorem.xhtml" media-type="application/xhtml+xml" />
+        <item id="ncx" href="nav.ncx" media-type="application/x-dtbncx+xml" />
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="t1" />    
+        <itemref idref="t2" />    
+    </spine>    
+</package>
diff --git a/src/test/resources/20/expanded/valid/lorem-basic-dual/EPUB/nav.ncx b/src/test/resources/20/expanded/valid/lorem-basic-dual/EPUB/nav.ncx
new file mode 100644
index 0000000..ae4acde
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-basic-dual/EPUB/nav.ncx
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/"
+    xmlns="http://www.daisy.org/z3986/2005/ncx/"
+    version="2005-1"
+    xml:lang="en">
+    <head>
+        <meta name="dtb:uid" content="urn:uuid:998e8400-a29c-41d4-a716-2278971238567"/>
+    </head>
+    <docTitle>
+        <text>Lorem Ipsum</text>
+    </docTitle>
+    <navMap>
+        <navPoint id="ch1">
+            <navLabel>
+                <text>Chapter 1</text>
+            </navLabel>
+            <content src="1-lorem.xhtml#ch1"/>
+        </navPoint>
+        <navPoint id="ch2">
+            <navLabel>
+                <text>Chapter 2</text>
+            </navLabel>
+            <content src="1-lorem.xhtml#ch2"/>
+        </navPoint>
+        <navPoint id="ch3">
+            <navLabel>
+                <text>Chapter 3</text>
+            </navLabel>
+            <content src="2-lorem.xhtml#ch3"/>
+        </navPoint>
+        <navPoint id="ch4">
+            <navLabel>
+                <text>Chapter 4</text>
+            </navLabel>
+            <content src="2-lorem.xhtml#ch4"/>
+        </navPoint>
+    </navMap>
+</ncx>
diff --git a/src/test/resources/20/expanded/valid/lorem-basic-dual/META-INF/container.xml b/src/test/resources/20/expanded/valid/lorem-basic-dual/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-basic-dual/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem-basic-dual/mimetype b/src/test/resources/20/expanded/valid/lorem-basic-dual/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-basic-dual/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem-dual-guide.txt b/src/test/resources/20/expanded/valid/lorem-dual-guide.txt
new file mode 100644
index 0000000..9810a55
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-dual-guide.txt
@@ -0,0 +1,9 @@
+[format version] 2.0
+[unique identifier] urn:uuid:998e8400-a29c-41d4-a716-2278971238567
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[items count] 4
+[declared mimetype] application/xhtml+xml
+[declared mimetype] application/x-dtbncx+xml
+[declared mimetype] text/css
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem-dual-guide/EPUB/1-lorem.xhtml b/src/test/resources/20/expanded/valid/lorem-dual-guide/EPUB/1-lorem.xhtml
new file mode 100644
index 0000000..6bce358
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-dual-guide/EPUB/1-lorem.xhtml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>		
+		<div id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/20/expanded/valid/lorem-dual-guide/EPUB/2-lorem.xhtml b/src/test/resources/20/expanded/valid/lorem-dual-guide/EPUB/2-lorem.xhtml
new file mode 100644
index 0000000..b738945
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-dual-guide/EPUB/2-lorem.xhtml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<div id="ch3">
+			<h2>Chapter 3</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch4">
+			<h2>Chapter 4</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/20/expanded/valid/lorem-dual-guide/EPUB/lorem.css b/src/test/resources/20/expanded/valid/lorem-dual-guide/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-dual-guide/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem-dual-guide/EPUB/lorem.opf b/src/test/resources/20/expanded/valid/lorem-dual-guide/EPUB/lorem.opf
new file mode 100644
index 0000000..fbe7376
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-dual-guide/EPUB/lorem.opf
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:998e8400-a29c-41d4-a716-2278971238567</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="1-lorem.xhtml" media-type="application/xhtml+xml" />
+        <item id="t2" href="2-lorem.xhtml" media-type="application/xhtml+xml" />
+        <item id="ncx" href="nav.ncx" media-type="application/x-dtbncx+xml" />
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="t1" />    
+        <itemref idref="t2" />    
+    </spine>    
+    <guide>        
+        <reference type="toc" title="Table of Contents" href="nav.ncx" />        
+        <reference type="text" title="Contents start" href="1-lorem.xhtml" />
+    </guide>
+</package>
diff --git a/src/test/resources/20/expanded/valid/lorem-dual-guide/EPUB/nav.ncx b/src/test/resources/20/expanded/valid/lorem-dual-guide/EPUB/nav.ncx
new file mode 100644
index 0000000..ae4acde
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-dual-guide/EPUB/nav.ncx
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/"
+    xmlns="http://www.daisy.org/z3986/2005/ncx/"
+    version="2005-1"
+    xml:lang="en">
+    <head>
+        <meta name="dtb:uid" content="urn:uuid:998e8400-a29c-41d4-a716-2278971238567"/>
+    </head>
+    <docTitle>
+        <text>Lorem Ipsum</text>
+    </docTitle>
+    <navMap>
+        <navPoint id="ch1">
+            <navLabel>
+                <text>Chapter 1</text>
+            </navLabel>
+            <content src="1-lorem.xhtml#ch1"/>
+        </navPoint>
+        <navPoint id="ch2">
+            <navLabel>
+                <text>Chapter 2</text>
+            </navLabel>
+            <content src="1-lorem.xhtml#ch2"/>
+        </navPoint>
+        <navPoint id="ch3">
+            <navLabel>
+                <text>Chapter 3</text>
+            </navLabel>
+            <content src="2-lorem.xhtml#ch3"/>
+        </navPoint>
+        <navPoint id="ch4">
+            <navLabel>
+                <text>Chapter 4</text>
+            </navLabel>
+            <content src="2-lorem.xhtml#ch4"/>
+        </navPoint>
+    </navMap>
+</ncx>
diff --git a/src/test/resources/20/expanded/valid/lorem-dual-guide/META-INF/container.xml b/src/test/resources/20/expanded/valid/lorem-dual-guide/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-dual-guide/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem-dual-guide/mimetype b/src/test/resources/20/expanded/valid/lorem-dual-guide/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-dual-guide/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem-uidspaces.txt b/src/test/resources/20/expanded/valid/lorem-uidspaces.txt
new file mode 100644
index 0000000..9ec6b9c
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-uidspaces.txt
@@ -0,0 +1,6 @@
+[format version] 2.0
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[items count] 3
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
diff --git a/src/test/resources/20/expanded/valid/lorem-uidspaces/EPUB/lorem.css b/src/test/resources/20/expanded/valid/lorem-uidspaces/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-uidspaces/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem-uidspaces/EPUB/lorem.ncx b/src/test/resources/20/expanded/valid/lorem-uidspaces/EPUB/lorem.ncx
new file mode 100644
index 0000000..fe3524a
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-uidspaces/EPUB/lorem.ncx
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/"
+    xmlns="http://www.daisy.org/z3986/2005/ncx/"
+    version="2005-1"
+    xml:lang="en">
+    <head>
+        <meta name="dtb:uid" content="urn:uuid:550e8400-e29b-41d4-a716-4466674412314"/>
+        <meta name="dtb:depth" content="1"/>
+        <meta name="dtb:totalPageCount" content="0"/>
+        <meta name="dtb:maxPageNumber" content="0"/>
+    </head>
+    <docTitle>
+        <text>Lorem Ipsum</text>
+    </docTitle>
+    <navMap>
+        <navPoint id="ch1" playOrder="1">
+            <navLabel>
+                <text>Chapter 1</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch1"/>
+        </navPoint>
+        <navPoint id="ch2" playOrder="2">
+            <navLabel>
+                <text>Chapter 2</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch2"/>
+        </navPoint>
+    </navMap>
+</ncx>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem-uidspaces/EPUB/lorem.opf b/src/test/resources/20/expanded/valid/lorem-uidspaces/EPUB/lorem.opf
new file mode 100644
index 0000000..69889c2
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-uidspaces/EPUB/lorem.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" xmlns:opf="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid" opf:scheme="URI">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:identifier opf:scheme="ISBN"> 978-0-9852681-0-7 </dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" media-type="application/xhtml+xml" /> 
+        <item id="ncx" href="lorem.ncx" media-type="application/x-dtbncx+xml" /> 
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/20/expanded/valid/lorem-uidspaces/EPUB/lorem.xhtml b/src/test/resources/20/expanded/valid/lorem-uidspaces/EPUB/lorem.xhtml
new file mode 100644
index 0000000..6bce358
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-uidspaces/EPUB/lorem.xhtml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>		
+		<div id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/20/expanded/valid/lorem-uidspaces/META-INF/container.xml b/src/test/resources/20/expanded/valid/lorem-uidspaces/META-INF/container.xml
new file mode 100644
index 0000000..c5c1567
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-uidspaces/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
diff --git a/src/test/resources/20/expanded/valid/lorem-uidspaces/mimetype b/src/test/resources/20/expanded/valid/lorem-uidspaces/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-uidspaces/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem-xrenditions-1ops/EPUB/lorem.css b/src/test/resources/20/expanded/valid/lorem-xrenditions-1ops/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-xrenditions-1ops/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem-xrenditions-1ops/EPUB/lorem.ncx b/src/test/resources/20/expanded/valid/lorem-xrenditions-1ops/EPUB/lorem.ncx
new file mode 100644
index 0000000..acdce32
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-xrenditions-1ops/EPUB/lorem.ncx
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/"
+    xmlns="http://www.daisy.org/z3986/2005/ncx/"
+    version="2005-1"
+    xml:lang="en">
+    <head>
+        <meta name="dtb:uid" content="urn:uuid:6179D963-C94E-459B-A7A4-4139D120998E"/>
+        <meta name="dtb:depth" content="1"/>
+        <meta name="dtb:totalPageCount" content="0"/>
+        <meta name="dtb:maxPageNumber" content="0"/>
+    </head>
+    <docTitle>
+        <text>Lorem Ipsum</text>
+    </docTitle>
+    <navMap>
+        <navPoint id="ch1" playOrder="1">
+            <navLabel>
+                <text>Chapter 1</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch1"/>
+        </navPoint>
+        <navPoint id="ch2" playOrder="2">
+            <navLabel>
+                <text>Chapter 2</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch2"/>
+        </navPoint>
+    </navMap>
+</ncx>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem-xrenditions-1ops/EPUB/lorem.opf b/src/test/resources/20/expanded/valid/lorem-xrenditions-1ops/EPUB/lorem.opf
new file mode 100644
index 0000000..cb9c7f1
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-xrenditions-1ops/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:6179D963-C94E-459B-A7A4-4139D120998E</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2012-10-17</dc:date>        
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" media-type="application/xhtml+xml" /> 
+        <item id="ncx" href="lorem.ncx" media-type="application/x-dtbncx+xml" /> 
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem-xrenditions-1ops/EPUB/lorem.xhtml b/src/test/resources/20/expanded/valid/lorem-xrenditions-1ops/EPUB/lorem.xhtml
new file mode 100644
index 0000000..851a1d5
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-xrenditions-1ops/EPUB/lorem.xhtml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>		
+		<div id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/20/expanded/valid/lorem-xrenditions-1ops/META-INF/container.xml b/src/test/resources/20/expanded/valid/lorem-xrenditions-1ops/META-INF/container.xml
new file mode 100644
index 0000000..af3f6ea
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-xrenditions-1ops/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="TEXT/lorem.txt" media-type="text/plain"/>
+		<rootfile full-path="EPUB/lorem.opf" media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem-xrenditions-1ops/TEXT/lorem.txt b/src/test/resources/20/expanded/valid/lorem-xrenditions-1ops/TEXT/lorem.txt
new file mode 100644
index 0000000..e096397
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-xrenditions-1ops/TEXT/lorem.txt
@@ -0,0 +1,88 @@
+			Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.
+
+			Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.
+
+			Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.
+
+			Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.
+
+			Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.
+		
+		
+			Chapter 2
+			Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.
+
+			Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.
+
+			Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.
+
+			Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.
+
+			Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.
+		
+	
+
diff --git a/src/test/resources/20/expanded/valid/lorem-xrenditions-1ops/mimetype b/src/test/resources/20/expanded/valid/lorem-xrenditions-1ops/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-xrenditions-1ops/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/EPUB/lorem.css b/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/EPUB/lorem.ncx b/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/EPUB/lorem.ncx
new file mode 100644
index 0000000..acdce32
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/EPUB/lorem.ncx
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/"
+    xmlns="http://www.daisy.org/z3986/2005/ncx/"
+    version="2005-1"
+    xml:lang="en">
+    <head>
+        <meta name="dtb:uid" content="urn:uuid:6179D963-C94E-459B-A7A4-4139D120998E"/>
+        <meta name="dtb:depth" content="1"/>
+        <meta name="dtb:totalPageCount" content="0"/>
+        <meta name="dtb:maxPageNumber" content="0"/>
+    </head>
+    <docTitle>
+        <text>Lorem Ipsum</text>
+    </docTitle>
+    <navMap>
+        <navPoint id="ch1" playOrder="1">
+            <navLabel>
+                <text>Chapter 1</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch1"/>
+        </navPoint>
+        <navPoint id="ch2" playOrder="2">
+            <navLabel>
+                <text>Chapter 2</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch2"/>
+        </navPoint>
+    </navMap>
+</ncx>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/EPUB/lorem.opf b/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/EPUB/lorem.opf
new file mode 100644
index 0000000..cb9c7f1
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:6179D963-C94E-459B-A7A4-4139D120998E</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2012-10-17</dc:date>        
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" media-type="application/xhtml+xml" /> 
+        <item id="ncx" href="lorem.ncx" media-type="application/x-dtbncx+xml" /> 
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/EPUB/lorem.xhtml b/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/EPUB/lorem.xhtml
new file mode 100644
index 0000000..851a1d5
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/EPUB/lorem.xhtml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>		
+		<div id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/EPUB_2/lorem.css b/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/EPUB_2/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/EPUB_2/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/EPUB_2/lorem.ncx b/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/EPUB_2/lorem.ncx
new file mode 100644
index 0000000..0c93456
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/EPUB_2/lorem.ncx
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/"
+    xmlns="http://www.daisy.org/z3986/2005/ncx/"
+    version="2005-1"
+    xml:lang="en">
+    <head>
+        <meta name="dtb:uid" content="urn:uuid:4ADD6D78-8F7E-4BCB-BB03-EB07560F46E7"/>
+        <meta name="dtb:depth" content="1"/>
+        <meta name="dtb:totalPageCount" content="0"/>
+        <meta name="dtb:maxPageNumber" content="0"/>
+    </head>
+    <docTitle>
+        <text>Lorem Ipsum</text>
+    </docTitle>
+    <navMap>
+        <navPoint id="ch1" playOrder="1">
+            <navLabel>
+                <text>Chapter 1</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch1"/>
+        </navPoint>
+        <navPoint id="ch2" playOrder="2">
+            <navLabel>
+                <text>Chapter 2</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch2"/>
+        </navPoint>
+    </navMap>
+</ncx>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/EPUB_2/lorem.opf b/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/EPUB_2/lorem.opf
new file mode 100644
index 0000000..8b189ad
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/EPUB_2/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:4ADD6D78-8F7E-4BCB-BB03-EB07560F46E7</dc:identifier>
+        <dc:title>Lorem Ipsum - alt</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2012-10-17</dc:date>        
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" media-type="application/xhtml+xml" /> 
+        <item id="ncx" href="lorem.ncx" media-type="application/x-dtbncx+xml" /> 
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/EPUB_2/lorem.xhtml b/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/EPUB_2/lorem.xhtml
new file mode 100644
index 0000000..851a1d5
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/EPUB_2/lorem.xhtml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>		
+		<div id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/META-INF/container.xml b/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/META-INF/container.xml
new file mode 100644
index 0000000..af444b7
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" media-type="application/oebps-package+xml"/>
+		<rootfile full-path="EPUB_2/lorem.opf" media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/mimetype b/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem-xrenditions-2ops/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem/lorem-basic.txt b/src/test/resources/20/expanded/valid/lorem/lorem-basic.txt
new file mode 100644
index 0000000..b3dd902
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem/lorem-basic.txt
@@ -0,0 +1,9 @@
+[format version] 2.0
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[items count] 3
+[declared mimetype] application/xhtml+xml
+[declared mimetype] application/x-dtbncx+xml
+[declared mimetype] text/css
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem/lorem-basic/EPUB/lorem.css b/src/test/resources/20/expanded/valid/lorem/lorem-basic/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem/lorem-basic/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem/lorem-basic/EPUB/lorem.ncx b/src/test/resources/20/expanded/valid/lorem/lorem-basic/EPUB/lorem.ncx
new file mode 100644
index 0000000..fe3524a
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem/lorem-basic/EPUB/lorem.ncx
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/"
+    xmlns="http://www.daisy.org/z3986/2005/ncx/"
+    version="2005-1"
+    xml:lang="en">
+    <head>
+        <meta name="dtb:uid" content="urn:uuid:550e8400-e29b-41d4-a716-4466674412314"/>
+        <meta name="dtb:depth" content="1"/>
+        <meta name="dtb:totalPageCount" content="0"/>
+        <meta name="dtb:maxPageNumber" content="0"/>
+    </head>
+    <docTitle>
+        <text>Lorem Ipsum</text>
+    </docTitle>
+    <navMap>
+        <navPoint id="ch1" playOrder="1">
+            <navLabel>
+                <text>Chapter 1</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch1"/>
+        </navPoint>
+        <navPoint id="ch2" playOrder="2">
+            <navLabel>
+                <text>Chapter 2</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch2"/>
+        </navPoint>
+    </navMap>
+</ncx>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem/lorem-basic/EPUB/lorem.opf b/src/test/resources/20/expanded/valid/lorem/lorem-basic/EPUB/lorem.opf
new file mode 100644
index 0000000..ca73a3c
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem/lorem-basic/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>        
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" media-type="application/xhtml+xml" /> 
+        <item id="ncx" href="lorem.ncx" media-type="application/x-dtbncx+xml" /> 
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem/lorem-basic/EPUB/lorem.xhtml b/src/test/resources/20/expanded/valid/lorem/lorem-basic/EPUB/lorem.xhtml
new file mode 100644
index 0000000..52731c6
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem/lorem-basic/EPUB/lorem.xhtml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>		
+		<div id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/20/expanded/valid/lorem/lorem-basic/META-INF/container.xml b/src/test/resources/20/expanded/valid/lorem/lorem-basic/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem/lorem-basic/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/20/expanded/valid/lorem/lorem-basic/mimetype b/src/test/resources/20/expanded/valid/lorem/lorem-basic/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/20/expanded/valid/lorem/lorem-basic/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/20/single/opf/invalid/bad-opf-namespace.opf b/src/test/resources/20/single/opf/invalid/bad-opf-namespace.opf
new file mode 100644
index 0000000..a5f19b9
--- /dev/null
+++ b/src/test/resources/20/single/opf/invalid/bad-opf-namespace.opf
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Bad OPF namespace (default)  I  P  D  F-->
+<package xmlns:opf="http://www.idpf.org/2007/opf"
+    xmlns:dcterms="http://purl.org/dc/terms/"
+    xmlns:dc="http://purl.org/dc/elements/1.1/"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns="http://www.ipdf.org/2007/opf"
+    unique-identifier="UUID"
+    version="2.0">
+    <metadata>
+        <dc:creator opf:role="aut">Keith Fahlgren</dc:creator>
+        <dc:date opf:event="creation">2011-03-31T21:25:15-04:00</dc:date>
+        <dc:language xsi:type="dcterms:RFC4646">en</dc:language>
+        <dc:identifier id="UUID" opf:scheme="URN">urn:uuid:B8704773-F184-4033-84F6-937FE093BAE9</dc:identifier>
+        <dc:title>Bad OPF namespace</dc:title>
+    </metadata>
+    <manifest>
+        <item id="body" href="body.html" media-type="application/xhtml+xml"/>
+        <item id="toc" href="toc.ncx" media-type="application/x-dtbncx+xml"/>
+    </manifest>
+    <spine toc="toc">
+        <itemref idref="body"/>
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/20/single/opf/invalid/dupe-id.opf b/src/test/resources/20/single/opf/invalid/dupe-id.opf
new file mode 100644
index 0000000..7d66a05
--- /dev/null
+++ b/src/test/resources/20/single/opf/invalid/dupe-id.opf
@@ -0,0 +1,21 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<package xmlns:opf="http://www.idpf.org/2007/opf" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="id">
+  <metadata>
+  	<dc:title>Advice to Sunday School Children</dc:title>    
+    <dc:identifier id="id" opf:scheme="URI">230498203498</dc:identifier>
+    <dc:language xsi:type="dcterms:RFC4646">en</dc:language>    
+  </metadata>
+  <manifest>
+    <item href="style.css" id="item12" media-type="text/css"/>
+    <item href="toc.ncx" id="ncx" media-type="application/x-dtbncx+xml"/>
+    <item href="c1.html" id="c1" media-type="application/xhtml+xml"/>
+    <item href="c2.html" id="c1" media-type="application/xhtml+xml"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="c1" linear="yes"/>
+  </spine>
+  <guide>
+    <reference href="c1.html" type="cover" title="Cover"/>
+  </guide>
+</package>
diff --git a/src/test/resources/20/single/opf/invalid/filename_contains_spaces_issue239.opf b/src/test/resources/20/single/opf/invalid/filename_contains_spaces_issue239.opf
new file mode 100644
index 0000000..ebfe0ee
--- /dev/null
+++ b/src/test/resources/20/single/opf/invalid/filename_contains_spaces_issue239.opf
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"
+    unique-identifier="bookid">
+    <metadata xmlns:opf="http://www.idpf.org/2007/opf">
+        <dc:creator opf:role="aut" opf:file-as="Fischer, Tobias">Tobias Fischer</dc:creator>
+        <dc:title>test epub</dc:title>
+        <dc:language xsi:type="dcterms:RFC5646">de</dc:language>
+        <dc:rights>© No Rights Reserved</dc:rights>
+        <dc:publisher>test</dc:publisher>
+        <dc:identifier id="bookid" opf:scheme="ISBN">urn:isbn:identifier</dc:identifier>
+        <dc:type>Text</dc:type>
+        <dc:date xsi:type="dcterms:W3CDTF" opf:event="epub-creation">2013-01-08</dc:date>
+        <meta name="cover" content="cover-image"/>
+    </metadata>
+    <manifest xmlns:opf="http://www.idpf.org/2007/opf">
+        <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/>
+        <item id="style-standard" href="stylesheet.css" media-type="text/css"/>
+        <item id="cover" href="cover.html" media-type="application/xhtml+xml"/>
+        <item id="haupttitel" href="haupttitel.html" media-type="application/xhtml+xml"/>
+        <item id="impressum" href="impressum.html" media-type="application/xhtml+xml"/>
+        <item id="chapter1" href="chapter1.html" media-type="application/xhtml+xml"/>
+        <item id="cover-image" href="images/coverIdentifier.jpg" media-type="image/jpeg"/>
+        <item id="img_2" href="images/Tuebingen Neckarfront.jpg" media-type="image/jpeg"/>
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="cover"/>
+        <itemref idref="haupttitel"/>
+        <itemref idref="chapter1"/>
+        <itemref idref="impressum"/>
+    </spine>
+    <guide>
+        <reference type="cover" title="Cover" href="cover.html"/>
+        <reference type="title-page" title="Titelei" href="haupttitel.html"/>
+        <reference type="text" title="Textanfang" href="haupttitel.html"/>
+        <reference type="copyright-page" title="Impressum" href="impressum.html"/>
+    </guide>
+</package>
diff --git a/src/test/resources/20/single/opf/invalid/null-identifier.opf b/src/test/resources/20/single/opf/invalid/null-identifier.opf
new file mode 100644
index 0000000..5b47cc9
--- /dev/null
+++ b/src/test/resources/20/single/opf/invalid/null-identifier.opf
@@ -0,0 +1,20 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<package xmlns:opf="http://www.idpf.org/2007/opf" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="id">
+  <metadata>
+  	<dc:title>Advice to Sunday School Children</dc:title>    
+    <dc:identifier id="id" opf:scheme="URI"/>
+    <dc:language xsi:type="dcterms:RFC4646">en</dc:language>    
+  </metadata>
+  <manifest>
+    <item href="style.css" id="item12" media-type="text/css"/>
+    <item href="toc.ncx" id="ncx" media-type="application/x-dtbncx+xml"/>
+    <item href="c1.html" id="c1" media-type="application/xhtml+xml"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="c1" linear="yes"/>
+  </spine>
+  <guide>
+    <reference href="c1.html" type="cover" title="Cover"/>
+  </guide>
+</package>
diff --git a/src/test/resources/20/single/opf/valid.opf b/src/test/resources/20/single/opf/valid.opf
new file mode 100644
index 0000000..4aca03f
--- /dev/null
+++ b/src/test/resources/20/single/opf/valid.opf
@@ -0,0 +1,30 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<package xmlns:opf="http://www.idpf.org/2007/opf" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="id">
+  <metadata>
+    <dc:rights>Public domain in the USA.</dc:rights>
+    <dc:identifier id="id" opf:scheme="URI">http://www.gutenberg.org/ebooks/36582</dc:identifier>
+    <dc:creator opf:file-as="Anonymous">Anonymous</dc:creator>
+    <dc:title>Advice to Sunday School Children</dc:title>
+    <dc:language xsi:type="dcterms:RFC4646">en</dc:language>
+    <dc:date opf:event="publication">2011-07-02</dc:date>
+    <dc:date opf:event="conversion">2011-07-03T19:26:31.417584+00:00</dc:date>
+    <dc:source>http://www.gutenberg.org/files/36582/36582-h/36582-h.htm</dc:source>
+    <meta content="item1" name="cover"/>
+  </metadata>
+  <manifest>
+
+    <item href="@public at vhost@g at gutenberg@html at files@36582 at 36582-h@images at cover.jpg" id="item1" media-type="image/jpeg"/>
+
+    <item href="pgepub.css" id="item12" media-type="text/css"/>
+    <item href="toc.ncx" id="ncx" media-type="application/x-dtbncx+xml"/>
+    <item href="wrap0000.html" id="coverpage-wrapper" media-type="application/xhtml+xml"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="coverpage-wrapper" linear="no"/>
+    <itemref idref="item1" linear="yes"/>
+  </spine>
+  <guide>
+    <reference href="wrap0000.html" type="cover" title="Cover"/>
+  </guide>
+</package>
diff --git a/src/test/resources/20/single/opf/valid/issue216.opf b/src/test/resources/20/single/opf/valid/issue216.opf
new file mode 100644
index 0000000..e7f5d70
--- /dev/null
+++ b/src/test/resources/20/single/opf/valid/issue216.opf
@@ -0,0 +1,29 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<package xmlns:opf="http://www.idpf.org/2007/opf" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="id">
+  <metadata>
+    <dc:rights>Public domain in the USA.</dc:rights>
+    <dc:identifier id="id" opf:scheme="URI">http://www.gutenberg.org/ebooks/36582</dc:identifier>
+    <dc:creator opf:file-as="Anonymous">Anonymous</dc:creator>
+    <dc:title>Advice to Sunday School Children</dc:title>
+    <dc:language xsi:type="dcterms:RFC4646">en</dc:language>
+    <dc:date opf:event="publication">2011-07-02</dc:date>
+    <dc:date opf:event="conversion">2011-07-03T19:26:31.417584+00:00</dc:date>
+    <dc:source>http://www.gutenberg.org/files/36582/36582-h/36582-h.htm</dc:source>
+    <meta content="item1" name="cover"/>
+  </metadata>
+  <manifest>
+	<item id="Html-cover-page" href="xhtml/cover.xml" media-type="application/xhtml+xml"/>
+	<item id="Cover-image" href="images/...jpg" media-type="image/jpeg"/>
+	<item id="Contents" href="xhtml/contents.html" media-type="application/xhtml+xml"/>
+	<item id="ncx" href="nav.ncx" media-type="application/x-dtbncx+xml"/>
+  </manifest>
+<spine toc="ncx">
+	<itemref idref="Html-cover-page" linear="no"/>
+	<itemref idref="Contents" linear="yes"/>
+</spine>
+<guide>
+	<reference type="cover" title="Cover" href="xhtml/cover.xml"/>
+	<reference type="toc" title="Contents" href="xhtml/contents.html"/>
+</guide>
+</package>
diff --git a/src/test/resources/20/single/ops/invalid/dupe-id.xhtml b/src/test/resources/20/single/ops/invalid/dupe-id.xhtml
new file mode 100644
index 0000000..71e2315
--- /dev/null
+++ b/src/test/resources/20/single/ops/invalid/dupe-id.xhtml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+    <head>
+        <title>dupe IDs</title>
+    </head>
+    <body>
+        <p id="aaa"></p>
+        <p id="aaa"></p>        
+    </body>
+</html>
diff --git a/src/test/resources/20/single/ops/invalid/unresolved-entity.xhtml b/src/test/resources/20/single/ops/invalid/unresolved-entity.xhtml
new file mode 100644
index 0000000..b8a155d
--- /dev/null
+++ b/src/test/resources/20/single/ops/invalid/unresolved-entity.xhtml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1/EN" "http://idpf.org/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+    <head>
+		<title>...</title>
+    </head>
+    <body>
+        <p>...</p>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/20/single/ops/valid/issue215.xhtml b/src/test/resources/20/single/ops/valid/issue215.xhtml
new file mode 100644
index 0000000..b3e3a22
--- /dev/null
+++ b/src/test/resources/20/single/ops/valid/issue215.xhtml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
+  <head>
+    <title>Cover</title>
+  </head>
+  <body class="cover">
+    <div class="cover-wrapper">
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/20/single/ops/valid/issue222.xhtml b/src/test/resources/20/single/ops/valid/issue222.xhtml
new file mode 100755
index 0000000..9f5b692
--- /dev/null
+++ b/src/test/resources/20/single/ops/valid/issue222.xhtml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:svg="http://www.w3.org/2000/svg">
+<head>
+<title>Part page</title>
+</head>
+<body>
+<div class="partpage">
+<svg:svg version="1.1" width="6in" height="9in" baseProfile="tiny" viewBox="0 0 4320 6480" preserveAspectRatio="xMidYMid">
+  <svg:g transform="scale(10)">
+      <svg:g fill="none" stroke="green" stroke-width="1"><svg:line x1="0" y1="0" x2="431" y2="0" /><svg:line x1="431" y1="0" x2="431" y2="647" /><svg:line x1="431" y1="647" x2="0" y2="647" /><svg:line x1="0" y1="647" x2="0" y2="0" /></svg:g>
+      <svg:foreignObject x="0" y="148" width="432" height="300" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
+          <body>
+            <div class="pp_partnum" xmlns="http://www.w3.org/1999/xhtml">Part I:</div>
+          </body>
+        </svg:foreignObject>
+  </svg:g>
+</svg:svg>
+</div> 
+</body> 
+</html>
\ No newline at end of file
diff --git a/src/test/resources/20/single/ops/valid/svg-font-face.svg b/src/test/resources/20/single/ops/valid/svg-font-face.svg
new file mode 100644
index 0000000..f467eba
--- /dev/null
+++ b/src/test/resources/20/single/ops/valid/svg-font-face.svg
@@ -0,0 +1,24 @@
+<?xml version="1.0" standalone="yes"?>
+<svg width="400px" height="300px" version="1.1"
+  xmlns = 'http://www.w3.org/2000/svg'>
+  <defs>
+    <font id="Font1" horiz-adv-x="1000">
+      <font-face font-family="Super Sans" font-weight="bold" font-style="normal"
+          units-per-em="1000" cap-height="600" x-height="400"
+          ascent="700" descent="300"
+          alphabetic="0" mathematical="350" ideographic="400" hanging="500">        
+        <font-face-src>
+          <font-face-name name="Super Sans Bold"/>
+        </font-face-src>
+      </font-face>      
+      <missing-glyph><path d="M0,0h200v200h-200z"/></missing-glyph>
+      <glyph unicode="!" horiz-adv-x="300"><!-- Outline of exclam. pt. glyph --></glyph>
+      <glyph unicode="@"><!-- Outline of @ glyph --></glyph>
+      <!-- more glyphs -->      
+    </font>
+  </defs>
+  <text x="100" y="100" 
+           style="font-family: 'Super Sans', Helvetica, sans-serif;
+                  font-weight: bold; font-style: normal">Text 
+    using embedded font</text>
+</svg>
\ No newline at end of file
diff --git a/src/test/resources/20/single/ops/valid/svg-foreignObject.xhtml b/src/test/resources/20/single/ops/valid/svg-foreignObject.xhtml
new file mode 100644
index 0000000..4cf685f
--- /dev/null
+++ b/src/test/resources/20/single/ops/valid/svg-foreignObject.xhtml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<html xmlns:svg="http://www.w3.org/2000/svg"
+      xmlns:xlink="http://www.w3.org/1999/xlink"
+      xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <title>Cover</title>
+    <style type="text/css" title="override_css">
+    	page {padding: 0; margin: 0}
+    </style>
+  </head>
+  <body class="cover">
+    <div class="cover-wrapper">
+      <svg:svg version="1.1" viewBox="0 0 632 1000" preserveAspectRatio="xMidYMid meet">
+        <svg:switch>
+          <svg:g><svg:image width="632" height="1000" xlink:href="images/cover.jpg"/></svg:g>
+          <svg:foreignObject width="632" height="1000">
+          	<div><p>block</p></div>
+            <img width="632" height="1000" src="images/cover.jpg" class="cover-image" alt="Cover"/>
+          </svg:foreignObject>
+        </svg:switch>
+      </svg:svg>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/30/epub/invalid/fallback-cycle.epub b/src/test/resources/30/epub/invalid/fallback-cycle.epub
new file mode 100644
index 0000000..be63883
Binary files /dev/null and b/src/test/resources/30/epub/invalid/fallback-cycle.epub differ
diff --git a/src/test/resources/30/epub/invalid/font_no_fallback.epub b/src/test/resources/30/epub/invalid/font_no_fallback.epub
new file mode 100644
index 0000000..4785251
Binary files /dev/null and b/src/test/resources/30/epub/invalid/font_no_fallback.epub differ
diff --git a/src/test/resources/30/epub/invalid/invalid-ncx.epub b/src/test/resources/30/epub/invalid/invalid-ncx.epub
new file mode 100644
index 0000000..71360fd
Binary files /dev/null and b/src/test/resources/30/epub/invalid/invalid-ncx.epub differ
diff --git a/src/test/resources/30/epub/invalid/issue137a.epub b/src/test/resources/30/epub/invalid/issue137a.epub
new file mode 100644
index 0000000..d8ea714
Binary files /dev/null and b/src/test/resources/30/epub/invalid/issue137a.epub differ
diff --git a/src/test/resources/30/epub/invalid/issue137b.epub b/src/test/resources/30/epub/invalid/issue137b.epub
new file mode 100644
index 0000000..0f253c4
Binary files /dev/null and b/src/test/resources/30/epub/invalid/issue137b.epub differ
diff --git a/src/test/resources/30/epub/invalid/issue176.epub b/src/test/resources/30/epub/invalid/issue176.epub
new file mode 100644
index 0000000..a0bf9aa
Binary files /dev/null and b/src/test/resources/30/epub/invalid/issue176.epub differ
diff --git a/src/test/resources/30/epub/invalid/issue203.epub b/src/test/resources/30/epub/invalid/issue203.epub
new file mode 100644
index 0000000..2ecdc20
Binary files /dev/null and b/src/test/resources/30/epub/invalid/issue203.epub differ
diff --git a/src/test/resources/30/epub/invalid/issue221.epub b/src/test/resources/30/epub/invalid/issue221.epub
new file mode 100644
index 0000000..f3c3545
Binary files /dev/null and b/src/test/resources/30/epub/invalid/issue221.epub differ
diff --git a/src/test/resources/30/epub/invalid/issue239.epub b/src/test/resources/30/epub/invalid/issue239.epub
new file mode 100644
index 0000000..c16745d
Binary files /dev/null and b/src/test/resources/30/epub/invalid/issue239.epub differ
diff --git a/src/test/resources/30/epub/invalid/issue265.epub b/src/test/resources/30/epub/invalid/issue265.epub
new file mode 100644
index 0000000..6cf8777
Binary files /dev/null and b/src/test/resources/30/epub/invalid/issue265.epub differ
diff --git a/src/test/resources/30/epub/invalid/issue265b.epub b/src/test/resources/30/epub/invalid/issue265b.epub
new file mode 100644
index 0000000..362a3bd
Binary files /dev/null and b/src/test/resources/30/epub/invalid/issue265b.epub differ
diff --git a/src/test/resources/30/epub/invalid/issue265c.epub b/src/test/resources/30/epub/invalid/issue265c.epub
new file mode 100644
index 0000000..609acb7
Binary files /dev/null and b/src/test/resources/30/epub/invalid/issue265c.epub differ
diff --git a/src/test/resources/30/epub/invalid/lorem-xht-rng-1.epub b/src/test/resources/30/epub/invalid/lorem-xht-rng-1.epub
new file mode 100644
index 0000000..608daa1
Binary files /dev/null and b/src/test/resources/30/epub/invalid/lorem-xht-rng-1.epub differ
diff --git a/src/test/resources/30/epub/invalid/lorem-xht-sch-1.epub b/src/test/resources/30/epub/invalid/lorem-xht-sch-1.epub
new file mode 100644
index 0000000..fbe969c
Binary files /dev/null and b/src/test/resources/30/epub/invalid/lorem-xht-sch-1.epub differ
diff --git a/src/test/resources/30/epub/invalid/mimetype-extra-field.epub b/src/test/resources/30/epub/invalid/mimetype-extra-field.epub
new file mode 100644
index 0000000..5fd7f18
Binary files /dev/null and b/src/test/resources/30/epub/invalid/mimetype-extra-field.epub differ
diff --git a/src/test/resources/30/epub/invalid/mp3-in-spine-no-fallback.epub b/src/test/resources/30/epub/invalid/mp3-in-spine-no-fallback.epub
new file mode 100644
index 0000000..a1b87c8
Binary files /dev/null and b/src/test/resources/30/epub/invalid/mp3-in-spine-no-fallback.epub differ
diff --git a/src/test/resources/30/epub/invalid/nav-invalid.epub b/src/test/resources/30/epub/invalid/nav-invalid.epub
new file mode 100644
index 0000000..ee08be1
Binary files /dev/null and b/src/test/resources/30/epub/invalid/nav-invalid.epub differ
diff --git a/src/test/resources/30/epub/valid/epub30-spec.epub b/src/test/resources/30/epub/valid/epub30-spec.epub
new file mode 100644
index 0000000..8cc456f
Binary files /dev/null and b/src/test/resources/30/epub/valid/epub30-spec.epub differ
diff --git a/src/test/resources/30/epub/valid/epub30-spec.txt b/src/test/resources/30/epub/valid/epub30-spec.txt
new file mode 100644
index 0000000..d022d99
--- /dev/null
+++ b/src/test/resources/30/epub/valid/epub30-spec.txt
@@ -0,0 +1,18 @@
+[creation date] 2012-02-14T11:20:00Z
+[modification date] 2012-02-27T16:38:35Z
+[format version] 3.0
+[format name] application/epub+zip
+[title] EPUB 3.0 Specification
+[creator] EPUB 3 Working Group
+[language] en
+[unique identifier] code.google.com.epub-samples.epub30-spec
+[items count] 14
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[declared mimetype] image/jpeg
+# Some of the references in the epub
+[reference] http://idpf.org/epub/30
+[reference] http://www.idpf.org
+[reference] http://www.idpf.org/epub/30/spec/epub30-publications-20111011.html
+[reference] http://www.w3.org/TR/MathML/chapter3.html
+
diff --git a/src/test/resources/30/epub/valid/extension-1.ePub b/src/test/resources/30/epub/valid/extension-1.ePub
new file mode 100644
index 0000000..ea681e4
Binary files /dev/null and b/src/test/resources/30/epub/valid/extension-1.ePub differ
diff --git a/src/test/resources/30/epub/valid/extension-1.txt b/src/test/resources/30/epub/valid/extension-1.txt
new file mode 100644
index 0000000..64058f3
--- /dev/null
+++ b/src/test/resources/30/epub/valid/extension-1.txt
@@ -0,0 +1,11 @@
+[creation date] 2011-09-01T17:16:54Z
+[format version] 3.0
+[format name] application/epub+zip
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[items count] 2
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[characters count] 6061
diff --git a/src/test/resources/30/epub/valid/font-obfuscation.epub b/src/test/resources/30/epub/valid/font-obfuscation.epub
new file mode 100644
index 0000000..ebf288f
Binary files /dev/null and b/src/test/resources/30/epub/valid/font-obfuscation.epub differ
diff --git a/src/test/resources/30/epub/valid/font_fallback_chain.epub b/src/test/resources/30/epub/valid/font_fallback_chain.epub
new file mode 100644
index 0000000..802f194
Binary files /dev/null and b/src/test/resources/30/epub/valid/font_fallback_chain.epub differ
diff --git a/src/test/resources/30/epub/valid/font_fallback_chain.txt b/src/test/resources/30/epub/valid/font_fallback_chain.txt
new file mode 100644
index 0000000..a66d5d9
--- /dev/null
+++ b/src/test/resources/30/epub/valid/font_fallback_chain.txt
@@ -0,0 +1,12 @@
+[creation date] 2011-09-01T17:16:54Z
+[format version] 3.0
+[format name] application/epub+zip
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[items count] 3
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[declared mimetype] font/opentype
+[characters count] 6061
diff --git a/src/test/resources/30/epub/valid/georgia-cfi.epub b/src/test/resources/30/epub/valid/georgia-cfi.epub
new file mode 100644
index 0000000..75ea54d
Binary files /dev/null and b/src/test/resources/30/epub/valid/georgia-cfi.epub differ
diff --git a/src/test/resources/30/epub/valid/issue145.epub b/src/test/resources/30/epub/valid/issue145.epub
new file mode 100644
index 0000000..36e3cac
Binary files /dev/null and b/src/test/resources/30/epub/valid/issue145.epub differ
diff --git a/src/test/resources/30/epub/valid/issue145.txt b/src/test/resources/30/epub/valid/issue145.txt
new file mode 100644
index 0000000..5f0ba75
--- /dev/null
+++ b/src/test/resources/30/epub/valid/issue145.txt
@@ -0,0 +1,18 @@
+[creation date] 2011-12-13T18:37:18Z
+[format version] 3.0
+[format name] application/epub+zip
+[title] Abroad
+[creator] Thomas Crane
+[creator] Ellen Elizabeth Houghton
+[unique identifier] urn:uuid:12C1DF3E-DF35-4FCF-918B-643FF15A7870
+[language] en
+[contributor] Threepress Consulting Inc.
+[date] 1882
+[publisher] London ; Belfast ; New York : Marcus Ward & Co.
+[contributor] University of California Libraries
+[items count] 6
+[declared mimetype] application/xhtml+xml
+[declared mimetype] application/x-dtbncx+xml
+[declared mimetype] text/css
+# Strange should be image/jpeg but it is declared like this in the opf file
+[declared mimetype] text/jpeg
diff --git a/src/test/resources/30/epub/valid/issue156.epub b/src/test/resources/30/epub/valid/issue156.epub
new file mode 100644
index 0000000..83becb4
Binary files /dev/null and b/src/test/resources/30/epub/valid/issue156.epub differ
diff --git a/src/test/resources/30/epub/valid/issue158.epub b/src/test/resources/30/epub/valid/issue158.epub
new file mode 100644
index 0000000..88d5942
Binary files /dev/null and b/src/test/resources/30/epub/valid/issue158.epub differ
diff --git a/src/test/resources/30/epub/valid/issue158.txt b/src/test/resources/30/epub/valid/issue158.txt
new file mode 100644
index 0000000..dd9c9c2
--- /dev/null
+++ b/src/test/resources/30/epub/valid/issue158.txt
@@ -0,0 +1,13 @@
+[creation date] 2012-02-29T06:12:48Z
+[format version] 3.0
+[format name] application/epub+zip
+[title] external resource example epub
+[creator] KOJIMA Satoshi
+[language] en
+[date] 2012-02-28T15:00:00Z
+[unique identifier] http://skoji.jp/epub/test/2
+[items count] 4
+[declared mimetype] application/xhtml+xml
+[declared mimetype] application/x-dtbncx+xml
+[declared mimetype] audio/mpeg4
+[reference] http://example.com/external_audio.mp4
diff --git a/src/test/resources/30/epub/valid/issue262.epub b/src/test/resources/30/epub/valid/issue262.epub
new file mode 100644
index 0000000..c58b7dd
Binary files /dev/null and b/src/test/resources/30/epub/valid/issue262.epub differ
diff --git a/src/test/resources/30/epub/valid/issue271_xpgt_correctFallback.epub b/src/test/resources/30/epub/valid/issue271_xpgt_correctFallback.epub
new file mode 100644
index 0000000..cc10dc3
Binary files /dev/null and b/src/test/resources/30/epub/valid/issue271_xpgt_correctFallback.epub differ
diff --git a/src/test/resources/30/epub/valid/lorem.epub b/src/test/resources/30/epub/valid/lorem.epub
new file mode 100644
index 0000000..ea681e4
Binary files /dev/null and b/src/test/resources/30/epub/valid/lorem.epub differ
diff --git a/src/test/resources/30/epub/valid/lorem.txt b/src/test/resources/30/epub/valid/lorem.txt
new file mode 100644
index 0000000..64058f3
--- /dev/null
+++ b/src/test/resources/30/epub/valid/lorem.txt
@@ -0,0 +1,11 @@
+[creation date] 2011-09-01T17:16:54Z
+[format version] 3.0
+[format name] application/epub+zip
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[items count] 2
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[characters count] 6061
diff --git a/src/test/resources/30/epub/valid/mp3-in-manifest.epub b/src/test/resources/30/epub/valid/mp3-in-manifest.epub
new file mode 100644
index 0000000..c4034cd
Binary files /dev/null and b/src/test/resources/30/epub/valid/mp3-in-manifest.epub differ
diff --git a/src/test/resources/30/epub/valid/mp3-in-manifest.txt b/src/test/resources/30/epub/valid/mp3-in-manifest.txt
new file mode 100644
index 0000000..18ab1cb
--- /dev/null
+++ b/src/test/resources/30/epub/valid/mp3-in-manifest.txt
@@ -0,0 +1,12 @@
+[creation date] 2011-09-01T17:16:54Z
+[format version] 3.0
+[format name] application/epub+zip
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[items count] 4
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[declared mimetype] image/svg+xml
+[declared mimetype] audio/mpeg
diff --git a/src/test/resources/30/epub/valid/mp3-with-fallback.epub b/src/test/resources/30/epub/valid/mp3-with-fallback.epub
new file mode 100644
index 0000000..91083af
Binary files /dev/null and b/src/test/resources/30/epub/valid/mp3-with-fallback.epub differ
diff --git a/src/test/resources/30/epub/valid/mp3-with-fallback.txt b/src/test/resources/30/epub/valid/mp3-with-fallback.txt
new file mode 100644
index 0000000..18ab1cb
--- /dev/null
+++ b/src/test/resources/30/epub/valid/mp3-with-fallback.txt
@@ -0,0 +1,12 @@
+[creation date] 2011-09-01T17:16:54Z
+[format version] 3.0
+[format name] application/epub+zip
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[items count] 4
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[declared mimetype] image/svg+xml
+[declared mimetype] audio/mpeg
diff --git a/src/test/resources/30/epub/valid/test_svg.epub b/src/test/resources/30/epub/valid/test_svg.epub
new file mode 100644
index 0000000..89053c7
Binary files /dev/null and b/src/test/resources/30/epub/valid/test_svg.epub differ
diff --git a/src/test/resources/30/epub/valid/test_svg.txt b/src/test/resources/30/epub/valid/test_svg.txt
new file mode 100644
index 0000000..0bfd420
--- /dev/null
+++ b/src/test/resources/30/epub/valid/test_svg.txt
@@ -0,0 +1,11 @@
+[creation date] 2011-09-01T17:16:54Z
+[format version] 3.0
+[format name] application/epub+zip
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[items count] 3
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[declared mimetype] image/svg+xml
diff --git a/src/test/resources/30/epub/valid/valid ncx.epub b/src/test/resources/30/epub/valid/valid ncx.epub
new file mode 100644
index 0000000..ffaaefa
Binary files /dev/null and b/src/test/resources/30/epub/valid/valid ncx.epub differ
diff --git a/src/test/resources/30/epub/valid/valid_ncx.txt b/src/test/resources/30/epub/valid/valid_ncx.txt
new file mode 100644
index 0000000..c89ed56
--- /dev/null
+++ b/src/test/resources/30/epub/valid/valid_ncx.txt
@@ -0,0 +1,11 @@
+[creation date] 1314890214000
+[format version] 3.0
+[format name] application/epub+zip
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[items count] 2
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[characters count] 6061
diff --git a/src/test/resources/30/expanded/invalid/custom-ns-attr/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/custom-ns-attr/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/custom-ns-attr/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/custom-ns-attr/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/custom-ns-attr/EPUB/lorem.opf
new file mode 100644
index 0000000..e185d14
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/custom-ns-attr/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314923</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>     
+        <meta property="dcterms:modified">2012-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />  
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/invalid/custom-ns-attr/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/custom-ns-attr/EPUB/lorem.xhtml
new file mode 100644
index 0000000..3de7dc4
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/custom-ns-attr/EPUB/lorem.xhtml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:foo="http://foo" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="la" lang="la">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>		
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p foo:bar="quuz">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/custom-ns-attr/META-INF/container.xml b/src/test/resources/30/expanded/invalid/custom-ns-attr/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/custom-ns-attr/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/custom-ns-attr/mimetype b/src/test/resources/30/expanded/invalid/custom-ns-attr/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/custom-ns-attr/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/css/epub-spec.css b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/css/epub-spec.css
new file mode 100755
index 0000000..342469a
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/css/epub-spec.css
@@ -0,0 +1,586 @@
+ at charset "utf-8";
+
+body {
+    margin-top: 2em;
+    margin-left: 6em;
+    margin-right: 15em;
+    margin-bottom: 2em;
+    font-family: arial, helvetica, sans-serif;
+    color: black;
+    background: white;
+    background-position: 97% 20px;
+    background-attachment: scroll;
+    background-repeat: no-repeat;
+    background-image: url(../img/idpflogo_web_125.jpg);
+    
+}
+
+/***************************************************************************/
+/*    dl      **************************************************************/
+/***************************************************************************/
+
+dl dt {
+    font-weight: bold;
+}
+
+dt span.term {
+    color: #005A9C;
+    font-weight: normal;
+}
+
+dd > dl {
+    margin-top: 1px;
+    padding-top: 0px;
+    margin-bottom: 1px;
+    padding-bottom: 0px;
+}
+
+/***************************************************************************/
+/*    ul      **************************************************************/
+/***************************************************************************/
+
+ul.conformance-list li {
+    list-style-type: none;
+}
+
+/***************************************************************************/
+/*  glosslist      *********************************************************/
+/***************************************************************************/
+
+*.glosslist dl {
+    margin-left: 2em
+}
+*.glosslist dl dt {
+    color: #005A9C
+}
+
+*.glossentry {
+    font-size: .9em;
+}
+
+/***************************************************************************/
+/*  misc block      ********************************************************/
+/***************************************************************************/
+
+p.informative, p.normative {
+    font-weight: bold;
+    font-size: 100%;
+    color: #8B0000;
+    padding: 5px 0px 10px;
+}
+
+.biblioentry:target {
+    border: 1px dashed rgb(200,200,225);
+}
+
+
+/***************************************************************************/
+/*  misc inline      *******************************************************/
+/***************************************************************************/
+
+code, span.property, a.codelink {
+    color: #660099;
+    font-family: monospace;
+    font-weight: bold
+}
+*.RFC2119 {
+    font-style: italic;
+    font-size: 80%;
+}
+
+*.todo, *.TODO {
+    background-color: yellow
+}
+
+/* vocab */
+*.subproplabel, *.subpropref {
+    font-style: italic;
+    font-size: 90%;
+}
+
+/***************************************************************************/
+/*  elem-synopsis       ****************************************************/
+/***************************************************************************/
+
+*.elem-synopsis {
+    border: 1px solid rgb(200,200,225);
+	border-top: 1px solid rgb(210,210,245);
+	border-left: 1px solid rgb(210,210,245);
+    background: rgb(240,240,255);
+    padding-left: 1em;
+	padding-right: 1em;
+	margin-bottom: 2em;
+	-moz-box-shadow: 5px 5px 5px #888;
+	-webkit-box-shadow: 5px 5px 5px #888;
+}
+
+/* special case for the code.option fields in elem-synopsis */
+code.option {
+    color: black;
+    font-family: arial, helvetica, sans-serif;
+    font-weight: normal
+}
+/* for the special case when an attlist occurs outside of an elem-synopsis*/
+div.section > div.elem-synopsis-attlist {
+    border: 2px solid rgb(200,200,225);
+    background: rgb(230,230,255);
+    padding: 1em
+}
+
+
+/***************************************************************************/
+/*   toc     ***************************************************************/
+/***************************************************************************/
+
+div.toc dl dt {
+    font-weight: normal
+}
+
+*.toc p, div.list-of-examples p {
+    font: small-caps 105% sans-serif;
+    color: #005A9C;
+}
+
+*.toc {
+    margin-top: 3em
+}
+
+nav#toc li {
+	list-style-type:none;
+}
+
+nav#toc > ol > li > span > a {
+    color: #0000ff
+}
+nav#toc > ol > li > ol > li > a {
+    color: #0033ff
+}
+nav#toc > ol > li > ol > li > ol > li > a {
+    font-size: .9em;
+    color: #0066ff;
+}
+nav#toc > ol > li > ol > li > ol > li > ol > li > a {
+    font-size: .9em;
+    color: #0099ff
+}
+nav#toc > ol > li > ol > li > ol > li > ol > li > ol > li > a {
+    font-size: .9em;
+    color: #0099ff
+}
+nav#toc > ol > li > ol > li > ol > li > ol > li > ol > li > ol > li  > a {
+    font-size: .9em;
+    color: #0099ff
+}
+
+nav#toc > ol > li > ol > li > ol > li > ol > li > ol > li > ol > li > ol > li > a {
+    font-size: .9em;
+    color: #0099ff
+}
+
+/***************************************************************************/
+/*   examples     **********************************************************/
+/***************************************************************************/
+
+div.informalexample {
+    margin: 1.5em auto 2em auto;
+}
+
+div.informalexample > p {
+    margin: 0px 20px;
+    font-style: italic;
+    font-size: .8em
+}
+
+div.informalexample > p code {
+    color: black;
+}
+
+pre {
+    font-family: "Courier New", Courier, Monospace;
+    color: #000;
+    background-color: #eee;
+    margin: 0;
+    border: 1px solid #ddd;
+    padding: 9px;
+    overflow: auto;    
+    white-space: pre-wrap;
+    white-space: -moz-pre-wrap !important;
+    white-space: -pre-wrap;
+    white-space: -o-pre-wrap;
+    word-wrap: break-word;
+
+}
+
+pre.synopsis, p.syntax {
+    background-color:rgb(253,253,253);
+    border: 1px solid rgb(220,220,220);
+	border-left: 1px solid rgb(230,230,230);
+	border-top: 1px solid rgb(230,230,230);
+	margin-bottom: 1em;
+	-moz-box-shadow: 5px 5px 5px #888;
+	-webkit-box-shadow: 5px 5px 5px #888;
+	-box-shadow: 5px 5px 5px #888;
+}
+
+p.syntax {
+    font-family: courier, fixed, monospace;
+    padding: 9px;
+}
+
+/***************************************************************************/
+/*   note, caution     *****************************************************/
+/***************************************************************************/
+
+.caution .note {
+    font-style : italic;
+    font-size : .9em;
+}
+
+div.note, div.caution {
+	margin: 2em 1em;
+	border: solid gray 1px;
+	background-color: rgb(255,255,224);
+	padding: .5em
+}
+
+ 
+div.caution {
+    background-color: rgb(255,235,205)
+}
+
+div.note > *, div.caution > * {
+	/* margin: .25em 0em;
+	padding: 0em; */
+}
+
+div.note > h2, div.note > h3, div.note > h4, div.note > h5,
+div.caution > h2, div.caution > h3, div.caution > h4, div.caution > h5 {
+	font-size: 1em;
+	font-style: italic;
+	font-variant: small-caps;
+	float: left;
+	padding: .18em .6em .18em .5em;	
+	margin: -1em -0.5em -0.5em auto;
+	width: auto; 
+	border: solid 1px; 
+	background: white; 
+}
+
+/***************************************************************************/
+/*   headings   ************************************************************/
+/***************************************************************************/
+
+h1, h2, h3, h4, h5, h6 {
+    text-align: left;
+    color: #005A9C;
+}
+h1 {
+    font: 170% sans-serif;
+    padding-bottom: 1em;
+}
+h2 {
+    font: 140% sans-serif;
+    padding-top: 2em;
+    border-bottom: 1px solid #005A9C
+}
+h3 {
+    font: 120% sans-serif;
+    padding-top: 1.5em;
+}
+h4 {
+    font: bold 110% sans-serif;
+    padding-top: 1.2em;
+}
+h5 {
+    font: italic 105% sans-serif
+}
+h6 {
+    font: italic 100% sans-serif
+}
+p.bridgehead {
+    font: 110% sans-serif;
+    padding-top: 0.7em;
+    color: #005A9C;
+}
+
+
+/***************************************************************************/
+/* links *******************************************************************/
+/***************************************************************************/
+
+a.glossterm {
+    color: black;
+    text-decoration: none;
+    border-bottom : 1px dotted rgb(210,210,210);
+}
+a.biblioref {
+    color: #0000FF;
+    text-decoration: none;
+}
+a.glossterm:hover, a.biblioref:hover {
+    text-decoration: underline;
+    background-color: white;
+    color: #0000FF;
+}
+
+/***************************************************************************/
+/* "link here" anchor  *****************************************************/
+/***************************************************************************/
+
+a.hidden-reveal {
+    color: #005A9C;
+}
+a.hidden-reveal:link {
+    text-decoration: none;
+    color: #005A9C;
+}
+a.hidden-reveal:visited {
+    text-decoration: none;
+    color: #005A9C;
+}
+a.hidden-reveal:hover {
+    text-decoration: underline;
+    background-color: #005A9C;
+    color: #FFFFFF;
+}
+a.hidden-reveal:active {
+    text-decoration: none;
+    color: #005A9C;
+}
+
+/***************************************************************************/
+/*  frontmatter     ********************************************************/
+/***************************************************************************/
+
+*.releaseinfo {
+    font-size: 140%;
+    color: #005A9C;
+    margin-right: 0.4em
+}
+*.pubdate {
+    font-size: 140%;
+    color: #005A9C
+}
+*.legalnotice {
+    font-size: 90%
+}
+dl.printhistory {
+    margin-top: 2em;
+    margin-bottom: 2em
+}
+dl.printhistory dt {
+    font: small-caps 105% sans-serif;
+    color: #005A9C;
+    margin-top: 0.4em;
+    margin-bottom: 0.4em
+}
+div.authorgroup p.editor {
+    margin-left: 2em;
+    font-size: 90%
+}
+
+/***************************************************************************/
+/*  table      *************************************************************/
+/***************************************************************************/
+
+table {
+    border: 1px solid #005A9C;
+    border-spacing: 0px;
+    padding: 1em;
+    margin-top: 1.5em;
+    margin-bottom: 2em;    
+    -moz-box-shadow: 2px 2px 2px rgb(240,240,240);
+	-webkit-box-shadow: 2px 2px 2px rgb(190,190,190);
+	-box-shadow: 2px 2px 2px rgb(190,190,190);
+}
+th {
+    border: 1px solid #005A9C;
+    font-weight: bold;
+    padding: 0.5em;
+    font-weight: bold;
+    color: #005A9C;
+    font-size: 90%
+}
+td {
+    border: 1px solid #005A9C;
+    padding: 0.5em;
+    text-align: left
+}
+td *, td > * {
+    text-align: left;
+}
+table, tbody {
+    padding: 0;
+}
+
+caption {
+    text-align: left;
+    font-size: 90%
+}
+/* the xsl renders db:simplelist as single-column tables */
+table.simplelist, table.simplelist th, table.simplelist td, table.simplelist tr {
+    border-style: none;
+    -moz-box-shadow: none;
+	-webkit-box-shadow: none;
+	-box-shadow: none;
+}
+
+/* ensure confomity of width for property tables */
+div.informaltable > table {
+    border-spacing: 0px;
+    border: 1px solid rgb(210,210,225);
+    font-size: 1em;
+    width: 100%
+}
+
+div.informaltable > table td, div.informaltable > table th {
+  border: none;
+}
+
+div.informaltable > table td.rdfa-property {
+    padding: 3px;
+    text-indent: 15px;
+    color: rgb(0,90,156);
+    background-color: rgb(240,240,255);
+    border-bottom: 1px solid rgb(210,210,225);
+}
+td.rdfa-property > code {
+    color: rgb(0,50,116);
+    font-weight: bold;
+    font-size: 1.1em
+}
+div.informaltable > table td.rdfa-property-header {
+    width: 150px;
+    text-align: center;
+    padding: 3px;
+    border-right: 1px solid rgb(210,210,225);
+    color: rgb(0,90,156);
+    background-color: rgb(240,240,255);
+}
+td.rdfa-property-desc {
+    padding: 3px
+}
+
+td.rdfa-cardinality > p {
+	padding: 0em;
+	margin: 0em
+}
+
+/* the core media types table */
+table#tbl-core-media-types > thead > tr > th,
+table#tbl-epubReadingSystem-properties > thead > tr > th,
+table#tbl-epubReadingSystem-features > thead > tr > th {
+    background-color: rgb(240,240,255);
+    text-align: left;
+    white-space:nowrap;
+}
+
+table#tbl-core-media-types > tbody > tr > th {    
+    text-align: left;
+    font-weight: normal;
+    font-style: italic;
+    padding: 3px;
+}
+
+table#tbl-core-media-types td, table#tbl-core-media-types th, table#tbl-core-media-types tr {
+    border-color: #005A9C;
+    margin: 0em;
+}
+
+table#tbl-core-media-types td code, table#tbl-core-media-types td a {
+    white-space:nowrap;
+}
+
+table.productionset, table.productionset td {
+    border : none;
+    background-color : #EEE;
+}
+
+td[headers="tbl-cmt-appl"] {
+    font-size: .9em;
+}
+
+/* ns prefix table in contentdocs */
+table#tbl-nspfx {
+    border:none;
+    border-spacing: 0px;
+    margin-left: 1em;
+}
+
+span.italic {
+    font-style: italic;
+}
+
+span.link-marker {
+    float: left;
+}
+
+/* display prop examples as block */
+
+code.prop-example {
+   display: block;
+}
+
+/* participant listings */
+ul.personlist {
+    list-style-type: none;
+    padding-left: 1em;
+    margin-bottom: 2em;
+}
+
+*.personlist span.affiliation {
+    color: rgb(75,75,75);
+}
+
+*.personlist span.wg-role {
+    font-style: italic;
+}
+
+/*
+span.surname {
+    text-transform: uppercase;
+}
+*/
+
+table.productionset tbody tr {
+    border: none;
+}
+
+table.productionset tbody tr td {
+    border: none;
+    border-bottom: 1px solid #CCC;
+}
+
+table.productionset tbody tr td a {
+    text-decoration: none;
+    border-bottom: 1px dotted #0000ff;
+}
+
+table.productionset tbody tr td a:hover {
+    text-decoration: underline;
+}
+
+table.productionset tbody tr td a:visited,
+table.productionset tbody tr td a:active,
+table.productionset tbody tr td a:hover {
+    color: #0000ff;
+}
+
+
+p.diff, p.errata {
+	font-size: 0.9em;
+	font-style: italic
+}
+
+code {
+  font-style: normal;  
+}
+
+div.informalexample > p code {
+    font-size: 1.2em;
+}
+
+/* vocab experimental term labels */
+strong.experimental {
+	color: rgb(255,0,0)
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/img/epub_logo_color.jpg b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/img/epub_logo_color.jpg
new file mode 100644
index 0000000..41cd08e
Binary files /dev/null and b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/img/epub_logo_color.jpg differ
diff --git a/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/img/idpflogo_web_125.jpg b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/img/idpflogo_web_125.jpg
new file mode 100644
index 0000000..023304d
Binary files /dev/null and b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/img/idpflogo_web_125.jpg differ
diff --git a/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/package.opf b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/package.opf
new file mode 100755
index 0000000..0653eab
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/package.opf
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+   <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+      <dc:identifier id="uid">code.google.com.epub-samples.epub30-spec</dc:identifier>
+      <dc:title>EPUB 3.0 Specification</dc:title>
+      <dc:creator>EPUB 3 Working Group</dc:creator>
+      <dc:language>en</dc:language>
+      <meta property="dcterms:modified">2012-02-27T16:38:35Z</meta>
+   </metadata>
+   <manifest>
+      <item href="xhtml/epub30-titlepage.xhtml" id="ttl" media-type="application/xhtml+xml"/>
+      <item href="xhtml/epub30-nav.xhtml" id="nav" media-type="application/xhtml+xml" properties="nav"/>
+      <item href="xhtml/epub30-terminology.xhtml" id="term" media-type="application/xhtml+xml"/>
+      <item href="xhtml/epub30-overview.xhtml" id="ovw" media-type="application/xhtml+xml"/>
+      <item href="xhtml/epub30-publications.xhtml" id="pub" media-type="application/xhtml+xml"/>
+      <item href="xhtml/epub30-contentdocs.xhtml" id="cd" media-type="application/xhtml+xml"/>
+      <item href="xhtml/epub30-mediaoverlays.xhtml" id="mo" media-type="application/xhtml+xml"/>
+      <item href="xhtml/epub30-ocf.xhtml" id="ocf" media-type="application/xhtml+xml"/>      
+      <item href="xhtml/epub30-acknowledgements.xhtml" id="ack" media-type="application/xhtml+xml"/>
+      <item href="xhtml/epub30-references.xhtml" id="ref" media-type="application/xhtml+xml"/>
+      <item href="xhtml/epub30-changes.xhtml" id="cha" media-type="application/xhtml+xml"/>
+      <item href="css/epub-spec.css" media-type="text/css" id="css"/>
+      <item href="img/idpflogo_web_125.jpg" media-type="image/jpeg" id="logo"/>
+      <item href="img/epub_logo_color.jpg" media-type="image/jpeg" id="ci" properties="cover-image"/>
+   </manifest>
+   <spine>
+      <itemref idref="ttl"/>
+      <itemref idref="nav" linear="no"/>
+      <itemref idref="term" linear="no"/>
+      <itemref idref="ovw"/>
+      <itemref idref="pub"/>
+      <itemref idref="cd"/>
+      <itemref idref="mo"/>
+      <itemref idref="ocf"/>
+      <itemref idref="ack"/>
+      <itemref idref="ref"/>
+      <itemref idref="cha"/>
+   </spine>
+</package>
diff --git a/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-acknowledgements.xhtml b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-acknowledgements.xhtml
new file mode 100644
index 0000000..18909c2
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-acknowledgements.xhtml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?>
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><meta charset="utf-8"/><title>Acknowledgements and Contributors</title><link rel="stylesheet" type="text/css" href="../css/epub-spec.css"/></head><body><h1 class="title">Acknowledgements and Contributors</h1><p class="informative"> This appendix is informative</p><section class="section" title="B.1 EPUB 3.0" id="sec-contributors-30"><h3 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link he [...]
diff --git a/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-changes.xhtml b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-changes.xhtml
new file mode 100644
index 0000000..8e4eb00
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-changes.xhtml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?>
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><meta charset="utf-8"/><title>EPUB 3 Changes from EPUB 2.0.1</title><link rel="stylesheet" type="text/css" href="../css/epub-spec.css"/></head><body><h1 class="title">EPUB 3 Changes from EPUB 2.0.1</h1><p class="identity"><span class="releaseinfo">Recommended Specification</span> <span class="pubdate">11 October 2011</span></p><dl class="printhistory"><dt>This version</dt><dd><a href="http://www.idpf.org/epub/30/sp [...]
diff --git a/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-contentdocs.xhtml b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-contentdocs.xhtml
new file mode 100644
index 0000000..ec1c8b9
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-contentdocs.xhtml
@@ -0,0 +1,216 @@
+<?xml version="1.0" encoding="utf-8"?>
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><meta charset="utf-8"/><title>EPUB Content Documents 3.0</title><link rel="stylesheet" type="text/css" href="../css/epub-spec.css"/></head><body><h1 class="title">EPUB Content Documents 3.0</h1><p class="identity"><span class="releaseinfo">Recommended Specification</span> <span class="pubdate">11 October 2011</span></p><dl class="printhistory"><dt>This version</dt><dd> <a href="http://www.idpf.org/epub/30/spec/epub [...]
+<html … xmlns:epub="http://www.idpf.org/2007/ops">&#x0D;
+    …&#x0D;
+    <p> … <a epub:type="noteref" href="#n1">1</a> … </p>    &#x0D;
+    …&#x0D;
+    <aside epub:type="footnote" id="n1">&#x0D;
+        …    &#x0D;
+    </aside>&#x0D;
+    …&#x0D;
+</html>    </pre></div><div class="informalexample" id="ex.epubtype.gloss"><p>The following example shows the <code>epub:type</code> attribute used to inflect glossary semantics on an HTML5 definition list. The property used is defined in the <a href="#sec-contentdocs-default-vocab" title="2.1.3.1.3. Default Vocabulary">default vocabulary</a>. </p><pre class="synopsis">
+<html … xmlns:epub="http://www.idpf.org/2007/ops">&#x0D;
+    …&#x0D;
+    <dl epub:type="glossary">&#x0D;
+        …    &#x0D;
+    </dl>        &#x0D;
+    …&#x0D;
+</html>    </pre></div><div class="informalexample" id="ex.epubtype.pg"><p>The following example shows the <code>epub:type</code> attribute used to inflect source publication pagebreak semantics. The property used is defined in the <a href="#sec-contentdocs-default-vocab" title="2.1.3.1.3. Default Vocabulary">default vocabulary</a>. (Note that the <span class="phrase"><a href="epub30-publications.xhtml#sec-opf-dcsource">dc:source</a> <a class="biblioref" href="epub30-references.xht [...]
+<html … xmlns:epub="http://www.idpf.org/2007/ops">&#x0D;
+   …&#x0D;
+  <p> … <span epub:type="pagebreak" title="234"/> … </p>    &#x0D;
+   … &#x0D;
+</html>   </pre></div></section><section class="section" title="2.1.3.1.4 Processing Requirements" id="sec-contentdocs-semantic-inflection-processing-reqs"><h6 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-contentdocs-semantic-inflection-processing-reqs">›</a> </span>2.1.3.1.4 Processing Requirements</h6><p>A Reading System must process the <code>epub:type</code> attribute as follows:</p><div class="conformance-list"><ul class="confor [...]
+   
+   <epub:case required-namespace="http://www.xml-cml.org/schema">
+      <cml xmlns="http://www.xml-cml.org/schema">
+         <molecule id="sulfuric-acid">
+            <formula id="f1" concise="H 2 S 1 O 4"/>
+         </molecule>
+      </cml>
+   </epub:case>
+   
+   <epub:default>
+      <p>H<sub>2</sub>SO<sub>4</sub></p>
+   </epub:default>
+   
+</epub:switch>
+</pre></div><div class="informalexample"><p>An example of adding MathML markup for compliance with EPUB 2 Reading Systems.</p><pre class="synopsis"><epub:switch id="mathmlSwitch">
+   
+   <epub:case required-namespace="http://www.w3.org/1998/Math/MathML">
+      <math xmlns="http://www.w3.org/1998/Math/MathML">
+         <mrow>
+            <mn>2</mn>
+            <mo> &#x2061;<!--INVISIBLE TIMES--></mo>
+            <mi>x</mi>
+         </mrow>
+         <mrow>
+            <mo>+</mo>
+            <mi>y</mi>
+            <mo>-</mo>
+            <mi>z</mi>
+         </mrow>
+      </math>
+   </epub:case>
+   
+   <epub:default>
+      <p>2x + y - z</p>
+   </epub:default>
+   
+</epub:switch>
+</pre></div></section><section class="section" title="2.1.3.3.2.2 The epub:case Element" id="sec-xhtml-epub-case"><h6 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-xhtml-epub-case">›</a> </span>2.1.3.3.2.2 The <code>epub:case</code> Element</h6><p>The <code>case</code> element contains an instance of markup from an XML vocabulary. The included markup may be natively supported in XHTML Content Documents (in the case of MathML and SVG), but s [...]
+  xmlns:epub="http://www.idpf.org/2007/ops"
+  xmlns:ev="http://www.w3.org/2001/xml-events">
+  <head>
+    <epub:trigger ev:observer="pause" ev:event="click" action="pause" ref="test"/>
+    <epub:trigger ev:observer="resume" ev:event="click" action="resume" ref="test"/>
+    <epub:trigger ev:observer="mute" ev:event="click" action="mute" ref="test"/>
+    <epub:trigger ev:observer="mute" ev:event="click" action="show" ref="muted"/>
+    <epub:trigger ev:observer="unmute" ev:event="click" action="unmute" ref="test"/>
+    <epub:trigger ev:observer="unmute" ev:event="click" action="hide" ref="muted"/>
+  </head>
+  <body>
+    <video id="test" src="birds.mp4" width="320" height="240"/>
+    <p>
+      <span class="button" id="resume">Play/Resume</span>
+      <span class="button" id="pause">Pause</span>
+      <span class="button" id="mute">Mute</span>
+      <span class="button" id="unmute">Unmute</span>
+      <span id="muted">MUTED</span>
+    </p>
+  </body>
+</html>
+</pre></div></section><section class="section" title="2.1.3.5 Alternate Style Tags" id="sec-xhtml-alternate-style-tags"><h5 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-xhtml-alternate-style-tags">›</a> </span>2.1.3.5 Alternate Style Tags</h5><p>In accordance with <a class="biblioref" href="epub30-references.xhtml#refAlternateStyleTags" title="Alternate Style Tags">[<abbr>AltStyleTags</abbr>]</a> , the <code class="literal">link</code> ele [...]
+    <h2>List of tables, broken down into individual groups, one per major section of the publication content</h2>
+    <ol>
+        <li><span>Tables in Chapter 1</span>
+            <ol>
+                <li><a href="chap1.xhtml#table-1.1">Table 1.1</a>
+                </li>
+                <li><a href="chap1.xhtml#table-1.2">Table 1.2</a></li>
+            </ol>
+        </li>
+        
+        <li><span>Tables in Chapter 2</span>
+            <ol>
+                <li><a href="chap2.xhtml#table-2.1">Table 2.1</a>
+                </li>
+                <li><a href="chap2.xhtml#table-2.2">Table 2.2</a></li>
+                <li><a href="chap2.xhtml#table-2.3">Table 2.3</a></li>
+            </ol>
+        </li>
+        ...
+        <li><span>Tables in Appendix</span>
+            <ol>
+                <li><a href="appendix.xhtml#table-a.1">Table A.1</a>
+                </li>
+                <li><a href="appendix.xhtml#table-a.2">Table B.2</a></li>
+            </ol>
+        </li>
+    </ol>
+</nav></pre></div></section><section class="section" title="2.2.4.2 The nav Element: Types" id="sec-xhtml-nav-def-types"><h5 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-xhtml-nav-def-types">›</a> </span>2.2.4.2 The <code>nav</code> Element: Types</h5><p>The <code>nav</code> elements defined in an EPUB Navigation Document are distinguished semantically by the value of their <code>epub:type</code> attribute. By <a href="#sec-contentdo [...]
+    <h2>Guide</h2>
+    <ol>
+        <li><a epub:type="toc" href="#toc">Table of Contents</a></li>
+        <li><a epub:type="loi" href="content.html#loi">List of Illustrations</a></li>
+        <li><a epub:type="bodymatter" href="content.html#bodymatter">Start of Content</a></li>
+    </ol>
+</nav></pre></div><p>The <span class="property">landmarks</span> <code>nav</code> element is optional in EPUB Navigation Documents and must not occur more than once. </p><div class="note" title="note"><h3 class="title">note</h3><p>The <span class="property">landmarks</span> <code>nav</code> element corresponds to the deprecated OPF <code>guide</code> element. Refer to <span class="phrase"><a href="epub30-publications.xhtml#sec-guide-elem">guide</a> <a class="biblioref" href="epub30 [...]
+    <h2>Pagebreaks of the print version, third edition</h2>
+    <ol>
+        <li><a href="frontmatter.xhtml#pi">I</a></li>
+        <li><a href="frontmatter.xhtml#pii">II</a></li> … <li><a href="chap1.xhtml#p1">1</a></li>
+        <li><a href="chap1.xhtml#p2">2</a></li> … </ol>
+</nav>
+</pre></div><div class="informalexample"><p>The following example shows a partial <code class="literal">toc</code> <code>nav</code> element where the <code>hidden</code> attribute is used to limit content flow rendering to the two topmost hierarchical levels.</p><pre class="synopsis"><nav epub:type="toc" id="toc">
+  <h1>Table of contents</h1>
+  <ol>
+    <li>
+      <a href="chap1.xhtml">Chapter 1</a>
+      <ol>
+        <li>
+          <a href="chap1.xhtml#sec-1.1">Chapter 1.1</a>
+          <ol hidden="">
+            <li>
+              <a href="chap1.xhtml#sec-1.1.1">Section 1.1.1</a>
+            </li>
+            <li>
+              <a href="chap1.xhtml#sec-1.1.2">Section 1.1.2</a>
+            </li>
+          </ol>
+         </li>
+         <li>
+           <a href="chap1.xhtml#sec-1.2">Chapter 1.2</a>
+         </li>
+       </ol>
+     </li>
+    <li>
+      <a href="chap2.xhtml">Chapter 2</a>
+    </li>
+  </ol>
+</nav>
+</pre></div></section></section></section><section class="section" title="2.3 SVG Content Documents" id="sec-svg"><h3 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-svg">›</a> </span>2.3 SVG Content Documents</h3><section class="section" title="2.3.1 Introduction" id="sec-svg-intro"><h4 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-svg-intro">›</a> </span>2.3.1 Introduction</h4><p class="inform [...]
+    …
+    <manifest>
+        …
+        <item id="chap01" 
+            href="scripted01.xhtml" 
+            media-type="application/xhtml+xml"
+            properties="scripted"/>
+        <item id="inset01" 
+            href="scripted02.xhtml" 
+            media-type="application/xhtml+xml"
+            properties="scripted"/>
+        <item id="slideshowjs" 
+            href="slideshow.js" 
+            media-type="text/javascript"/>
+    </manifest>
+    
+    <spine …>
+        <itemref idref="chap01"/>
+        …
+    </spine>
+    …
+</package>
+</pre></div><p>and the following file <code class="filename">scripted01.xhtml</code>:</p><div class="informalexample"><pre class="synopsis"><html …>
+    <head>
+        …
+        <script type="text/javascript">
+            alert("Reading System name: " + navigator.epubReadingSystem.name);
+        </script>
+    </head>
+    <body>
+        …
+        <iframe src="scripted02.xhtml" … />
+        …
+    </body>
+</html>
+</pre></div><p>and the following file <code class="filename">scripted02.xhtml</code>:</p><div class="informalexample"><pre class="synopsis"><html …>
+    <head>
+        …
+        <script type="text/javascript" href="slideshow.js"></script>
+    </head>
+    <body>
+        …
+    </body>
+</html>
+</pre></div><p>From these examples, it is true that:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>the code in the <code>script</code> element in the <code>head</code> in <code class="filename">scripted01.xhtml</code> is a spine-level script because the document is referenced from the spine;</p></li><li class="listitem"><p>the code in the <code>script</code> element in <code class="filename">scripted02.xhtml</code> is a container-constrained script because [...]
+ <div>
+   <div class="myhead" style="display: none; display: oeb-page-head">
+      The OEB Publication Structure: Introduction
+   </div>
+   <h2>Introduction</h2>
+   <p>…</p>
+</div></pre></div><div class="note" title="note"><h3 class="title">note</h3><p>The <code>display</code> property has its value set to <code class="literal">none</code> in the preceding example before setting it to <code>oeb-page-head</code> to ensure that Reading Systems that do not support this feature do not display the content. This approach is recommended whenever setting the <code class="literal">oeb-page-head</code> or <code class="literal">oeb-page-foot</code> values.</p></d [...]
+<html … >    
+    <head>
+        …
+        <link rel="pronunciation" type="application/pls+xml" hreflang="zh" href="../speech/zh.pls"/>
+        <link rel="pronunciation" type="application/pls+xml" hreflang="mn" href="../speech/mn.pls"/>
+    </head>        
+    …
+</html></pre></div></section><section class="section" title="4.3 Content Conformance" id="sec-pls-conf-content"><h3 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-pls-conf-content">›</a> </span>4.3 Content Conformance</h3><p>To be considered a <a class="glossterm" href="epub30-terminology.xhtml#gloss-publication-resource-cmt" title="Core Media Type Resource">Core Media Type Resource</a>, a PLS Document must meet all of the following cr [...]
+
+var conformTest = navigator.epubReadingSystem.hasFeature(feature);
+
+alert("Feature " + feature + " supported?: " + conformTest);</pre></div></section><section class="section" title="B.4.1.3 Features" id="app-ers-hasFeature-features"><h5 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#app-ers-hasFeature-features">›</a> </span>B.4.1.3 Features</h5><p>The following table details the features that must be recognized by all Reading Systems that support scripting (<a href="#sec-scripted-context" title="2.4.1 Scripting  [...]
diff --git a/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-mediaoverlays.xhtml b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-mediaoverlays.xhtml
new file mode 100644
index 0000000..fc1ed2f
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-mediaoverlays.xhtml
@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="utf-8"?>
+<html xml:lang="en-US" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"><head><meta charset="utf-8"/><title>EPUB Media Overlays 3.0</title><link rel="stylesheet" type="text/css" href="../css/epub-spec.css"/></head><body><h1 class="title">EPUB Media Overlays 3.0</h1><p class="identity"><span class="releaseinfo [...]
+    <text src="chapter1.xhtml#sentence1"/>
+    <audio src="chapter1_audio.mp3" clipBegin="23s" clipEnd="30s"/>
+</par></pre></div><p><code class="literal">par</code> elements are placed together sequentially to form a series of phrases or sentences. Not every element of the EPUB Content Document will have a corresponding <code class="literal">par</code> element in the Media Overlay, only those relevant to the audio narration.</p><div class="informalexample"><p>The following example shows a basic Media Overlay Document containing a sequence of phrases. The <code class="literal">body</code> el [...]
+      version="3.0">
+    <body>
+        <par id="par1">
+            <text src="chapter1.xhtml#sentence1"/>
+            <audio src="chapter1_audio.mp3" clipBegin="0s" clipEnd="10s"/>
+        </par>
+        <par id="par2">
+            <text src="chapter1.xhtml#sentence2"/>
+            <audio src="chapter1_audio.mp3" clipBegin="10s" clipEnd="20s"/>
+        </par>
+        <par id="par3">
+            <text src="chapter1.xhtml#sentence3"/>
+            <audio src="chapter1_audio.mp3" clipBegin="20s" clipEnd="30s"/>
+        </par>
+    </body>
+</smil></pre></div><p><code class="literal">par</code> elements can also be added to <code class="literal">seq</code> elements to define more complex structures such as parts and chapters (see <a class="xref" href="#sec-media-overlays-structure" title="3.2.1 Structure">Structure </a>). </p></section><section class="section" title="3.2 Relationship to the EPUB Content Document" id="sec-docs-relations"><h3 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link h [...]
+      xmlns:epub="http://www.idpf.org/2007/ops"
+      version="3.0">
+    <body>
+
+        <!-- a chapter -->
+        <seq id="id1" epub:textref="chapter1.xhtml#sectionstart" epub:type="chapter">
+
+            <!-- the section title -->
+            <par id="id2">
+                <text src="chapter1.xhtml#section1_title"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:23:23.84" clipEnd="0:23:34.221"/>
+            </par>
+
+            <!-- some sentences in the chapter -->
+            <par id="id3">
+                <text src="chapter1.xhtml#text1"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:23:34.221" clipEnd="0:23:59.003"/>
+            </par>
+            <par id="id4">
+                <text src="chapter1.xhtml#text2"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:23:59.003" clipEnd="0:24:15.000"/>
+            </par>
+
+            <!-- an informational sidebar -->
+            <seq id="id5" epub:textref="chapter1.xhtml#sidebar" epub:type="sidebar">
+                <par id="id6">
+                    <text src="chapter1.xhtml#sidebartitle"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:24:15.000" clipEnd="0:24:18.123"/>
+                </par>
+
+                <!-- a figure within the sidebar -->
+                <seq id="id7" epub:textref="chapter1.xhtml#figure">
+                    <par id="id8">
+                        <text src="chapter1.xhtml#photo"/>
+                        <audio src="chapter1_audio.mp3" clipBegin="0:24:18.123" clipEnd="0:24:28.764"/>
+                    </par>
+                    <par id="id9">
+                        <text src="chapter1.xhtml#caption"/>
+                        <audio src="chapter1_audio.mp3" clipBegin="0:24:28.764" clipEnd="0:24:50.010"/>
+                    </par>
+                </seq>
+
+                <!-- some sentences in the sidebar -->
+                <par id="id10">
+                    <text src="chapter1.xhtml#sidebartext1"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:24:50.010" clipEnd="0:25:28.530"/>
+                </par>
+                <par id="id11">
+                    <text src="chapter1.xhtml#sidebartext2"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:25:28.530" clipEnd="0:25:45.515"/>
+                </par>
+            </seq>
+
+            <!-- more sentences in the chapter (outside the sidebar) -->
+            <par id="id12">
+                <text src="chapter1.xhtml#text3"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:25:45.515" clipEnd="0:26:30.203"/>
+            </par>
+            <par id="id13">
+                <text src="chapter1.xhtml#text4"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:26:30.203" clipEnd="0:27:15.000"/>
+            </par>
+
+        </seq>
+    </body>
+</smil></pre></div><p>The reason for grouping structures like sidebars, section headers, figures, tables, and footnotes in a <code class="literal">seq</code> element is so that their start and end positions can be identified during playback. Reading Systems can then offer playback options tailored to the layout of the Publication, such as jumping past a long sidebar, turning off rendering of page break announcements (see <a class="xref" href="#sec-behaviors-skip-escape" title="4.4  [...]
+      xmlns:epub="http://www.idpf.org/2007/ops" 
+      xml:lang="en" 
+      lang="en">
+    <head>
+        <title>Media Overlays Example of EPUB Content Document</title>
+    </head>
+    <body id="sec1">
+        <section id="sectionstart" epub:type="chapter">
+            <h1 id="section1_title">The Section Title</h1>
+            <p id="text1">The first phrase of the main text body.</p>
+            <p id="text2">The second phrase of the main text body.</p>
+            <aside id="sidebar" epub:type="sidebar">
+                <h2 id="sidebartitle">The Sidebar Title</h2>
+                <figure id="figure">
+                    <img id="photo" 
+                         src="photo.png" 
+                         alt="a photograph for which there is a caption" />
+                    <figcaption id="caption">The photo caption</figcaption>
+                </figure>
+                <p id="sidebartext1">A phrase in the sidebar.</p>
+                <p id="sidebartext2">Another phrase in the sidebar</p>
+            </aside>
+            <p id="text3">The third phrase of the main text body.</p>
+            <p id="text4">The fourth phrase of the main text body.</p>
+        </section>
+    </body>
+</html></pre></div></section><section class="section" title="3.2.2 Granularity" id="sec-media-overlays-granularity"><h4 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-media-overlays-granularity">›</a> </span>3.2.2 Granularity</h4><p class="informative"> This section is informative</p><p>Media Overlay <code><a href="#elemdef-smil-text">text</a></code> elements' <code class="literal">src</code> attributes refer to <a class="glossterm" hr [...]
+      xmlns:epub="http://www.idpf.org/2007/ops"
+      version="3.0">
+    <body>
+        <seq id="id1" epub:textref="chapter1.xhtml#sidebar" epub:type="sidebar">
+            <par id="id2">
+                <text src="chapter1.xhtml#sidebartitle"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:24:15.000" clipEnd="0:24:18.123"/>
+            </par>
+            <par id="id3">
+                <text src="chapter1.xhtml#sidebartext1"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:24:18.123" clipEnd="0:24:38.530"/>
+            </par>
+            <par id="id4">
+                <text src="chapter1.xhtml#sidebartext2"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:24:38.530" clipEnd="0:25:00.515"/>
+            </par>
+        </seq>
+    </body>
+</smil></pre></div><p>This specification adopts the vocabulary association mechanisms defined in <span class="phrase"><a href="epub30-contentdocs.xhtml#sec-contentdocs-vocab-association">Vocabulary Association</a> <a class="biblioref" href="epub30-references.xhtml#refContentDocs3" title="EPUB Content Documents 3.0">[<abbr>ContentDocs30</abbr>]</a></span> unmodified. Terms from the <span class="phrase"><a href="epub30-contentdocs.xhtml#sec-contentdocs-default-vocab">default vocabula [...]
+{
+    background-color: yellow;
+}</pre><p>The relevant EPUB Content Document excerpt:</p><pre class="synopsis"><span id="txt1">This is the first phrase.</span>
+<span id="txt2">This is the second phrase.</span>
+<span id="txt3">This is the third phrase.</span></pre></div><p>In this example, the Reading System would apply the author-defined <code class="literal">-epub-media-overlay-active</code> class to each text element in the EPUB Content Document as it became active during playback. Conversely, the class name is removed when the element is no longer active. The User would see each EPUB Content Document element styled with a yellow background for the duration of that element's play [...]
+    <item id="ch1" 
+          href="chapter1.xhtml" 
+          media-type="application/xhtml+xml" 
+          media-overlay="ch1_audio"/>
+    <item id="ch1_audio" 
+          href="chapter1_audio.smil" 
+          media-type="application/smil+xml"/>
+</manifest></pre></div><p>Manifest items which refer to Media Overlays must have the media-type <code class="literal">application/smil+xml</code> as specified in <span class="phrase"><a href="epub30-publications.xhtml#sec-core-media-types">Core Media Types</a> <a class="biblioref" href="epub30-references.xhtml#refPublications3" title="EPUB Publications 3.0">[<abbr>Publications30</abbr>]</a></span>.</p><p>The <code class="literal">media-overlay</code> attribute must be attached to m [...]
+    <metadata>
+        …        
+        <meta property="media:duration" refines="#ch1_audio">0:32:29</meta>
+        <meta property="media:duration" refines="#ch2_audio">0:34:02</meta>
+        <meta property="media:duration" refines="#ch3_audio">0:29:49</meta>
+        <meta property="media:duration">1:36:20</meta>
+        <meta property="media:narrator">Joe Speaker</meta>
+        <meta property="media:active-class">-epub-media-overlay-active</meta>
+        …
+    </metadata> 
+    …
+</package></pre></div></section></section></section><section class="chapter" title="4 Playback Behaviors" id="sec-overlay-behaviors"><h2 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-overlay-behaviors">›</a> </span>4 Playback Behaviors</h2><section class="section" title="4.1 Loading the Media Overlay" id="sec-behaviors-loading"><h3 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-behaviors- [...]
+      xmlns:epub="http://www.idpf.org/2007/ops"
+      version="3.0">
+    <body>
+        <!-- a paragraph -->
+        <par id="id1">
+            <text src="chapter1.xhtml#para1"/>
+            <audio src="chapter1_audio.mp3" clipBegin="0:23:22.000" clipEnd="0:24:15.000"/>
+        </par>
+
+        <!-- a page number -->
+        <par id="id2" epub:type="pagebreak">
+            <text src="chapter1.xhtml#pgbreak1"/>
+            <audio src="chapter1_audio.mp3" clipBegin="0:24:15.000" clipEnd="0:24:18.123"/>
+        </par>
+
+        <!-- another paragraph -->
+        <par id="id3">
+            <text src="chapter1.xhtml#para2"/>
+            <audio src="chapter1_audio.mp3" clipBegin="0:24:18.123" clipEnd="0:25:28.530"/>
+        </par>
+    </body>
+</smil>
+</pre></div><div class="informalexample"><p>The following example shows an EPUB Content Document with a pagebreak.</p><pre class="synopsis"><html … >
+    …
+    <body>
+        <p id="para1">This is the paragraph before the pagebreak … </p>
+        
+        <br id="pgbreak1" epub:type="pagebreak" title="234"/>
+        
+        <p id="para2">This is the paragraph after the pagebreak …</p>
+    </body>
+</html></pre></div><p>The following selection of terms from the <a class="biblioref" href="epub30-references.xhtml#refEPUBStructureVocab" title="EPUB 3 Structural Semantics Vocabulary">[<abbr>StructureVocab</abbr>]</a> for which Reading Systems should offer Users the option of skippability is provided as an informative reference: </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>sidebar</p></li><li class="listitem"><p>practice</p></li><li class="listite [...]
+      xmlns:epub="http://www.idpf.org/2007/ops"
+      version="3.0">
+    <body>
+        <!-- a paragraph, part of the regular document text -->
+        <par id="id1">
+            <text src="chapter1.xhtml#para1"/>
+            <audio src="chapter1_audio.mp3" clipBegin="0:23:22.000" clipEnd="0:24:15.000"/>
+        </par>
+
+        <!-- a glossary, which is a nested structure -->
+        <seq id="id2" epub:textref="chapter1.xhtml#g0" epub:type="glossary">
+            <par id="id3" epub:type="glossterm">
+                <text src="chapter1.xhtml#g1"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:24:15.000" clipEnd="0:24:18.123"/>
+            </par>
+            <par id="id4" epub:type="glossdef">
+                <text src="chapter1.xhtml#g2"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:24:18.123" clipEnd="0:25:28.530"/>
+            </par>
+            <par id="id5" epub:type="glossterm">
+                <text src="chapter1.xhtml#g3"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:25:28.530" clipEnd="0:25:45.515"/>
+            </par>
+            <par id="id6" epub:type="glossdef">
+                <text src="chapter1.xhtml#g4"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:25:45.515" clipEnd="0:27:04.123"/>
+            </par>
+        </seq>
+
+        <!-- another paragraph, part of the document text that comes after the glossary -->
+        <par id="id7">
+            <text src="chapter1.xhtml#para2"/>
+            <audio src="chapter1_audio.mp3" clipBegin="0:27:04.123" clipEnd="0:27:59.000"/>
+        </par>
+    </body>
+</smil></pre></div></section></section></section><div class="appendix" title="Appendix A. Media Overlays Schema" id="app-overlays-schema"><div class="titlepage"><div><div><h2 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#app-overlays-schema">›</a> </span>Appendix A. Media Overlays Schema</h2></div></div></div><p>The schema for Media Overlays is available at <a href="http://idpf.org/epub/30/schema/media-overlay-30.nvdl">../schema/media-ove [...]
diff --git a/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-nav.xhtml b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-nav.xhtml
new file mode 100644
index 0000000..26c8d44
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-nav.xhtml
@@ -0,0 +1,565 @@
+<?xml version="1.0" encoding="utf-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<meta charset="utf-8" />
+		<title>EPUB 3 Specifications - Table of Contents</title>
+		<link rel="stylesheet" type="text/css" href="../css/epub-spec.css" />
+	</head>
+	<body>
+		<nav epub:type="toc" id="toc">
+			<h1 class="title">Table of Contents</h1>
+
+			<ol>
+				<li id="ttl"><a href="epub30-titlepage.xhtml">EPUB 3.0 Specification</a></li>
+				<li id="nav"><a href="epub30-nav.xhtml">EPUB 3 Specifications - Table of Contents</a></li>
+				<li id="term"><a href="epub30-terminology.xhtml">Terminology</a></li>
+				<!-- broken file ref: -->
+				<li id="ovw"><a href="epub30-error.xhtml">EPUB 3 Overview</a>
+					<ol>
+						<!-- broken frag ref: -->
+						<li><a href="epub30-overview.xhtml#error">1. Introduction</a><ol>
+								<li><a href="epub30-overview.xhtml#sec-intro-overview">1.1. Overview</a></li>
+								<li><a href="epub30-overview.xhtml#sec-intro-roadmap">1.2. Roadmap</a></li>
+							</ol>
+						</li>
+						<li><a href="epub30-overview.xhtml#sec-features">2. Features</a>
+							<ol>
+								<li><a href="epub30-overview.xhtml#sec-package-file">2.1. Package Document</a></li>
+								<li><a href="epub30-overview.xhtml#sec-nav">2.2. Navigation</a>
+									<ol hidden="">
+										<li><a href="epub30-overview.xhtml#sec-nav-order">2.2.1. Reading Order</a></li>
+										<li><a href="epub30-overview.xhtml#sec-nav-nav-doc">2.2.2. Navigation Document</a></li>
+									</ol>
+								</li>
+								<li><a href="epub30-overview.xhtml#sec-linking">2.3. Linking</a></li>
+								<li><a href="epub30-overview.xhtml#sec-metadata">2.4. Metadata</a></li>
+								<li><a href="epub30-overview.xhtml#sec-content-docs">2.5. Content Documents</a></li>
+								<li><a href="epub30-overview.xhtml#sec-rendering">2.6. Rendering and CSS</a></li>
+								<li><a href="epub30-overview.xhtml#sec-multimedia">2.7. Multimedia</a></li>
+								<li><a href="epub30-overview.xhtml#sec-fonts">2.8. Fonts</a></li>
+								<li><a href="epub30-overview.xhtml#sec-scripting">2.9. Scripting</a></li>
+								<li><a href="epub30-overview.xhtml#sec-tts">2.10. Text-to-speech</a></li>
+								<li><a href="epub30-overview.xhtml#sec-container">2.11. Container</a></li>
+							</ol>
+						</li>
+						<li><a href="epub30-overview.xhtml#sec-gls">3. Global Language Support</a>
+							<ol>
+								<li><a href="epub30-overview.xhtml#sec-gls-metadata">3.1. Metadata</a></li>
+								<li><a href="epub30-overview.xhtml#sec-gls-content-docs">3.2. Content Documents</a></li>
+								<li><a href="epub30-overview.xhtml#sec-gls-css">3.3. CSS</a></li>
+								<li><a href="epub30-overview.xhtml#sec-gls-fonts">3.4. Fonts</a></li>
+								<li><a href="epub30-overview.xhtml#sec-gls-tts">3.5. Text-to-speech</a></li>
+								<li><a href="epub30-overview.xhtml#sec-gls-container">3.6. Container</a></li>
+							</ol>
+						</li>
+						<li><a href="epub30-overview.xhtml#sec-accessibility">4. Accessibility</a>
+							<ol>
+								<li><a href="epub30-overview.xhtml#sec-access-nav">4.1. Navigation</a></li>
+								<li><a href="epub30-overview.xhtml#sec-access-semantic-markup">4.2. Semantic Markup</a></li>
+								<li><a href="epub30-overview.xhtml#sec-access-layout">4.3. Dynamic Layouts</a></li>
+								<li><a href="epub30-overview.xhtml#sec-access-overlays">4.4. Aural Renditions and Media Overlays</a></li>
+								<li><a href="epub30-overview.xhtml#sec-access-fallbacks">4.5. Fallbacks</a></li>
+								<li><a href="epub30-overview.xhtml#sec-access-scripting">4.6. Scripting</a></li>
+							</ol>
+						</li>
+					</ol>
+				</li>
+				<li id="pub"><a href="epub30-publications.xhtml">EPUB Publications 3.0</a>
+					<ol>
+						<li><a href="epub30-publications.xhtml#sec-overview">1. Overview</a>
+							<ol>
+								<li><a href="epub30-publications.xhtml#sec-overview-purpose-and-scope">1.1. Purpose and Scope</a></li>
+								<li><a href="epub30-publications.xhtml#sec-conformance">1.3. Conformance Statements</a></li>
+							</ol>
+						</li>
+						<li><a href="epub30-publications.xhtml#sec-epub-conformance">2. EPUB Publications</a>
+							<ol>
+								<li><a href="epub30-publications.xhtml#sec-epub-content-conf">2.1. Content Conformance</a></li>
+								<li><a href="epub30-publications.xhtml#sec-epub-rs-conf">2.2. Reading System Conformance</a></li>
+							</ol>
+						</li>
+						<li><a href="epub30-publications.xhtml#sec-package-documents">3. Package Documents</a>
+							<ol>
+								<li><a href="epub30-publications.xhtml#sec-package-intro">3.1. Introduction</a></li>
+								<li><a href="epub30-publications.xhtml#sec-package-content-conf">3.2. Content Conformance</a></li>
+								<li><a href="epub30-publications.xhtml#sec-package-rs-conf">3.3. Reading System Conformance</a></li>
+								<li><a href="epub30-publications.xhtml#sec-package-def">3.4. Package Document Definition</a>
+									<ol hidden="">
+										<li><a href="epub30-publications.xhtml#sec-package-elem">3.4.1. The <code>package</code> Element</a></li>
+										<li><a href="epub30-publications.xhtml#sec-metadata-elem">3.4.2. The <code class="literal">metadata</code> Element</a></li>
+										<li><a href="epub30-publications.xhtml#sec-opf-dcidentifier">3.4.3. The DCMES <code>identifier</code> Element</a></li>
+										<li><a href="epub30-publications.xhtml#sec-opf-dctitle">3.4.4. The DCMES <code>title</code> Element</a></li>
+										<li><a href="epub30-publications.xhtml#sec-opf-dclanguage">3.4.5. The DCMES <code>language</code> Element</a></li>
+										<li><a href="epub30-publications.xhtml#sec-opf-dcmes-optional">3.4.6. The DCMES Optional Elements</a></li>
+										<li><a href="epub30-publications.xhtml#sec-meta-elem">3.4.7. The <code class="literal">meta</code> Element</a></li>
+										<li><a href="epub30-publications.xhtml#sec-opf-meta-elem">3.4.8. The <code class="literal">meta</code> Element (OPF2) [OBSOLETE]</a></li>
+										<li><a href="epub30-publications.xhtml#sec-link-elem">3.4.9. The <code>link</code> Element</a></li>
+										<li><a href="epub30-publications.xhtml#sec-manifest-elem">3.4.10. The <code class="literal">manifest</code> Element</a></li>
+										<li><a href="epub30-publications.xhtml#sec-item-elem">3.4.11. The <code>item</code> Element</a></li>
+										<li><a href="epub30-publications.xhtml#sec-spine-elem">3.4.12. The <code>spine</code> Element</a></li>
+										<li><a href="epub30-publications.xhtml#sec-itemref-elem">3.4.13. The <code>itemref</code> Element</a></li>
+										<li><a href="epub30-publications.xhtml#sec-guide-elem">3.4.14. The <code>guide</code> Element [DEPRECATED]</a></li>
+										<li><a href="epub30-publications.xhtml#sec-bindings-elem">3.4.15. The <code>bindings</code> Element</a></li>
+										<li><a href="epub30-publications.xhtml#sec-mediaType-elem">3.4.16. The <code>mediaType</code> Element</a></li>
+									</ol>
+								</li>
+							</ol>
+						</li>
+						<li><a href="epub30-publications.xhtml#sec-package-metadata">4. Package Metadata</a><ol>
+								<li><a href="epub30-publications.xhtml#sec-package-metadata-identifiers">4.1. Publication Identifiers</a>
+									<ol hidden="">
+										<li><a href="epub30-publications.xhtml#sec-opf-metadata-identifiers-uid">4.1.1. Unique Identifier</a></li>
+										<li><a href="epub30-publications.xhtml#sec-opf-metadata-identifiers-pid">4.1.2. Package Identifier</a></li>
+									</ol>
+								</li>
+								<li><a href="epub30-publications.xhtml#sec-metadata-assoc">4.2. Vocabulary Association Mechanisms</a><ol hidden="">
+										<li><a href="epub30-publications.xhtml#sec-metadata-assoc-overview">4.2.1. Overview</a></li>
+										<li><a href="epub30-publications.xhtml#sec-metadata-default-vocab">4.2.2. Default Vocabulary</a></li>
+										<li><a href="epub30-publications.xhtml#sec-metadata-reserved-vocabs">4.2.3. Reserved Vocabularies</a></li>
+										<li><a href="epub30-publications.xhtml#sec-prefix-attr">4.2.4. The <code>prefix</code> Attribute</a></li>
+										<li><a href="epub30-publications.xhtml#sec-property-datatype">4.2.5. The property Data Type</a>
+											<ol>
+												<li><a href="epub30-publications.xhtml#sec-property-syntax">4.2.5.1. Syntax</a></li>
+												<li><a href="epub30-publications.xhtml#sec-property-processing">4.2.5.2. Processing</a></li>
+											</ol>
+										</li>
+									</ol>
+								</li>
+								<li><a href="epub30-publications.xhtml#sec-package-metadata-vocab">4.3. Package Metadata Vocabulary</a>
+									<ol hidden="">
+										<li><a href="epub30-publications.xhtml#elemdef-opf-meta-overview">4.3.1. Overview</a></li>
+										<li><a href="epub30-publications.xhtml#sec-meta-property-values">4.3.2. Metadata <code>meta</code> Properties</a></li>
+										<li><a href="epub30-publications.xhtml#sec-link-rel-values">4.3.3. Metadata <code>link</code> Properties</a></li>
+										<li><a href="epub30-publications.xhtml#sec-item-property-values">4.3.4. Manifest <code>item</code> Properties</a></li>
+										<li><a href="epub30-publications.xhtml#sec-itemref-property-values">4.3.5. Spine <code>itemref</code> Properties</a></li>
+									</ol>
+								</li>
+							</ol>
+						</li>
+						<li><a href="epub30-publications.xhtml#sec-publication-resources">5. Publication Resources</a>
+							<ol>
+								<li><a href="epub30-publications.xhtml#sec-core-media-types">5.1. Core Media Types</a></li>
+								<li><a href="epub30-publications.xhtml#sec-fallback-processing-flow">5.2. Restrictions and Fallbacks</a>
+									<ol hidden="">
+										<li><a href="epub30-publications.xhtml#sec-foreign-restrictions">5.2.1. Foreign Resource Restrictions</a></li>
+										<li><a href="epub30-publications.xhtml#sec-fallback-processing-flow-manifest">5.2.2. Manifest Fallbacks</a></li>
+									</ol>
+								</li>
+								<li><a href="epub30-publications.xhtml#sec-resource-locations">5.3. Publication Resource Locations</a></li>
+								<li><a href="epub30-publications.xhtml#sec-xml-constraints">5.4. XML Conformance</a></li>
+							</ol>
+						</li>
+						<li><a href="epub30-publications.xhtml#app-package-schema">A. Package Document Schema</a></li>
+						<li><a href="epub30-publications.xhtml#app-media-type">B. The <code>application/oebps-package+xml</code> Media Type</a></li>
+					</ol>
+				</li>
+				<li id="cd"><a href="epub30-contentdocs.xhtml">EPUB Content Documents 3.0</a>
+					<ol>
+						<li><a href="epub30-contentdocs.xhtml#sec-overview">1. Overview</a>
+							<ol>
+								<li><a href="epub30-contentdocs.xhtml#sec-overview-purpose-and-scope">1.1. Purpose and Scope</a></li>
+								<li><a href="epub30-contentdocs.xhtml#sec-overview-relations">1.2. Relationship to Other Specifications</a>
+									<ol hidden="">
+										<li><a href="epub30-contentdocs.xhtml#sec-overview-relations-html">1.2.1. Relationship to HTML5</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-overview-relations-svg">1.2.2. Relationship to SVG</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-overview-relations-css">1.2.3. Relationship to CSS</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-overview-versioning">1.2.4. EPUB 3 Versioning Strategy</a></li>
+									</ol>
+								</li>
+								<li><a href="epub30-contentdocs.xhtml#sec-conformance">1.4. Conformance Statements</a></li>
+								<li><a href="epub30-contentdocs.xhtml#sec-overview-nspfx">1.5. Namespace prefix mappings</a></li>
+							</ol>
+						</li>
+						<li><a href="epub30-contentdocs.xhtml#sec-contentdocs">2. EPUB Content Documents</a>
+							<ol>
+								<li><a href="epub30-contentdocs.xhtml#sec-xhtml">2.1. XHTML Content Documents</a>
+									<ol hidden="">
+										<li><a href="epub30-contentdocs.xhtml#sec-xhtml-conf-content">2.1.1. Content Conformance</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-xhtml-conf-rs">2.1.2. Reading System Conformance</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-xhtml-additions">2.1.3. HTML5 Extensions and Enhancements</a>
+											<ol>
+												<li><a href="epub30-contentdocs.xhtml#sec-xhtml-semantic-inflection">2.1.3.1. Semantic Inflection</a>
+													<ol>
+														<li><a href="epub30-contentdocs.xhtml#sec-xhtml-semantic-inflection-intro">2.1.3.1.1. Introduction</a></li>
+														<li><a href="epub30-contentdocs.xhtml#sec-xhtml-content-type-attribute">2.1.3.1.2. The <code>epub:type</code> Attribute</a></li>
+														<li><a href="epub30-contentdocs.xhtml#sec-contentdocs-vocab-association">2.1.3.1.3. Vocabulary Association</a></li>
+														<li><a href="epub30-contentdocs.xhtml#sec-contentdocs-semantic-inflection-processing-reqs">2.1.3.1.4. Processing Requirements</a></li>
+													</ol>
+												</li>
+												<li><a href="epub30-contentdocs.xhtml#sec-xhtml-ssml-attrib">2.1.3.2. SSML Attributes</a>
+													<ol>
+														<li><a href="epub30-contentdocs.xhtml#sec-cd-ssml-intro">2.1.3.2.1. Overview</a></li>
+														<li><a href="epub30-contentdocs.xhtml#sec-cd-ssml-ph-attrib">2.1.3.2.2. The <code>ssml:ph</code> attribute</a></li>
+														<li><a href="epub30-contentdocs.xhtml#sec-cd-ssml-alphabet-attrib">2.1.3.2.3. The <code>ssml:alphabet</code> attribute</a></li>
+													</ol>
+												</li>
+												<li><a href="epub30-contentdocs.xhtml#sec-xhtml-content-switch">2.1.3.3. Content Switching</a>
+													<ol>
+														<li><a href="epub30-contentdocs.xhtml#sec-xhtml-switch-intro">2.1.3.3.1. Introduction</a></li>
+														<li><a href="epub30-contentdocs.xhtml#sec-xhtml-switch-def">2.1.3.3.2. Definition</a>
+														<ol>
+															<li><a href="epub30-contentdocs.xhtml#sec-xhtml-epub-switch">2.1.3.3.2.1. The <code>epub:switch</code> Element</a></li>
+															<li><a href="epub30-contentdocs.xhtml#sec-xhtml-epub-case">2.1.3.3.2.2. The <code>epub:case</code> Element</a></li>
+															<li><a href="epub30-contentdocs.xhtml#sec-xhtml-epub-default">2.1.3.3.2.3. The <code>epub:default</code> Element</a></li>
+														</ol>
+													</li>
+													<li><a href="epub30-contentdocs.xhtml#sec-xhtml-switch-processing">2.1.3.3.3. Processing</a></li>
+													</ol>
+												</li>
+												<li><a href="epub30-contentdocs.xhtml#sec-xhtml-epub-trigger">2.1.3.4. The <code>epub:trigger</code> Element</a></li>
+												<li><a href="epub30-contentdocs.xhtml#sec-xhtml-alternate-style-tags">2.1.3.5. Alternate Style Tags</a></li>
+											</ol>
+										</li>
+										<li><a href="epub30-contentdocs.xhtml#sec-xhtml-deviations">2.1.4. HTML5 Deviations and Constraints</a>
+											<ol>
+												<li><a href="epub30-contentdocs.xhtml#sec-xhtml-mathml">2.1.4.1. Embedded MathML</a>
+													<ol>
+														<li><a href="epub30-contentdocs.xhtml#sec-xhtml-mathml-intro">2.1.4.1.1. Introduction</a></li>
+														<li><a href="epub30-contentdocs.xhtml#sec-xhtml-mathml-conf-content">2.1.4.1.2. Content Conformance</a></li>
+														<li><a href="epub30-contentdocs.xhtml#sec-xhtml-mathml-rs-conf">2.1.4.1.3. Reading System Conformance</a></li>
+														<li><a href="epub30-contentdocs.xhtml#sec-xhtml-mathml-alt">2.1.4.1.4. Alternative Content</a></li>
+													</ol>
+												</li>
+												<li><a href="epub30-contentdocs.xhtml#sec-xhtml-svg">2.1.4.2. Embedded SVG</a>
+													<ol>
+														<li><a href="epub30-contentdocs.xhtml#sec-xhtml-svg-css">2.1.4.2.1. Embedded SVG and CSS</a></li>
+													</ol>
+												</li>
+												<li><a href="epub30-contentdocs.xhtml#sec-xhtml-deviations-unicode">2.1.4.3. Unicode Restrictions</a></li>
+												<li><a href="epub30-contentdocs.xhtml#sec-xhtml-deviations-discouraged">2.1.4.4. Discouraged Constructs</a></li>
+											</ol>
+										</li>
+									</ol>
+								</li>
+								<li><a href="epub30-contentdocs.xhtml#sec-xhtml-nav">2.2. EPUB Navigation Documents</a>
+									<ol hidden="">
+										<li><a href="epub30-contentdocs.xhtml#sec-xhtml-nav-intro">2.2.1. Introduction</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-xhtml-nav-content-conf">2.2.2. Content Conformance</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-xhtml-nav-rs-conf">2.2.3. Reading System Conformance</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-xhtml-nav-def">2.2.4. EPUB Navigation Document Definition</a>
+											<ol>
+												<li><a href="epub30-contentdocs.xhtml#sec-xhtml-nav-def-model">2.2.4.1. The <code>nav</code> Element: Restrictions</a></li>
+												<li><a href="epub30-contentdocs.xhtml#sec-xhtml-nav-def-types">2.2.4.2. The <code>nav</code> Element: Types</a>
+													<ol>
+														<li><a href="epub30-contentdocs.xhtml#sec-xhtml-nav-def-types-toc">2.2.4.2.1. The <code>nav</code> Element</a></li>
+														<li><a href="epub30-contentdocs.xhtml#sec-xhtml-nav-def-types-pagelist">2.2.4.2.2. The <code>nav</code> Element</a></li>
+														<li><a href="epub30-contentdocs.xhtml#sec-xhtml-nav-def-types-landmarks">2.2.4.2.3. The <code>nav</code> Element</a></li>
+														<li><a href="epub30-contentdocs.xhtml#sec-xhtml-nav-def-types-other">2.2.4.2.4. Other <code>nav</code> Elements</a></li>
+													</ol>
+												</li>
+												<li><a href="epub30-contentdocs.xhtml#sec-xhtml-nav-def-hidden">2.2.4.3. The <code>hidden</code> attribute</a></li>
+											</ol>
+										</li>
+									</ol>
+								</li>
+								<li><a href="epub30-contentdocs.xhtml#sec-svg">2.3. SVG Content Documents</a>
+									<ol hidden="">
+										<li><a href="epub30-contentdocs.xhtml#sec-svg-intro">2.3.1. Introduction</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-svg-content-conf">2.3.2. Content Conformance</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-svg-restrictions">2.3.3. Restrictions on SVG 1.1</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-svg-rs-conf">2.3.4. Reading System Conformance</a></li>
+									</ol>
+								</li>
+								<li><a href="epub30-contentdocs.xhtml#sec-scripted-content">2.4. Scripted Content Documents</a>
+									<ol hidden="">
+										<li><a href="epub30-contentdocs.xhtml#sec-scripted-context">2.4.1. Scripting Contexts</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-scripted-content-content-reqs">2.4.2. Content Conformance</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-scripted-content-rs-reqs">2.4.3. Reading System Conformance</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-scripted-content-security">2.4.4. Security Considerations</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-scripted-content-events">2.4.5. Event Model Considerations</a></li>
+									</ol>
+								</li>
+							</ol>
+						</li>
+						<li><a href="epub30-contentdocs.xhtml#sec-css">3. EPUB Style Sheets</a>
+							<ol>
+								<li><a href="epub30-contentdocs.xhtml#sec-css-content-conf">3.1. Content Conformance</a></li>
+								<li><a href="epub30-contentdocs.xhtml#sec-css-rs-conf">3.2. Reading System Conformance</a></li>
+								<li><a href="epub30-contentdocs.xhtml#sec-css-profile">3.3. EPUB 3 CSS Profile</a>
+									<ol hidden="">
+										<li><a href="epub30-contentdocs.xhtml#sec-css-2.1">3.3.1. CSS 2.1</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-css-2.0-list-style-type">3.3.2. CSS 2.0</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-css-voice-characteristics">3.3.3. CSS 3.0 Speech</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-css-fonts">3.3.4. CSS Fonts Level 3</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-css-text">3.3.5. CSS Text Level 3</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-css-writing-modes">3.3.6. CSS Writing Modes</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-css-media-queries">3.3.7. Media Queries</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-css-namespaces">3.3.8. CSS Namespaces</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-css-multi-column">3.3.9. CSS Multi-Column Layout</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-css-ruby-position">3.3.10. Ruby Positioning</a></li>
+										<li><a href="epub30-contentdocs.xhtml#sec-css-oeb-head-foot">3.3.11. Display Property Values <code>oeb-page-head</code> and <code>oeb-page-foot</code></a></li>
+									</ol>
+								</li>
+							</ol>
+						</li>
+						<li><a href="epub30-contentdocs.xhtml#sec-pls">4. PLS Documents</a>
+							<ol>
+								<li><a href="epub30-contentdocs.xhtml#sec-pls-overview">4.1. Overview</a></li>
+								<li><a href="epub30-contentdocs.xhtml#sec-pls-conf-pub">4.2. EPUB Publication Conformance</a></li>
+								<li><a href="epub30-contentdocs.xhtml#sec-pls-conf-content">4.3. Content Conformance</a></li>
+								<li><a href="epub30-contentdocs.xhtml#sec-pls-conf-rs">4.4. Reading System Conformance</a></li>
+							</ol>
+						</li>
+						<li><a href="epub30-contentdocs.xhtml#app-schemas">A. Schemas</a>
+							<ol>
+								<li><a href="epub30-contentdocs.xhtml#app-xhtml-schema">A.1. XHTML Content Document Schema</a></li>
+								<li><a href="epub30-contentdocs.xhtml#app-xhtml-nav-schema">A.2. EPUB Navigation Document Schema</a></li>
+								<li><a href="epub30-contentdocs.xhtml#app-svg-schema">A.3. SVG Content Document Schema</a></li>
+							</ol>
+						</li>
+						<li><a href="epub30-contentdocs.xhtml#app-epubReadingSystem">B. JavaScript epubReadingSystem Object</a>
+							<ol>
+								<li><a href="epub30-contentdocs.xhtml#app-ers-syntax">B.1. Syntax</a></li>
+								<li><a href="epub30-contentdocs.xhtml#app-ers-desc">B.2. Description</a></li>
+								<li><a href="epub30-contentdocs.xhtml#app-ers-properties">B.3. Properties</a></li>
+								<li><a href="epub30-contentdocs.xhtml#app-ers-methods">B.4. Methods</a>
+									<ol hidden="">
+										<li><a href="epub30-contentdocs.xhtml#app-ers-hasFeature">B.4.1. hasFeature</a>
+											<ol>
+												<li><a href="epub30-contentdocs.xhtml#app-ers-hasFeature-syntax">B.4.1.1. Syntax</a></li>
+												<li><a href="epub30-contentdocs.xhtml#app-ers-hasFeature-desc">B.4.1.2. Description</a></li>
+												<li><a href="epub30-contentdocs.xhtml#app-ers-hasFeature-features">B.4.1.3. Features</a></li>
+											</ol>
+										</li>
+									</ol>
+								</li>
+							</ol>
+						</li>
+					</ol>
+				</li>
+				<li id="mo"><a href="epub30-mediaoverlays.xhtml">EPUB Media Overlays 3.0</a>
+					<ol>
+						<li><a href="epub30-mediaoverlays.xhtml#sec-overview">1. Overview</a>
+							<ol>
+								<li><a href="epub30-mediaoverlays.xhtml#sec-overview-purpose-and-scope">1.1. Purpose and Scope</a></li>
+								<li><a href="epub30-mediaoverlays.xhtml#sec-overview-relationship">1.2. Relationship to Other Specifications</a></li>
+								<li><a href="epub30-mediaoverlays.xhtml#sec-conformance">1.4. Conformance Statements</a></li>
+							</ol>
+						</li>
+						<li><a href="epub30-mediaoverlays.xhtml#sec-media-overlays-document-definition">2. Media Overlay Document Definition</a>
+							<ol>
+								<li><a href="epub30-mediaoverlays.xhtml#sec-overlays-introduction">2.1. Introduction</a></li>
+								<li><a href="epub30-mediaoverlays.xhtml#sec-overlays-content-conf">2.2. Content Conformance</a></li>
+								<li><a href="epub30-mediaoverlays.xhtml#sec-overlays-rs-conf">2.3. Reading System Conformance</a></li>
+								<li><a href="epub30-mediaoverlays.xhtml#sec-overlays-def">2.4. Media Overlay Document Definition</a>
+									<ol hidden="">
+										<li><a href="epub30-mediaoverlays.xhtml#sec-smil-smil-elem">2.4.1. The <code class="literal">smil</code> Element</a></li>
+										<li><a href="epub30-mediaoverlays.xhtml#sec-smil-head-elem">2.4.2. The <code class="literal">head</code> Element</a></li>
+										<li><a href="epub30-mediaoverlays.xhtml#sec-smil-metadata-elem">2.4.3. The <code class="literal">metadata</code> Element</a></li>
+										<li><a href="epub30-mediaoverlays.xhtml#sec-smil-body-elem">2.4.4. The <code class="literal">body</code> Element</a></li>
+										<li><a href="epub30-mediaoverlays.xhtml#sec-smil-seq-elem">2.4.5. The <code class="literal">seq</code> Element</a></li>
+										<li><a href="epub30-mediaoverlays.xhtml#sec-smil-par-elem">2.4.6. The <code class="literal">par</code> Element</a></li>
+										<li><a href="epub30-mediaoverlays.xhtml#sec-smil-text-elem">2.4.7. The <code class="literal">text</code> Element</a></li>
+										<li><a href="epub30-mediaoverlays.xhtml#sec-smil-audio-elem">2.4.8. The <code class="literal">audio</code> Element</a></li>
+									</ol>
+								</li>
+							</ol>
+						</li>
+						<li><a href="epub30-mediaoverlays.xhtml#sec-overlay-docs">3. Creating Media Overlays</a>
+							<ol>
+								<li><a href="epub30-mediaoverlays.xhtml#sec-docs-overview">3.1. Overview</a></li>
+								<li><a href="epub30-mediaoverlays.xhtml#sec-docs-relations">3.2. Relationship to the EPUB Content Document</a>
+									<ol hidden="">
+										<li><a href="epub30-mediaoverlays.xhtml#sec-media-overlays-structure">3.2.1. Structure </a></li>
+										<li><a href="epub30-mediaoverlays.xhtml#sec-media-overlays-granularity">3.2.2. Granularity</a></li>
+										<li><a href="epub30-mediaoverlays.xhtml#sec-audio-video">3.2.3. Embedded Audio and Video</a></li>
+										<li><a href="epub30-mediaoverlays.xhtml#sec-tts">3.2.4. Text-to-Speech</a></li>
+									</ol>
+								</li>
+								<li><a href="epub30-mediaoverlays.xhtml#sec-docs-semantic-inflection">3.3. Semantic Inflection</a></li>
+								<li><a href="epub30-mediaoverlays.xhtml#sec-docs-assoc-style">3.4. Associating Style Information</a></li>
+								<li><a href="epub30-mediaoverlays.xhtml#sec-docs-package">3.5. Packaging</a>
+									<ol hidden="">
+										<li><a href="epub30-mediaoverlays.xhtml#sec-package-including">3.5.1. Including Media Overlays</a></li>
+										<li><a href="epub30-mediaoverlays.xhtml#sec-package-metadata">3.5.2. Media Overlays Metadata Vocabulary</a></li>
+									</ol>
+								</li>
+							</ol>
+						</li>
+						<li><a href="epub30-mediaoverlays.xhtml#sec-overlay-behaviors">4. Playback Behaviors</a>
+							<ol>
+								<li><a href="epub30-mediaoverlays.xhtml#sec-behaviors-loading">4.1. Loading the Media Overlay</a></li>
+								<li><a href="epub30-mediaoverlays.xhtml#sec-behaviors-playback">4.2. Basic Playback</a>
+									<ol hidden="">
+										<li><a href="epub30-mediaoverlays.xhtml#sec-rsconf-timing-synch">4.2.1. Timing and Synchronization</a></li>
+										<li><a href="epub30-mediaoverlays.xhtml#sec-rsconf-rendering-audio">4.2.2. Rendering Audio</a></li>
+										<li><a href="epub30-mediaoverlays.xhtml#sec-rsconf-rendering-text">4.2.3. Rendering EPUB Content Document Elements</a></li>
+									</ol>
+								</li>
+								<li><a href="epub30-mediaoverlays.xhtml#sec-behaviors-interaction">4.3. Interacting with the EPUB Content Document</a>
+									<ol hidden="">
+										<li><a href="epub30-mediaoverlays.xhtml#sec-rsconf-navigation">4.3.1. Navigation</a></li>
+										<li><a href="epub30-mediaoverlays.xhtml#sec-embedded-media">4.3.2. Embedded Audio and Video</a></li>
+										<li><a href="epub30-mediaoverlays.xhtml#sec-text-to-speech">4.3.3. Text-to-Speech</a></li>
+									</ol>
+								</li>
+								<li><a href="epub30-mediaoverlays.xhtml#sec-behaviors-skip-escape">4.4. Skippability and Escapability</a>
+									<ol hidden="">
+										<li><a href="epub30-mediaoverlays.xhtml#sec-skippability">4.4.1. Skippability</a></li>
+										<li><a href="epub30-mediaoverlays.xhtml#sec-escabaility">4.4.2. Escapability</a></li>
+									</ol>
+								</li>
+							</ol>
+						</li>
+						<li><a href="epub30-mediaoverlays.xhtml#app-overlays-schema">A. Media Overlays Schema</a>
+							<ol>
+								<li><a href="epub30-mediaoverlays.xhtml#app-overlays-schema-using">A.1. Using the Media Overlays Schema</a></li>
+							</ol>
+						</li>
+						<li><a href="epub30-mediaoverlays.xhtml#app-clock-examples">B. Examples of Clock Values</a></li>
+					</ol>
+				</li>
+				<li id="ack"><a href="epub30-acknowledgements.xhtml">Acknowledgements and Contributors</a></li>
+				<li id="ref"><a href="epub30-references.xhtml">References</a></li>
+				<li id="ocf"><a href="epub30-ocf.xhtml">EPUB Open Container Format (OCF) 3.0</a>
+					<ol>
+						<li><a href="epub30-ocf.xhtml#sec-overview">1. Overview</a>
+							<ol>
+								<li><a href="epub30-ocf.xhtml#sec-overview-purpose-and-scope">1.1. Purpose and Scope</a></li>
+								<li><a href="epub30-ocf.xhtml#sec-conformance">1.3. Conformance Statements</a></li>
+								<li><a href="epub30-ocf.xhtml#ocf-conformance-content">1.4. Content Conformance</a></li>
+								<li><a href="epub30-ocf.xhtml#ocf-conformance-rs">1.5. Reading System Conformance</a></li>
+							</ol>
+						</li>
+						<li><a href="epub30-ocf.xhtml#sec-container-abstract">2. OCF Abstract Container</a>
+							<ol>
+								<li><a href="epub30-ocf.xhtml#sec-container-abstract-overview">2.1. Overview</a></li>
+								<li><a href="epub30-ocf.xhtml#sec-container-file-and-dir-structure">2.2. File and Directory Structure</a></li>
+								<li><a href="epub30-ocf.xhtml#sec-container-iri">2.3. Relative IRIs for Referencing Other Components</a></li>
+								<li><a href="epub30-ocf.xhtml#sec-container-filenames">2.4. File Names</a></li>
+								<li><a href="epub30-ocf.xhtml#sec-container-metainf">2.5. META-INF</a>
+									<ol hidden="">
+										<li><a href="epub30-ocf.xhtml#sec-container-metainf-container.xml">2.5.1. Container – META-INF/container.xml</a></li>
+										<li><a href="epub30-ocf.xhtml#sec-container-metainf-encryption.xml">2.5.2. Encryption – META-INF/encryption.xml</a></li>
+										<li><a href="epub30-ocf.xhtml#sec-container-metainf-manifest.xml">2.5.3. Manifest – META-INF/manifest.xml</a></li>
+										<li><a href="epub30-ocf.xhtml#sec-container-metainf-metadata.xml">2.5.4. Metadata – META-INF/metadata.xml</a></li>
+										<li><a href="epub30-ocf.xhtml#sec-container-metainf-rights.xml">2.5.5. Rights Management – META-INF/rights.xml</a></li>
+										<li><a href="epub30-ocf.xhtml#sec-container-metainf-signatures.xml">2.5.6. Digital Signatures – META-INF/signatures.xml</a></li>
+									</ol>
+								</li>
+							</ol>
+						</li>
+						<li><a href="epub30-ocf.xhtml#physical-container-zip">3. OCF ZIP Container</a><ol>
+								<li><a href="epub30-ocf.xhtml#sec-container-zip-overview">3.1. Overview</a></li>
+								<li><a href="epub30-ocf.xhtml#sec-zip-container-zipreqs">3.2. ZIP File Requirements</a></li>
+								<li><a href="epub30-ocf.xhtml#sec-zip-container-mime">3.3. OCF ZIP Container Media Type Identification</a></li>
+							</ol>
+						</li>
+						<li><a href="epub30-ocf.xhtml#font-obfuscation">4. Font Obfuscation</a>
+							<ol>
+								<li><a href="epub30-ocf.xhtml#fobfus-intro">4.1. Introduction</a></li>
+								<li><a href="epub30-ocf.xhtml#fobfus-algorithm">4.2. Obfuscation Algorithm</a></li>
+								<li><a href="epub30-ocf.xhtml#fobfus-keygen">4.3. Generating the Obfuscation Key</a></li>
+								<li><a href="epub30-ocf.xhtml#fobfus-specifying">4.4. Specifying Obfuscated Resources</a></li>
+							</ol>
+						</li>
+						<li><a href="epub30-ocf.xhtml#app-schemas">A. Schemas</a>
+							<ol>
+								<li><a href="epub30-ocf.xhtml#app-schema-container">A.1. Schema for <code class="filename">container.xml</code></a></li>
+								<li><a href="epub30-ocf.xhtml#app-schema-encryption">A.2. Schema for <code class="filename">encryption.xml</code></a></li>
+								<li><a href="epub30-ocf.xhtml#app-schema-signatures">A.3. Schema for <code class="filename">signatures.xml</code></a></li>
+							</ol>
+						</li>
+						<li><a href="epub30-ocf.xhtml#example">B. Example</a></li>
+						<li><a href="epub30-ocf.xhtml#app-media-type">C. The <code>application/epub+zip</code> Media Type</a></li>
+					</ol>
+				</li>
+				<li id="cha"><a href="epub30-changes.xhtml">EPUB 3 Changes from EPUB 2.0.1</a>
+					<ol>
+						<li><a href="epub30-changes.xhtml#sec-introduction">1. Introduction</a>
+							<ol>
+								<li><a href="epub30-changes.xhtml#sec-diff-intro-history">1.1. EPUB Revision History</a></li>
+							</ol>
+						</li>
+						<li><a href="epub30-changes.xhtml#sec-history">2. Changes to EPUB Specification Documents</a>
+							<ol>
+								<li><a href="epub30-changes.xhtml#sec-history-intro">2.1. Changes in Document Organization </a></li>
+								<li><a href="epub30-changes.xhtml#sec-terminology-changes">2.2. Changes in Terminology </a></li>
+							</ol>
+						</li>
+						<li><a href="epub30-changes.xhtml#sec-new-changed">3. New and Changed Functionality in EPUB 3</a><ol>
+								<li><a href="epub30-changes.xhtml#sec-new-changed-cd">3.1. Content Documents</a>
+									<ol hidden="">
+										<li><a href="epub30-changes.xhtml#sec-new-changed-xhtml5">3.1.1. HTML5</a></li>
+										<li><a href="epub30-changes.xhtml#sec-new-changed-svg">3.1.2. SVG</a></li>
+										<li><a href="epub30-changes.xhtml#sec-new-changed-mathml">3.1.3. MathML</a></li>
+										<li><a href="epub30-changes.xhtml#sec-new-changed-semantic-inflection">3.1.4. Semantic Inflection</a></li>
+										<li><a href="epub30-changes.xhtml#sec-new-changed-switch">3.1.5. Content Switching</a></li>
+									</ol>
+								</li>
+								<li><a href="epub30-changes.xhtml#sec-new-changed-nav">3.2. Navigation</a></li>
+								<li><a href="epub30-changes.xhtml#sec-new-changed-linking">3.3. Linking</a></li>
+								<li><a href="epub30-changes.xhtml#sec-new-changed-scrp">3.4. Scripting and Interactivity</a>
+									<ol hidden="">
+										<li><a href="epub30-changes.xhtml#sec-new-changed-scripting">3.4.1. Scripting</a></li>
+										<li><a href="epub30-changes.xhtml#sec-new-changed-trigger">3.4.2. Triggers</a></li>
+										<li><a href="epub30-changes.xhtml#sec-new-changed-bindings">3.4.3. Bindings</a></li>
+									</ol>
+								</li>
+								<li><a href="epub30-changes.xhtml#sec-new-changed-styling">3.5. Styling and Layout</a>
+									<ol hidden="">
+										<li><a href="epub30-changes.xhtml#sec-new-changed-css">3.5.1. CSS</a></li>
+										<li><a href="epub30-changes.xhtml#sec-new-changed-embedded-fonts">3.5.2. Embedded Fonts</a></li>
+										<li><a href="epub30-changes.xhtml#sec-new-changed-ocf-obf">3.5.3. Font Obfuscation</a></li>
+									</ol>
+								</li>
+								<li><a href="epub30-changes.xhtml#sec-new-changed-media">3.6. Rich Media</a>
+									<ol hidden="">
+										<li><a href="epub30-changes.xhtml#sec-new-changed-audio-video">3.6.1. Audio and Video</a></li>
+										<li><a href="epub30-changes.xhtml#sec-new-changed-mo">3.6.2. Media Overlays</a></li>
+									</ol>
+								</li>
+								<li><a href="epub30-changes.xhtml#sec-new-changed-meta">3.7. Metadata</a>
+									<ol hidden="">
+										<li><a href="epub30-changes.xhtml#sec-new-changed-meta-package">3.7.1. Publication Metadata and Identity</a></li>
+										<li><a href="epub30-changes.xhtml#sec-new-changed-meta-resources">3.7.2. Resource Metadata</a></li>
+									</ol>
+								</li>
+								<li><a href="epub30-changes.xhtml#sec-new-changed-speech">3.8. Speech</a></li>
+								<li><a href="epub30-changes.xhtml#sec-new-changed-package">3.9. Manifest Fallbacks</a></li>
+								<li><a href="epub30-changes.xhtml#sec-new-changed-ocf">3.10. Containment</a>
+									<ol hidden="">
+										<li><a href="epub30-changes.xhtml#sec-new-changed-remote">3.10.1. Remote Resources</a></li>
+										<li><a href="epub30-changes.xhtml#sec-new-changed-ocf-white-space">3.10.2. Whitespace in MIMETYPE file</a></li>
+										<li><a href="epub30-changes.xhtml#sec-new-changed-ocf-namechars">3.10.3. Disallowed characters in OCF file names</a></li>
+									</ol>
+								</li>
+								<li><a href="epub30-changes.xhtml#sec-new-changed-xml-unicode">3.11. XML and Unicode</a></li>
+							</ol>
+						</li>
+						<li><a href="epub30-changes.xhtml#sec-replaced">4. EPUB 2.0.1 Features Replaced in EPUB 3</a>
+							<ol>
+								<li><a href="epub30-changes.xhtml#sec-removals">4.1. Features Removed from EPUB 3</a>
+									<ol hidden="">
+										<li><a href="epub30-changes.xhtml#sec-removals-dtbook">4.1.1. DTBook</a></li>
+										<li><a href="epub30-changes.xhtml#sec-removals-out-of-line-XML-islands">4.1.2. Out-of-Line XML Islands</a></li>
+										<li><a href="epub30-changes.xhtml#sec-removals-tours">4.1.3. Tours</a></li>
+										<li><a href="epub30-changes.xhtml#sec-removals-filesystem-container">4.1.4. Filesystem Container</a></li>
+									</ol>
+								</li>
+								<li><a href="epub30-changes.xhtml#sec-deprecations">4.2. Features Deprecated/Obsoleted in EPUB 3</a>
+									<ol hidden="">
+										<li><a href="epub30-changes.xhtml#sec-deprecations-guide">4.2.1. Guide</a></li>
+										<li><a href="epub30-changes.xhtml#sec-deprecations-ncx">4.2.2. NCX</a></li>
+										<li><a href="epub30-changes.xhtml#sec-deprecations-meta201">4.2.3. 2.0.1 meta element</a></li>
+									</ol>
+								</li>
+							</ol>
+						</li>
+					</ol>
+				</li>
+			</ol>
+		</nav>
+
+		<nav epub:type="landmarks" hidden="">
+			<h2>Guide</h2>
+			<ol>
+				<li><a epub:type="toc" href="#toc">Table of Contents</a></li>
+				<li><a epub:type="bodymatter" href="epub30-overview.xhtml#sec-intro">Overview</a></li>
+				<li><a epub:type="bibliography" href="epub30-references.xhtml#references">References</a></li>
+				<li><a epub:type="glossary" href="epub30-terminology.xhtml#terminology">Terminology</a></li>
+			</ol>
+		</nav>
+
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-ocf.xhtml b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-ocf.xhtml
new file mode 100644
index 0000000..268b2b2
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-ocf.xhtml
@@ -0,0 +1,304 @@
+<?xml version="1.0" encoding="utf-8"?>
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><meta charset="utf-8"/><title>EPUB Open Container Format (OCF) 3.0</title><link rel="stylesheet" type="text/css" href="../css/epub-spec.css"/></head><body><h1 class="title">EPUB Open Container Format (OCF) 3.0</h1><p class="identity"><span class="releaseinfo">Recommended Specification</span> <span class="pubdate">11 October 2011</span></p><dl class="printhistory"><dt>This version</dt><dd><a href="http://www.idpf.or [...]
+<img src="image1.jpg" alt="…" />
+                </pre></div><p>For Relative IRI References, the Base IRI <a class="biblioref" href="epub30-references.xhtml#refRFC3986" title="Uniform Resource Identifier (URI): Generic Syntax (RFC 3986)">[<abbr>RFC3986</abbr>]</a> is determined by the relevant language specifications for the given file formats. For example, the CSS specification defines how relative IRI references work in the context of CSS style sheets and property declarations. Note that some language specifications r [...]
+<?xml version="1.0"?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+    <rootfiles>
+        <rootfile full-path="OEBPS/Great Expectations.opf"
+            media-type="application/oebps-package+xml" />	
+    </rootfiles>
+</container>
+            </pre></div><p>then the path <code class="filename">OEBPS/Great Expectations.opf</code> is relative to the root directory for the OCF Abstract Container and not relative to the <code class="filename">META-INF</code> directory.</p></section><section class="section" title="2.4 File Names" id="sec-container-filenames"><h3 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-container-filenames">›</a> </span>2.4 File Names</h3><p>The term  [...]
+<?xml version="1.0"?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+    <rootfiles>
+        <rootfile full-path="OEBPS/My Crazy Life.opf"
+            media-type="application/oebps-package+xml" />
+    </rootfiles>
+</container>
+                    </pre></div><div class="informalexample"><p>The following example shows SVG and XHTML renditions of <em>The Sandman</em> bundled in the same container:</p><pre class="synopsis">
+<?xml version="1.0"?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+    <rootfiles>
+        <rootfile full-path="SVG/Sandman.opf"
+            media-type="application/oebps-package+xml" />
+        <rootfile full-path="XHTML/Sandman.opf"
+            media-type="application/oebps-package+xml" />
+    </rootfiles>
+</container>
+                    </pre></div><p>The <code>manifest</code> element contained within the <a class="glossterm" href="epub30-terminology.xhtml#gloss-package-document" title="Package Document">Package Document</a> specifies the one and only manifest used for EPUB processing. Ancillary manifest information contained in the ZIP archive or in the optional <code class="filename">manifest.xml</code> file must not be used for EPUB processing purposes. Any extra files in the ZIP archive must not  [...]
+<encryption
+    xmlns ="urn:oasis:names:tc:opendocument:xmlns:container"
+    xmlns:enc="http://www.w3.org/2001/04/xmlenc#"
+    xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+    <enc:EncryptedKey Id="EK">
+        <enc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
+        <ds:KeyInfo>
+            <ds:KeyName>John Smith</ds:KeyName>
+        </ds:KeyInfo>
+        <enc:CipherData>
+            <enc:CipherValue>xyzabc</enc:CipherValue>
+        </enc:CipherData>
+    </enc:EncryptedKey>
+    <enc:EncryptedData Id="ED1">
+        <enc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#kw-aes128"/>
+        <ds:KeyInfo>
+            <ds:RetrievalMethod URI="#EK"
+                Type="http://www.w3.org/2001/04/xmlenc#EncryptedKey"/>
+        </ds:KeyInfo>
+        <enc:CipherData>
+            <enc:CipherReference URI="image.jpeg"/>
+        </enc:CipherData>
+    </enc:EncryptedData>
+</encryption>
+                    </pre></div></section><section class="section" title="2.5.3 Manifest – META-INF/manifest.xml" id="sec-container-metainf-manifest.xml"><h4 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-container-metainf-manifest.xml">›</a> </span>2.5.3 Manifest – META-INF/manifest.xml</h4><p>An optional file with the reserved name <code class="filename">manifest.xml</code> may be included within the <code class="filename">META-INF</code>  [...]
+<signatures xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+    <Signature Id="sig" xmlns="http://www.w3.org/2000/09/xmldsig#">
+        <SignedInfo>
+            <CanonicalizationMethod 
+                Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
+            <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1"/>
+            <Reference URI="#Manifest1">
+                <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
+                <DigestValue>j6lwx3rvEPO0vKtMup4NbeVu8nk=</DigestValue>
+            </Reference>
+        </SignedInfo>
+        <SignatureValue>…</SignatureValue>
+        <KeyInfo>
+            <KeyValue>
+                <DSAKeyValue>
+                    <P>…</P><Q>…</Q><G>…</G><Y>…</Y> 
+                </DSAKeyValue>
+            </KeyValue>
+        </KeyInfo>
+        <Object>
+            <Manifest Id="Manifest1">
+                <Reference URI="OEBFPS/book.xml">                    
+                    <Transforms>                                                
+                        <Transform
+                            Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>                        
+                    </Transforms>
+                    <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
+                    <DigestValue></DigestValue>
+                </Reference>
+                <Reference URI="OEBFPS/images/cover.jpeg">
+                    <Transforms>                                                
+                        <Transform
+                            Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>                        
+                    </Transforms>
+                    <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
+                    <DigestValue></DigestValue>
+                </Reference>
+            </Manifest>
+        </Object>
+    </Signature> 
+</signatures>
+                    </pre></div></section></section></section><section class="chapter" title="3 OCF ZIP Container" id="physical-container-zip"><h2 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#physical-container-zip">›</a> </span>3 OCF ZIP Container</h2><section class="section" title="3.1 Overview" id="sec-container-zip-overview"><h3 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-container-zip-over [...]
+set source to font file
+set destination to obfuscated file
+set keyData to key for font
+set outer to 0
+while outer < 52 and not (source at EOF)
+    set inner to 0
+    while inner < 20 and not (source at EOF)
+        read 1 byte from source     //Assumes read advances file position
+        set sourceByte to result of read
+        set keyByte to byte inner of keyData
+        set obfuscatedByte to (sourceByte XOR keyByte)
+        write obfuscatedByte to destination
+        increment inner
+    end while
+    increment outer
+end while
+if not (source at EOF) then
+    read source to EOF
+    write result of read to destination
+end if 
+            </pre><p>To get the original font data back, the process is simply reversed. That is, the source file becomes the obfuscated data and the destination file will contain the raw font data.</p></section><section class="section" title="4.3 Generating the Obfuscation Key" id="fobfus-keygen"><h3 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#fobfus-keygen">›</a> </span>4.3 Generating the Obfuscation Key</h3><p>The key used in the obfuscati [...]
+<encryption &#x0D;
+    xmlns="urn:oasis:names:tc:opendocument:xmlns:container" &#x0D;
+    xmlns:enc="http://www.w3.org/2001/04/xmlenc#">&#x0D;
+    <enc:EncryptedData> &#x0D;
+        <enc:EncryptionMethod Algorithm="http://www.idpf.org/2008/embedding"/> &#x0D;
+        <enc:CipherData> &#x0D;
+            <enc:CipherReference URI="OEBPS/Fonts/BKANT.TTF"/>  &#x0D;
+        </enc:CipherData> &#x0D;
+    </enc:EncryptedData>  &#x0D;
+</encryption> &#x0D;
+
+                </pre></div><p>To prevent trivial copying of the embedded font to other Publications, the explicit key must not be provided in the <code class="filename">encryption.xml</code> file. Reading systems must derive the key from the package's <a class="glossterm" href="epub30-terminology.xhtml#gloss-unique-identifier" title="Unique Identifier">Unique Identifier</a>. </p></section></section><div class="appendix" title="Appendix A. Schemas" id="app-schemas"><div class="titlepage" [...]
+mimetype
+META-INF/container.xml
+META-INF/signatures.xml
+META-INF/encryption.xml
+OEBPS/As You Like It.opf
+OEBPS/book.html
+OEBPS/nav.html
+OEBPS/toc.ncx
+OEBPS/images/cover.png</pre></div></div><br class="example-break"/><div class="example" title="Example B.2. The contents of the mimetype file" id="example-mimetype"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#example-mimetype">›</a> </span><p class="title"><strong>Example B.2. The contents of the <code class="filename">mimetype</code> file</strong></p><div class="example-contents"><pre class="synopsis">application/epub+zip</pre></div></div><br class="examp [...]
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+    <rootfiles>
+        <rootfile full-path="OEBPS/As You Like It.opf"
+            media-type="application/oebps-package+xml" />
+    </rootfiles>
+</container></pre></div></div><br class="example-break"/><div class="example" title="Example B.4. The contents of the META-INF/signatures.xml file" id="example-signatures"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#example-signatures">›</a> </span><p class="title"><strong>Example B.4. The contents of the <code class="filename">META-INF/signatures.xml</code> file</strong></p><div class="example-contents"><pre class="synopsis"><signatures xmlns="ur [...]
+    <Signature Id="AsYouLikeItSignature" xmlns="http://www.w3.org/2000/09/xmldsig#">
+        
+        <!-- SignedInfo is the information that is actually signed. In this case -->
+        <!-- the SHA1 algorithm is used to sign the canonical form of the XML    -->
+        <!-- documents enumerated in the Object element below                    -->
+        <SignedInfo>
+            <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
+            <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1"/>
+            <Reference URI="#AsYouLikeIt">
+                <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
+                <DigestValue>…</DigestValue>
+            </Reference>
+        </SignedInfo>
+        
+        <!-- The signed value of the digest above using the DSA algorithm -->
+        <SignatureValue>…</SignatureValue>
+        
+        <!-- The key to use to validate the signature -->
+        <KeyInfo>
+            <KeyValue>
+                <DSAKeyValue>
+                    <P>…</P>
+                    <Q>…</Q>
+                    <G>…</G>
+                    <Y>…</Y>
+                </DSAKeyValue>
+            </KeyValue>
+        </KeyInfo>
+        
+        <!-- The list documents to sign. Note that the canonical form of XML   -->
+        <!-- documents is signed while the binary form of the other documents -->
+        <!-- is used -->
+        <Object>
+            <Manifest Id="AsYouLikeIt">
+                <Reference URI="OEBPS/As You Like It.opf">
+                    <Transforms>
+                        <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
+                    </Transforms>
+                    <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
+                    <DigestValue></DigestValue>
+                </Reference>
+                <Reference URI="OEBPS/book.html">
+                    <Transforms>
+                        <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
+                    </Transforms>
+                    <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
+                    <DigestValue></DigestValue>
+                </Reference>
+                <Reference URI="OEBPS/images/cover.png">
+                    <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
+                    <DigestValue></DigestValue>
+                </Reference>
+            </Manifest>
+        </Object>        
+    </Signature>
+</signatures></pre></div></div><br class="example-break"/><div class="example" title="Example B.5. The contents of the META-INF/encryption.xml file" id="example-encryption"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#example-encryption">›</a> </span><p class="title"><strong>Example B.5. The contents of the <code class="filename">META-INF/encryption.xml</code> file</strong></p><div class="example-contents"><pre class="synopsis"><?xml version="1.0"?>
+<encryption xmlns="urn:oasis:names:tc:opendocument:xmlns:container"
+    xmlns:enc="http://www.w3.org/2001/04/xmlenc#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+
+    <!-- The RSA encrypted AES-128 symmetric key used to encrypt the data -->
+    <enc:EncryptedKey Id="EK">
+        <enc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
+        <ds:KeyInfo>
+            <ds:KeyName>John Smith</ds:KeyName>
+        </ds:KeyInfo>
+        <enc:CipherData>
+            <enc:CipherValue>xyzabc…</enc:CipherValue>
+        </enc:CipherData>
+    </enc:EncryptedKey>
+
+    <!-- Each EncryptedData block identifies a single document that has been    -->
+    <!-- encrypted using the AES-128 algorithm. The data remains stored in it’s -->
+    <!-- encrypted form in the original file within the container.              -->
+    <enc:EncryptedData Id="ED1">
+        <enc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#kw-aes128"/>
+        <ds:KeyInfo>
+            <ds:RetrievalMethod URI="#EK" Type="http://www.w3.org/2001/04/xmlenc#EncryptedKey"/>
+        </ds:KeyInfo>
+        <enc:CipherData>
+            <enc:CipherReference URI="OEBPS/book.html"/>
+        </enc:CipherData>
+    </enc:EncryptedData>
+
+    <enc:EncryptedData Id="ED2">
+        <enc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#kw-aes128"/>
+        <ds:KeyInfo>
+            <ds:RetrievalMethod URI="#EK" Type="http://www.w3.org/2001/04/xmlenc#EncryptedKey"/>
+        </ds:KeyInfo>
+        <enc:CipherData>
+            <enc:CipherReference URI="OEBPS/images/cover.png"/>
+        </enc:CipherData>
+    </enc:EncryptedData>
+
+</encryption></pre></div></div><br class="example-break"/><div class="example" title="Example B.6. The contents of the OEBPS/As You Like It.opf file" id="example-opf"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#example-opf">›</a> </span><p class="title"><strong>Example B.6. The contents of the <code class="filename">OEBPS/As You Like It.opf</code> file</strong></p><div class="example-contents"><pre class="synopsis"><?xml version="1.0"?>
+<package version="3.0" 
+         xml:lang="en"
+         xmlns="http://www.idpf.org/2007/opf" 
+         unique-identifier="pub-id">
+    
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier 
+              id="pub-id">urn:uuid:B9B412F2-CAAD-4A44-B91F-A375068478A0</dc:identifier>
+        <meta refines="#pub-id" 
+              property="identifier-type" 
+              scheme="xsd:string">uuid</meta>
+        
+        <dc:language>en</dc:language>
+        
+        <dc:title>As You Like It</dc:title>
+        
+        <dc:creator id="creator">William Shakespeare</dc:creator>
+        <meta refines="#creator" 
+              property="role" 
+              scheme="marc:relators">aut</meta>
+        
+        <meta property="dcterms:modified">2000-03-24T00:00:00Z</meta>
+        
+        <dc:publisher>Project Gutenberg</dc:publisher>
+        
+        <dc:date>2000-03-24</dc:date>
+        
+        <meta property="dcterms:dateCopyrighted">9999-01-01</meta>
+        
+        <dc:identifier 
+              id="isbn13">urn:isbn:9780741014559</dc:identifier>
+        <meta refines="#isbn13" 
+              property="identifier-type" 
+              scheme="onix:codelist5">15</meta>
+        
+        <dc:identifier id="isbn10">0-7410-1455-6</dc:identifier>
+        <meta refines="#isbn10" 
+              property="identifier-type" 
+              scheme="onix:codelist5">2</meta>
+        
+        <link rel="xml-signature" 
+              href="../META-INF/signatures.xml#AsYouLikeItSignature"/>
+    </metadata>
+    
+    <manifest>
+        <item id="r4915" 
+              href="book.html" 
+              media-type="application/xhtml+xml"/>
+        <item id="r7184" 
+              href="images/cover.png" 
+              media-type="image/png"/>
+        <item id="nav" 
+              href="nav.html" 
+              media-type="application/xhtml+xml" 
+              properties="nav"/>
+        <item id="ncx" 
+              href="toc.ncx" 
+              media-type="application/x-dtbncx+xml"/>
+    </manifest>
+    
+    <spine toc="ncx">
+        <itemref idref="r4915"/>
+    </spine>
+</package>
+</pre></div></div><br class="example-break"/></div><div class="appendix" title="Appendix C. The application/epub+zip Media Type" id="app-media-type"><div class="titlepage"><div><div><h2 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#app-media-type">›</a> </span>Appendix C. The <code>application/epub+zip</code> Media Type</h2></div></div></div><p>This appendix registers the media type <code class="literal">application/epub+zip</code> for the EPUB [...]
diff --git a/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-overview.xhtml b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-overview.xhtml
new file mode 100644
index 0000000..757295a
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-overview.xhtml
@@ -0,0 +1,974 @@
+<?xml version="1.0" encoding="utf-8"?>
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <meta charset="utf-8" />
+        <title>EPUB 3 Overview</title>
+        <link rel="stylesheet" type="text/css" href="../css/epub-spec.css" />
+    </head>
+    <body>
+        <h1 class="title">EPUB 3 Overview</h1>
+        <p class="identity"><span class="releaseinfo">Recommended Specification</span>
+            <span class="pubdate">11 October 2011</span></p>
+        <dl class="printhistory">
+            <dt>This version</dt>
+            <dd><a href="http://www.idpf.org/epub/30/spec/epub30-overview-20111011.html"
+                    >http://www.idpf.org/epub/30/spec/epub30-overview-20111011.html</a></dd>
+            <dt>Latest version</dt>
+            <dd><a href="http://www.idpf.org/epub/30/spec/epub30-overview.html"
+                    >http://www.idpf.org/epub/30/spec/epub30-overview.html</a></dd>
+            <dt>Previous version</dt>
+            <dd><a href="http://www.idpf.org/epub/30/spec/epub30-overview-20110908.html"
+                    >http://www.idpf.org/epub/30/spec/epub30-overview-20110908.html</a></dd>
+        </dl>
+        <p class="diff"> A diff of changes from the previous draft is available at <a
+                href="http://code.google.com/p/epub-revision/source/diff?spec=svn3218&old=3183&r=3218&format=side&path=%2Ftrunk%2Fsrc%2Fspec%2Fepub30-overview.xml"
+                >this link</a>. </p>
+        <div class="legal"><p class="copyright">Copyright © 2010, 2011 International Digital
+                Publishing Forum™</p><div class="legalnotice" title="Legal Notice"><a id="d66911e37"
+                    ></a><p>All rights reserved. This work is protected under Title 17 of the United
+                    States Code. Reproduction and dissemination of this work with changes is
+                    prohibited except with the written permission of the <a
+                        href="http://www.idpf.org">International Digital Publishing Forum
+                    (IDPF)</a>. </p><p>EPUB is a registered trademark of the International Digital
+                    Publishing Forum.</p></div></div>
+        <div class="authorgroup"><p class="bridgehead">Editors</p><p class="editor">Garth Conboy,
+                Google Inc. </p><p class="editor">Matt Garrish, Invited Expert </p><p class="editor"
+                >Markus Gylling, DAISY Consortium </p><p class="editor">William McCoy, International
+                Digital Publishing Forum (IDPF) </p><p class="editor">MURATA Makoto, JEPA EPUB Study
+                Group </p><p class="editor">Daniel Weck, DAISY Consortium </p></div>
+        <nav class="toc" id="toc">
+            <p><strong>Table of Contents</strong></p>
+            <ol>
+                <!-- broken frag ref: -->
+                <li><a href="#sec-intro-error">1. Introduction</a></li>
+                <li><ol>
+                        <li><a href="#sec-intro-overview">1.1. Overview</a></li>
+                        <li><a href="#sec-intro-roadmap">1.2. Roadmap</a></li>
+                    </ol></li>
+                <li><a href="#sec-features">2. Features</a></li>
+                <li><ol>
+                        <li><a href="#sec-package-file">2.1. Package Document</a></li>
+                        <li><a href="#sec-nav">2.2. Navigation</a></li>
+                        <li><ol>
+                                <li><a href="#sec-nav-order">2.2.1. Reading Order</a></li>
+                                <li><a href="#sec-nav-nav-doc">2.2.2. Navigation Document</a></li>
+                            </ol></li>
+                        <li><a href="#sec-linking">2.3. Linking</a></li>
+                        <li><a href="#sec-metadata">2.4. Metadata</a></li>
+                        <li><a href="#sec-content-docs">2.5. Content Documents</a></li>
+                        <li><a href="#sec-rendering">2.6. Rendering and CSS</a></li>
+                        <li><a href="#sec-multimedia">2.7. Multimedia</a></li>
+                        <li><a href="#sec-fonts">2.8. Fonts</a></li>
+                        <li><a href="#sec-scripting">2.9. Scripting</a></li>
+                        <li><a href="#sec-tts">2.10. Text-to-speech</a></li>
+                        <li><a href="#sec-container">2.11. Container</a></li>
+                    </ol></li>
+                <li><a href="#sec-gls">3. Global Language Support</a></li>
+                <li><ol>
+                        <li><a href="#sec-gls-metadata">3.1. Metadata</a></li>
+                        <li><a href="#sec-gls-content-docs">3.2. Content Documents</a></li>
+                        <li><a href="#sec-gls-css">3.3. CSS</a></li>
+                        <li><a href="#sec-gls-fonts">3.4. Fonts</a></li>
+                        <li><a href="#sec-gls-tts">3.5. Text-to-speech</a></li>
+                        <li><a href="#sec-gls-container">3.6. Container</a></li>
+                    </ol></li>
+                <li><a href="#sec-accessibility">4. Accessibility</a></li>
+                <li><ol>
+                        <li><a href="#sec-access-nav">4.1. Navigation</a></li>
+                        <li><a href="#sec-access-semantic-markup">4.2. Semantic Markup</a></li>
+                        <li><a href="#sec-access-layout">4.3. Dynamic Layouts</a></li>
+                        <li><a href="#sec-access-overlays">4.4. Aural Renditions and Media
+                                Overlays</a></li>
+                        <li><a href="#sec-access-fallbacks">4.5. Fallbacks</a></li>
+                        <li><a href="#sec-access-scripting">4.6. Scripting</a></li>
+                    </ol></li>
+                <li><ol></ol></li>
+            </ol>
+        </nav>
+        <section class="chapter" title="1 Introduction" id="sec-intro">
+            <h2 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here"
+                        href="#sec-intro">›</a> </span>1 Introduction</h2>
+            <section class="section" title="1.1 Overview" id="sec-intro-overview">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-intro-overview">›</a> </span>1.1
+                    Overview</h3>
+                <p>The EPUB® specification is a distribution and interchange format standard for
+                    digital publications and documents. EPUB defines a means of representing,
+                    packaging and encoding structured and semantically enhanced Web content —
+                    including HTML5, CSS, SVG, images, and other resources — for distribution in a
+                    single-file format.</p>
+                <p id="sibling-specs">EPUB 3, the third major release of the standard, consists of a
+                    set of four specifications, each defining an important component of an overall
+                    <!-- broken cross-doc frag ref: -->
+                        <a class="glossterm" href="epub30-terminology.xhtml#error-gloss-epub-publication"
+                        title="EPUB Publication (or Publication)">EPUB Publication</a>:</p>
+                <div class="itemizedlist" id="epub-specs-listing"><ul class="itemizedlist">
+                        <li class="listitem"><p>EPUB Publications 3.0 <a class="biblioref"
+                                    href="epub30-references.xhtml#refPublications3"
+                                    title="EPUB Publications 3.0">[<abbr>Publications30</abbr>]</a>,
+                                which defines publication-level semantics and overarching
+                                conformance requirements for <a class="glossterm"
+                                    href="epub30-terminology.xhtml#gloss-epub-publication"
+                                    title="EPUB Publication (or Publication)">EPUB
+                                Publication</a>s.</p></li>
+                        <li class="listitem"><p>EPUB Content Documents 3.0 <a class="biblioref"
+                                    href="epub30-references.xhtml#refContentDocs3"
+                                    title="EPUB Content Documents 3.0"
+                                    >[<abbr>ContentDocs30</abbr>]</a>, which defines profiles of
+                                XHTML, SVG and CSS for use in the context of <a class="glossterm"
+                                    href="epub30-terminology.xhtml#gloss-epub-publication"
+                                    title="EPUB Publication (or Publication)">EPUB
+                                Publication</a>s.</p></li>
+                        <li class="listitem"><p>EPUB Open Container Format (OCF) 3.0 <a
+                                    class="biblioref" href="epub30-references.xhtml#refOCF30"
+                                    title="Open Container Format 3.0">[<abbr>OCF3</abbr>]</a>, which
+                                defines a file format and processing model for encapsulating a set
+                                of related resources into a single-file (ZIP) <a class="glossterm"
+                                    href="epub30-terminology.xhtml#gloss-container"
+                                    title="EPUB Container (or Container)">EPUB Container</a>.
+                            </p></li>
+                        <li class="listitem"><p>EPUB Media Overlays 3.0 <a class="biblioref"
+                                    href="epub30-references.xhtml#refOverlays3"
+                                    title="EPUB Media Overlays 3.0"
+                                    >[<abbr>MediaOverlays30</abbr>]</a>, which defines a format and
+                                a processing model for synchronization of text and audio.</p></li>
+                    </ul></div>
+                <p>EPUB has been widely adopted as the format for digital books (eBooks), and these
+                    new specifications significantly increase the format's capabilities in order to
+                    better support a wider range of publication requirements, including complex
+                    layouts, rich media and interactivity, and global typography features. The
+                    expectation is that EPUB 3 will be utilized for a broad range of content,
+                    including books, magazines and educational, professional and scientific
+                    publications.</p>
+                <p>This document provides a starting point for content authors and software
+                    developers wishing to understand these specifications. It consists of
+                    non-normative overview material, including a <a href="#sec-intro-roadmap"
+                        title="1.2 Roadmap">roadmap</a> to the four building-block specification
+                    documents that compose EPUB 3.</p>
+                <p>Another non-normative document, EPUB 3 Changes from EPUB 2.0.1 <a
+                        class="biblioref" href="epub30-references.xhtml#refEPUB3Changes"
+                        title="EPUB 3 Differences from EPUB 2.0.1">[<abbr>EPUB3Changes</abbr>]</a>,
+                    describes changes in EPUB 3 from the previous version, but is intended primarily
+                    for <a class="glossterm" href="epub30-terminology.xhtml#gloss-author"
+                        title="Author">Author</a>s and <a class="glossterm"
+                        href="epub30-terminology.xhtml#gloss-epub-reading-system"
+                        title="EPUB Reading System (or Reading System)">EPUB Reading System</a>
+                    vendors migrating from EPUB 2.0.1 to EPUB 3 and for those who anticipate
+                    supporting both versions.</p>
+            </section>
+            <section class="section" title="1.2 Roadmap" id="sec-intro-roadmap">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-intro-roadmap">›</a> </span>1.2
+                    Roadmap</h3>
+                <p>This section provides an overview of the EPUB 3 specifications by explaining in
+                    brief the components of a Publication. Links to additional information within
+                    this document and to the specifications are included.</p>
+                <p>An <a class="glossterm" href="epub30-terminology.xhtml#gloss-epub-publication"
+                        title="EPUB Publication (or Publication)">EPUB Publication</a>, at its most
+                    basic level, is a bundled collection of resources that can be reliably and
+                    predictably ingested by an <a class="glossterm"
+                        href="epub30-terminology.xhtml#gloss-epub-reading-system"
+                        title="EPUB Reading System (or Reading System)">EPUB Reading System</a> in
+                    order to render its contents to a <a class="glossterm"
+                        href="epub30-terminology.xhtml#gloss-user" title="User">User</a>. Some of
+                    these resources facilitate the discovery and processing of the EPUB Publication,
+                    while others make up the content of the source publication. The latter, <a
+                        class="glossterm"
+                        href="epub30-terminology.xhtml#gloss-content-document-epub"
+                        title="EPUB Content Document">EPUB Content Document</a>s, are described in
+                        <a class="xref" href="#sec-content-docs" title="2.5 Content Documents"
+                        >Content Documents</a> and are fully defined in <a class="biblioref"
+                        href="epub30-references.xhtml#refContentDocs3"
+                        title="EPUB Content Documents 3.0">[<abbr>ContentDocs30</abbr>]</a>. </p>
+                <p>A Publication's resources are typically bundled for distribution as a ZIP-based
+                    archive with the file extension <code class="literal">.epub</code>. As
+                    conformant ZIP archives, Publications can be unzipped by many software programs,
+                    simplifying both their production and consumption. The container format is
+                    introduced in <a class="xref" href="#sec-container" title="2.11 Container"
+                        >Container</a> and defined in <a class="biblioref"
+                        href="epub30-references.xhtml#refOCF30" title="Open Container Format 3.0"
+                            >[<abbr>OCF3</abbr>]</a>. </p>
+                <p>The container format not only provides a means of determining that the zipped
+                    content represents an EPUB Publication (the <code class="filename"
+                        >mimetype</code> file), but also provides a universally-named directory of
+                    informative resources (<code class="filename">/META-INF</code>). Key among these
+                    is the <code class="filename">container.xml</code> file, which directs Reading
+                    Systems to the root file of the Publication, the <a class="glossterm"
+                        href="epub30-terminology.xhtml#gloss-package-document"
+                        title="Package Document">Package Document</a>. </p>
+                <p>The Package Document is itself a kind of information warehouse for the
+                    Publication, storing metadata about the specific work contained in the
+                    Publication, providing an exhaustive list of resources and defining a default
+                    reading order. The Package Document is introduced in <a class="xref"
+                        href="#sec-package-file" title="2.1 Package Document">Package Document</a>
+                    and defined in <a class="biblioref"
+                        href="epub30-references.xhtml#refPublications3"
+                        title="EPUB Publications 3.0">[<abbr>Publications30</abbr>]</a>. </p>
+                <p>The preceding components of an EPUB Publication are not new to EPUB 3, and will
+                    be familiar to anyone who has worked with Publications before, although they
+                    have been changed and enhanced in this version. A new core addition to EPUB 3,
+                    however, is the <a class="glossterm"
+                        href="epub30-terminology.xhtml#gloss-media-overlay-document"
+                        title="Media Overlay Document">Media Overlay Document</a>, which defines a
+                    means of synchronizing text and audio playback. The Overlay Document is
+                    introduced in <a class="xref" href="#sec-multimedia" title="2.7 Multimedia"
+                        >Multimedia</a> and defined in <a class="biblioref"
+                        href="epub30-references.xhtml#refOverlays3" title="EPUB Media Overlays 3.0"
+                            >[<abbr>MediaOverlays30</abbr>]</a>. </p>
+                <p>The following example shows the resources a minimal "Hello World" Publication
+                    might contain:</p>
+                <div class="informalexample"
+                    ><pre class="synopsis">
+mimetype
+META-INF/container.xml
+Content/HelloWorld.opf
+Content/HelloWorld.xhtml
+</pre></div>
+                <p>While conceptually simple, an EPUB Publication is more than just a collection of
+                    HTML pages and dependent assets in a ZIP package as represented in this example.
+                    The following sections of this document delve into more detail about the primary
+                    features and functionality that Publications provide to enhance the reading
+                    experience.</p>
+            </section>
+        </section>
+        <section class="chapter" title="2 Features" id="sec-features">
+            <h2 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here"
+                        href="#sec-features">›</a> </span>2 Features</h2>
+            <p>This section covers the major features of EPUB, including important components and
+                topics that apply to the process of authoring <a class="glossterm"
+                    href="epub30-terminology.xhtml#gloss-epub-publication"
+                    title="EPUB Publication (or Publication)">EPUB Publication</a>s as a whole.</p>
+            <section class="section" title="2.1 Package Document" id="sec-package-file">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-package-file">›</a> </span>2.1 Package
+                    Document</h3>
+                <p>Every EPUB Publication includes a single <a class="glossterm"
+                        href="epub30-terminology.xhtml#gloss-package-document"
+                        title="Package Document">Package Document</a>, which specifies all the
+                    Publication's constituent content documents and their required resources,
+                    defines a reading order for linear consumption, and associates Publication-level
+                    metadata and navigation information.</p>
+                <p>The Package Document represents a significant improvement on a typical Web site.
+                    A Web site, for example, embeds references to its resources within its content,
+                    which, while a simple and flexible means of identifying resources, makes it
+                    difficult to enumerate all the resources required to render it. In addition,
+                    there is no standard way for a Web site to define that a sequence of pages make
+                    up a larger publication, which is precisely what EPUB's <code>spine</code>
+                    element does (i.e., it provides an external declarative means to explicitly
+                    specify navigation through a collection of documents). Finally, the Package
+                    Document defines a standard way to represent metadata globally applicable to a
+                    collection of pages.</p>
+                <p>The Package Document and other Publication-level constructs are specified in <a
+                        class="biblioref" href="epub30-references.xhtml#refPublications3"
+                        title="EPUB Publications 3.0">[<abbr>Publications30</abbr>]</a>. </p>
+            </section>
+            <section class="section" title="2.2 Navigation" id="sec-nav">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-nav">›</a> </span>2.2 Navigation</h3>
+                <section class="section" title="2.2.1 Reading Order" id="sec-nav-order">
+                    <h4 class="title"><span class="link-marker"><a class="hidden-reveal"
+                                title="Link here" href="#sec-nav-order">›</a> </span>2.2.1 Reading
+                        Order</h4>
+                    <p>A key concept of EPUB is that a Publication consists of multiple resources
+                        that may be completely navigated and consumed by a person or program <span
+                            class="italic">in some specific order</span>.</p>
+                    <p>Many publications have an obvious reading order, or logical progression
+                        through their content. A novel is an example of a highly sequential document
+                        — it typically has a beginning, middle and end — but not all publications
+                        are so ordered: a cookbook or collection of photographic images might be
+                        considered to be more like a database. All documents do, however, have at
+                        least one logical ordering of all their top-level content items, whether by
+                        date, topic, location or some other criteria (e.g., a cookbook is typically
+                        ordered by type of recipe).</p>
+                    <p>Every EPUB Publication defines at least one such logical ordering of all its
+                        top-level content (the <span class="phrase"><a
+                                href="epub30-publications.xhtml#sec-spine-elem">spine</a>
+                            <a class="biblioref" href="epub30-references.xhtml#refPublications3"
+                                title="EPUB Publications 3.0"
+                            >[<abbr>Publications30</abbr>]</a></span>), as well as a declarative
+                        table of contents (the <a class="glossterm"
+                            href="epub30-terminology.xhtml#gloss-content-document-epub-nav"
+                            title="EPUB Navigation Document">EPUB Navigation Document</a>
+                        <a class="biblioref" href="epub30-references.xhtml#refContentDocs3"
+                            title="EPUB Content Documents 3.0">[<abbr>ContentDocs30</abbr>]</a>).
+                        Publications make these data structures available in a machine-readable way
+                            <span class="italic">external</span> to the content, simplifying their
+                        discovery and use.</p>
+                    <p>EPUB Publications are not limited to the linear ordering of their contents,
+                        nor do they preclude linking in arbitrary ways — just like the Web, EPUB
+                        Publications are built on hypertext — but the basic consumption and
+                        navigation can be reliably accomplished in a way that is not true for a set
+                        of HTML pages.</p>
+                </section>
+                <section class="section" title="2.2.2 Navigation Document" id="sec-nav-nav-doc">
+                    <h4 class="title"><span class="link-marker"><a class="hidden-reveal"
+                                title="Link here" href="#sec-nav-nav-doc">›</a> </span>2.2.2
+                        Navigation Document</h4>
+                    <p>Every EPUB Publication contains a special XHTML Content Document called the
+                            <a class="glossterm"
+                            href="epub30-terminology.xhtml#gloss-content-document-epub-nav"
+                            title="EPUB Navigation Document">EPUB Navigation Document</a>, which
+                        uses the HTML5 <code>nav</code> element to define human- and
+                        machine-readable navigation information.</p>
+                    <p>The Navigation Document supersedes the NCX document <a class="biblioref"
+                            href="epub30-references.xhtml#refOPS2"
+                            title="Open Publication Structure 2.0.1">[<abbr>OPS2</abbr>]</a>, and
+                        the inclusion of NCX documents is only recommended for forward compatibility
+                        in older Reading Systems. The Navigation Document, while maintaining the
+                        baseline accessibility and navigation support and features of the NCX,
+                        introduces new functionality and rendering features to enhance navigation
+                        for all Users. Prime among these are better support for internationalization
+                        (as an XHTML5 document itself, the Navigation Document natively supports
+                        ruby annotations) and support for embedded grammars (MathML and SVG can be
+                        included within navigation links).</p>
+                    <p>As XHTML Content Documents, Navigation Documents also provide a flexible
+                        means of tailoring the navigation display using CSS and the <span
+                            class="phrase"><a
+                                href="epub30-contentdocs.xhtml#sec-xhtml-nav-def-hidden">hidden
+                                attribute</a>
+                            <a class="biblioref" href="epub30-references.xhtml#refContentDocs3"
+                                title="EPUB Content Documents 3.0"
+                            >[<abbr>ContentDocs30</abbr>]</a></span> while not impacting access to
+                        information for accessible Reading Systems.</p>
+                    <p>The structure and semantics of Navigation Documents are defined in <span
+                            class="phrase"><a href="epub30-contentdocs.xhtml#sec-xhtml-nav">EPUB
+                                Navigation Documents</a>
+                            <a class="biblioref" href="epub30-references.xhtml#refContentDocs3"
+                                title="EPUB Content Documents 3.0"
+                            >[<abbr>ContentDocs30</abbr>]</a></span>.</p>
+                </section>
+            </section>
+            <section class="section" title="2.3 Linking" id="sec-linking">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-linking">›</a> </span>2.3 Linking</h3>
+                <p>The new EPUB Canonical Fragment Identifier (epubcfi) Specification <a
+                        class="biblioref" href="epub30-references.xhtml#refEPUBCFI"
+                        title="EPUB Canonical Fragment Identifier (epubcfi) Specification"
+                            >[<abbr>EPUBCFI</abbr>]</a> defines a standardized method for linking
+                    into a Publication. </p>
+                <p>Required support for this scheme in Reading Systems means that EPUB now has an
+                    interoperable linking mechanism, one that can, for example, facilitate the
+                    sharing of bookmarks and reading locations across devices.</p>
+            </section>
+            <section class="section" title="2.4 Metadata" id="sec-metadata">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-metadata">›</a> </span>2.4 Metadata</h3>
+                <p>EPUB Publications provide a rich array of options for adding Publication
+                    metadata. The Package Document includes a dedicated <span class="phrase"><a
+                            href="epub30-publications.xhtml#sec-metadata-elem">metadata section</a>
+                        <a class="biblioref" href="epub30-references.xhtml#refPublications3"
+                            title="EPUB Publications 3.0">[<abbr>Publications30</abbr>]</a></span>
+                    for general information about the Publication, allowing titles, authors,
+                    identifiers and other information about the Publication to be easily accessed.
+                    It also provides the means to attach complete bibliographic records to a
+                    Publication using the <span class="phrase"><a
+                            href="epub30-publications.xhtml#sec-link-elem">link element</a>
+                        <a class="biblioref" href="epub30-references.xhtml#refPublications3"
+                            title="EPUB Publications 3.0"
+                    >[<abbr>Publications30</abbr>]</a></span>.</p>
+                <p>The Package Document also allows a <a class="glossterm"
+                        href="epub30-terminology.xhtml#gloss-unique-identifier"
+                        title="Unique Identifier">Unique Identifier</a> to be established for a
+                    Publication using the <span class="phrase"><a
+                            href="epub30-publications.xhtml#attrdef-package-unique-identifier"
+                            >unique-identifier attribute</a>
+                        <a class="biblioref" href="epub30-references.xhtml#refPublications3"
+                            title="EPUB Publications 3.0">[<abbr>Publications30</abbr>]</a></span>.
+                    The required last-modified date in the Package metadata section can be joined
+                    with this identifier to define a <a class="glossterm"
+                        href="epub30-terminology.xhtml#gloss-package-identifier"
+                        title="Package Identifier">Package Identifier</a>, which provides a means of
+                    distinguishing EPUB Publications that represent different versions of the same
+                        <a class="glossterm" href="epub30-terminology.xhtml#gloss-manifestation"
+                        title="Manifestation">Manifestation</a> (see <span class="phrase"><a
+                            href="epub30-publications.xhtml#sec-package-metadata-identifiers"
+                            >Publication Identifiers</a>
+                        <a class="biblioref" href="epub30-references.xhtml#refPublications3"
+                            title="EPUB Publications 3.0">[<abbr>Publications30</abbr>]</a></span>).
+                    The Package Identifier addresses the issue of how to release a Publication
+                    without changing its Unique Identifier while still identifying it as a new
+                    version.</p>
+                <p>XHTML Content Documents also include the means of annotating document markup with
+                    rich metadata, making them more semantically meaningful and useful both for
+                    processing and accessibility purposes (<span class="phrase"><a
+                            href="epub30-contentdocs.xhtml#sec-xhtml-semantic-inflection">Semantic
+                            Inflection</a>
+                        <a class="biblioref" href="epub30-references.xhtml#refContentDocs3"
+                            title="EPUB Content Documents 3.0"
+                        >[<abbr>ContentDocs30</abbr>]</a></span>).</p>
+            </section>
+            <section class="section" title="2.5 Content Documents" id="sec-content-docs">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-content-docs">›</a> </span>2.5 Content
+                    Documents</h3>
+                <p>Every EPUB Publication contains one or more <a class="glossterm"
+                        href="epub30-terminology.xhtml#gloss-content-document-epub"
+                        title="EPUB Content Document">EPUB Content Document</a>s, as defined in <a
+                        class="biblioref" href="epub30-references.xhtml#refContentDocs3"
+                        title="EPUB Content Documents 3.0">[<abbr>ContentDocs30</abbr>]</a>. These
+                    are XHTML or SVG documents that describe the readable content of a Publication
+                    and reference associated media resources (e.g., images, audio and video
+                    clips).</p>
+                <p><a class="glossterm"
+                        href="epub30-terminology.xhtml#gloss-content-document-epub-xhtml"
+                        title="XHTML Content Document">XHTML Content Document</a>s are defined by a
+                    profile of HTML5 that requires the use of XML serialization <a class="biblioref"
+                        href="epub30-references.xhtml#refHTML5"
+                        title="HTML5: A vocabulary and associated APIs for HTML and XHTML"
+                            >[<abbr>HTML5</abbr>]</a> in order to ensure that content can be
+                    reliably manipulated and rendered. This profile also adds two additional
+                    EPUB-specific language constructs: the <span class="phrase"><a
+                            href="epub30-contentdocs.xhtml#attrdef-epub-type">epub:type
+                            attribute</a>
+                        <a class="biblioref" href="epub30-references.xhtml#refContentDocs3"
+                            title="EPUB Content Documents 3.0"
+                        >[<abbr>ContentDocs30</abbr>]</a></span> for element-level metadata and the
+                        <span class="phrase"><a
+                            href="epub30-contentdocs.xhtml#sec-xhtml-epub-trigger">epub:trigger
+                            element</a>
+                        <a class="biblioref" href="epub30-references.xhtml#refContentDocs3"
+                            title="EPUB Content Documents 3.0"
+                        >[<abbr>ContentDocs30</abbr>]</a></span> for declaratively associating
+                    controls with multimedia elements.</p>
+                <p>These additions do not affect the ability of an HTML5 User Agent <a
+                        class="biblioref" href="epub30-references.xhtml#refHTML5"
+                        title="HTML5: A vocabulary and associated APIs for HTML and XHTML"
+                            >[<abbr>HTML5</abbr>]</a> to render EPUB XHTML Content Documents, but
+                    Publications might not render identically in all User Agents depending on their
+                    support.</p>
+            </section>
+            <section class="section" title="2.6 Rendering and CSS" id="sec-rendering">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-rendering">›</a> </span>2.6 Rendering and
+                    CSS</h3>
+                <p>A key concept of EPUB is that content presentation should adapt to the User
+                    rather than the User having to adapt to a particular presentation of content.
+                    HTML was originally designed to support dynamic rendering of structured content,
+                    but over time HTML as supported in Web browsers has become focused on the needs
+                    of Web applications, and most popular Web sites now have fixed-format
+                    layouts.</p>
+                <p>EPUB Publications, however, are designed to maximize accessibility for the
+                    visually impaired, and Reading Systems typically perform text line layout and
+                    pagination on the fly, adapting to the size of the display area, the User's
+                    preferred font size, and other environmental factors. This behavior is not
+                    guaranteed in EPUB; images, vector graphics, video and other non-reflowable
+                    content may be included, and some Reading Systems might not paginate on the fly,
+                    or at all. Nevertheless, supporting dynamic adaptive layout and accessibility
+                    has been a primary design consideration throughout the evolution of the EPUB
+                    standard.</p>
+                <p>EPUB Content Documents may optionally reference <a class="glossterm"
+                        href="epub30-terminology.xhtml#gloss-stylesheet"
+                        title="EPUB Style Sheet (or Style Sheet)">EPUB Style Sheet</a>s, allowing
+                    Authors to define the desired rendering properties. EPUB 3 defines a profile of
+                    CSS based on CSS 2.1 <a class="biblioref"
+                        href="epub30-references.xhtml#refCSS21"
+                        title="Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification"
+                            >[<abbr>CSS2.1</abbr>]</a> for this purpose, together with capabilities
+                    defined by various CSS3 Modules and several additional properties specific to
+                    EPUB.</p>
+                <p>CSS3 properties were selected based on their current level of support in Web
+                    browsers, but support for them in Reading Systems and User Agents is not
+                    guaranteed (EPUB-defined properties may similarly be ignored).</p>
+                <p>EPUB 3 also supports CSS styles that enable both horizontal and vertical layout
+                    and both left-to-right and right-to-left writing, but Reading Systems might not
+                    support all of these capabilities. Reading Systems may also support different
+                    rendering options than the Author intended. Refer to <a class="xref"
+                        href="#sec-gls-css" title="3.3 CSS">CSS</a> in the Global Language Support
+                    section for more information.</p>
+                <p>EPUB 3 also supports the ability to include multiple style sheets that allow
+                    users, for example, to select between day/night reading modes or to change the
+                    rendering direction of the text. Refer to <span class="phrase"><a
+                            href="epub30-contentdocs.xhtml#sec-xhtml-alternate-style-tags">Alternate
+                            Style Tags</a>
+                        <a class="biblioref" href="epub30-references.xhtml#refContentDocs3"
+                            title="EPUB Content Documents 3.0"
+                        >[<abbr>ContentDocs30</abbr>]</a></span> for more information.</p>
+            </section>
+            <section class="section" title="2.7 Multimedia" id="sec-multimedia">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-multimedia">›</a> </span>2.7
+                    Multimedia</h3>
+                <p>EPUB 3 supports audio and video embedded in [content documents] via the new <a
+                        class="biblioref" href="epub30-references.xhtml#refHTML5"
+                        title="HTML5: A vocabulary and associated APIs for HTML and XHTML"
+                            >[<abbr>HTML5</abbr>]</a>
+                    <code>audio</code> and <code>video</code> elements, inheriting all the
+                    functionality and features these elements provide. (For information on supported
+                    audio formats, please refer to <span class="phrase"><a
+                            href="epub30-publications.xhtml#sec-core-media-types">Core Media
+                            Types</a>
+                        <a class="biblioref" href="epub30-references.xhtml#refPublications3"
+                            title="EPUB Publications 3.0">[<abbr>Publications30</abbr>]</a></span>.
+                    For recommendations on embedding video, refer to <span class="phrase"><a
+                            href="epub30-publications.xhtml#note-video-codecs">Reading System
+                            Conformance</a>
+                        <a class="biblioref" href="epub30-references.xhtml#refPublications3"
+                            title="EPUB Publications 3.0"
+                    >[<abbr>Publications30</abbr>]</a></span>.)</p>
+                <p>Another key new multimedia feature in EPUB 3 is the inclusion of <a
+                        class="glossterm"
+                        href="epub30-terminology.xhtml#gloss-media-overlay-document"
+                        title="Media Overlay Document">Media Overlay Document</a>s <a
+                        class="biblioref" href="epub30-references.xhtml#refOverlays3"
+                        title="EPUB Media Overlays 3.0">[<abbr>MediaOverlays30</abbr>]</a>. When
+                    pre-recorded narration is available for a Publication, Media Overlays provide
+                    the ability to synchronize that audio with the text of a Content Document (see
+                    also <a class="xref" href="#sec-access-overlays"
+                        title="4.4 Aural Renditions and Media Overlays">Aural Renditions and Media
+                        Overlays</a>).</p>
+            </section>
+            <section class="section" title="2.8 Fonts" id="sec-fonts">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-fonts">›</a> </span>2.8 Fonts</h3>
+                <p>EPUB 3 supports two closely-related font formats — OpenType <a class="biblioref"
+                        href="epub30-references.xhtml#refOpenType"
+                        title="ISO/IEC 14496-22:2009 - Information technology -- Coding of audio-visual objects -- Part 22: Open Font Format"
+                            >[<abbr>OpenType</abbr>]</a> and WOFF <a class="biblioref"
+                        href="epub30-references.xhtml#refWOFF" title="WOFF File Format 1.0"
+                            >[<abbr>WOFF</abbr>]</a> — to accommodate both traditional publishing
+                    workflows and emerging Web-based workflows. Word processing programs used to
+                    create Publications are likely to have access only to a collection of installed
+                    OpenType fonts, for example, whereas Web-archival EPUB generators will likely
+                    only have access to WOFF resources (which cannot be converted to OpenType
+                    without undesirable, and potentially unlicensed, stripping of WOFF
+                    metadata).</p>
+                <p>EPUB 3 also supports both obfuscated and regular font resources for both OpenType
+                    and WOFF font formats. Support for obfuscated font resources is required to
+                    accommodate font licensing restrictions for many commercially-available
+                    fonts.</p>
+            </section>
+            <section class="section" title="2.9 Scripting" id="sec-scripting">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-scripting">›</a> </span>2.9 Scripting</h3>
+                <p>EPUB strives to treat content <span class="italic">declaratively</span> — as data
+                    that can be manipulated, not programs that must be executed — but does support
+                    scripting as defined in <a class="biblioref"
+                        href="epub30-references.xhtml#refHTML5"
+                        title="HTML5: A vocabulary and associated APIs for HTML and XHTML">HTML5</a>
+                    and <a class="biblioref" href="epub30-references.xhtml#refSVG"
+                        title="Scalable Vector Graphics (SVG) 1.1 (Second Edition)">SVG</a> (refer
+                    to <span class="phrase"><a href="epub30-contentdocs.xhtml#sec-scripted-content"
+                            >Scripted Content Documents</a>
+                        <a class="biblioref" href="epub30-references.xhtml#refContentDocs3"
+                            title="EPUB Content Documents 3.0"
+                        >[<abbr>ContentDocs30</abbr>]</a></span> for more information).</p>
+                <p>It is important to note, however, that scripting support is optional for Reading
+                    Systems and may be disabled for security reasons. </p>
+                <p>Authors should also note that scripting in an EPUB Publication can create
+                    security considerations that are different from scripting within a Web browser.
+                    For example, typical same-origin policies are not applicable to content that has
+                    been downloaded to a User's local system. Therefore, it is strongly encouraged
+                    that scripting be limited to container constrained contexts, as further
+                    described in <span class="phrase"><a
+                            href="epub30-contentdocs.xhtml#sec-scripted-content-content-reqs"
+                            >Scripted Content Documents — Content Conformance</a>
+                        <a class="biblioref" href="epub30-references.xhtml#refContentDocs3"
+                            title="EPUB Content Documents 3.0"
+                        >[<abbr>ContentDocs30</abbr>]</a></span>.</p>
+                <p>Scripting consequently should be used only when essential to the User experience,
+                    since it greatly increases the likelihood that content will not be portable
+                    across all Reading Systems and creates barriers to accessibility and content
+                    reusability.</p>
+            </section>
+            <section class="section" title="2.10 Text-to-speech" id="sec-tts">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-tts">›</a> </span>2.10 Text-to-speech</h3>
+                <p>EPUB 3 provides the following text-to-speech (TTS) facilities for controlling
+                    aspects of speech synthesis, such as pronunciation, prosody and voice
+                    characteristics:</p>
+                <div class="variablelist"><dl>
+                        <dt class="varlistentry"><span class="term"><code>Pronunciation
+                                    Lexicons</code></span></dt>
+                        <dd><p>The inclusion of generic pronunciation lexicons using the W3C PLS
+                                format <a class="biblioref" href="epub30-references.xhtml#refPLS"
+                                    title="Pronunciation Lexicon Specification 1.0 (PLS)"
+                                        >[<abbr>PLS</abbr>]</a> enables Authors to provide
+                                pronunciation rules that apply to the entire EPUB Publication. Refer
+                                to <span class="phrase"><a href="epub30-contentdocs.xhtml#sec-pls"
+                                        >PLS Documents</a>
+                                    <a class="biblioref"
+                                        href="epub30-references.xhtml#refContentDocs3"
+                                        title="EPUB Content Documents 3.0"
+                                            >[<abbr>ContentDocs30</abbr>]</a></span> for more
+                                information. </p></dd>
+                        <dt class="varlistentry"><span class="term"><code>Inline SSML
+                                    Phonemes</code></span></dt>
+                        <dd><p> The incorporation of SSML phonemes functionality <a
+                                    class="biblioref" href="epub30-references.xhtml#refSSML"
+                                    title="Speech Synthesis Markup Language (SSML) Version 1.1"
+                                        >[<abbr>SSML</abbr>]</a> directly into a <span
+                                    class="phrase"><a
+                                        href="epub30-terminology.xhtml#gloss-content-document-epub"
+                                        >EPUB Content Document</a>
+                                    <a class="biblioref"
+                                        href="epub30-references.xhtml#refContentDocs3"
+                                        title="EPUB Content Documents 3.0"
+                                            >[<abbr>ContentDocs30</abbr>]</a></span> enables
+                                fine-grained pronunciation control, taking precedence over default
+                                pronunciation rules and/or referenced pronunciation lexicons (as
+                                provided by the PLS format mentioned above). Refer to <span
+                                    class="phrase"><a
+                                        href="epub30-contentdocs.xhtml#sec-xhtml-ssml-attrib">SSML
+                                        Attributes</a>
+                                    <a class="biblioref"
+                                        href="epub30-references.xhtml#refContentDocs3"
+                                        title="EPUB Content Documents 3.0"
+                                            >[<abbr>ContentDocs30</abbr>]</a></span> for more
+                                information. </p></dd>
+                        <dt class="varlistentry"><span class="term"><code>CSS Speech
+                                Features</code></span></dt>
+                        <dd><p> The inclusion of a select set of features from the CSS 3 Speech
+                                Module <a class="biblioref"
+                                    href="epub30-references.xhtml#refCSS3Speech"
+                                    title="CSS3 Speech Module">[<abbr>CSS3Speech</abbr>]</a>
+                                (previously known as CSS 2.1 Aural Stylesheets <a class="biblioref"
+                                    href="epub30-references.xhtml#refCSS21"
+                                    title="Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification"
+                                        >[<abbr>CSS2.1</abbr>]</a>) enables Authors to control
+                                further speech synthesis characteristics. Refer to <span
+                                    class="phrase"><a
+                                        href="epub30-contentdocs.xhtml#sec-css-voice-characteristics"
+                                        >CSS 3.0 Speech</a>
+                                    <a class="biblioref"
+                                        href="epub30-references.xhtml#refContentDocs3"
+                                        title="EPUB Content Documents 3.0"
+                                            >[<abbr>ContentDocs30</abbr>]</a></span> for more
+                                information.</p></dd>
+                    </dl></div>
+            </section>
+            <section class="section" title="2.11 Container" id="sec-container">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-container">›</a> </span>2.11 Container</h3>
+                <p>An EPUB Publication is transported and interchanged as a single file (a "portable
+                    document") that contains the Package Document, all Content Documents and all
+                    other required resources for processing the Publication. The single-file
+                    container format for EPUB is based on the widely adopted ZIP format. An XML
+                    manifest that specifies the location in the ZIP archive of the Package Document
+                    must be found at a well-defined location within the archive.</p>
+                <p>This approach provides a clear contract between any creator of an EPUB
+                    Publication and any system which consumes such Publications, as well as a
+                    reliable representation that is independent of network transport or file system
+                    specifics.</p>
+                <p>An EPUB Publication's representation as a container file is specified in <a
+                        class="biblioref" href="epub30-references.xhtml#refOCF30"
+                        title="Open Container Format 3.0">[<abbr>OCF3</abbr>]</a>. </p>
+            </section>
+        </section>
+        <section class="chapter" title="3 Global Language Support" id="sec-gls">
+            <h2 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here"
+                        href="#sec-gls">›</a> </span>3 Global Language Support</h2>
+            <section class="section" title="3.1 Metadata" id="sec-gls-metadata">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-gls-metadata">›</a> </span>3.1
+                    Metadata</h3>
+                <p>EPUB 3 supports alternate representations of all text metadata items in the
+                    package metadata section to improve global distribution of Publications. The
+                        <code class="literal">alternate-script</code> property can be combined with
+                    the <code>xml:lang</code> attribute to include and identify alternate script
+                    renditions of language-specific metadata.</p>
+                <p>Using this property, a Japanese Publication could, for example, include an
+                    alternate Roman-script representation of the author's name and/or one or more
+                    representations of the title in Romance languages. Refer to the <span
+                        class="phrase"><a href="epub30-publications.xhtml#alternate-script"
+                            >alternate-script property</a>
+                        <a class="biblioref" href="epub30-references.xhtml#refPublications3"
+                            title="EPUB Publications 3.0">[<abbr>Publications30</abbr>]</a></span>
+                    for more information.</p>
+                <p>The <code>page-progression-direction</code> attribute also allows the content
+                    flow direction to be globally specified for all Content Documents to facilitate
+                    rendering (see the <span class="phrase"><a
+                            href="epub30-publications.xhtml#attrdef-spine-page-progression-direction"
+                            >page-progression-direction</a>
+                        <a class="biblioref" href="epub30-references.xhtml#refPublications3"
+                            title="EPUB Publications 3.0"
+                    >[<abbr>Publications30</abbr>]</a></span>).</p>
+            </section>
+            <section class="section" title="3.2 Content Documents" id="sec-gls-content-docs">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-gls-content-docs">›</a> </span>3.2 Content
+                    Documents</h3>
+                <p>XHTML Content Documents leverage the new HTML5 directionality features to improve
+                    support for bidirectional content rendering: the <code>bdi</code> element allows
+                    an instance of directional text to be isolated from the surrounding content, the
+                        <code>bdo</code> element allows directionality to be overridden for its
+                    child content and the <code>dir</code> attribute allows the directionality of
+                    any element to be explicitly set.</p>
+                <p>XHTML Content Documents also support ruby annotations for pronunciation support
+                    (which makes them supported in Navigation Document links, as well).</p>
+                <p>SVG Content Documents support the rendering of bidirectional text, but do not
+                    include support for ruby.</p>
+            </section>
+            <section class="section" title="3.3 CSS" id="sec-gls-css">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-gls-css">›</a> </span>3.3 CSS</h3>
+                <p>EPUB 3's support for new CSS3 modules enables typography for many different
+                    languages and cultures. Some specific enhancements include:</p>
+                <div class="itemizedlist"><ul class="itemizedlist">
+                        <li class="listitem"><p>support for vertical writing, which also provides
+                                Reading Systems the ability to allow users to toggle
+                            direction;</p></li>
+                        <li class="listitem"><p>better handling of emphasis, such as the inclusion
+                                of bōten;</p></li>
+                        <li class="listitem"><p>better control over line breaking, so that breaks
+                                can occur at the character level for languages that do not use
+                                spaces to delimit new words; and</p></li>
+                        <li class="listitem"><p>better control over hyphenation, to further
+                                facilitate line breaking.</p></li>
+                    </ul></div>
+            </section>
+            <section class="section" title="3.4 Fonts" id="sec-gls-fonts">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-gls-fonts">›</a> </span>3.4 Fonts</h3>
+                <p>EPUB 3 does not require that Reading Systems come with any particular set of
+                    built-in system fonts. As occurs in Web contexts, Users in a particular locale
+                    may have installed fonts that omit characters required for other locales, and
+                    Reading Systems may utilize intrinsic fonts or font engines that do not utilize
+                    operating system installed fonts. As a result, the text content of a Publication
+                    might not natively render as intended on all Reading Systems.</p>
+                <p>To address this problem, EPUB 3 supports the embedding of fonts to facilitate the
+                    rendering of text content, and this practice is recommended in order to ensure
+                    content is rendered as intended.</p>
+                <p>Support for embedded fonts also ensures that Publication-specific characters and
+                    glyphs can be embedded for proper display.</p>
+            </section>
+            <section class="section" title="3.5 Text-to-speech" id="sec-gls-tts">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-gls-tts">›</a> </span>3.5
+                    Text-to-speech</h3>
+                <p>EPUB 3's support for PLS documents and SSML attributes increases the
+                    pronunciation control that Authors have over the rendering of any natural
+                    language in text-to-speech-enabled Reading Systems. Refer to <a class="xref"
+                        href="#sec-tts" title="2.10 Text-to-speech">Text-to-speech</a> in the
+                    Features section for more information on these capabilities.</p>
+                <p>The combination of CSS Speech and inline SSML phonemes also allows fine control
+                    over ruby.</p>
+            </section>
+            <section class="section" title="3.6 Container" id="sec-gls-container">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-gls-container">›</a> </span>3.6
+                    Container</h3>
+                <p>The OCF container format supports UTF-8, allowing for internationalized file and
+                    directory naming of content resources.</p>
+            </section>
+        </section>
+        <section class="chapter" title="4 Accessibility" id="sec-accessibility">
+            <h2 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here"
+                        href="#sec-accessibility">›</a> </span>4 Accessibility</h2>
+            <p>A major goal of EPUB is to facilitate content accessibility, and a variety of
+                features in EPUB 3 support this requirement. This section reviews these features,
+                detailing some established best practices for ensuring that EPUB Publications are
+                accessible where applicable.</p>
+            <p>It is important to note that while accessibility is important in its own right,
+                accessible content is also more valuable content: an accessible Publication will be
+                adaptable to more devices and be easier to reuse, in whole or in part, via human and
+                automated workflows. The EPUB Working Group strongly recommends that Authors use
+                EPUB tools that generate accessible content.</p>
+            <section class="section" title="4.1 Navigation" id="sec-access-nav">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-access-nav">›</a> </span>4.1
+                    Navigation</h3>
+                <p>EPUB 3 improves on NCX documents with the addition of <a class="glossterm"
+                        href="epub30-terminology.xhtml#gloss-content-document-epub-nav"
+                        title="EPUB Navigation Document">EPUB Navigation Document</a>s. As noted in
+                        <a class="xref" href="#sec-content-docs" title="2.5 Content Documents"
+                        >Content Documents</a> above, the new features these provide represent a
+                    more universal and flexible navigation system.</p>
+                <p>The need to navigate a document is not exclusively an accessibility issue, but a
+                    complete Navigation Document is key for all Users to be able to easily and fully
+                    access the contents of a document. The primary <span class="property">toc</span>
+                    <code>nav</code> element (as defined in <span class="phrase"><a
+                            href="epub30-contentdocs.xhtml#sec-xhtml-nav-def-types-toc">The toc nav
+                            Element</a>
+                        <a class="biblioref" href="epub30-references.xhtml#refContentDocs3"
+                            title="EPUB Content Documents 3.0"
+                        >[<abbr>ContentDocs30</abbr>]</a></span>) should fully reflect the structure
+                    of the Publication, as a result.</p>
+                <p>For highly structured documents where it might not be desirable to display the
+                    complete table of contents to Users, the display level can be modified using the
+                        <a class="biblioref" href="epub30-references.xhtml#refHTML5"
+                        title="HTML5: A vocabulary and associated APIs for HTML and XHTML"
+                            >[<abbr>HTML5</abbr>]</a>
+                    <span class="property">hidden</span> attribute without minimizing the
+                    information that is available for accessible Reading Systems.</p>
+                <p>Authors are also encouraged to supply additional <code>nav</code> elements if
+                    their Publications contain non-structural points of interest, such as figures,
+                    tables, etc. in order to further enhance access to the content.</p>
+            </section>
+            <section class="section" title="4.2 Semantic Markup" id="sec-access-semantic-markup">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-access-semantic-markup">›</a> </span>4.2
+                    Semantic Markup</h3>
+                <p>HTML5 supports a number of new elements intended to make markup more semantically
+                    meaningful (e.g., <code>section</code>, <code>nav</code>, <code>aside</code>)
+                    and introduces more clearly defined semantics for some HTML4 elements. These
+                    elements, in conjunction with best practices for authoring well-structured Web
+                    content, should be utilized when creating EPUB XHTML Content Documents. These
+                    additions allow content to be better grouped and defined, both for representing
+                    the structure of documents and to facilitate their logical navigation. XHTML
+                    Content Documents also natively support the inclusion of ARIA role and state
+                    attributes and events, enhancing the ability of Assistive Technologies to
+                    interact with the content.</p>
+                <p>EPUB 3 further introduces the <span class="phrase"><a
+                            href="epub30-contentdocs.xhtml#attrdef-epub-type">epub:type</a>
+                        <a class="biblioref" href="epub30-references.xhtml#refContentDocs3"
+                            title="EPUB Content Documents 3.0"
+                        >[<abbr>ContentDocs30</abbr>]</a></span> attribute, which is meant to be
+                    functionally equivalent to the W3C Role Attribute <a class="biblioref"
+                        href="epub30-references.xhtml#refPFRoleAttribute" title="Role Attribute"
+                            >[<abbr>Role</abbr>]</a>. This attribute allows any element in an XHTML
+                    Content Document to include additional information about its purpose and meaning
+                    within the work, using controlled vocabularies and terms. Refer to <span
+                        class="phrase"><a
+                            href="epub30-contentdocs.xhtml#sec-xhtml-semantic-inflection">Semantic
+                            Inflection</a>
+                        <a class="biblioref" href="epub30-references.xhtml#refContentDocs3"
+                            title="EPUB Content Documents 3.0"
+                        >[<abbr>ContentDocs30</abbr>]</a></span> for more information.</p>
+            </section>
+            <section class="section" title="4.3 Dynamic Layouts" id="sec-access-layout">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-access-layout">›</a> </span>4.3 Dynamic
+                    Layouts</h3>
+                <p>The design center of EPUB is dynamic layout: content is typically intended to be
+                    formatted on the fly rather than being typeset in a paginated manner in advance
+                    (i.e., expecting a particular sized "page"). This core capability is useful, for
+                    example, for optimizing rendering onto different sized device screens or window
+                    sizes, and it facilitates and simplifies content accessibility. </p>
+                <p>While it is possible to incorporate more highly formatted content in EPUB — for
+                    example via bitmap images or SVG graphics, or even use of CSS explicit
+                    positioning and/or table elements to achieve particular visual layouts — Authors
+                    are strongly discouraged from utilizing such techniques. They are not reliable
+                    in EPUB since many Reading Systems render content in a paginated manner rather
+                    than creating a single scrolling <a class="glossterm"
+                        href="epub30-terminology.xhtml#gloss-viewport" title="Viewport">Viewport</a>
+                    and since each Reading System may define its own pagination algorithm. If these
+                    techniques are required to convey the content of the publication (for example,
+                    for graphic novels), <span class="phrase"><a
+                            href="epub30-publications.xhtml#sec-fallback-processing-flow"
+                            >fallbacks</a>
+                        <a class="biblioref" href="epub30-references.xhtml#refPublications3"
+                            title="EPUB Publications 3.0">[<abbr>Publications30</abbr>]</a></span>
+                    should always be included.</p>
+                <p>In general, it is preferable to achieve visual richness by using <a
+                        class="glossterm" href="epub30-terminology.xhtml#gloss-stylesheet"
+                        title="EPUB Style Sheet (or Style Sheet)">EPUB Style Sheet</a>s without
+                    absolute sizing or positioning.</p>
+            </section>
+            <section class="section" title="4.4 Aural Renditions and Media Overlays"
+                id="sec-access-overlays">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-access-overlays">›</a> </span>4.4 Aural
+                    Renditions and Media Overlays</h3>
+                <p>Aural renditions of content are important for accessibility and are a desirable
+                    feature for many other Users. A baseline to facilitate aural rendering is to
+                    utilize semantic HTML designed for dynamic layout. Refer to <a class="xref"
+                        href="#sec-tts" title="2.10 Text-to-speech">Text-to-speech</a> for more
+                    information on how to use the native facilities that EPUB XHTML Documents
+                    include. </p>
+                <p>Media Overlays provide the ability to synchronize the text and audio content of a
+                    Publication, a feature already familiar to readers of DAISY Digital Talking
+                    Books. Overlays transcend the accessibility domain in their usefulness: the
+                    synchronization of text and audio as a tool for learning to read, for example,
+                    being of benefit in many circumstances. </p>
+            </section>
+            <section class="section" title="4.5 Fallbacks" id="sec-access-fallbacks">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-access-fallbacks">›</a> </span>4.5
+                    Fallbacks</h3>
+                <p>Not all formats are accessible in their native format, and not all Users prefer
+                    to read in the default format provided. EPUB defines a variety of means for
+                    providing fallbacks so that alternate renditions of a Publication can be made
+                    available in these cases.</p>
+                <p>Publication and content-level fallbacks are defined in <span class="phrase"><a
+                            href="epub30-publications.xhtml#sec-fallback-processing-flow"
+                            >Restrictions and Fallbacks</a>
+                        <a class="biblioref" href="epub30-references.xhtml#refPublications3"
+                            title="EPUB Publications 3.0">[<abbr>Publications30</abbr>]</a></span>.
+                    These allow for the alternate rendition of specific resources within a
+                    Publication, such as SVG images or video clips.</p>
+                <p>In addition, multiple instances of a complete work can be delivered in a single
+                    Publication by defining multiple <code>rootfile</code> elements in the OCF
+                    container file (as described in <span class="phrase"><a
+                            href="epub30-ocf.xhtml#sec-container-metainf-container.xml">Container –
+                            META-INF/container.xml</a>
+                        <a class="biblioref" href="epub30-references.xhtml#refOCF30"
+                            title="Open Container Format 3.0">[<abbr>OCF3</abbr>]</a></span>). This
+                    kind of fallback may be used, for example, so that a formatted graphic novel
+                    defined via a sequence of SVG pages can be accompanied by an accessible text
+                    version defined via XHTML.</p>
+            </section>
+            <section class="section" title="4.6 Scripting" id="sec-access-scripting">
+                <h3 class="title"><span class="link-marker"><a class="hidden-reveal"
+                            title="Link here" href="#sec-access-scripting">›</a> </span>4.6
+                    Scripting</h3>
+                <p>EPUB 3 adopts a progressive enhancement approach for scripted content, whereby
+                    scripting must not interfere with the integrity of the document (i.e., must not
+                    result in information loss when scripting is not available). Consequently,
+                    although documents that do employ scripting <span class="phrase"><a
+                            href="epub30-contentdocs.xhtml#sec-scripted-content">may provide
+                            fallbacks</a>
+                        <a class="biblioref" href="epub30-references.xhtml#refContentDocs3"
+                            title="EPUB Content Documents 3.0"
+                        >[<abbr>ContentDocs30</abbr>]</a></span> to further facilitate access to
+                    their contents, the documents must be accessible without them.</p>
+                <p>Several mechanisms in EPUB can further minimize and constrain scripting within
+                    Publications to improve accessibility:</p>
+                <div class="itemizedlist"><ul class="itemizedlist">
+                        <li class="listitem"><p> The declarative <span class="phrase"><a
+                                        href="epub30-contentdocs.xhtml#sec-xhtml-epub-trigger"
+                                        >trigger element</a>
+                                    <a class="biblioref"
+                                        href="epub30-references.xhtml#refContentDocs3"
+                                        title="EPUB Content Documents 3.0"
+                                            >[<abbr>ContentDocs30</abbr>]</a></span> added to the
+                                EPUB HTML5 profile enables image or textual elements to act as
+                                controls for audio and video playback (for example, to start, stop
+                                and pause playback). This element eliminates the common use of
+                                scripting to include similar functionality.</p></li>
+                        <li class="listitem"><p>The <span class="phrase"><a
+                                        href="epub30-publications.xhtml#sec-mediaType-elem"
+                                        >mediaType element</a>
+                                    <a class="biblioref"
+                                        href="epub30-references.xhtml#refPublications3"
+                                        title="EPUB Publications 3.0"
+                                        >[<abbr>Publications30</abbr>]</a></span> provides a means
+                                of encapsulating script-based support for rendering custom XML
+                                vocabularies or other custom content types, as well as future-proofs
+                                Publications in case such content types are natively supported in
+                                future Reading Systems.</p></li>
+                        <li class="listitem"><p>The semantic inflection capability provided by the
+                                    <span class="phrase"><a
+                                        href="epub30-contentdocs.xhtml#sec-xhtml-content-type-attribute"
+                                        >type attribute</a>
+                                    <a class="biblioref"
+                                        href="epub30-references.xhtml#refContentDocs3"
+                                        title="EPUB Content Documents 3.0"
+                                            >[<abbr>ContentDocs30</abbr>]</a></span> enables Authors
+                                to provide hints to Reading Systems about content properties. One
+                                use case is to define elements such as images and video as having a
+                                zoomable property value, in which case a Reading System may provide
+                                a means for Users to access an expanded view that is out-of-line
+                                with the normal layout. Such rollover effects are typically
+                                implemented via scripting in Web contexts, but scripting cannot be
+                                readily implemented given the wide variety of layouts that a Reading
+                                System may generate.</p></li>
+                        <li class="listitem"><p> The <span class="phrase"><a
+                                        href="epub30-contentdocs.xhtml#sec-xhtml-epub-switch">switch
+                                        element</a>
+                                    <a class="biblioref"
+                                        href="epub30-references.xhtml#refContentDocs3"
+                                        title="EPUB Content Documents 3.0"
+                                            >[<abbr>ContentDocs30</abbr>]</a></span> provides a
+                                declaractive means for Authors to tailor the content displayed to
+                                Users without having to resort to scripted solutions.</p></li>
+                    </ul></div>
+                <p>Best practices for accessible scripting in Web documents, such as provided in <a
+                        class="biblioref" href="epub30-references.xhtml#refARIA"
+                        title="Accessible Rich Internet Applications (WAI-ARIA) 1.0"
+                            >[<abbr>WAI-ARIA</abbr>]</a>, should always be consulted, and use of
+                    scripting should be reserved for situations in which interactivity is critical
+                    to the User experience.</p>
+            </section>
+        </section>
+    </body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-publications.xhtml b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-publications.xhtml
new file mode 100644
index 0000000..32a79fb
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-publications.xhtml
@@ -0,0 +1,329 @@
+<?xml version="1.0" encoding="utf-8"?>
+<html xml:lang="en-US" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"><head><meta charset="utf-8"/><title>EPUB Publications 3.0</title><link rel="stylesheet" type="text/css" href="../css/epub-spec.css"/></head><body><h1 class="title">EPUB Publications 3.0</h1><p class="identity"><span class="releaseinfo">Re [...]
+    …
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="pub-id">urn:uuid:A1B0D67E-2E81-4DF5-9E67-A64CBE366809</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-01-01T12:00:00Z</meta>
+    </metadata>
+    …
+</package>
+</pre></div></section><section class="section" title="3.4.3 The DCMES identifier Element" id="sec-opf-dcidentifier"><h4 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-opf-dcidentifier">›</a> </span>3.4.3 The DCMES <code>identifier</code> Element</h4><p>The <a class="biblioref" href="epub30-references.xhtml#refDCMES" title="Dublin Core Metadata Element Set, Version 1.1">[<abbr>DCMES</abbr>]</a> <code>identifier</code> element contains a singl [...]
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">&#x0D;
+        <dc:identifier id="pub-id">urn:uuid:A1B0D67E-2E81-4DF5-9E67-A64CBE366809</dc:identifier>&#x0D;
+        …&#x0D;
+    </metadata>&#x0D;
+</package></pre></div><p>This specification makes a distinction between the <a class="glossterm" href="epub30-terminology.xhtml#gloss-unique-identifier" title="Unique Identifier">Unique Identifier</a> for an EPUB Publication and the identifier that uniquely identifies a specific version of it (i.e., to be able to differentiate EPUB Publications containing different versions of the same <a class="glossterm" href="epub30-terminology.xhtml#gloss-manifestation" title="Manifestation">Ma [...]
+    <dc:identifier id="pub-id">urn:doi:10.1016/j.iheduc.2008.03.001</dc:identifier>
+    <meta refines="#pub-id" property="identifier-type" scheme="onix:codelist5">06</meta>
+    …
+</metadata>
+</pre></div><p> This specification does not require or endorse the use of any specific scheme for identifiers, and imposes no restrictions or requirements on <code class="literal">identifier-type</code> identifiers beyond those specified in the property definition. </p><p>When an EPUB Publication is derived from another publication, the identifier for that source publication may be included in the Publication metadata, and must be represented using the <a href="#sec-opf-dcsource" title=" [...]
+    …
+    <dc:title id="t1">A Dictionary of Modern English Usage</dc:title>
+    <meta refines="#t1" property="title-type">main</meta>
+    
+    <dc:title id="t2">First Edition</dc:title>
+    <meta refines="#t2" property="title-type">edition</meta>
+    
+    <dc:title id="t3">Fowler's</dc:title>
+    <meta refines="#t3" property="title-type">short</meta>
+    …
+</metadata>
+</pre></div><p>When adding the <code class="literal">title-type</code> property, <a class="glossterm" href="epub30-terminology.xhtml#gloss-author" title="Author">Author</a>s should designate only one <code>title</code> element as containing the main title for the Publication. If no means of determining title types is provided, or understood, Reading Systems must treat the first <code class="literal">title</code> element in document order as the main title. This specification does not def [...]
+    …
+    <dc:title id="t1">The Red and the Black</dc:title>
+    <meta refines="#t1" property="title-type">main</meta>
+    <meta refines="#t1" property="display-seq">1</meta>
+    
+    <dc:title id="t2">A Chronicle of the Nineteenth Century</dc:title>
+    <meta refines="#t2" property="title-type">subtitle</meta>
+    <meta refines="#t2" property="display-seq">2</meta>
+    
+    <dc:title id="t3">A Chronicle of 1830</dc:title>
+    <meta refines="#t3" property="title-type">subtitle</meta>
+    <meta refines="#t3" property="display-seq">3</meta>
+    …
+</metadata>
+</pre></div><p> This specification imposes no additional restrictions or requirements on titles except that they must be at least one character in length. </p><p>Reading Systems must trim all leading and trailing whitespace from the element value, as defined by the XML specification <a class="biblioref" href="epub30-references.xhtml#refXML" title="Extensible Markup Language (XML) 1.0 (Fifth Edition)">[<abbr>XML</abbr>]</a>, before processing the value.</p><p class="bridgehead" title="3.4 [...]
+    <dc:title id="t1">The Fellowship of the Ring</dc:title>
+    <meta refines="#t1" property="title-type">main</meta>
+    
+    <dc:title id="t2">The Lord of the Rings</dc:title>
+    <meta refines="#t2" property="title-type">collection</meta>
+    <meta refines="#t2" property="group-position">1</meta>
+    
+    <dc:title id="t3">THE LORD OF THE RINGS, Part One: The Fellowship of the Ring</dc:title>
+    <meta refines="#t3" property="title-type">extended</meta> 
+    …
+</metadata>
+</pre></div><div class="informalexample"><p>The following example shows how the complex title "The Great Cookbooks of the World: Mon premier guide de cuisson, un Mémoire. The New French Cuisine Masters, Volume Two. Special Anniversary Edition" could be classified. </p><pre class="synopsis"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title id="t1" xml:lang="fr">Mon premier guide de cuisson, un Mémoire</dc:title>
+    <meta refines="#t1" property="title-type">main</meta>
+    <meta refines="#t1" property="display-seq">2</meta>
+    
+    <dc:title id="t2">The Great Cookbooks of the World</dc:title>
+    <meta refines="#t2" property="title-type">collection</meta>
+    <meta refines="#t2" property="display-seq">1</meta>
+    
+    <dc:title id="t3">The New French Cuisine Masters</dc:title>
+    <meta refines="#t3" property="title-type">collection</meta>
+    <meta refines="#t3" property="group-position">2</meta>
+    <meta refines="#t3" property="display-seq">3</meta>
+    
+    <dc:title id="t4">Special Anniversary Edition</dc:title>
+    <meta refines="#t4" property="title-type">edition</meta>
+    <meta refines="#t4" property="display-seq">4</meta>
+    
+    <dc:title id="t5">The Great Cookbooks of the World: 
+        Mon premier guide de cuisson, un Mémoire. 
+        The New French Cuisine Masters, Volume Two. 
+        Special Anniversary Edition</dc:title>
+    <meta refines="#t5" property="title-type">extended</meta>
+    …
+</metadata>
+</pre></div></section><section class="section" title="3.4.5 The DCMES language Element" id="sec-opf-dclanguage"><h4 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-opf-dclanguage">›</a> </span>3.4.5 The DCMES <code>language</code> Element</h4><p>The <a class="biblioref" href="epub30-references.xhtml#refDCMES" title="Dublin Core Metadata Element Set, Version 1.1">[<abbr>DCMES</abbr>]</a> <code>language</code> element specifies the language of  [...]
+    …
+    <dc:language>en-US</dc:language>
+    …
+</metadata>
+</pre></div><p>Additional <code>language</code> elements may be included for multilingual Publications, but each element's value must conform to <a class="biblioref" href="epub30-references.xhtml#refRFC5646" title="Tags for Identifying Languages (RFC 5646)">[<abbr>RFC5646</abbr>]</a>. </p><p>Reading Systems must trim all leading and trailing whitespace from the element value, as defined by the XML specification <a class="biblioref" href="epub30-references.xhtml#refXML" title="Extensible  [...]
+    …
+    <dc:creator id="creator">Haruki Murakami</dc:creator>
+    <meta refines="#creator" property="role" scheme="marc:relators" id="role">aut</meta>
+    …
+</metadata>
+</pre></div><p>The <code>creator</code> element should contain the name of the creator as a Reading System will present it to a <a class="glossterm" href="epub30-terminology.xhtml#gloss-user" title="User">User</a>. The <code class="literal">file-as</code> property may be attached to include a normalized form of the name, and the <a href="#alternate-script"><code class="literal">alternate-script</code></a> property can be used to represent a creator's name in another language or script.</ [...]
+    …
+    <dc:creator id="creator">Haruki Murakami</dc:creator>
+    <meta refines="#creator" property="role" scheme="marc:relators" id="role">aut</meta>
+    <meta refines="#creator" property="alternate-script" xml:lang="ja">村上 春樹</meta>
+    <meta refines="#creator" property="file-as">Murakami, Haruki</meta>
+    …
+</metadata>
+</pre></div><p>If a Publication has more than one creator, each should be included in a separate <code>creator</code> element. The order in which to render the <code>creator</code> names should be specified using the <a href="#display-seq"><code class="literal">display-seq</code></a> property.</p><div class="informalexample"><p>The following example shows how to indicate the display order for <code class="literal">creator</code> elements.</p><pre class="synopsis"><metadata xmlns:dc="h [...]
+    …
+    <dc:creator id="creator01">Lewis Carroll</dc:creator>
+    <meta refines="#creator01" property="role" scheme="marc:relators">aut</meta>
+    <meta refines="#creator01" property="display-seq">1</meta>
+    
+    <dc:creator id="creator02">John Tenniel</dc:creator>
+    <meta refines="#creator02" property="role" scheme="marc:relators">ill</meta>
+    <meta refines="#creator02" property="display-seq">2</meta>
+    …
+</metadata>
+</pre></div><p>If no means of establishing the primacy of creators is included, Reading Systems must use the order of <code class="literal">creator</code> elements.</p><p>Secondary contributors should be represented using DCMES <code>contributor</code> elements.</p><p class="bridgehead" title="3.4.6. The DCMES ???TITLE??? Element" id="sec-opf-dcdate">The DCMES <code>date</code> Element</p><p>The <code>date</code> element must only be used to define the publication date of the <a class="g [...]
+    …
+    <dc:date>2000-01-01T00:00:00Z</dc:date>
+    …
+</metadata>
+</pre></div><p>Additional dates should be expressed using the specialized date properties available in the <a class="biblioref" href="epub30-references.xhtml#refDCTERMS" title="DCMI Metadata Terms">[<abbr>DCTERMS</abbr>]</a> vocabulary, or similar.</p><p>The publication date may be common to all instances of a Publication or may change from instance to instance (if the Publication gets generated on demand, for example).</p><p>Only one <code>date</code> element is allowed.</p><p class="br [...]
+    …
+    <dc:identifier id="isbn-id">urn:isbn:9780101010101</dc:identifier>
+    <meta refines="#isbn-id" property="identifier-type" scheme="onix:codelist5">15</meta>
+    
+    <dc:source id="src-id">urn:isbn:9780375704024</dc:source>
+    <meta refines="#src-id" property="identifier-type" scheme="onix:codelist5">15</meta>
+    …
+</metadata>
+</pre></div><p>The <code>source</code> element allows the print source of the pagination of a Publication to be determined.</p><p>Only one <code>source</code> element is allowed.</p><p class="bridgehead" title="3.4.6. The DCMES ???TITLE??? Element">The DCMES <code>type</code> Element</p><p>The <code>type</code> element is used to indicate that the given Publication is of a specialized type (e.g., annotations packaged in EPUB format or a dictionary).</p><p>This specification does not defi [...]
+    …
+    <dc:creator id="creator">Haruki Murakami</dc:creator>
+    <meta refines="#creator" property="role" scheme="marc:relators" id="role">aut</meta>
+    …
+</metadata>
+</pre></div><p>If a Reading System does not recognize the <code>scheme</code> attribute value, it should treat the value of the element as a string.</p><p>Reading Systems should ignore all <code>meta</code> elements whose <code>property</code> attributes define expressions they do not recognize. A Reading System must not fail when encountering unknown expressions.</p><p id="last-modified-date">In order to ensure that a <a class="glossterm" href="epub30-terminology.xhtml#gloss-package-ide [...]
+    …
+    <dc:identifier id="pub-id">urn:uuid:A1B0D67E-2E81-4DF5-9E67-A64CBE366809</dc:identifier>
+    <meta refines="#pub-id" property="identifier-type" scheme="xsd:string">uuid</meta>
+    
+    <dc:identifier id="isbn-id">urn:isbn:9780101010101</dc:identifier>
+    <meta refines="#isbn-id" property="identifier-type" scheme="onix:codelist5">15</meta>
+    
+    <dc:source id="src-id">urn:isbn:9780375704024</dc:source>
+    <meta refines="#src-id" property="identifier-type" scheme="onix:codelist5">15</meta>
+    
+    <dc:title id="title">Norwegian Wood</dc:title>
+    <meta refines="#title" property="title-type">main</meta>
+    
+    <dc:language>en</dc:language>
+    
+    <dc:creator id="creator">Haruki Murakami</dc:creator>
+    <meta refines="#creator" property="role" scheme="marc:relators" id="role">aut</meta>
+    <meta refines="#creator" property="alternate-script" xml:lang="ja">村上 春樹</meta>
+    <meta refines="#creator" property="file-as">Murakami, Haruki</meta>
+    
+    <meta property="dcterms:modified">2011-01-01T12:00:00Z</meta>
+    
+</metadata>
+</pre></div><div class="informalexample"><p>The following example shows an identifier that has been issued by a metadata authority.</p><pre class="synopsis"><package version="3.0" 
+         unique-identifier="pub-id"
+         xmlns="http://www.idpf.org/2007/opf">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="pub-id">urn:uuid:1234-5678</dc:identifier>
+        <dc:identifier id="isbn-id">urn:isbn:9780101010101</dc:identifier>
+        
+        <meta refines="#isbn-id" property="meta-auth" id="meta-authority-01">Metadata Authority Inc.</meta>
+        <link refines="#meta-authority-01" rel="xml-signature" href="../META-INF/Signatures.xml#MAI-Signature"/>
+        …
+    </metadata>
+</package>
+
+<!-- in Signatures.xml -->
+<signatures>
+    <Signature Id="MAI-Signature" xmlns="http://www.w3.org/2000/09/xmldsig#">
+        …
+    </Signature>
+</signatures>
+</pre></div></section><section class="section" title="3.4.8 The meta Element (OPF2) [OBSOLETE]" id="sec-opf-meta-elem"><h4 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-opf-meta-elem">›</a> </span>3.4.8 The <code class="literal">meta</code> Element (OPF2) [OBSOLETE]</h4><p>The <code class="literal">meta</code> element defined in <a class="biblioref" href="epub30-references.xhtml#refOPF2" title="Open Packaging Format 2.0.1">[<abbr>OPF2</abbr [...]
+    <metadata>
+        … 
+        <link rel="onix-record" href="http://example.org/onix/12389347"/>
+        <link rel="xmp-record" href="http://example.org/xmp/12389347"/>
+        <link rel="foaf:homepage" href="http://example.org/book-info/12389347" />
+        …
+    </metadata> 
+    …
+</package>
+</pre></div></section><section class="section" title="3.4.10 The manifest Element" id="sec-manifest-elem"><h4 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-manifest-elem">›</a> </span>3.4.10 The <code class="literal">manifest</code> Element</h4><p>The <code>manifest</code> element provides an exhaustive list of the <a class="glossterm" href="epub30-terminology.xhtml#gloss-publication-resource-cmt-or-foreign" title="Publication Resource">Pub [...]
+    <item id="nav" 
+          href="nav.xhtml" 
+          properties="nav"
+          media-type="application/xhtml+xml"/>
+    <item id="intro" 
+          href="intro.xhtml" 
+          media-type="application/xhtml+xml"/>
+    <item id="c1" 
+          href="chap1.xhtml" 
+          media-type="application/xhtml+xml"/>
+    <item id="c1-answerkey" 
+          href="chap1-answerkey.xhtml" 
+          media-type="application/xhtml+xml"/>
+    <item id="c2" 
+          href="chap2.xhtml" 
+          media-type="application/xhtml+xml"/>
+    <item id="c2-answerkey" 
+          href="chap2-answerkey.xhtml" 
+          media-type="application/xhtml+xml"/>
+    <item id="c3" 
+          href="chap3.xhtml" 
+          media-type="application/xhtml+xml"/>
+    <item id="c3-answerkey" 
+          href="chap3-answerkey.xhtml" 
+          media-type="application/xhtml+xml"/>    
+    <item id="notes" 
+          href="notes.xhtml" 
+          media-type="application/xhtml+xml"/>
+    <item id="cover" 
+          href="./images/cover.svg" 
+          properties="cover-image"
+          media-type="image/svg+xml"/>
+    <item id="f1" 
+          href="./images/fig1.jpg" 
+          media-type="image/jpeg"/>
+    <item id="f2" 
+          href="./images/fig2.jpg" 
+          media-type="image/jpeg"/>
+    <item id="css" 
+          href="./style/book.css" 
+          media-type="text/css"/>   
+    <item id="pls" 
+          href="./speech/dict.pls" 
+          media-type="application/pls+xml"/>
+</manifest>
+</pre></div><div class="informalexample" id="example-manifest-flbk"><p>The following example shows a <code>manifest</code> that references two <a class="glossterm" href="epub30-terminology.xhtml#gloss-publication-resource-foreign" title="Foreign Resource">Foreign Resource</a>s, and therefore uses the <a href="#sec-fallback-processing-flow-manifest" title="5.2.2 Manifest Fallbacks">fallback chain mechanism</a> to supply content alternatives. The fallback chain terminates with a Core Media [...]
+    <item id="item1" 
+          href="chap1_docbook.xml" 
+          media-type="application/docbook+xml" 
+          fallback="fall1"/>
+    <item id="fall1" 
+          href="chap1.xml" 
+          media-type="application/z3986-auth+xml" 
+          fallback="fall2" />
+    <item id="fall2" 
+          href="chap1.xhtml" 
+          media-type="application/xhtml+xml"/> 
+    … 
+</manifest>
+</pre></div><div class="note" title="note"><h3 class="title">note</h3><p>Refer also to the <a class="xref" href="#examples-item-properties" title="4.3.4. Examples">Manifest item properties examples</a> for use of the <code>properties</code> attribute.</p></div></section><section class="section" title="3.4.12 The spine Element" id="sec-spine-elem"><h4 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-spine-elem">›</a> </span>3.4.12 The <code>spi [...]
+    <itemref idref="intro"/>
+    <itemref idref="c1"/>
+    <itemref idref="c1-answerkey" linear="no"/>
+    <itemref idref="c2"/>
+    <itemref idref="c2-answerkey" linear="no"/>
+    <itemref idref="c3"/>
+    <itemref idref="c3-answerkey" linear="no"/>
+    <itemref idref="notes" linear="no"/>
+</spine>
+</pre></div></section><section class="section" title="3.4.14 The guide Element [DEPRECATED]" id="sec-guide-elem"><h4 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-guide-elem">›</a> </span>3.4.14 The <code>guide</code> Element [DEPRECATED]</h4><p>The <code>guide</code> element <a class="biblioref" href="epub30-references.xhtml#refOPF2" title="Open Packaging Format 2.0.1">[<abbr>OPF2</abbr>]</a> is deprecated in favor of the <code class="lite [...]
+    <param name="autoplay" value="false">
+</object>
+        </pre></div><p>would result in the following query string being sent to the handler XHTML Content Document after processing:</p><div class="informalexample"><pre class="synopsis">src=horse.ogg&type=audio/ogg&autoplay=false</pre></div><p>All IRI reserved characters, plus the characters <code class="literal"><</code>, <code class="literal">></code>, <code class="literal">"</code>, <code class="literal">space</code>, <code class="literal">{</code>, <code class="literal [...]
+    …
+    <manifest>
+        <item id="pict1" 
+            href="images/Pict1.jpg" 
+            media-type="image/jpeg"/>
+        …
+        <item id="content" 
+            href="content.xhtml" 
+            media-type="application/xhtml+xml"/>
+        <item id="impl" 
+            href="impl.xhtml" 
+            media-type="application/xhtml+xml" 
+            properties="scripted"/>
+        <item id="slideshow" 
+            href="slideshow.xml" 
+            media-type="application/x-demo-slideshow"/>
+    </manifest>
+    
+    <bindings>
+        <mediaType handler="impl"
+            media-type="application/x-demo-slideshow"/>
+    </bindings>
+    …
+</package>
+</pre></div><p>and the following content in the file <code class="filename">content.xhtml</code>:</p><div class="informalexample"><pre class="synopsis"><html …>
+    …
+    <body>
+        …
+        <object data="slideshow.xml" 
+            type="application/x-demo-slideshow">
+            <img src="images/Pict1.jpg"/>
+            <img src="images/Pict2.jpg"/>
+            <img src="images/Pict3.jpg"/>
+            <img src="images/Pict4.jpg"/>
+        </object>
+        …
+    </body>
+</html>
+</pre></div><p>and the following content in the file <code class="filename">slideshow.xml</code>:</p><div class="informalexample"><pre class="synopsis"><slides>
+    <slide src="images/Pict1.jpg" dur="3"/>
+    <slide src="images/Pict2.jpg" dur="3"/>
+    <slide src="images/Pict3.jpg" dur="3"/>
+    <slide src="images/Pict4.jpg" dur="3"/>
+</slides>
+</pre></div><p>Depending on the capabilities of the <a class="glossterm" href="epub30-terminology.xhtml#gloss-user" title="User">User</a>'s Reading System, they will see one of the following renditions of the slideshow:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p>If the Reading System supports the native slideshow format, it will render a rotating set of images as specified in <code class="filename">slideshow.xml</code>.</p></li><li class="listitem"><p>I [...]
+    <dc:identifier id="pub-id">urn:uuid:A1B0D67E-2E81-4DF5-9E67-A64CBE366809</dc:identifier>
+    <meta property="dcterms:modified">2011-01-01T12:00:00Z</meta>
+    …
+</metadata>
+
+results in the Package ID:
+
+urn:uuid:A1B0D67E-2E81-4DF5-9E67-A64CBE366809 at 2011-01-01T12:00:00Z
+</pre></div><p>Note that it is possible that the separator character may occur in the Unique Identifier, as these identifiers may be any string value. The Package Identifier consequently must be split on the last instance of the at sign when decomposing it into its component parts.</p><p>The Package Identifier does not supersede the Unique Identifier, but represents the means by which different versions of the same Publication can be distinguished and identified in distribution channels  [...]
+	prefix="foaf: http://xmlns.com/foaf/spec/
+		 dbp: http://dbpedia.org/ontology/">
+	…
+</package></pre></div><p>The <code>prefix</code> attribute must not be used to redefine the <a href="#sec-metadata-default-vocab" title="4.2.2 Default Vocabulary">default vocabulary</a> or the <a href="#sec-metadata-reserved-vocabs" title="4.2.3 Reserved Vocabularies">predefined prefixes</a>. </p><p>The prefix '_' is reserved for future compatibility with RDFa <a class="biblioref" href="epub30-references.xhtml#refRDFa" title="RDFa in XHTML: Syntax and Processing">[<abbr>RDFa10</abb [...]
+</pre></div><div class="informalexample" id="example-item-properties-cover-image"><p>The following example shows a <code>manifest</code> <code>item</code> element that represents the cover image of a Publication.</p><pre class="synopsis"><item properties="cover-image" id="ci" href="cover.svg" media-type="image/svg+xml" />
+</pre></div><div class="informalexample" id="example-item-properties-scripted-mathml"><p>The following example shows a <code>manifest</code> <code>item</code> element representing a <a class="glossterm" href="epub30-terminology.xhtml#gloss-content-document-epub-scripted" title="Scripted Content Document">Scripted Content Document</a> that also contains embedded <code>MathML</code>. </p><pre class="synopsis"><item properties="scripted mathml" id="c2" href="c2.xhtml" media-type="applica [...]
+</pre></div></section><section class="section" title="4.3.5 Spine itemref Properties" id="sec-itemref-property-values"><h4 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-itemref-property-values">›</a> </span>4.3.5 Spine <code>itemref</code> Properties</h4><p>The following tables define properties for use in the <code><a class="codelink" href="#sec-itemref-elem" title="3.4.13 The itemref Element">itemref</a></code> element <code><a class="xre [...]
+	<itemref idref="title"/>
+	<itemref idref="ps-1-l" properties="page-spread-left"/>
+	<itemref idref="ps-1-r" properties="page-spread-right"/>
+	<itemref idref="toc"/>
+	…
+</spine></pre></div></section></section></section><section class="chapter" title="5 Publication Resources" id="sec-publication-resources"><h2 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-publication-resources">›</a> </span>5 Publication Resources</h2><section class="section" title="5.1 Core Media Types" id="sec-core-media-types"><h3 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-core-med [...]
diff --git a/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-references.xhtml b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-references.xhtml
new file mode 100644
index 0000000..225ebdc
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-references.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops"><head><meta charset="utf-8"/><title>References</title><link rel="stylesheet" type="text/css" href="../css/epub-spec.css"/></head><body id="references" epub:type="bibliography">
+        <h1 class="title">References</h1>
+            
+        <section class="bibliodiv" id="normative">
+            <h2 class="title">Normative References</h2>
+            
+        <div class="biblioentry" title="ISO/IEC 14496-3:2009 - Information technology -- Coding of audio-visual objects -- Part 3: Audio" id="refAAC"><p>[<abbr>AAC LC</abbr>] <span class="title"><em> <a href="http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?csnumber=53943">ISO/IEC 14496-3:2009 - Information technology -- Coding of audio-visual objects -- Part 3: Audio</a> </em>. </span></p></div><div class="biblioentry" title="Accessible Rich Internet Applicati [...]
+        
+        <section class="bibliodiv" id="informative">
+            <h2 class="title">Informative References</h2>
+            
+        <div class="biblioentry" title="EPUB 3 Differences from EPUB 2.0.1" id="refEPUB3Changes"><p>[<abbr>EPUB3Changes</abbr>] <span class="title"><em> <a href="epub30-changes.xhtml">EPUB 3 Differences from EPUB 2.0.1</a> </em>. </span><span class="author">William McCoy, et al. </span></p></div><div class="biblioentry" title="EPUB 3 Overview" id="refEPUB3Overview"><p>[<abbr>EPUB3Overview</abbr>] <span class="title"><em> <a href="epub30-overview.xhtml">EPUB 3 Overview</a> </em>. </span>< [...]
+        
+    </body></html>
diff --git a/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-terminology.xhtml b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-terminology.xhtml
new file mode 100644
index 0000000..bd27a58
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-terminology.xhtml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops"><head><meta charset="utf-8"/><title>Terminology</title><link rel="stylesheet" type="text/css" href="../css/epub-spec.css"/></head><body>
+        <h1 class="title">Terminology</h1>
+        <dl id="terminology" epub:type="glossary">
+            
+        <dt class="glossentry" title="Author" id="gloss-author">Author</dt><dd><p>The person(s) or organization responsible for the creation of an <a class="glossterm" href="#gloss-epub-publication" title="EPUB Publication (or Publication)">EPUB Publication</a>, which is not necessarily the creator of the content and resources it contains. </p></dd><dt class="glossentry" title="EPUB Container (or Container)" id="gloss-container">EPUB Container (or Container)</dt><dd><p>The ZIP-based pack [...]
+            
+    </body></html>
diff --git a/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-titlepage.xhtml b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-titlepage.xhtml
new file mode 100644
index 0000000..57cf293
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/epub30-spec/EPUB/xhtml/epub30-titlepage.xhtml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><meta charset="utf-8"/><title>EPUB 3.0 Specification</title><link rel="stylesheet" type="text/css" href="../css/epub-spec.css"/></head><body>
+        <h1 class="titlepage">EPUB 3.0 Specification</h1>        
+        <p><em>The documents canonically located at <a href="http://idpf.org/epub/30">http://idpf.org/epub/30</a> reproduced in EPUB 3 format</em></p>        
+        <div class="legalnotice"><p>All rights reserved. This work is protected under Title 17 of the United States Code. Reproduction and dissemination of this work with changes is prohibited except with the written permission of the <a href="http://www.idpf.org">International Digital Publishing Forum (IDPF)</a>. </p><p>EPUB is a registered trademark of the International Digital Publishing Forum.</p></div>        
+    </body></html>
diff --git a/src/test/resources/30/expanded/invalid/epub30-spec/META-INF/container.xml b/src/test/resources/30/expanded/invalid/epub30-spec/META-INF/container.xml
new file mode 100755
index 0000000..0cbfb3c
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/epub30-spec/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+   <rootfiles>
+      <rootfile full-path="EPUB/package.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
diff --git a/src/test/resources/30/expanded/invalid/epub30-spec/mimetype b/src/test/resources/30/expanded/invalid/epub30-spec/mimetype
new file mode 100755
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/epub30-spec/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/fallbacks-circular/EPUB/image.abc b/src/test/resources/30/expanded/invalid/fallbacks-circular/EPUB/image.abc
new file mode 100755
index 0000000..4d55c1e
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/fallbacks-circular/EPUB/image.abc
@@ -0,0 +1 @@
+<xyz/>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/fallbacks-circular/EPUB/image.jpeg b/src/test/resources/30/expanded/invalid/fallbacks-circular/EPUB/image.jpeg
new file mode 100644
index 0000000..ff336a5
Binary files /dev/null and b/src/test/resources/30/expanded/invalid/fallbacks-circular/EPUB/image.jpeg differ
diff --git a/src/test/resources/30/expanded/invalid/fallbacks-circular/EPUB/image.xyz b/src/test/resources/30/expanded/invalid/fallbacks-circular/EPUB/image.xyz
new file mode 100755
index 0000000..4d55c1e
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/fallbacks-circular/EPUB/image.xyz
@@ -0,0 +1 @@
+<xyz/>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/fallbacks-circular/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/fallbacks-circular/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/fallbacks-circular/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/fallbacks-circular/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/fallbacks-circular/EPUB/lorem.opf
new file mode 100644
index 0000000..1eb056b
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/fallbacks-circular/EPUB/lorem.opf
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+        <item id="img1" href="image.xyz" media-type="image/xyz" fallback="img2"/>
+        <item id="img2" href="image.abc" media-type="image/abc" fallback="img1"/>
+        <item id="img3" href="image.jpeg" media-type="image/jpeg"/>
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/invalid/fallbacks-circular/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/fallbacks-circular/EPUB/lorem.xhtml
new file mode 100644
index 0000000..e81335b
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/fallbacks-circular/EPUB/lorem.xhtml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<img src="image.xyz" alt=""/>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/fallbacks-circular/META-INF/container.xml b/src/test/resources/30/expanded/invalid/fallbacks-circular/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/fallbacks-circular/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/fallbacks-circular/mimetype b/src/test/resources/30/expanded/invalid/fallbacks-circular/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/fallbacks-circular/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/fallbacks-nonresolving/EPUB/image.abc b/src/test/resources/30/expanded/invalid/fallbacks-nonresolving/EPUB/image.abc
new file mode 100755
index 0000000..4d55c1e
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/fallbacks-nonresolving/EPUB/image.abc
@@ -0,0 +1 @@
+<xyz/>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/fallbacks-nonresolving/EPUB/image.jpeg b/src/test/resources/30/expanded/invalid/fallbacks-nonresolving/EPUB/image.jpeg
new file mode 100644
index 0000000..ff336a5
Binary files /dev/null and b/src/test/resources/30/expanded/invalid/fallbacks-nonresolving/EPUB/image.jpeg differ
diff --git a/src/test/resources/30/expanded/invalid/fallbacks-nonresolving/EPUB/image.xyz b/src/test/resources/30/expanded/invalid/fallbacks-nonresolving/EPUB/image.xyz
new file mode 100755
index 0000000..4d55c1e
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/fallbacks-nonresolving/EPUB/image.xyz
@@ -0,0 +1 @@
+<xyz/>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/fallbacks-nonresolving/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/fallbacks-nonresolving/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/fallbacks-nonresolving/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/fallbacks-nonresolving/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/fallbacks-nonresolving/EPUB/lorem.opf
new file mode 100644
index 0000000..a39db5c
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/fallbacks-nonresolving/EPUB/lorem.opf
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+        <item id="img1" href="image.xyz" media-type="image/xyz" fallback="img2"/>
+        <item id="img2" href="image.abc" media-type="image/abc" fallback="img4"/>
+        <item id="img3" href="image.jpeg" media-type="image/jpeg"/>
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/invalid/fallbacks-nonresolving/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/fallbacks-nonresolving/EPUB/lorem.xhtml
new file mode 100644
index 0000000..e81335b
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/fallbacks-nonresolving/EPUB/lorem.xhtml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<img src="image.xyz" alt=""/>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/fallbacks-nonresolving/META-INF/container.xml b/src/test/resources/30/expanded/invalid/fallbacks-nonresolving/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/fallbacks-nonresolving/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/fallbacks-nonresolving/mimetype b/src/test/resources/30/expanded/invalid/fallbacks-nonresolving/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/fallbacks-nonresolving/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/issue189/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/issue189/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/issue189/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/issue189/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/issue189/EPUB/lorem.opf
new file mode 100644
index 0000000..3b65af2
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/issue189/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/issue189/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/issue189/EPUB/lorem.xhtml
new file mode 100644
index 0000000..f6c1a0e
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/issue189/EPUB/lorem.xhtml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>			
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>			
+			<div data-name="aa" class="alignTop">
+				<somebadxhtmlformatting />
+			</div>
+			<span/>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/issue189/META-INF/container.xml b/src/test/resources/30/expanded/invalid/issue189/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/issue189/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/issue189/mimetype b/src/test/resources/30/expanded/invalid/issue189/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/issue189/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-basic-dual-base/EPUB/1-lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-basic-dual-base/EPUB/1-lorem.xhtml
new file mode 100644
index 0000000..3cc374b
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-basic-dual-base/EPUB/1-lorem.xhtml
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<base href="http://example.org/" />
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, <a href="#frag">http://example.org/#frag</a> consectetur
+				adipiscing elit. Aliquam vel purus mauris, ut auctor massa. Pellentesque non nunc
+				risus. Fusce a massa augue. Nunc erat ante, auctor id varius ac, vestibulum non
+				purus. Quisque non dui in sem consectetur condimentum non ac quam. Quisque ultricies
+				nulla nec urna fringilla pretium. Pellentesque dictum pulvinar purus in mattis.
+				Aliquam vestibulum orci sed magna vestibulum a sollicitudin lectus pharetra.
+				Suspendisse luctus risus imperdiet nunc condimentum malesuada. Nulla fringilla
+				vulputate vestibulum. Sed diam dui, fringilla quis sagittis nec, viverra et
+				nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-basic-dual-base/EPUB/2-lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-basic-dual-base/EPUB/2-lorem.xhtml
new file mode 100644
index 0000000..3d89d6a
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-basic-dual-base/EPUB/2-lorem.xhtml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la" xml:base="http://example.org/"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section id="ch3">
+			<h2>Chapter 3</h2>
+			<p>Lorem ipsum dolor sit amet, <a href="file.html#frag"
+					>http://example.org/file.html#frag</a> consectetur adipiscing elit. Aliquam vel
+				purus mauris, ut auctor massa. Pellentesque non nunc risus. Fusce a massa augue.
+				Nunc erat ante, auctor id varius ac, vestibulum non purus. Quisque non dui in sem
+				consectetur condimentum non ac quam. Quisque ultricies nulla nec urna fringilla
+				pretium. Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed
+				magna vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet
+				nunc condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui,
+				fringilla quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch4">
+			<h2>Chapter 4</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-basic-dual-base/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-basic-dual-base/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-basic-dual-base/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-basic-dual-base/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-basic-dual-base/EPUB/lorem.opf
new file mode 100644
index 0000000..87ab179
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-basic-dual-base/EPUB/lorem.opf
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:661e8400-a29c-41d4-a716-2278971238567</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2012-04-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="1-lorem.xhtml" media-type="application/xhtml+xml" />
+        <item id="t2" href="2-lorem.xhtml" media-type="application/xhtml+xml" />
+        <item id="nav" href="nav.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />    
+        <itemref idref="t2" />    
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/invalid/lorem-basic-dual-base/EPUB/nav.xhtml b/src/test/resources/30/expanded/invalid/lorem-basic-dual-base/EPUB/nav.xhtml
new file mode 100644
index 0000000..eecc315
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-basic-dual-base/EPUB/nav.xhtml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="1-lorem.xhtml#ch1">Chapter 1</a></li>
+					<li><a href="1-lorem.xhtml#ch2">Chapter 2</a></li>
+					<li><a href="2-lorem.xhtml#ch3">Chapter 3</a></li>
+					<li><a href="2-lorem.xhtml#ch4">Chapter 4</a></li>
+				</ol>
+			</nav>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-basic-dual-base/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-basic-dual-base/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-basic-dual-base/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-basic-dual-base/mimetype b/src/test/resources/30/expanded/invalid/lorem-basic-dual-base/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-basic-dual-base/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-basic-switch/EPUB/wasteland-content.xhtml b/src/test/resources/30/expanded/invalid/lorem-basic-switch/EPUB/wasteland-content.xhtml
new file mode 100644
index 0000000..b75a05b
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-basic-switch/EPUB/wasteland-content.xhtml
@@ -0,0 +1,1091 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>The Waste Land</title>
+		<link type="text/css" rel="stylesheet" href="wasteland.css"/>
+	</head>
+	<body>
+		<section epub:type="frontmatter" id="frontmatter">
+			<section epub:type="titlepage" id="titlepage">
+				<h1>The Waste Land</h1>
+				<div class="aut">T.S. Eliot</div>
+				<div epub:type="epigraph">					
+					<p>
+						<span xml:lang="la">"Nam Sibyllam quidem Cumis ego ipse oculis
+							meis<br />vidi in ampulla pendere, et cum illi pueri dicerent</span>: <br />
+						<span xml:lang="grc"
+							>&#x03A3;&#x03AF;&#x03B2;&#x03C5;&#x03BB;&#x03BB;&#x03B1;
+							&#x03C4;&#x03AF;
+							&#x03F4;&#x03AD;&#x03BB;&#x03B5;&#x03B9;&#x03C2;<!--Sibylla ti theleis-->
+						</span>; <span xml:lang="la">respondebat illa</span>: <span xml:lang="grc"
+							>&#x03AC;&#x03C0;&#x03BF;&#x03F4;&#x03B1;&#x03B3;&#x03B5;&#x1FD6;&#x03B3;
+							&#x03F4;&#x03AD;&#x03BB;&#x03E3;<!--apothanein thelo-->
+						</span>."</p>
+				</div>
+				<p epub:type="dedication">For Ezra Pound: <span xml:lang="it">il miglior
+						fabbro</span></p>
+			</section>
+		</section>
+		<section epub:type="bodymatter" id="bodymatter">
+
+			<section id="ch1">
+				<h2>I. THE BURIAL OF THE DEAD</h2>
+				<epub:switch id="mathmlSwitch">
+   
+   <epub:case required-namespace="http://www.w3.org/1998/Math/MathML">
+   	  <math xmlns="http://www.w3.org/1998/Math/MathML" alttext="2x + y - z">
+         <mrow>
+            <mn>2</mn>
+            <mo> &#x2061;<!--INVISIBLE TIMES--></mo>
+            <mi>x</mi>
+         </mrow>
+         <mrow>
+            <mo>+</mo>
+            <mi>y</mi>
+            <mo>-</mo>
+            <mi>z</mi>
+         </mrow>
+      </math>
+   </epub:case>
+   
+   <epub:default>
+      <p>2x + y - z</p>
+   </epub:default>
+   
+</epub:switch>
+				
+				<div class="linegroup">
+					<span class="ln">April is the cruellest month, breeding</span>
+					<span class="ln">Lilacs out of the dead land, mixing</span>
+					<span class="ln">Memory and desire, stirring</span>
+					<span class="ln">Dull roots with spring rain.</span>
+					<span class="ln">Winter kept us warm, covering</span>
+					<span class="ln">Earth in forgetful snow, feeding</span>
+					<span class="ln">A little life with dried tubers.</span>
+					<span class="ln">Summer surprised us, coming over the Starnbergersee</span>
+					<span class="ln">With a shower of rain; we stopped in the colonnade,</span>
+					<span class="ln">And went on in sunlight, into the Hofgarten,<span class="lnum"
+							>10</span>
+					</span>
+					<span class="ln">And drank coffee, and talked for an hour.</span>
+					<span class="ln" xml:lang="de">Bin gar keine Russin, stamm' aus Litauen, echt
+						deutsch.</span>
+					<span class="ln">And when we were children, staying at the archduke's,</span>
+					<span class="ln">My cousin's, he took me out on a sled,</span>
+					<span class="ln">And I was frightened. He said, Marie,</span>
+					<span class="ln">Marie, hold on tight. And down we went.</span>
+					<span class="ln">In the mountains, there you feel free.</span>
+					<span class="ln">I read, much of the night, and go south in the winter.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">What are the roots that clutch, what branches grow</span>
+					<span class="ln">Out of this stony rubbish? Son of man<a epub:type="noteref" class="noteref"
+							href="#note-1">*</a>,<span class="lnum">20</span>
+					</span>
+					<span class="ln">You cannot say, or guess, for you know only</span>
+					<span class="ln">A heap of broken images, where the sun beats,</span>
+					<span class="ln">And the dead tree gives no shelter, the cricket no relief<a
+							epub:type="noteref" class="noteref" href="#note-2">*</a>,</span>
+					<span class="ln">And the dry stone no sound of water. Only</span>
+					<span class="ln">There is shadow under this red rock,</span>
+					<span class="ln">(Come in under the shadow of this red rock),</span>
+					<span class="ln">And I will show you something different from either</span>
+					<span class="ln">Your shadow at morning striding behind you</span>
+					<span class="ln">Or your shadow at evening rising to meet you;</span>
+					<span class="ln">I will show you fear in a handful of dust.<span class="lnum"
+							>30</span>
+					</span>
+					<blockquote xml:lang="de">
+						<div>
+							<span class="ln">Frisch weht der Wind<a epub:type="noteref" class="noteref"
+									href="#note-3">*</a>
+							</span>
+							<span class="ln">Der Heimat zu</span>
+							<span class="ln">Mein Irisch Kind,</span>
+							<span class="ln">Wo weilest du?</span>
+						</div>
+					</blockquote>
+					<span class="ln">"You gave me hyacinths first a year ago;</span>
+					<span class="ln">"They called me the hyacinth girl."</span>
+					<span class="ln">&#x2015;Yet when we came back, late, from the Hyacinth
+						garden,</span>
+					<span class="ln">Your arms full, and your hair wet, I could not</span>
+					<span class="ln">Speak, and my eyes failed, I was neither</span>
+					<span class="ln">Living nor dead, and I knew nothing,<span class="lnum"
+							>40</span>
+					</span>
+					<span class="ln">Looking into the heart of light, the silence.</span>
+					<span class="ln" xml:lang="de">
+						<em>Od' und leer das Meer</em>.<a epub:type="noteref" class="noteref" href="#note-4">*</a>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Madame Sosostris, famous clairvoyante,</span>
+					<span class="ln">Had a bad cold, nevertheless</span>
+					<span class="ln">Is known to be the wisest woman in Europe,</span>
+					<span class="ln">With a wicked pack of cards. Here, said she<a
+							epub:type="noteref" class="noteref" href="#note-5">*</a>,</span>
+					<span class="ln">Is your card, the drowned Phoenician Sailor,</span>
+					<span class="ln">(Those are pearls that were his eyes. Look!)</span>
+					<span class="ln">Here is Belladonna, the Lady of the Rocks,</span>
+					<span class="ln">The lady of situations.<span class="lnum">50</span>
+					</span>
+					<span class="ln">Here is the man with three staves, and here the Wheel,</span>
+					<span class="ln">And here is the one-eyed merchant, and this card,</span>
+					<span class="ln">Which is blank, is something he carries on his back,</span>
+					<span class="ln">Which I am forbidden to see. I do not find</span>
+					<span class="ln">The Hanged Man. Fear death by water.</span>
+					<span class="ln">I see crowds of people, walking round in a ring.</span>
+					<span class="ln">Thank you. If you see dear Mrs. Equitone,</span>
+					<span class="ln">Tell her I bring the horoscope myself:</span>
+					<span class="ln">One must be so careful these days.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Unreal City<a epub:type="noteref" class="noteref" href="#note-6">*</a>,<span
+							class="lnum">60</span>
+					</span>
+					<span class="ln">Under the brown fog of a winter dawn,</span>
+					<span class="ln">A crowd flowed over London Bridge, so many,</span>
+					<span class="ln">I had not thought death had undone so many.<a
+							epub:type="noteref" class="noteref" href="#note-7">*</a>
+					</span>
+					<span class="ln">Sighs, short and infrequent, were exhaled<a epub:type="noteref" class="noteref"
+							href="#note-8">*</a>,</span>
+					<span class="ln">And each man fixed his eyes before his feet.</span>
+					<span class="ln">Flowed up the hill and down King William Street,</span>
+					<span class="ln">To where Saint Mary Woolnoth kept the hours</span>
+					<span class="ln">With a dead sound on the final stroke of nine.<a
+							epub:type="noteref" class="noteref" href="#note-9">*</a>
+					</span>
+					<span class="ln">There I saw one I knew, and stopped him, crying
+						"Stetson!</span>
+					<span class="ln">"You who were with me in the ships at Mylae!<span class="lnum"
+							>70</span>
+					</span>
+					<span class="ln">"That corpse you planted last year in your garden,</span>
+					<span class="ln">"Has it begun to sprout? Will it bloom this year?</span>
+					<span class="ln">"Or has the sudden frost disturbed its bed?</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"Oh keep the Dog far hence, that's friend to men,<a
+							epub:type="noteref" class="noteref" href="#note-10">*</a>
+					</span>
+					<span class="ln">"Or with his nails he'll dig it up again!</span>
+					<span class="ln">"You! <span xml:lang="fr">hypocrite lecteur! - mon semblable, -
+							mon frere</span> !"<a epub:type="noteref" class="noteref" href="#note-11">*</a>
+					</span>
+				</div>
+			</section>
+			<section id="ch2">
+				<h2>II. A GAME OF CHESS</h2>
+				<div class="linegroup">
+					<span class="ln">The Chair she sat in, like a burnished throne<a
+							epub:type="noteref" class="noteref" href="#note-12">*</a>,</span>
+					<span class="ln">Glowed on the marble, where the glass</span>
+					<span class="ln">Held up by standards wrought with fruited vines</span>
+					<span class="ln">From which a golden Cupidon peeped out<span class="lnum"
+							>80</span>
+					</span>
+					<span class="ln">(Another hid his eyes behind his wing)</span>
+					<span class="ln">Doubled the flames of sevenbranched candelabra</span>
+					<span class="ln">Reflecting light upon the table as</span>
+					<span class="ln">The glitter of her jewels rose to meet it,</span>
+					<span class="ln">From satin cases poured in rich profusion;</span>
+					<span class="ln">In vials of ivory and coloured glass</span>
+					<span class="ln">Unstoppered, lurked her strange synthetic perfumes,</span>
+					<span class="ln">Unguent, powdered, or liquid - troubled, confused</span>
+					<span class="ln">And drowned the sense in odours; stirred by the air</span>
+					<span class="ln">That freshened from the window, these ascended<span
+							class="lnum">90</span>
+					</span>
+					<span class="ln">In fattening the prolonged candle-flames,</span>
+					<span class="ln">Flung their smoke into the laquearia<a epub:type="noteref" class="noteref"
+							href="#note-13">*</a>,</span>
+					<span class="ln">Stirring the pattern on the coffered ceiling.</span>
+					<span class="ln">Huge sea-wood fed with copper</span>
+					<span class="ln">Burned green and orange, framed by the coloured stone,</span>
+					<span class="ln">In which sad light a carved dolphin swam.</span>
+					<span class="ln">Above the antique mantel was displayed</span>
+					<span class="ln">As though a window gave upon the sylvan scene<a
+							epub:type="noteref" class="noteref" href="#note-14">*</a>
+					</span>
+					<span class="ln">The change of Philomel, by the barbarous king<a
+							epub:type="noteref" class="noteref" href="#note-15">*</a>
+					</span>
+					<span class="ln">So rudely forced; yet there the nightingale<a
+							epub:type="noteref" class="noteref" href="#note-16">*</a>
+						<span class="lnum">100</span>
+					</span>
+					<span class="ln">Filled all the desert with inviolable voice</span>
+					<span class="ln">And still she cried, and still the world pursues,</span>
+					<span class="ln">"Jug Jug" to dirty ears.</span>
+					<span class="ln">And other withered stumps of time</span>
+					<span class="ln">Were told upon the walls; staring forms</span>
+					<span class="ln">Leaned out, leaning, hushing the room enclosed.</span>
+					<span class="ln">Footsteps shuffled on the stair.</span>
+					<span class="ln">Under the firelight, under the brush, her hair</span>
+					<span class="ln">Spread out in fiery points</span>
+					<span class="ln">Glowed into words, then would be savagely still.<span
+							class="lnum">110</span>
+					</span>
+				</div>
+				<div class="linegroup">
+					<div class="linegroup">
+						<span class="ln">"My nerves are bad to-night. Yes, bad. Stay with me.</span>
+						<span class="ln">"Speak to me. Why do you never speak. Speak.</span>
+						<span class="ln">"What are you thinking of? What thinking? What?</span>
+						<span class="ln">"I never know what you are thinking. Think."</span>
+					</div>
+					<div class="linegroup">
+						<span class="ln">I think we are in rats' alley<a epub:type="noteref" class="noteref"
+								href="#note-17">*</a>
+						</span>
+						<span class="ln">Where the dead men lost their bones.</span>
+					</div>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"What is that noise?"</span>
+					<span class="ln">The wind under the door.<a epub:type="noteref" class="noteref" href="#note-18"
+							>*</a>
+					</span>
+					<span class="ln">"What is that noise now? What is the wind doing?"</span>
+					<span class="ln">Nothing again nothing.<span class="lnum">120</span>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"Do</span>
+					<span class="ln">"You know nothing? Do you see nothing? Do you remember</span>
+					<span class="ln">"Nothing?"</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">I remember</span>
+					<span class="ln">Those are pearls that were his eyes.</span>
+					<span class="ln">"Are you alive, or not? Is there nothing in your head?"<a
+							epub:type="noteref" class="noteref" href="#note-19">*</a>
+					</span>
+					<span class="ln">But</span>
+					<span class="ln">O O O O that Shakespeherian Rag&#x2015;</span>
+					<span class="ln">It's so elegant</span>
+					<span class="ln">So intelligent<span class="lnum">130</span>
+					</span>
+					<span class="ln">"What shall I do now? What shall I do?"</span>
+					<span class="ln">I shall rush out as I am, and walk the street</span>
+					<span class="ln">"With my hair down, so. What shall we do to-morrow?</span>
+					<span class="ln">"What shall we ever do?"</span>
+					<span class="ln">The hot water at ten.</span>
+					<span class="ln">And if it rains, a closed car at four.</span>
+					<span class="ln">And we shall play a game of chess,</span>
+					<span class="ln">Pressing lidless eyes and waiting for a knock upon the door.<a
+							epub:type="noteref" class="noteref" href="#note-20">*</a>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">When Lil's husband got demobbed, I said -</span>
+					<span class="ln">I didn't mince my words, I said to her myself,<span
+							class="lnum">140</span>
+					</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">Now Albert's coming back, make yourself a bit smart.</span>
+					<span class="ln">He'll want to know what you done with that money he gave
+						you</span>
+					<span class="ln">To get yourself some teeth. He did, I was there.</span>
+					<span class="ln">You have them all out, Lil, and get a nice set,</span>
+					<span class="ln">He said, I swear, I can't bear to look at you.</span>
+					<span class="ln">And no more can't I, I said, and think of poor Albert,</span>
+					<span class="ln">He's been in the army four years, he wants a good time,</span>
+					<span class="ln">And if you don't give it him, there's others will, I
+						said.</span>
+					<span class="ln">Oh is there, she said. Something o' that, I said.<span
+							class="lnum">150</span>
+					</span>
+					<span class="ln">Then I'll know who to thank, she said, and give me a straight
+						look.</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">If you don't like it you can get on with it, I said.</span>
+					<span class="ln">Others can pick and choose if you can't.</span>
+					<span class="ln">But if Albert makes off, it won't be for lack of
+						telling.</span>
+					<span class="ln">You ought to be ashamed, I said, to look so antique.</span>
+					<span class="ln">(And her only thirty-one.)</span>
+					<span class="ln">I can't help it, she said, pulling a long face,</span>
+					<span class="ln">It's them pills I took, to bring it off, she said.</span>
+					<span class="ln">(She's had five already, and nearly died of young George.)<span
+							class="lnum">160</span>
+					</span>
+					<span class="ln">The chemist said it would be all right, but I've never been the
+						same.</span>
+					<span class="ln">You <em>are</em> a proper fool, I said.</span>
+					<span class="ln">Well, if Albert won't leave you alone, there it is, I
+						said,</span>
+					<span class="ln">What you get married for if you don't want children?</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">Well, that Sunday Albert was home, they had a hot
+						gammon,</span>
+					<span class="ln">And they asked me in to dinner, to get the beauty of it
+						hot&#x2015;</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">Goonight Bill. Goonight Lou. Goonight May. Goonight.<span
+							class="lnum">170</span>
+					</span>
+					<span class="ln">Ta ta. Goonight. Goonight.</span>
+					<span class="ln">Good night, ladies, good night, sweet ladies, good night, good
+						night.</span>
+				</div>
+			</section>
+			<section id="ch3">
+				<h2>III. THE FIRE SERMON</h2>
+				<div class="linegroup">
+					<span class="ln">The river's tent is broken: the last fingers of leaf</span>
+					<span class="ln">Clutch and sink into the wet bank. The wind</span>
+					<span class="ln">Crosses the brown land, unheard. The nymphs are
+						departed.</span>
+					<span class="ln">Sweet Thames, run softly, till I end my song.<a
+							epub:type="noteref" class="noteref" href="#note-21">*</a>
+					</span>
+					<span class="ln">The river bears no empty bottles, sandwich papers,</span>
+					<span class="ln">Silk handkerchiefs, cardboard boxes, cigarette ends</span>
+					<span class="ln">Or other testimony of summer nights. The nymphs are
+						departed.</span>
+					<span class="ln">And their friends, the loitering heirs of city directors;<span
+							class="lnum">180</span>
+					</span>
+					<span class="ln">Departed, have left no addresses.</span>
+					<span class="ln">By the waters of Leman I sat down and wept . . .</span>
+					<span class="ln">Sweet Thames, run softly till I end my song,</span>
+					<span class="ln">Sweet Thames, run softly, for I speak not loud or long.</span>
+					<span class="ln">But at my back in a cold blast I hear</span>
+					<span class="ln">The rattle of the bones, and chuckle spread from ear to
+						ear.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">A rat crept softly through the vegetation</span>
+					<span class="ln">Dragging its slimy belly on the bank</span>
+					<span class="ln">While I was fishing in the dull canal</span>
+					<span class="ln">On a winter evening round behind the gashouse<span class="lnum"
+							>190</span>
+					</span>
+					<span class="ln">Musing upon the king my brother's wreck</span>
+					<span class="ln">And on the king my father's death before him.<a
+							epub:type="noteref" class="noteref" href="#note-22">*</a>
+					</span>
+					<span class="ln">White bodies naked on the low damp ground</span>
+					<span class="ln">And bones cast in a little low dry garret,</span>
+					<span class="ln">Rattled by the rat's foot only, year to year.</span>
+					<span class="ln">But at my back from time to time I hear<a epub:type="noteref" class="noteref"
+							href="#note-23">*</a>
+					</span>
+					<span class="ln">The sound of horns and motors, which shall bring<a
+							epub:type="noteref" class="noteref" href="#note-24">*</a>
+					</span>
+					<span class="ln">Sweeney to Mrs. Porter in the spring.</span>
+					<span class="ln">O the moon shone bright on Mrs. Porter<a epub:type="noteref" class="noteref"
+							href="#note-25">*</a>
+					</span>
+					<span class="ln">And on her daughter<span class="lnum">200</span>
+					</span>
+					<span class="ln">They wash their feet in soda water</span>
+					<span class="ln" xml:lang="fr">
+						<em>Et O ces voix d'enfants, chantant dans la coupole<a epub:type="noteref" class="noteref"
+								href="#note-26">*</a>
+						</em>!</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Twit twit twit</span>
+					<span class="ln">Jug jug jug jug jug jug</span>
+					<span class="ln">So rudely forc'd.</span>
+					<span class="ln">Tereu</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Unreal City</span>
+					<span class="ln">Under the brown fog of a winter noon</span>
+					<span class="ln">Mr. Eugenides, the Smyrna merchant</span>
+					<span class="ln">Unshaven, with a pocket full of currants<a epub:type="noteref" class="noteref"
+							href="#note-27">*</a>
+						<span class="lnum">210</span>
+					</span>
+					<span class="ln">C.i.f. London: documents at sight,</span>
+					<span class="ln">Asked me in demotic French</span>
+					<span class="ln">To luncheon at the Cannon Street Hotel</span>
+					<span class="ln">Followed by a weekend at the Metropole.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">At the violet hour, when the eyes and back</span>
+					<span class="ln">Turn upward from the desk, when the human engine waits</span>
+					<span class="ln">Like a taxi throbbing waiting,</span>
+					<span class="ln">I Tiresias, though blind, throbbing between two lives<a
+							epub:type="noteref" class="noteref" href="#note-28">*</a>,</span>
+					<span class="ln">Old man with wrinkled female breasts, can see</span>
+					<span class="ln">At the violet hour, the evening hour that strives<span
+							class="lnum">220</span>
+					</span>
+					<span class="ln">Homeward, and brings the sailor home from sea<a
+							epub:type="noteref" class="noteref" href="#note-29">*</a>,</span>
+					<span class="ln">The typist home at teatime, clears her breakfast, lights</span>
+					<span class="ln">Her stove, and lays out food in tins.</span>
+					<span class="ln">Out of the window perilously spread</span>
+					<span class="ln">Her drying combinations touched by the sun's last rays,</span>
+					<span class="ln">On the divan are piled (at night her bed)</span>
+					<span class="ln">Stockings, slippers, camisoles, and stays.</span>
+					<span class="ln">I Tiresias, old man with wrinkled dugs</span>
+					<span class="ln">Perceived the scene, and foretold the rest -</span>
+					<span class="ln">I too awaited the expected guest.<span class="lnum">230</span>
+					</span>
+					<span class="ln">He, the young man carbuncular, arrives,</span>
+					<span class="ln">A small house agent's clerk, with one bold stare,</span>
+					<span class="ln">One of the low on whom assurance sits</span>
+					<span class="ln">As a silk hat on a Bradford millionaire.</span>
+					<span class="ln">The time is now propitious, as he guesses,</span>
+					<span class="ln">The meal is ended, she is bored and tired,</span>
+					<span class="ln">Endeavours to engage her in caresses</span>
+					<span class="ln">Which still are unreproved, if undesired.</span>
+					<span class="ln">Flushed and decided, he assaults at once;</span>
+					<span class="ln">Exploring hands encounter no defence;<span class="lnum"
+							>240</span>
+					</span>
+					<span class="ln">His vanity requires no response,</span>
+					<span class="ln">And makes a welcome of indifference.</span>
+					<span class="ln">(And I Tiresias have foresuffered all</span>
+					<span class="ln">Enacted on this same divan or bed;</span>
+					<span class="ln">I who have sat by Thebes below the wall</span>
+					<span class="ln">And walked among the lowest of the dead.)</span>
+					<span class="ln">Bestows one final patronising kiss,</span>
+					<span class="ln">And gropes his way, finding the stairs unlit . . .</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">She turns and looks a moment in the glass,</span>
+					<span class="ln">Hardly aware of her departed lover;<span class="lnum"
+							>250</span>
+					</span>
+					<span class="ln">Her brain allows one half-formed thought to pass:</span>
+					<span class="ln">"Well now that's done: and I'm glad it's over."</span>
+					<span class="ln">When lovely woman stoops to folly and<a epub:type="noteref" class="noteref"
+							href="#note-30">*</a>
+					</span>
+					<span class="ln">Paces about her room again, alone,</span>
+					<span class="ln">She smoothes her hair with automatic hand,</span>
+					<span class="ln">And puts a record on the gramophone.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"This music crept by me upon the waters"<a epub:type="noteref" class="noteref"
+							href="#note-31">*</a>
+					</span>
+					<span class="ln">And along the Strand, up Queen Victoria Street.</span>
+					<span class="ln">O City city, I can sometimes hear</span>
+					<span class="ln">Beside a public bar in Lower Thames Street,<span class="lnum"
+							>260</span>
+					</span>
+					<span class="ln">The pleasant whining of a mandoline</span>
+					<span class="ln">And a clatter and a chatter from within</span>
+					<span class="ln">Where fishmen lounge at noon: where the walls</span>
+					<span class="ln">Of Magnus Martyr hold<a epub:type="noteref" class="noteref" href="#note-32"
+							>*</a>
+					</span>
+					<span class="ln">Inexplicable splendour of Ionian white and gold.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">The river sweats<a epub:type="noteref" class="noteref" href="#note-33">*</a>
+					</span>
+					<span class="ln">Oil and tar</span>
+					<span class="ln">The barges drift</span>
+					<span class="ln">With the turning tide</span>
+					<span class="ln">Red sails<span class="lnum">270</span>
+					</span>
+					<span class="ln">Wide</span>
+					<span class="ln">To leeward, swing on the heavy spar.</span>
+					<span class="ln">The barges wash</span>
+					<span class="ln">Drifting logs</span>
+					<span class="ln">Down Greenwich reach</span>
+					<span class="ln">Past the Isle of Dogs.</span>
+					<span class="ln">Weialala leia</span>
+					<span class="ln">Wallala leialala</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Elizabeth and Leicester<a epub:type="noteref" class="noteref" href="#note-34"
+							>*</a>
+					</span>
+					<span class="ln">Beating oars<span class="lnum">280</span>
+					</span>
+					<span class="ln">The stern was formed</span>
+					<span class="ln">A gilded shell</span>
+					<span class="ln">Red and gold</span>
+					<span class="ln">The brisk swell</span>
+					<span class="ln">Rippled both shores</span>
+					<span class="ln">Southwest wind</span>
+					<span class="ln">Carried down stream</span>
+					<span class="ln">The peal of bells</span>
+					<span class="ln">White towers</span>
+					<span class="ln">Weialala leia<span class="lnum">290</span>
+					</span>
+					<span class="ln">Wallala leialala</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"Trams and dusty trees.</span>
+					<span class="ln">Highbury bore me. Richmond and Kew<a epub:type="noteref" class="noteref"
+							href="#note-35">*</a>
+					</span>
+					<span class="ln">Undid me. By Richmond I raised my knees</span>
+					<span class="ln">Supine on the floor of a narrow canoe."</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"My feet are at Moorgate, and my heart</span>
+					<span class="ln">Under my feet. After the event</span>
+					<span class="ln">He wept. He promised 'a new start'.</span>
+					<span class="ln">I made no comment. What should I resent?"</span>
+					<span class="ln">"On Margate Sands.<span class="lnum">300</span>
+					</span>
+					<span class="ln">I can connect</span>
+					<span class="ln">Nothing with nothing.</span>
+					<span class="ln">The broken fingernails of dirty hands.</span>
+					<span class="ln">My people humble people who expect</span>
+					<span class="ln">Nothing."</span>
+					<span class="ln">la la</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">To Carthage then I came<a epub:type="noteref" class="noteref" href="#note-36"
+							>*</a>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Burning burning burning burning<a epub:type="noteref" class="noteref"
+							href="#note-37">*</a>
+					</span>
+					<span class="ln">O Lord Thou pluckest me out<a epub:type="noteref" class="noteref"
+							href="#note-38">*</a>
+					</span>
+					<span class="ln">O Lord Thou pluckest<span class="lnum">310</span>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">burning</span>
+				</div>
+			</section>
+			<section id="ch4">
+				<h2>IV. DEATH BY WATER</h2>
+				<div class="linegroup">
+					<span class="ln">Phlebas the Phoenician, a fortnight dead,</span>
+					<span class="ln">Forgot the cry of gulls, and the deep sea swell</span>
+					<span class="ln">And the profit and loss.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">A current under sea</span>
+					<span class="ln">Picked his bones in whispers. As he rose and fell</span>
+					<span class="ln">He passed the stages of his age and youth</span>
+					<span class="ln">Entering the whirlpool.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Gentile or Jew</span>
+					<span class="ln">O you who turn the wheel and look to windward,<span
+							class="lnum">320</span>
+					</span>
+					<span class="ln">Consider Phlebas, who was once handsome and tall as you.</span>
+				</div>
+			</section>
+			<section id="ch5">
+				<h2>V. WHAT THE THUNDER SAID</h2>
+				<div class="linegroup">
+					<span class="ln">After the torchlight red on sweaty faces</span>
+					<span class="ln">After the frosty silence in the gardens</span>
+					<span class="ln">After the agony in stony places</span>
+					<span class="ln">The shouting and the crying</span>
+					<span class="ln">Prison and palace and reverberation</span>
+					<span class="ln">Of thunder of spring over distant mountains</span>
+					<span class="ln">He who was living is now dead</span>
+					<span class="ln">We who were living are now dying</span>
+					<span class="ln">With a little patience<span class="lnum">330</span>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Here is no water but only rock</span>
+					<span class="ln">Rock and no water and the sandy road</span>
+					<span class="ln">The road winding above among the mountains</span>
+					<span class="ln">Which are mountains of rock without water</span>
+					<span class="ln">If there were water we should stop and drink</span>
+					<span class="ln">Amongst the rock one cannot stop or think</span>
+					<span class="ln">Sweat is dry and feet are in the sand</span>
+					<span class="ln">If there were only water amongst the rock</span>
+					<span class="ln">Dead mountain mouth of carious teeth that cannot spit</span>
+					<span class="ln">Here one can neither stand nor lie nor sit<span class="lnum"
+							>340</span>
+					</span>
+					<span class="ln">There is not even silence in the mountains</span>
+					<span class="ln">But dry sterile thunder without rain</span>
+					<span class="ln">There is not even solitude in the mountains</span>
+					<span class="ln">But red sullen faces sneer and snarl</span>
+					<span class="ln">From doors of mudcracked houses</span>
+					<div class="linegroup">
+						<span class="ln">If there were water</span>
+						<span class="ln">And no rock</span>
+						<span class="ln">If there were rock</span>
+						<span class="ln">And also water</span>
+						<span class="ln">And water<span class="lnum">350</span>
+						</span>
+						<span class="ln">A spring</span>
+						<span class="ln">A pool among the rock</span>
+						<span class="ln">If there were the sound of water only</span>
+						<span class="ln">Not the cicada</span>
+						<span class="ln">And dry grass singing</span>
+						<span class="ln">But sound of water over a rock</span>
+						<span class="ln">Where the hermit-thrush sings in the pine trees<a
+								epub:type="noteref" class="noteref" href="#note-39">*</a>
+						</span>
+						<span class="ln">Drip drop drip drop drop drop drop</span>
+						<span class="ln">But there is no water</span>
+					</div>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Who is the third who walks always beside you?<a
+							epub:type="noteref" class="noteref" href="#note-40">*</a>
+						<span class="lnum">360</span>
+					</span>
+					<span class="ln">When I count, there are only you and I together</span>
+					<span class="ln">But when I look ahead up the white road</span>
+					<span class="ln">There is always another one walking beside you</span>
+					<span class="ln">Gliding wrapt in a brown mantle, hooded</span>
+					<span class="ln">I do not know whether a man or a woman</span>
+					<span class="ln">&#x2015;But who is that on the other side of you?<a
+							epub:type="noteref" class="noteref" href="#note-41">*</a>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">What is that sound high in the air</span>
+					<span class="ln">Murmur of maternal lamentation</span>
+					<span class="ln">Who are those hooded hordes swarming</span>
+					<span class="ln">Over endless plains, stumbling in cracked earth<span
+							class="lnum">370</span>
+					</span>
+					<span class="ln">Ringed by the flat horizon only</span>
+					<span class="ln">What is the city over the mountains</span>
+					<span class="ln">Cracks and reforms and bursts in the violet air</span>
+					<span class="ln">Falling towers</span>
+					<span class="ln">Jerusalem Athens Alexandria</span>
+					<span class="ln">Vienna London</span>
+					<span class="ln">Unreal</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">A woman drew her long black hair out tight</span>
+					<span class="ln">And fiddled whisper music on those strings</span>
+					<span class="ln">And bats with baby faces in the violet light<span class="lnum"
+							>380</span>
+					</span>
+					<span class="ln">Whistled, and beat their wings</span>
+					<span class="ln">And crawled head downward down a blackened wall</span>
+					<span class="ln">And upside down in air were towers</span>
+					<span class="ln">Tolling reminiscent bells, that kept the hours</span>
+					<span class="ln">And voices singing out of empty cisterns and exhausted
+						wells.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">In this decayed hole among the mountains</span>
+					<span class="ln">In the faint moonlight, the grass is singing</span>
+					<span class="ln">Over the tumbled graves, about the chapel</span>
+					<span class="ln">There is the empty chapel, only the wind's home.</span>
+					<span class="ln">It has no windows, and the door swings,<span class="lnum"
+							>390</span>
+					</span>
+					<span class="ln">Dry bones can harm no one.</span>
+					<span class="ln">Only a cock stood on the rooftree</span>
+					<span class="ln">Co co rico co co rico</span>
+					<span class="ln">In a flash of lightning. Then a damp gust</span>
+					<span class="ln">Bringing rain</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Ganga was sunken, and the limp leaves</span>
+					<span class="ln">Waited for rain, while the black clouds</span>
+					<span class="ln">Gathered far distant, over Himavant.</span>
+					<span class="ln">The jungle crouched, humped in silence.</span>
+					<span class="ln">Then spoke the thunder<span class="lnum">400</span>
+					</span>
+					<span class="ln">DA</span>
+					<span class="ln">
+						<span xml:lang="sa">Datta</span>: what have we given?<a epub:type="noteref" class="noteref"
+							href="#note-42">*</a>
+					</span>
+					<span class="ln">My friend, blood shaking my heart</span>
+					<span class="ln">The awful daring of a moment's surrender</span>
+					<span class="ln">Which an age of prudence can never retract</span>
+					<span class="ln">By this, and this only, we have existed</span>
+					<span class="ln">Which is not to be found in our obituaries </span>
+					<span class="ln">Or in memories draped by the beneficent spider<a
+							epub:type="noteref" class="noteref" href="#note-43">*</a>
+					</span>
+					<span class="ln">Or under seals broken by the lean solicitor</span>
+					<span class="ln">In our empty rooms<span class="lnum">410</span>
+					</span>
+					<span class="ln">DA</span>
+					<span class="ln">
+						<span xml:lang="sa">Dayadhvam</span>: I have heard the key<a
+							epub:type="noteref" class="noteref" href="#note-44">*</a>
+					</span>
+					<span class="ln">Turn in the door once and turn once only</span>
+					<span class="ln">We think of the key, each in his prison</span>
+					<span class="ln">Thinking of the key, each confirms a prison</span>
+					<span class="ln">Only at nightfall, aetherial rumours</span>
+					<span class="ln">Revive for a moment a broken Coriolanus</span>
+					<span class="ln">DA</span>
+					<span class="ln">
+						<span xml:lang="sa">Damyata</span>: The boat responded</span>
+					<span class="ln">Gaily, to the hand expert with sail and oar<span class="lnum"
+							>420</span>
+					</span>
+					<span class="ln">The sea was calm, your heart would have responded</span>
+					<span class="ln">Gaily, when invited, beating obedient</span>
+					<span class="ln">To controlling hands</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">I sat upon the shore</span>
+					<span class="ln">Fishing, with the arid plain behind me<a epub:type="noteref" class="noteref"
+							href="#note-45">*</a>
+					</span>
+					<span class="ln">Shall I at least set my lands in order?</span>
+					<span class="ln">London Bridge is falling down falling down falling down</span>
+					<span class="ln" xml:lang="it">
+						<em>Poi s'ascose nel foco che gli affina</em>
+						<a epub:type="noteref" class="noteref" href="#note-46">*</a>
+					</span>
+					<span class="ln">
+						<span xml:lang="it">
+							<em>Quando fiam ceu chelidon</em>
+						</span> - O swallow swallow<a epub:type="noteref" class="noteref" href="#note-47">*</a>
+					</span>
+					<span class="ln" xml:lang="fr">
+						<em>Le Prince d'Aquitaine a la tour abolie</em>
+						<a epub:type="noteref" class="noteref" href="#note-48">*</a>
+						<span class="lnum">430</span>
+					</span>
+					<span class="ln">These fragments I have shored against my ruins</span>
+					<span class="ln">Why then Ile fit you. Hieronymo's mad againe.<a
+							epub:type="noteref" class="noteref" href="#note-49">*</a>
+					</span>
+					<span class="ln" xml:lang="sa">Datta. Dayadhvam. Damyata.</span>
+					<div class="linegroup">
+						<span class="ln" xml:lang="sa">Shantih shantih shantih<a epub:type="noteref" class="noteref"
+								href="#note-50">*</a>
+						</span>
+					</div>
+				</div>
+			</section>
+		</section>
+		<section epub:type="backmatter" id="backmatter">
+			<section epub:type="rearnotes">
+				<h2>NOTES ON "THE WASTE LAND"</h2>
+				<p>Not only the title, but the plan and a good deal of the incidental symbolism of
+					the poem were suggested by Miss Jessie L. Weston's book on the Grail legend:
+					From Ritual to Romance</p>
+				<p>Indeed, so deeply am I indebted, Miss Weston's book will elucidate the
+					difficulties of the poem much better than my notes can do; and I recommend it
+					(apart from the great interest of the book itself) to any who think such
+					elucidation of the poem worth the trouble. To another work of anthropology I am
+					indebted in general, one which has influenced our generation profoundly; I mean
+					The Golden Bough; I have used especially the two volumes Adonis, Attis, Osiris.
+					Anyone who is acquainted with these works will immediately recognise in the poem
+					certain references to vegetation ceremonies.</p>
+				<section>
+					<h3>I. THE BURIAL OF THE DEAD</h3>
+					<div epub:type="rearnote" id="note-1">
+						<p>Line 20. Cf. Ezekiel 2:1.</p>
+					</div>
+					<div epub:type="rearnote" id="note-2">
+						<p>23. Cf. Ecclesiastes 12:5.</p>
+					</div>
+					<div epub:type="rearnote" id="note-3">
+						<p>31. V. Tristan und Isolde, i, verses 5-8.</p>
+					</div>
+					<div epub:type="rearnote" id="note-4">
+						<p>42. Id. iii, verse 24.</p>
+					</div>
+					<div epub:type="rearnote" id="note-5">
+						<p>46. I am not familiar with the exact constitution of the Tarot pack of
+							cards, from which I have obviously departed to suit my own convenience.
+							The Hanged Man, a member of the traditional pack, fits my purpose in two
+							ways: because he is associated in my mind with the Hanged God of Frazer,
+							and because I associate him with the hooded figure in the passage of the
+							disciples to Emmaus in Part V. The Phoenician Sailor and the Merchant
+							appear later; also the "crowds of people," and Death by Water is
+							executed in Part IV. The Man with Three Staves (an authentic member of
+							the Tarot pack) I associate, quite arbitrarily, with the Fisher King
+							himself.</p>
+					</div>
+					<div epub:type="rearnote" id="note-6">
+						<p>60. Cf. Baudelaire:</p>
+						<blockquote xml:lang="fr">
+							<p>"Fourmillante cite;, cite; pleine de reves,<br />Ou le spectre en
+								plein jour raccroche le passant."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-7">
+						<p>63. Cf. Inferno, iii. 55-7.</p>
+						<blockquote xml:lang="it">
+							<p>"si lunga tratta<br />di gente, ch'io non avrei mai creduto<br />che
+								morte tanta n'avesse disfatta."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-8">
+						<p>64. Cf. Inferno, iv. 25-7:</p>
+						<blockquote xml:lang="it">
+							<p>"Quivi, secondo che per ascoltahre,<br />"non avea pianto, ma' che di
+								sospiri,<br />"che l'aura eterna facevan tremare."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-9">
+						<p>68. A phenomenon which I have often noticed.</p>
+					</div>
+					<div epub:type="rearnote" id="note-10">
+						<p>74. Cf. the Dirge in Webster's White Devil .</p>
+					</div>
+					<div epub:type="rearnote" id="note-11">
+						<p>76. V. Baudelaire, Preface to Fleurs du Mal.</p>
+					</div>
+				</section>
+				<section>
+					<h3>II. A GAME OF CHESS</h3>
+					<div epub:type="rearnote" id="note-12">
+						<p>77. Cf. Antony and Cleopatra, II. ii., l. 190.</p>
+					</div>
+					<div epub:type="rearnote" id="note-13">
+						<p>92. Laquearia. V. Aeneid, I. 726:</p>
+						<blockquote xml:lang="la">
+							<p>dependent lychni laquearibus aureis incensi, et noctem
+								flammis<br />funalia vincunt.</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-14">
+						<p>98. Sylvan scene. V. Milton, Paradise Lost, iv. 140.</p>
+					</div>
+					<div epub:type="rearnote" id="note-15">
+						<p>99. V. Ovid, Metamorphoses, vi, Philomela.</p>
+					</div>
+					<div epub:type="rearnote" id="note-16">
+						<p>100. Cf. Part III, l. 204.</p>
+					</div>
+					<div epub:type="rearnote" id="note-17">
+						<p>115. Cf. Part III, l. 195.</p>
+					</div>
+					<div epub:type="rearnote" id="note-18">
+						<p>118. Cf. Webster:</p>
+						<blockquote>
+							<p>"Is the wind in that door still?"</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-19">
+						<p>126. Cf. Part I, l. 37, 48.</p>
+					</div>
+					<div epub:type="rearnote" id="note-20">
+						<p>138. Cf. the game of chess in Middleton's Women beware Women.</p>
+					</div>
+				</section>
+				<section>
+					<h3>III. THE FIRE SERMON</h3>
+					<div epub:type="rearnote" id="note-21">
+						<p>176. V. Spenser, Prothalamion.</p>
+					</div>
+					<div epub:type="rearnote" id="note-22">
+						<p>192. Cf. The Tempest, I. ii.</p>
+					</div>
+					<div epub:type="rearnote" id="note-23">
+						<p>196. Cf. Marvell, To His Coy Mistress.</p>
+					</div>
+					<div epub:type="rearnote" id="note-24">
+						<p>197. Cf. Day, Parliament of Bees:</p>
+						<blockquote>
+							<div>
+								<span class="ln">"When of the sudden, listening, you shall
+									hear,</span>
+								<span class="ln">"A noise of horns and hunting, which shall
+									bring</span>
+								<span class="ln">"Actaeon to Diana in the spring,</span>
+								<span class="ln">"Where all shall see her naked skin . . ."</span>
+							</div>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-25">
+						<p>199. I do not know the origin of the ballad from which these lines are
+							taken: it was reported to me from Sydney, Australia.</p>
+					</div>
+					<div epub:type="rearnote" id="note-26">
+						<p>202. V. Verlaine, Parsifal.</p>
+					</div>
+					<div epub:type="rearnote" id="note-27">
+						<p>210. The currants were quoted at a price "cost insurance and freight to
+							London"; and the Bill of Lading etc. were to be handed to the buyer upon
+							payment of the sight draft.</p>
+					</div>
+					<div epub:type="rearnote" id="note-28">
+						<p>218. Tiresias, although a mere spectator and not indeed a "character," is
+							yet the most important personage in the poem, uniting all the rest. Just
+							as the one-eyed merchant, seller of currants, melts into the Phoenician
+							Sailor, and the latter is not wholly distinct from Ferdinand Prince of
+							Naples, so all the women are one woman, and the two sexes meet in
+							Tiresias. What Tiresias sees, in fact, is the substance of the poem. The
+							whole passage from Ovid is of great anthropological interest:</p>
+						<blockquote xml:lang="la">
+							<p>'. . . Cum Iunone iocos et maior vestra profecto est<br /> Quam, quae
+								contingit maribus,' dixisse, 'voluptas.'<br /> Illa negat; placuit
+								quae sit sententia docti<br /> Quaerere Tiresiae: venus huic erat
+								utraque nota.<br /> Nam duo magnorum viridi coeuntia silva<br />
+								Corpora serpentum baculi violaverat ictu<br /> Deque viro factus,
+								mirabile, femina septem<br /> Egerat autumnos; octavo rursus
+								eosdem<br /> Vidit et 'est vestrae si tanta potentia plagae,'<br />
+								Dixit 'ut auctoris sortem in contraria mutet,<br /> Nunc quoque vos
+								feriam!' percussis anguibus isdem<br /> Forma prior rediit
+								genetivaque venit imago.<br /> Arbiter hic igitur sumptus de lite
+								iocosa<br /> Dicta Iovis firmat; gravius Saturnia iusto<br /> Nec
+								pro materia fertur doluisse suique<br /> Iudicis aeterna damnavit
+								lumina nocte,<br /> At pater omnipotens (neque enim licet inrita
+								cuiquam<br /> Facta dei fecisse deo) pro lumine adempto<br /> Scire
+								futura dedit poenamque levavit honore.<br />
+							</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-29">
+						<p>221. This may not appear as exact as Sappho's lines, but I had in mind
+							the "longshore" or "dory" fisherman, who returns at nightfall.</p>
+					</div>
+					<div epub:type="rearnote" id="note-30">
+						<p>253. V. Goldsmith, the song in The Vicar of Wakefield.</p>
+					</div>
+					<div epub:type="rearnote" id="note-31">
+						<p>257. V. The Tempest, as above.</p>
+					</div>
+					<div epub:type="rearnote" id="note-32">
+						<p>264. The interior of St. Magnus Martyr is to my mind one of the finest
+							among Wren's interiors. See The Proposed Demolition of Nineteen City
+							Churches (P. S. King & Son, Ltd.).</p>
+					</div>
+					<div epub:type="rearnote" id="note-33">
+						<p>266. The Song of the (three) Thames-daughters begins here. From line 292
+							to 306 inclusive they speak in turn. V. Gutterdsammerung, III. i: the
+							Rhine-daughters.</p>
+					</div>
+					<div epub:type="rearnote" id="note-34">
+						<p>279. V. Froude, Elizabeth, Vol. I, ch. iv, letter of De Quadra to Philip
+							of Spain:</p>
+						<blockquote>
+							<div>
+								<span class="ln">"In the afternoon we were in a barge, watching the
+									games on the river.</span>
+								<span class="ln">(The queen) was alone with Lord Robert and myself
+									on the poop,</span>
+								<span class="ln">when they began to talk nonsense, and went so far
+									that Lord Robert</span>
+								<span class="ln">at last said, as I was on the spot there was no
+									reason why they</span>
+								<span class="ln">should not be married if the queen pleased."</span>
+							</div>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-35">
+						<p>293. Cf. Purgatorio, v. 133:</p>
+						<blockquote>
+							<p>"Ricorditi di me, che son la Pia;<br />Siena mi fe', disfecemi
+								Maremma."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-36">
+						<p>307. V. St. Augustine's Confessions: "to Carthage then I came, where a
+							cauldron of unholy loves sang all about mine ears."</p>
+					</div>
+					<div epub:type="rearnote" id="note-37">
+						<p>308. The complete text of the Buddha's Fire Sermon (which corresponds in
+							importance to the Sermon on the Mount) from which these words are taken,
+							will be found translated in the late Henry Clarke Warren's Buddhism in
+							Translation (Harvard Oriental Series). Mr. Warren was one of the great
+							pioneers of Buddhist studies in the Occident.</p>
+					</div>
+					<div epub:type="rearnote" id="note-38">
+						<p>309. From St. Augustine's Confessions again. The collocation of these two
+							representatives of eastern and western asceticism, as the culmination of
+							this part of the poem, is not an accident.</p>
+					</div>
+				</section>
+				<section>
+					<h3>V. WHAT THE THUNDER SAID</h3>
+					<p>In the first part of Part V three themes are employed: the journey to Emmaus,
+						the approach to the Chapel Perilous (see Miss Weston's book) and the present
+						decay of eastern Europe.</p>
+					<div epub:type="rearnote" id="note-39">
+						<p>357. This is Turdus aonalaschkae pallasii, the hermit-thrush which I have
+							heard in Quebec County. Chapman says (Handbook of Birds of Eastern North
+							America) "it is most at home in secluded woodland and thickety retreats.
+							. . . Its notes are not remarkable for variety or volume, but in purity
+							and sweetness of tone and exquisite modulation they are unequalled." Its
+							"water-dripping song" is justly celebrated.</p>
+					</div>
+					<div epub:type="rearnote" id="note-40">
+						<p>360. The following lines were stimulated by the account of one of the
+							Antarctic expeditions (I forget which, but I think one of Shackleton's):
+							it was related that the party of explorers, at the extremity of their
+							strength, had the constant delusion that there was one more member than
+							could actually be counted.</p>
+					</div>
+					<div epub:type="rearnote" id="note-41">
+						<p>367-77. Cf. Hermann Hesse, Blick ins Chaos:</p>
+						<blockquote xml:lang="de">
+							<p>"Schon ist halb Europa, schon ist zumindest der halbe Osten Europas
+								auf dem<br /> Wege zum Chaos, fhrt betrunken im heiligem Wahn am
+								Abgrund entlang<br /> und singt dazu, singt betrunken und hymnisch
+								wie Dmitri Karamasoff sang.<br /> Ueber diese Lieder lacht der
+								Bsrger beleidigt, der Heilige<br /> und Seher hrt sie mit
+								Trvnen."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-42">
+						<p>402. <q xml:lang="sa">"Datta, dayadhvam, damyata"</q> (Give, sympathize,
+							control). The fable of the meaning of the Thunder is found in the
+							Brihadaranyaka-Upanishad, 5, 1. A translation is found in Deussen's
+							Sechzig Upanishads des Veda, p. 489.</p>
+					</div>
+					<div epub:type="rearnote" id="note-43">
+						<p>408. Cf. Webster, The White Devil, v. vi:</p>
+						<blockquote>
+							<p>". . . they'll remarry<br /> Ere the worm pierce your winding-sheet,
+								ere the spider<br /> Make a thin curtain for your epitaphs."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-44">
+						<p>412. Cf. Inferno, xxxiii. 46:</p>
+						<blockquote xml:lang="it">
+							<p>"ed io sentii chiavar l'uscio di sotto<br /> all'orribile torre."</p>
+						</blockquote>
+						<p>Also F. H. Bradley, Appearance and Reality, p. 346:</p>
+						<blockquote>
+							<p>"My external sensations are no less private to myself than are my
+								thoughts or my feelings. In either case my experience falls within
+								my own circle, a circle closed on the outside; and, with all its
+								elements alike, every sphere is opaque to the others which surround
+								it. . . . In brief, regarded as an existence which appears in a
+								soul, the whole world for each is peculiar and private to that
+								soul."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-45">
+						<p>425. V. Weston, From Ritual to Romance; chapter on the Fisher King.</p>
+					</div>
+					<div epub:type="rearnote" id="note-46">
+						<p>428. V. Purgatorio, xxvi. 148.</p>
+						<blockquote xml:lang="it">
+							<p>"'Ara vos prec per aquella valor<br /> 'que vos guida al som de
+								l'escalina,<br /> 'sovegna vos a temps de ma dolor.'<br /> Poi
+								s'ascose nel foco che gli affina."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-47">
+						<p>429. V. Pervigilium Veneris. Cf. Philomela in Parts II and III.</p>
+					</div>
+					<div epub:type="rearnote" id="note-48">
+						<p>430. V. Gerard de Nerval, Sonnet El Desdichado.</p>
+					</div>
+					<div epub:type="rearnote" id="note-49">
+						<p>432. V. Kyd's Spanish Tragedy.</p>
+					</div>
+					<div epub:type="rearnote" id="note-50">
+						<p>434. Shantih. Repeated as here, a formal ending to an Upanishad. 'The
+							Peace which passeth understanding' is a feeble translation of the
+							content of this word.</p>
+					</div>
+				</section>
+			</section>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-basic-switch/EPUB/wasteland-cover.jpg b/src/test/resources/30/expanded/invalid/lorem-basic-switch/EPUB/wasteland-cover.jpg
new file mode 100644
index 0000000..8308ed4
Binary files /dev/null and b/src/test/resources/30/expanded/invalid/lorem-basic-switch/EPUB/wasteland-cover.jpg differ
diff --git a/src/test/resources/30/expanded/invalid/lorem-basic-switch/EPUB/wasteland-nav.xhtml b/src/test/resources/30/expanded/invalid/lorem-basic-switch/EPUB/wasteland-nav.xhtml
new file mode 100644
index 0000000..6fd9693
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-basic-switch/EPUB/wasteland-nav.xhtml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<link type="text/css" rel="stylesheet" href="wasteland.css" />
+	</head>
+	<body>
+		<nav epub:type="toc" id="toc">
+			<h1>Table of contents</h1>
+			<ol>
+				<li><a href="wasteland-content.xhtml#ch1">I. THE BURIAL OF THE DEAD</a></li>
+				<li><a href="wasteland-content.xhtml#ch2">II. A GAME OF CHESS</a></li>
+				<li><a href="wasteland-content.xhtml#ch3">III. THE FIRE SERMON</a></li>
+				<li><a href="wasteland-content.xhtml#ch4">IV. DEATH BY WATER</a></li>
+				<li><a href="wasteland-content.xhtml#ch5">V. WHAT THE THUNDER SAID</a></li>
+				<li><a href="wasteland-content.xhtml#backmatter">NOTES ON "THE WASTE LAND"</a></li>
+			</ol>
+		</nav>
+		<nav epub:type="landmarks">
+			<ol>
+				<li><a epub:type="frontmatter" href="wasteland-content.xhtml#frontmatter"
+						>frontmatter</a></li>
+				<li><a epub:type="bodymatter" href="wasteland-content.xhtml#bodymatter"
+						>bodymatter</a></li>
+				<li><a epub:type="backmatter" href="wasteland-content.xhtml#bodymatter"
+						>rearmatter</a></li>
+			</ol>
+		</nav>
+
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-basic-switch/EPUB/wasteland.css b/src/test/resources/30/expanded/invalid/lorem-basic-switch/EPUB/wasteland.css
new file mode 100644
index 0000000..8b4aeec
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-basic-switch/EPUB/wasteland.css
@@ -0,0 +1,32 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
+
+h2 {
+    margin-top: 5em;
+}
+
+h3 {
+    margin-top: 3em;
+}
+
+span.ln { 
+    display: block;
+    margin-bottom: 0.5em;
+}
+
+span.lnum {
+    float : right;
+    color : gray;
+    font-size : 90%;
+}
+
+a.noteref {
+    color : gray;
+    text-decoration : none;
+    margin-left: 0.5em;
+    margin-right: 0.5em;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-basic-switch/EPUB/wasteland.opf b/src/test/resources/30/expanded/invalid/lorem-basic-switch/EPUB/wasteland.opf
new file mode 100644
index 0000000..eb22686
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-basic-switch/EPUB/wasteland.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xml:lang="en-US" prefix="cc: http://creativecommons.org/ns#">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:title>The Waste Land</dc:title>
+        <dc:creator>T.S. Eliot</dc:creator>
+        <dc:language>en-US</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T13:44:00Z</meta>          
+        <link rel="cc:license" refines="#cover" href="http://creativecommons.org/licenses/by-sa/3.0/" />
+        <link rel="cc:attributionURL" refines="#cover" href="http://en.wikipedia.org/wiki/Simon_Fieldhouse" />
+    </metadata> 
+    <manifest>
+        <item id="t1" href="wasteland-content.xhtml" properties="switch" media-type="application/xhtml+xml" />
+        <item id="nav" href="wasteland-nav.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="cover" href="wasteland-cover.jpg" media-type="image/jpeg" properties="cover-image" />
+        <item id="css" href="wasteland.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-basic-switch/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-basic-switch/META-INF/container.xml
new file mode 100644
index 0000000..8bd2e5e
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-basic-switch/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/wasteland.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-basic-switch/mimetype b/src/test/resources/30/expanded/invalid/lorem-basic-switch/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-basic-switch/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-bindings/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-bindings/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-bindings/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-bindings/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-bindings/EPUB/lorem.opf
new file mode 100644
index 0000000..b9d68c0
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-bindings/EPUB/lorem.opf
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav scripted" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+		<item id="slideshow" href="slideshow.xml" media-type="application/x-demo-slideshow2" />
+		<item id="video" href="video.avi" media-type="video/avi" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+	<bindings>
+        <mediaType handler="t1"
+            media-type="application/x-demo-slideshow"/>
+    </bindings>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-bindings/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-bindings/EPUB/lorem.xhtml
new file mode 100644
index 0000000..7e56cd3
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-bindings/EPUB/lorem.xhtml
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<script type="text/javascript">
+			
+		</script>
+		
+		<object type="application/x-demo-slideshow3">
+			<object data="slideshow.xml" type="application/x-demo-slideshow2">
+				<video src="video.avi" >
+					 
+				</video>
+			</object>
+		</object>
+		
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-bindings/EPUB/slideshow.xml b/src/test/resources/30/expanded/invalid/lorem-bindings/EPUB/slideshow.xml
new file mode 100644
index 0000000..e69de29
diff --git a/src/test/resources/30/expanded/invalid/lorem-bindings/EPUB/video.avi b/src/test/resources/30/expanded/invalid/lorem-bindings/EPUB/video.avi
new file mode 100644
index 0000000..e69de29
diff --git a/src/test/resources/30/expanded/invalid/lorem-bindings/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-bindings/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-bindings/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-bindings/mimetype b/src/test/resources/30/expanded/invalid/lorem-bindings/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-bindings/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-container/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-container/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-container/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-container/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-container/EPUB/lorem.opf
new file mode 100644
index 0000000..3b65af2
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-container/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-container/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-container/EPUB/lorem.xhtml
new file mode 100644
index 0000000..ce440bb
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-container/EPUB/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-container/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-container/META-INF/container.xml
new file mode 100644
index 0000000..2f4269c
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-container/META-INF/container.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<foo />
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
diff --git a/src/test/resources/30/expanded/invalid/lorem-container/mimetype b/src/test/resources/30/expanded/invalid/lorem-container/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-container/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-enc/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-css-enc/EPUB/lorem.css
new file mode 100644
index 0000000..e5cf72e
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-enc/EPUB/lorem.css
@@ -0,0 +1,8 @@
+ at charset "ISO-8859-7";
+
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-enc/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-css-enc/EPUB/lorem.opf
new file mode 100644
index 0000000..4d768a8
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-enc/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446667442349234</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-enc/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-css-enc/EPUB/lorem.xhtml
new file mode 100644
index 0000000..ce440bb
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-enc/EPUB/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-enc/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-css-enc/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-enc/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-enc/mimetype b/src/test/resources/30/expanded/invalid/lorem-css-enc/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-enc/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-import-1/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-css-import-1/EPUB/lorem.css
new file mode 100644
index 0000000..fa3276f
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-import-1/EPUB/lorem.css
@@ -0,0 +1,8 @@
+ at import "import.css";
+
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-import-1/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-css-import-1/EPUB/lorem.opf
new file mode 100644
index 0000000..9183c89
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-import-1/EPUB/lorem.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-10-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+        <!-- in this testcase, this file is missing: -->
+        <item id="css2" href="import.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-import-1/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-css-import-1/EPUB/lorem.xhtml
new file mode 100644
index 0000000..ce440bb
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-import-1/EPUB/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-import-1/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-css-import-1/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-import-1/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-import-1/mimetype b/src/test/resources/30/expanded/invalid/lorem-css-import-1/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-import-1/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-import-2/EPUB/import.css b/src/test/resources/30/expanded/invalid/lorem-css-import-2/EPUB/import.css
new file mode 100644
index 0000000..e23036c
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-import-2/EPUB/import.css
@@ -0,0 +1,3 @@
+p {
+    color:black;   
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-import-2/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-css-import-2/EPUB/lorem.css
new file mode 100644
index 0000000..fa3276f
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-import-2/EPUB/lorem.css
@@ -0,0 +1,8 @@
+ at import "import.css";
+
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-import-2/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-css-import-2/EPUB/lorem.opf
new file mode 100644
index 0000000..1d57954
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-import-2/EPUB/lorem.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-10-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+        <!-- in this testcase, this file is not declared: 
+            <item id="css2" href="import.css" media-type="text/css" /> -->
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-import-2/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-css-import-2/EPUB/lorem.xhtml
new file mode 100644
index 0000000..ce440bb
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-import-2/EPUB/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-import-2/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-css-import-2/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-import-2/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-import-2/mimetype b/src/test/resources/30/expanded/invalid/lorem-css-import-2/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-import-2/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-urls-1/EPUB/OldStandard-Regular.otf b/src/test/resources/30/expanded/invalid/lorem-css-urls-1/EPUB/OldStandard-Regular.otf
new file mode 100644
index 0000000..1e0688f
Binary files /dev/null and b/src/test/resources/30/expanded/invalid/lorem-css-urls-1/EPUB/OldStandard-Regular.otf differ
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-urls-1/EPUB/import.css b/src/test/resources/30/expanded/invalid/lorem-css-urls-1/EPUB/import.css
new file mode 100644
index 0000000..e26550f
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-urls-1/EPUB/import.css
@@ -0,0 +1,3 @@
+p {
+    color: black;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-urls-1/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-css-urls-1/EPUB/lorem.css
new file mode 100644
index 0000000..2591f82
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-urls-1/EPUB/lorem.css
@@ -0,0 +1,374 @@
+ at charset 'utf-8';
+
+ at import "import.css";
+
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
+
+/* a fontface import follows at the very end of the file */
+
+#content
+{
+  padding:10px;
+  font-size:13px;  
+}
+
+/*** this makes paragraphs and breaks look the same for easy handling ***/
+p
+{
+  margin-top:0px;
+  margin-bottom:0px;
+}
+
+/***********  TEXT ***********/
+
+#content,
+.mceContentBody,
+.text
+{
+  font-family:Verdana, Arial, Helvetica, Sans-serif;
+  font-size:13px;  
+}
+
+/***********  HEADINGS ***********/
+
+.heading_1
+{
+  font-family:Verdana, Arial, Helvetica, Sans-serif;
+  color:#6aac16;
+  font-style:normal;
+  font-weight:normal;
+  font-size:24px;
+  margin-bottom:10px;
+}
+
+span.heading_1
+{
+  display:block;
+}
+
+
+.heading_2
+{
+  font-family:Verdana, Arial, Helvetica, Sans-serif;
+  color:#6aac16;
+  font-style:normal;
+  font-weight:normal;
+  font-size:17px;
+  margin-bottom:7px;
+  margin-top:7px; 
+}
+
+span.heading_2
+{
+  display:block;
+}
+
+.heading_2b
+{
+  font-family:Verdana, Arial, Helvetica, Sans-serif;
+  color:#000000;
+  font-style:normal;
+  font-weight:normal;
+  font-size:17px;
+  margin-bottom:7px;
+  margin-top:7px;   
+}
+
+span.heading_2b
+{
+  display:block;
+}
+
+.heading_3
+{
+  font-family:Verdana, Arial, Helvetica, Sans-serif;
+  font-weight:bold;
+  color:#6aac16;
+  font-style:normal;
+  font-weight:normal;
+  font-size:14px;
+  margin-bottom:5px;
+  margin-top:5px;  
+}
+
+span.heading_3
+{
+  display:block;
+}
+
+.heading_3b
+{
+  font-family:Verdana, Arial, Helvetica, Sans-serif;
+  font-weight:bold;
+  color:#000000;
+  font-style:normal;
+  font-weight:normal;
+  font-size:14px;
+  margin-bottom:5px;
+  margin-top:5px;  
+}
+
+span.heading_3b
+{
+  display:block;
+}
+
+/***********  TABLES ***********/
+
+.table_header,
+.table_header td
+{
+  font-family:Verdana, Arial, Helvetica, Sans-serif;
+  font-weight:normal;
+  font-size:13px;
+  color:#ffffff;
+  background:url("../imgs/table_header_bg_uni.jpg") repeat-x 0px center;
+  background-color:#3e6530;
+  padding-left:10px;
+  padding-right:10px;
+  padding-top:5px;
+  padding-bottom:5px;
+  line-height:18px;
+  height:1px;
+}
+
+.table_content
+{
+  font-family:Verdana, Arial, Helvetica, Sans-serif;
+  font-size:13px;
+  background-color:#daedb5;
+  padding-left:10px;
+  padding-right:10px;
+  padding-top:5px;
+  padding-bottom:5px;
+  vertical-align:top;
+}
+
+.table_content_nocol
+{
+  font-family:Verdana, Arial, Helvetica, Sans-serif;
+  font-size:13px;
+  padding-left:10px;
+  padding-right:10px;
+  padding-top:5px;
+  padding-bottom:5px;
+  vertical-align:top;
+}
+
+.table_cell
+{
+  font-family:Verdana, Arial, Helvetica, Sans-serif;
+  font-size:13px;
+  background-color:#daedb5;
+  padding-left:10px;
+  padding-right:10px;
+  padding-top:5px;
+  padding-bottom:5px;
+}
+
+.table_cell_nocol
+{
+  font-family:Verdana, Arial, Helvetica, Sans-serif;
+  font-size:13px;
+  padding-left:10px;
+  padding-right:10px;
+  padding-top:5px;
+  padding-bottom:5px;
+}
+
+.table_collight
+{
+  background-color:#daedb5;
+}
+
+.table_colstrong
+{
+  background-color:#3e6530;
+}
+
+/***********  HACKS ***********/
+
+/* THIS IS FOR LINKS TO ACTUALLY BE DISPLAYED AS THEY SHOULD */
+
+/* Important is needed in Gecko browsers inorder to style links */
+
+a {
+  font-family:Verdana, Arial, Helvetica, Sans-serif;
+  color:#1f6201 !important;
+  font-weight:bold !important;
+}
+
+.table_header a {
+  font-family:Verdana, Arial, Helvetica, Sans-serif;
+  color:#ffffff !important;
+  font-weight:bold !important;
+  text-decoration:underline;
+}
+
+a:hover {
+  font-family:Verdana, Arial, Helvetica, Sans-serif;
+  color: #6aac16 !important;
+  font-weight:bold !important;
+}
+
+.table_header a:hover {
+  font-family:Verdana, Arial, Helvetica, Sans-serif;
+  color:#6aac16 !important;
+  font-weight:bold !important;
+  text-decoration:underline;
+}
+
+a img {
+  border:2px solid #1f6201 !important;
+}
+
+a:hover img{
+  border:2px solid #6aac16 !important;
+}
+
+/* Style selection range colors in Gecko browsers */
+
+::-moz-selection {
+  background-color: #d3e9f7;
+  color: #114669;
+}
+
+empty {
+  /* Some comment */
+}
+
+div { max-width:1em; }
+div { max-width:1ex; }
+div { max-width:1px; }
+div { max-width:1gd; }
+div { max-width:1rem; }
+div { max-width:1vw; }
+div { max-width:1vh; }
+div { max-width:1vmin; }
+div { max-width:1ch; }
+div { max-width:1in; }
+div { max-width:1cm; }
+div { max-width:1mm; }
+div { max-width:1pt; }
+div { max-width:1pc; }
+div { max-width:1%; }
+div { max-width:1deg; }
+div { max-width:1rad; }
+div { max-width:1grad; }
+div { max-width:1turn; }
+div { max-width:1ms; }
+div { max-width:1s; }
+div { max-width:1hz; }
+div { max-width:1khz; }
+div { max-width:1dpi; }
+div { max-width:1dpcm; }
+div { max-width:1dppx; }
+E[foo^="bar"] { color:#000; }
+E[foo$="bar"] { color:#000; }
+E[foo*="bar"] { color:#000; }
+E:root { color:#000; }
+E:nth-child(even) { color:#000; }
+tr:nth-child(3n+1) {  background-color: red; }
+tr:nth-child(3n+2) {  background-color: green; }
+tr:nth-child(3n+3) {  background-color: blue; }
+tr:nth-last-child(3n+3) {  background-color: red; }
+tr:nth-last-child(3n+2) {  background-color: green; }
+tr:nth-last-child(3n+1) {  background-color: blue; }
+div:nth-of-type(odd) { border-color: red }
+div:nth-of-type(even) { border-color: blue }
+E:nth-last-of-type(n) { color:#000; }
+E:first-child { color:#000; }
+E:last-child { color:#000; }
+E:first-of-type { color:#000; }
+E:last-of-type { color:#000; }
+E:only-child { color:#000; }
+E:only-of-type { color:#000; }
+E:empty { color:#000; }
+E:target { color:#000; }
+E:enabled { color:#000; }
+E:disabled { color:#000; }
+E:checked { color:#000; }
+E::selection { color:#000; }
+E::before { color:#000; }
+E::after { color:#000; }
+E:not(s) { color:#000; }
+E {}
+E[foo] {}
+E[foo="bar"] {}
+E[foo~="bar"] {}
+E[foo^="bar"] {}
+E[foo$="bar"] {}
+E[foo*="bar"] {}
+E[foo|="en"] {}
+E:root {}
+E:nth-child(5) {}
+E:nth-child(odd) {}
+E:nth-child(even) {}
+E:nth-child(4n+1) {}
+E:nth-child( 4n + 1 ) {}
+E:nth-child( +3n + 2 ) {}
+E:nth-child( -n + 6 ) {}
+E:nth-child( +6 ) {}
+E:nth-last-child(5) {}
+E:nth-of-type(5) {}
+E:nth-last-of-type(5) {}
+E:first-child {}
+E:last-child {}
+E:first-of-type {}
+E:last-of-type {}
+E:only-child {}
+E:only-of-type {}
+E:empty {}
+E:link {}
+E:visited {}
+E:active {}
+E:hover {}
+E:focus {}
+E:target {}
+E:target::before {}
+*:target::before {}
+E:lang(fr) {}
+E:enabled {}
+E:disabled {}
+E:checked {}
+E::first-line {}
+E::first-letter {}
+E::before {}
+E::after {}
+E.warning {}
+E#myid {}
+E:not(*) {}
+E:not(F) {}
+E:not(:only-child) {}
+E:not(:nth-child(5n+1)) {}
+E:not(.class) {}
+E:not(#myId) {}
+E F {}
+E  F {}
+E>F {}
+E >F {}
+E> F {}
+E > F {}
+E+F {}
+E +F {}
+E+ F {}
+E + F {}
+E~F {}
+E ~F {}
+E~ F {}
+E ~ F {}
+html|div {}
+*|div {}
+|div {}
+
+ at font-face {
+    font-family: 'OldStandard';
+    font-weight: normal;
+    font-style: normal;
+    src:url(OldStandard-Regular.otf) format('opentype');
+}
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-urls-1/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-css-urls-1/EPUB/lorem.opf
new file mode 100644
index 0000000..1152af9
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-urls-1/EPUB/lorem.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446667449999</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-10-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />         
+        <item id="css2" href="import.css" media-type="text/css" />
+        <item id="font" href="OldStandard-Regular.otf" media-type="application/vnd.ms-opentype" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-urls-1/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-css-urls-1/EPUB/lorem.xhtml
new file mode 100644
index 0000000..ce440bb
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-urls-1/EPUB/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-urls-1/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-css-urls-1/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-urls-1/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-urls-1/mimetype b/src/test/resources/30/expanded/invalid/lorem-css-urls-1/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-urls-1/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-urls-2/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-css-urls-2/EPUB/lorem.css
new file mode 100644
index 0000000..b5c327b
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-urls-2/EPUB/lorem.css
@@ -0,0 +1,16 @@
+ at charset 'utf-8';
+
+.trips_css_017_etc {
+ font-size: 20;
+ line-height: 3.5px;
+ position: absolute
+}
+
+.trips_ACC_015_etc {
+    font-size: 20;
+    line-height: 3.5;
+}
+
+.p {
+    font: 600 12px/14px sans-serif
+}
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-urls-2/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-css-urls-2/EPUB/lorem.opf
new file mode 100644
index 0000000..810c7c1
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-urls-2/EPUB/lorem.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446667449999</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-10-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="t2" href="lorem2.xhtml" properties="rendition:layout-pre-paginated" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />         
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+        <itemref idref="t2" />
+    </spine>
+</package>
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-urls-2/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-css-urls-2/EPUB/lorem.xhtml
new file mode 100644
index 0000000..0045561
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-urls-2/EPUB/lorem.xhtml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+					<li><a href="lorem2.xhtml#ch3">Chapter 3</a></li>
+					<li><a href="lorem2.xhtml#ch4">Chapter 4</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+	</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-urls-2/EPUB/lorem2.xhtml b/src/test/resources/30/expanded/invalid/lorem-css-urls-2/EPUB/lorem2.xhtml
new file mode 100644
index 0000000..f99d21a
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-urls-2/EPUB/lorem2.xhtml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<section id="ch3">
+			<h2>Chapter 3</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+		</section>
+		<section id="ch4">
+			<h2>Chapter 4</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-urls-2/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-css-urls-2/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-urls-2/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-urls-2/mimetype b/src/test/resources/30/expanded/invalid/lorem-css-urls-2/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-urls-2/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-urls-3/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-css-urls-3/EPUB/lorem.css
new file mode 100644
index 0000000..08a6392
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-urls-3/EPUB/lorem.css
@@ -0,0 +1,12 @@
+ at charset 'utf-8';
+
+.trips_css_017_etc {
+ font-size: 20;
+ line-height: 3.5px;
+ position: absolute
+}
+
+.trips_ACC_015_etc {
+    font-size: 20;
+    line-height: 3.5;
+}
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-urls-3/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-css-urls-3/EPUB/lorem.opf
new file mode 100644
index 0000000..78730b6
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-urls-3/EPUB/lorem.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446667449999</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-10-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="t2" href="lorem2.xhtml" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />         
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+        <itemref idref="t2" />
+    </spine>
+</package>
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-urls-3/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-css-urls-3/EPUB/lorem.xhtml
new file mode 100644
index 0000000..0045561
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-urls-3/EPUB/lorem.xhtml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+					<li><a href="lorem2.xhtml#ch3">Chapter 3</a></li>
+					<li><a href="lorem2.xhtml#ch4">Chapter 4</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+	</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-urls-3/EPUB/lorem2.xhtml b/src/test/resources/30/expanded/invalid/lorem-css-urls-3/EPUB/lorem2.xhtml
new file mode 100644
index 0000000..f99d21a
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-urls-3/EPUB/lorem2.xhtml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<section id="ch3">
+			<h2>Chapter 3</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+		</section>
+		<section id="ch4">
+			<h2>Chapter 4</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-urls-3/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-css-urls-3/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-urls-3/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-urls-3/mimetype b/src/test/resources/30/expanded/invalid/lorem-css-urls-3/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-urls-3/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-wrongtype/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-css-wrongtype/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-wrongtype/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-wrongtype/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-css-wrongtype/EPUB/lorem.opf
new file mode 100644
index 0000000..e70ff4d
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-wrongtype/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="xhtml/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-wrongtype/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-css-wrongtype/EPUB/lorem.xhtml
new file mode 100644
index 0000000..ce440bb
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-wrongtype/EPUB/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-wrongtype/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-css-wrongtype/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-wrongtype/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-css-wrongtype/mimetype b/src/test/resources/30/expanded/invalid/lorem-css-wrongtype/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-css-wrongtype/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-encryption/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-encryption/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-encryption/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-encryption/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-encryption/EPUB/lorem.opf
new file mode 100644
index 0000000..3b65af2
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-encryption/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-encryption/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-encryption/EPUB/lorem.xhtml
new file mode 100644
index 0000000..ce440bb
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-encryption/EPUB/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-encryption/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-encryption/META-INF/container.xml
new file mode 100644
index 0000000..c5c1567
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-encryption/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
diff --git a/src/test/resources/30/expanded/invalid/lorem-encryption/META-INF/encryption.xml b/src/test/resources/30/expanded/invalid/lorem-encryption/META-INF/encryption.xml
new file mode 100644
index 0000000..c5c1567
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-encryption/META-INF/encryption.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
diff --git a/src/test/resources/30/expanded/invalid/lorem-encryption/dropped text.txt b/src/test/resources/30/expanded/invalid/lorem-encryption/dropped text.txt
new file mode 100644
index 0000000..effcdb6
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-encryption/dropped text.txt	
@@ -0,0 +1 @@
+lorem-css-urls-2 (copy)
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-encryption/mimetype b/src/test/resources/30/expanded/invalid/lorem-encryption/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-encryption/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-foreign/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-foreign/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-foreign/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-foreign/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-foreign/EPUB/lorem.opf
new file mode 100644
index 0000000..65bec10
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-foreign/EPUB/lorem.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+		<item id="video" href="http://test.com/lorem.ogg" media-type="video/ogg" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-foreign/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-foreign/EPUB/lorem.xhtml
new file mode 100644
index 0000000..377ae06
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-foreign/EPUB/lorem.xhtml
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		
+		<video src="http://test.com/lorem.ogg" width="640" height="360" controls="controls">
+			Your reader doesn't support video!
+		</video>
+		
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-foreign/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-foreign/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-foreign/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-foreign/mimetype b/src/test/resources/30/expanded/invalid/lorem-foreign/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-foreign/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-mathml-noalt/EPUB/wasteland-content.xhtml b/src/test/resources/30/expanded/invalid/lorem-mathml-noalt/EPUB/wasteland-content.xhtml
new file mode 100644
index 0000000..3f4b783
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-mathml-noalt/EPUB/wasteland-content.xhtml
@@ -0,0 +1,1082 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>The Waste Land</title>
+		<link type="text/css" rel="stylesheet" href="wasteland.css"/>
+	</head>
+	<body>
+		<section epub:type="frontmatter" id="frontmatter">
+			<section epub:type="titlepage" id="titlepage">
+				<h1>The Waste Land</h1>
+				<div class="aut">T.S. Eliot</div>
+				<div epub:type="epigraph">					
+					<p>
+						<span xml:lang="la">"Nam Sibyllam quidem Cumis ego ipse oculis
+							meis<br />vidi in ampulla pendere, et cum illi pueri dicerent</span>: <br />
+						<span xml:lang="grc"
+							>&#x03A3;&#x03AF;&#x03B2;&#x03C5;&#x03BB;&#x03BB;&#x03B1;
+							&#x03C4;&#x03AF;
+							&#x03F4;&#x03AD;&#x03BB;&#x03B5;&#x03B9;&#x03C2;<!--Sibylla ti theleis-->
+						</span>; <span xml:lang="la">respondebat illa</span>: <span xml:lang="grc"
+							>&#x03AC;&#x03C0;&#x03BF;&#x03F4;&#x03B1;&#x03B3;&#x03B5;&#x1FD6;&#x03B3;
+							&#x03F4;&#x03AD;&#x03BB;&#x03E3;<!--apothanein thelo-->
+						</span>."</p>
+				</div>
+				<p epub:type="dedication">For Ezra Pound: <span xml:lang="it">il miglior
+						fabbro</span></p>
+			</section>
+		</section>
+		<section epub:type="bodymatter" id="bodymatter">
+
+			<section id="ch1">
+				<h2>I. THE BURIAL OF THE DEAD</h2>
+   
+   	  <math xmlns="http://www.w3.org/1998/Math/MathML">
+         <mrow>
+            <mn>2</mn>
+            <mo> &#x2061;<!--INVISIBLE TIMES--></mo>
+            <mi>x</mi>
+         </mrow>
+         <mrow>
+            <mo>+</mo>
+            <mi>y</mi>
+            <mo>-</mo>
+            <mi>z</mi>
+         </mrow>
+      </math>
+				
+				<div class="linegroup">
+					<span class="ln">April is the cruellest month, breeding</span>
+					<span class="ln">Lilacs out of the dead land, mixing</span>
+					<span class="ln">Memory and desire, stirring</span>
+					<span class="ln">Dull roots with spring rain.</span>
+					<span class="ln">Winter kept us warm, covering</span>
+					<span class="ln">Earth in forgetful snow, feeding</span>
+					<span class="ln">A little life with dried tubers.</span>
+					<span class="ln">Summer surprised us, coming over the Starnbergersee</span>
+					<span class="ln">With a shower of rain; we stopped in the colonnade,</span>
+					<span class="ln">And went on in sunlight, into the Hofgarten,<span class="lnum"
+							>10</span>
+					</span>
+					<span class="ln">And drank coffee, and talked for an hour.</span>
+					<span class="ln" xml:lang="de">Bin gar keine Russin, stamm' aus Litauen, echt
+						deutsch.</span>
+					<span class="ln">And when we were children, staying at the archduke's,</span>
+					<span class="ln">My cousin's, he took me out on a sled,</span>
+					<span class="ln">And I was frightened. He said, Marie,</span>
+					<span class="ln">Marie, hold on tight. And down we went.</span>
+					<span class="ln">In the mountains, there you feel free.</span>
+					<span class="ln">I read, much of the night, and go south in the winter.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">What are the roots that clutch, what branches grow</span>
+					<span class="ln">Out of this stony rubbish? Son of man<a epub:type="noteref" class="noteref"
+							href="#note-1">*</a>,<span class="lnum">20</span>
+					</span>
+					<span class="ln">You cannot say, or guess, for you know only</span>
+					<span class="ln">A heap of broken images, where the sun beats,</span>
+					<span class="ln">And the dead tree gives no shelter, the cricket no relief<a
+							epub:type="noteref" class="noteref" href="#note-2">*</a>,</span>
+					<span class="ln">And the dry stone no sound of water. Only</span>
+					<span class="ln">There is shadow under this red rock,</span>
+					<span class="ln">(Come in under the shadow of this red rock),</span>
+					<span class="ln">And I will show you something different from either</span>
+					<span class="ln">Your shadow at morning striding behind you</span>
+					<span class="ln">Or your shadow at evening rising to meet you;</span>
+					<span class="ln">I will show you fear in a handful of dust.<span class="lnum"
+							>30</span>
+					</span>
+					<blockquote xml:lang="de">
+						<div>
+							<span class="ln">Frisch weht der Wind<a epub:type="noteref" class="noteref"
+									href="#note-3">*</a>
+							</span>
+							<span class="ln">Der Heimat zu</span>
+							<span class="ln">Mein Irisch Kind,</span>
+							<span class="ln">Wo weilest du?</span>
+						</div>
+					</blockquote>
+					<span class="ln">"You gave me hyacinths first a year ago;</span>
+					<span class="ln">"They called me the hyacinth girl."</span>
+					<span class="ln">&#x2015;Yet when we came back, late, from the Hyacinth
+						garden,</span>
+					<span class="ln">Your arms full, and your hair wet, I could not</span>
+					<span class="ln">Speak, and my eyes failed, I was neither</span>
+					<span class="ln">Living nor dead, and I knew nothing,<span class="lnum"
+							>40</span>
+					</span>
+					<span class="ln">Looking into the heart of light, the silence.</span>
+					<span class="ln" xml:lang="de">
+						<em>Od' und leer das Meer</em>.<a epub:type="noteref" class="noteref" href="#note-4">*</a>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Madame Sosostris, famous clairvoyante,</span>
+					<span class="ln">Had a bad cold, nevertheless</span>
+					<span class="ln">Is known to be the wisest woman in Europe,</span>
+					<span class="ln">With a wicked pack of cards. Here, said she<a
+							epub:type="noteref" class="noteref" href="#note-5">*</a>,</span>
+					<span class="ln">Is your card, the drowned Phoenician Sailor,</span>
+					<span class="ln">(Those are pearls that were his eyes. Look!)</span>
+					<span class="ln">Here is Belladonna, the Lady of the Rocks,</span>
+					<span class="ln">The lady of situations.<span class="lnum">50</span>
+					</span>
+					<span class="ln">Here is the man with three staves, and here the Wheel,</span>
+					<span class="ln">And here is the one-eyed merchant, and this card,</span>
+					<span class="ln">Which is blank, is something he carries on his back,</span>
+					<span class="ln">Which I am forbidden to see. I do not find</span>
+					<span class="ln">The Hanged Man. Fear death by water.</span>
+					<span class="ln">I see crowds of people, walking round in a ring.</span>
+					<span class="ln">Thank you. If you see dear Mrs. Equitone,</span>
+					<span class="ln">Tell her I bring the horoscope myself:</span>
+					<span class="ln">One must be so careful these days.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Unreal City<a epub:type="noteref" class="noteref" href="#note-6">*</a>,<span
+							class="lnum">60</span>
+					</span>
+					<span class="ln">Under the brown fog of a winter dawn,</span>
+					<span class="ln">A crowd flowed over London Bridge, so many,</span>
+					<span class="ln">I had not thought death had undone so many.<a
+							epub:type="noteref" class="noteref" href="#note-7">*</a>
+					</span>
+					<span class="ln">Sighs, short and infrequent, were exhaled<a epub:type="noteref" class="noteref"
+							href="#note-8">*</a>,</span>
+					<span class="ln">And each man fixed his eyes before his feet.</span>
+					<span class="ln">Flowed up the hill and down King William Street,</span>
+					<span class="ln">To where Saint Mary Woolnoth kept the hours</span>
+					<span class="ln">With a dead sound on the final stroke of nine.<a
+							epub:type="noteref" class="noteref" href="#note-9">*</a>
+					</span>
+					<span class="ln">There I saw one I knew, and stopped him, crying
+						"Stetson!</span>
+					<span class="ln">"You who were with me in the ships at Mylae!<span class="lnum"
+							>70</span>
+					</span>
+					<span class="ln">"That corpse you planted last year in your garden,</span>
+					<span class="ln">"Has it begun to sprout? Will it bloom this year?</span>
+					<span class="ln">"Or has the sudden frost disturbed its bed?</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"Oh keep the Dog far hence, that's friend to men,<a
+							epub:type="noteref" class="noteref" href="#note-10">*</a>
+					</span>
+					<span class="ln">"Or with his nails he'll dig it up again!</span>
+					<span class="ln">"You! <span xml:lang="fr">hypocrite lecteur! - mon semblable, -
+							mon frere</span> !"<a epub:type="noteref" class="noteref" href="#note-11">*</a>
+					</span>
+				</div>
+			</section>
+			<section id="ch2">
+				<h2>II. A GAME OF CHESS</h2>
+				<div class="linegroup">
+					<span class="ln">The Chair she sat in, like a burnished throne<a
+							epub:type="noteref" class="noteref" href="#note-12">*</a>,</span>
+					<span class="ln">Glowed on the marble, where the glass</span>
+					<span class="ln">Held up by standards wrought with fruited vines</span>
+					<span class="ln">From which a golden Cupidon peeped out<span class="lnum"
+							>80</span>
+					</span>
+					<span class="ln">(Another hid his eyes behind his wing)</span>
+					<span class="ln">Doubled the flames of sevenbranched candelabra</span>
+					<span class="ln">Reflecting light upon the table as</span>
+					<span class="ln">The glitter of her jewels rose to meet it,</span>
+					<span class="ln">From satin cases poured in rich profusion;</span>
+					<span class="ln">In vials of ivory and coloured glass</span>
+					<span class="ln">Unstoppered, lurked her strange synthetic perfumes,</span>
+					<span class="ln">Unguent, powdered, or liquid - troubled, confused</span>
+					<span class="ln">And drowned the sense in odours; stirred by the air</span>
+					<span class="ln">That freshened from the window, these ascended<span
+							class="lnum">90</span>
+					</span>
+					<span class="ln">In fattening the prolonged candle-flames,</span>
+					<span class="ln">Flung their smoke into the laquearia<a epub:type="noteref" class="noteref"
+							href="#note-13">*</a>,</span>
+					<span class="ln">Stirring the pattern on the coffered ceiling.</span>
+					<span class="ln">Huge sea-wood fed with copper</span>
+					<span class="ln">Burned green and orange, framed by the coloured stone,</span>
+					<span class="ln">In which sad light a carved dolphin swam.</span>
+					<span class="ln">Above the antique mantel was displayed</span>
+					<span class="ln">As though a window gave upon the sylvan scene<a
+							epub:type="noteref" class="noteref" href="#note-14">*</a>
+					</span>
+					<span class="ln">The change of Philomel, by the barbarous king<a
+							epub:type="noteref" class="noteref" href="#note-15">*</a>
+					</span>
+					<span class="ln">So rudely forced; yet there the nightingale<a
+							epub:type="noteref" class="noteref" href="#note-16">*</a>
+						<span class="lnum">100</span>
+					</span>
+					<span class="ln">Filled all the desert with inviolable voice</span>
+					<span class="ln">And still she cried, and still the world pursues,</span>
+					<span class="ln">"Jug Jug" to dirty ears.</span>
+					<span class="ln">And other withered stumps of time</span>
+					<span class="ln">Were told upon the walls; staring forms</span>
+					<span class="ln">Leaned out, leaning, hushing the room enclosed.</span>
+					<span class="ln">Footsteps shuffled on the stair.</span>
+					<span class="ln">Under the firelight, under the brush, her hair</span>
+					<span class="ln">Spread out in fiery points</span>
+					<span class="ln">Glowed into words, then would be savagely still.<span
+							class="lnum">110</span>
+					</span>
+				</div>
+				<div class="linegroup">
+					<div class="linegroup">
+						<span class="ln">"My nerves are bad to-night. Yes, bad. Stay with me.</span>
+						<span class="ln">"Speak to me. Why do you never speak. Speak.</span>
+						<span class="ln">"What are you thinking of? What thinking? What?</span>
+						<span class="ln">"I never know what you are thinking. Think."</span>
+					</div>
+					<div class="linegroup">
+						<span class="ln">I think we are in rats' alley<a epub:type="noteref" class="noteref"
+								href="#note-17">*</a>
+						</span>
+						<span class="ln">Where the dead men lost their bones.</span>
+					</div>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"What is that noise?"</span>
+					<span class="ln">The wind under the door.<a epub:type="noteref" class="noteref" href="#note-18"
+							>*</a>
+					</span>
+					<span class="ln">"What is that noise now? What is the wind doing?"</span>
+					<span class="ln">Nothing again nothing.<span class="lnum">120</span>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"Do</span>
+					<span class="ln">"You know nothing? Do you see nothing? Do you remember</span>
+					<span class="ln">"Nothing?"</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">I remember</span>
+					<span class="ln">Those are pearls that were his eyes.</span>
+					<span class="ln">"Are you alive, or not? Is there nothing in your head?"<a
+							epub:type="noteref" class="noteref" href="#note-19">*</a>
+					</span>
+					<span class="ln">But</span>
+					<span class="ln">O O O O that Shakespeherian Rag&#x2015;</span>
+					<span class="ln">It's so elegant</span>
+					<span class="ln">So intelligent<span class="lnum">130</span>
+					</span>
+					<span class="ln">"What shall I do now? What shall I do?"</span>
+					<span class="ln">I shall rush out as I am, and walk the street</span>
+					<span class="ln">"With my hair down, so. What shall we do to-morrow?</span>
+					<span class="ln">"What shall we ever do?"</span>
+					<span class="ln">The hot water at ten.</span>
+					<span class="ln">And if it rains, a closed car at four.</span>
+					<span class="ln">And we shall play a game of chess,</span>
+					<span class="ln">Pressing lidless eyes and waiting for a knock upon the door.<a
+							epub:type="noteref" class="noteref" href="#note-20">*</a>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">When Lil's husband got demobbed, I said -</span>
+					<span class="ln">I didn't mince my words, I said to her myself,<span
+							class="lnum">140</span>
+					</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">Now Albert's coming back, make yourself a bit smart.</span>
+					<span class="ln">He'll want to know what you done with that money he gave
+						you</span>
+					<span class="ln">To get yourself some teeth. He did, I was there.</span>
+					<span class="ln">You have them all out, Lil, and get a nice set,</span>
+					<span class="ln">He said, I swear, I can't bear to look at you.</span>
+					<span class="ln">And no more can't I, I said, and think of poor Albert,</span>
+					<span class="ln">He's been in the army four years, he wants a good time,</span>
+					<span class="ln">And if you don't give it him, there's others will, I
+						said.</span>
+					<span class="ln">Oh is there, she said. Something o' that, I said.<span
+							class="lnum">150</span>
+					</span>
+					<span class="ln">Then I'll know who to thank, she said, and give me a straight
+						look.</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">If you don't like it you can get on with it, I said.</span>
+					<span class="ln">Others can pick and choose if you can't.</span>
+					<span class="ln">But if Albert makes off, it won't be for lack of
+						telling.</span>
+					<span class="ln">You ought to be ashamed, I said, to look so antique.</span>
+					<span class="ln">(And her only thirty-one.)</span>
+					<span class="ln">I can't help it, she said, pulling a long face,</span>
+					<span class="ln">It's them pills I took, to bring it off, she said.</span>
+					<span class="ln">(She's had five already, and nearly died of young George.)<span
+							class="lnum">160</span>
+					</span>
+					<span class="ln">The chemist said it would be all right, but I've never been the
+						same.</span>
+					<span class="ln">You <em>are</em> a proper fool, I said.</span>
+					<span class="ln">Well, if Albert won't leave you alone, there it is, I
+						said,</span>
+					<span class="ln">What you get married for if you don't want children?</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">Well, that Sunday Albert was home, they had a hot
+						gammon,</span>
+					<span class="ln">And they asked me in to dinner, to get the beauty of it
+						hot&#x2015;</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">Goonight Bill. Goonight Lou. Goonight May. Goonight.<span
+							class="lnum">170</span>
+					</span>
+					<span class="ln">Ta ta. Goonight. Goonight.</span>
+					<span class="ln">Good night, ladies, good night, sweet ladies, good night, good
+						night.</span>
+				</div>
+			</section>
+			<section id="ch3">
+				<h2>III. THE FIRE SERMON</h2>
+				<div class="linegroup">
+					<span class="ln">The river's tent is broken: the last fingers of leaf</span>
+					<span class="ln">Clutch and sink into the wet bank. The wind</span>
+					<span class="ln">Crosses the brown land, unheard. The nymphs are
+						departed.</span>
+					<span class="ln">Sweet Thames, run softly, till I end my song.<a
+							epub:type="noteref" class="noteref" href="#note-21">*</a>
+					</span>
+					<span class="ln">The river bears no empty bottles, sandwich papers,</span>
+					<span class="ln">Silk handkerchiefs, cardboard boxes, cigarette ends</span>
+					<span class="ln">Or other testimony of summer nights. The nymphs are
+						departed.</span>
+					<span class="ln">And their friends, the loitering heirs of city directors;<span
+							class="lnum">180</span>
+					</span>
+					<span class="ln">Departed, have left no addresses.</span>
+					<span class="ln">By the waters of Leman I sat down and wept . . .</span>
+					<span class="ln">Sweet Thames, run softly till I end my song,</span>
+					<span class="ln">Sweet Thames, run softly, for I speak not loud or long.</span>
+					<span class="ln">But at my back in a cold blast I hear</span>
+					<span class="ln">The rattle of the bones, and chuckle spread from ear to
+						ear.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">A rat crept softly through the vegetation</span>
+					<span class="ln">Dragging its slimy belly on the bank</span>
+					<span class="ln">While I was fishing in the dull canal</span>
+					<span class="ln">On a winter evening round behind the gashouse<span class="lnum"
+							>190</span>
+					</span>
+					<span class="ln">Musing upon the king my brother's wreck</span>
+					<span class="ln">And on the king my father's death before him.<a
+							epub:type="noteref" class="noteref" href="#note-22">*</a>
+					</span>
+					<span class="ln">White bodies naked on the low damp ground</span>
+					<span class="ln">And bones cast in a little low dry garret,</span>
+					<span class="ln">Rattled by the rat's foot only, year to year.</span>
+					<span class="ln">But at my back from time to time I hear<a epub:type="noteref" class="noteref"
+							href="#note-23">*</a>
+					</span>
+					<span class="ln">The sound of horns and motors, which shall bring<a
+							epub:type="noteref" class="noteref" href="#note-24">*</a>
+					</span>
+					<span class="ln">Sweeney to Mrs. Porter in the spring.</span>
+					<span class="ln">O the moon shone bright on Mrs. Porter<a epub:type="noteref" class="noteref"
+							href="#note-25">*</a>
+					</span>
+					<span class="ln">And on her daughter<span class="lnum">200</span>
+					</span>
+					<span class="ln">They wash their feet in soda water</span>
+					<span class="ln" xml:lang="fr">
+						<em>Et O ces voix d'enfants, chantant dans la coupole<a epub:type="noteref" class="noteref"
+								href="#note-26">*</a>
+						</em>!</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Twit twit twit</span>
+					<span class="ln">Jug jug jug jug jug jug</span>
+					<span class="ln">So rudely forc'd.</span>
+					<span class="ln">Tereu</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Unreal City</span>
+					<span class="ln">Under the brown fog of a winter noon</span>
+					<span class="ln">Mr. Eugenides, the Smyrna merchant</span>
+					<span class="ln">Unshaven, with a pocket full of currants<a epub:type="noteref" class="noteref"
+							href="#note-27">*</a>
+						<span class="lnum">210</span>
+					</span>
+					<span class="ln">C.i.f. London: documents at sight,</span>
+					<span class="ln">Asked me in demotic French</span>
+					<span class="ln">To luncheon at the Cannon Street Hotel</span>
+					<span class="ln">Followed by a weekend at the Metropole.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">At the violet hour, when the eyes and back</span>
+					<span class="ln">Turn upward from the desk, when the human engine waits</span>
+					<span class="ln">Like a taxi throbbing waiting,</span>
+					<span class="ln">I Tiresias, though blind, throbbing between two lives<a
+							epub:type="noteref" class="noteref" href="#note-28">*</a>,</span>
+					<span class="ln">Old man with wrinkled female breasts, can see</span>
+					<span class="ln">At the violet hour, the evening hour that strives<span
+							class="lnum">220</span>
+					</span>
+					<span class="ln">Homeward, and brings the sailor home from sea<a
+							epub:type="noteref" class="noteref" href="#note-29">*</a>,</span>
+					<span class="ln">The typist home at teatime, clears her breakfast, lights</span>
+					<span class="ln">Her stove, and lays out food in tins.</span>
+					<span class="ln">Out of the window perilously spread</span>
+					<span class="ln">Her drying combinations touched by the sun's last rays,</span>
+					<span class="ln">On the divan are piled (at night her bed)</span>
+					<span class="ln">Stockings, slippers, camisoles, and stays.</span>
+					<span class="ln">I Tiresias, old man with wrinkled dugs</span>
+					<span class="ln">Perceived the scene, and foretold the rest -</span>
+					<span class="ln">I too awaited the expected guest.<span class="lnum">230</span>
+					</span>
+					<span class="ln">He, the young man carbuncular, arrives,</span>
+					<span class="ln">A small house agent's clerk, with one bold stare,</span>
+					<span class="ln">One of the low on whom assurance sits</span>
+					<span class="ln">As a silk hat on a Bradford millionaire.</span>
+					<span class="ln">The time is now propitious, as he guesses,</span>
+					<span class="ln">The meal is ended, she is bored and tired,</span>
+					<span class="ln">Endeavours to engage her in caresses</span>
+					<span class="ln">Which still are unreproved, if undesired.</span>
+					<span class="ln">Flushed and decided, he assaults at once;</span>
+					<span class="ln">Exploring hands encounter no defence;<span class="lnum"
+							>240</span>
+					</span>
+					<span class="ln">His vanity requires no response,</span>
+					<span class="ln">And makes a welcome of indifference.</span>
+					<span class="ln">(And I Tiresias have foresuffered all</span>
+					<span class="ln">Enacted on this same divan or bed;</span>
+					<span class="ln">I who have sat by Thebes below the wall</span>
+					<span class="ln">And walked among the lowest of the dead.)</span>
+					<span class="ln">Bestows one final patronising kiss,</span>
+					<span class="ln">And gropes his way, finding the stairs unlit . . .</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">She turns and looks a moment in the glass,</span>
+					<span class="ln">Hardly aware of her departed lover;<span class="lnum"
+							>250</span>
+					</span>
+					<span class="ln">Her brain allows one half-formed thought to pass:</span>
+					<span class="ln">"Well now that's done: and I'm glad it's over."</span>
+					<span class="ln">When lovely woman stoops to folly and<a epub:type="noteref" class="noteref"
+							href="#note-30">*</a>
+					</span>
+					<span class="ln">Paces about her room again, alone,</span>
+					<span class="ln">She smoothes her hair with automatic hand,</span>
+					<span class="ln">And puts a record on the gramophone.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"This music crept by me upon the waters"<a epub:type="noteref" class="noteref"
+							href="#note-31">*</a>
+					</span>
+					<span class="ln">And along the Strand, up Queen Victoria Street.</span>
+					<span class="ln">O City city, I can sometimes hear</span>
+					<span class="ln">Beside a public bar in Lower Thames Street,<span class="lnum"
+							>260</span>
+					</span>
+					<span class="ln">The pleasant whining of a mandoline</span>
+					<span class="ln">And a clatter and a chatter from within</span>
+					<span class="ln">Where fishmen lounge at noon: where the walls</span>
+					<span class="ln">Of Magnus Martyr hold<a epub:type="noteref" class="noteref" href="#note-32"
+							>*</a>
+					</span>
+					<span class="ln">Inexplicable splendour of Ionian white and gold.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">The river sweats<a epub:type="noteref" class="noteref" href="#note-33">*</a>
+					</span>
+					<span class="ln">Oil and tar</span>
+					<span class="ln">The barges drift</span>
+					<span class="ln">With the turning tide</span>
+					<span class="ln">Red sails<span class="lnum">270</span>
+					</span>
+					<span class="ln">Wide</span>
+					<span class="ln">To leeward, swing on the heavy spar.</span>
+					<span class="ln">The barges wash</span>
+					<span class="ln">Drifting logs</span>
+					<span class="ln">Down Greenwich reach</span>
+					<span class="ln">Past the Isle of Dogs.</span>
+					<span class="ln">Weialala leia</span>
+					<span class="ln">Wallala leialala</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Elizabeth and Leicester<a epub:type="noteref" class="noteref" href="#note-34"
+							>*</a>
+					</span>
+					<span class="ln">Beating oars<span class="lnum">280</span>
+					</span>
+					<span class="ln">The stern was formed</span>
+					<span class="ln">A gilded shell</span>
+					<span class="ln">Red and gold</span>
+					<span class="ln">The brisk swell</span>
+					<span class="ln">Rippled both shores</span>
+					<span class="ln">Southwest wind</span>
+					<span class="ln">Carried down stream</span>
+					<span class="ln">The peal of bells</span>
+					<span class="ln">White towers</span>
+					<span class="ln">Weialala leia<span class="lnum">290</span>
+					</span>
+					<span class="ln">Wallala leialala</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"Trams and dusty trees.</span>
+					<span class="ln">Highbury bore me. Richmond and Kew<a epub:type="noteref" class="noteref"
+							href="#note-35">*</a>
+					</span>
+					<span class="ln">Undid me. By Richmond I raised my knees</span>
+					<span class="ln">Supine on the floor of a narrow canoe."</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"My feet are at Moorgate, and my heart</span>
+					<span class="ln">Under my feet. After the event</span>
+					<span class="ln">He wept. He promised 'a new start'.</span>
+					<span class="ln">I made no comment. What should I resent?"</span>
+					<span class="ln">"On Margate Sands.<span class="lnum">300</span>
+					</span>
+					<span class="ln">I can connect</span>
+					<span class="ln">Nothing with nothing.</span>
+					<span class="ln">The broken fingernails of dirty hands.</span>
+					<span class="ln">My people humble people who expect</span>
+					<span class="ln">Nothing."</span>
+					<span class="ln">la la</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">To Carthage then I came<a epub:type="noteref" class="noteref" href="#note-36"
+							>*</a>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Burning burning burning burning<a epub:type="noteref" class="noteref"
+							href="#note-37">*</a>
+					</span>
+					<span class="ln">O Lord Thou pluckest me out<a epub:type="noteref" class="noteref"
+							href="#note-38">*</a>
+					</span>
+					<span class="ln">O Lord Thou pluckest<span class="lnum">310</span>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">burning</span>
+				</div>
+			</section>
+			<section id="ch4">
+				<h2>IV. DEATH BY WATER</h2>
+				<div class="linegroup">
+					<span class="ln">Phlebas the Phoenician, a fortnight dead,</span>
+					<span class="ln">Forgot the cry of gulls, and the deep sea swell</span>
+					<span class="ln">And the profit and loss.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">A current under sea</span>
+					<span class="ln">Picked his bones in whispers. As he rose and fell</span>
+					<span class="ln">He passed the stages of his age and youth</span>
+					<span class="ln">Entering the whirlpool.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Gentile or Jew</span>
+					<span class="ln">O you who turn the wheel and look to windward,<span
+							class="lnum">320</span>
+					</span>
+					<span class="ln">Consider Phlebas, who was once handsome and tall as you.</span>
+				</div>
+			</section>
+			<section id="ch5">
+				<h2>V. WHAT THE THUNDER SAID</h2>
+				<div class="linegroup">
+					<span class="ln">After the torchlight red on sweaty faces</span>
+					<span class="ln">After the frosty silence in the gardens</span>
+					<span class="ln">After the agony in stony places</span>
+					<span class="ln">The shouting and the crying</span>
+					<span class="ln">Prison and palace and reverberation</span>
+					<span class="ln">Of thunder of spring over distant mountains</span>
+					<span class="ln">He who was living is now dead</span>
+					<span class="ln">We who were living are now dying</span>
+					<span class="ln">With a little patience<span class="lnum">330</span>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Here is no water but only rock</span>
+					<span class="ln">Rock and no water and the sandy road</span>
+					<span class="ln">The road winding above among the mountains</span>
+					<span class="ln">Which are mountains of rock without water</span>
+					<span class="ln">If there were water we should stop and drink</span>
+					<span class="ln">Amongst the rock one cannot stop or think</span>
+					<span class="ln">Sweat is dry and feet are in the sand</span>
+					<span class="ln">If there were only water amongst the rock</span>
+					<span class="ln">Dead mountain mouth of carious teeth that cannot spit</span>
+					<span class="ln">Here one can neither stand nor lie nor sit<span class="lnum"
+							>340</span>
+					</span>
+					<span class="ln">There is not even silence in the mountains</span>
+					<span class="ln">But dry sterile thunder without rain</span>
+					<span class="ln">There is not even solitude in the mountains</span>
+					<span class="ln">But red sullen faces sneer and snarl</span>
+					<span class="ln">From doors of mudcracked houses</span>
+					<div class="linegroup">
+						<span class="ln">If there were water</span>
+						<span class="ln">And no rock</span>
+						<span class="ln">If there were rock</span>
+						<span class="ln">And also water</span>
+						<span class="ln">And water<span class="lnum">350</span>
+						</span>
+						<span class="ln">A spring</span>
+						<span class="ln">A pool among the rock</span>
+						<span class="ln">If there were the sound of water only</span>
+						<span class="ln">Not the cicada</span>
+						<span class="ln">And dry grass singing</span>
+						<span class="ln">But sound of water over a rock</span>
+						<span class="ln">Where the hermit-thrush sings in the pine trees<a
+								epub:type="noteref" class="noteref" href="#note-39">*</a>
+						</span>
+						<span class="ln">Drip drop drip drop drop drop drop</span>
+						<span class="ln">But there is no water</span>
+					</div>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Who is the third who walks always beside you?<a
+							epub:type="noteref" class="noteref" href="#note-40">*</a>
+						<span class="lnum">360</span>
+					</span>
+					<span class="ln">When I count, there are only you and I together</span>
+					<span class="ln">But when I look ahead up the white road</span>
+					<span class="ln">There is always another one walking beside you</span>
+					<span class="ln">Gliding wrapt in a brown mantle, hooded</span>
+					<span class="ln">I do not know whether a man or a woman</span>
+					<span class="ln">&#x2015;But who is that on the other side of you?<a
+							epub:type="noteref" class="noteref" href="#note-41">*</a>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">What is that sound high in the air</span>
+					<span class="ln">Murmur of maternal lamentation</span>
+					<span class="ln">Who are those hooded hordes swarming</span>
+					<span class="ln">Over endless plains, stumbling in cracked earth<span
+							class="lnum">370</span>
+					</span>
+					<span class="ln">Ringed by the flat horizon only</span>
+					<span class="ln">What is the city over the mountains</span>
+					<span class="ln">Cracks and reforms and bursts in the violet air</span>
+					<span class="ln">Falling towers</span>
+					<span class="ln">Jerusalem Athens Alexandria</span>
+					<span class="ln">Vienna London</span>
+					<span class="ln">Unreal</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">A woman drew her long black hair out tight</span>
+					<span class="ln">And fiddled whisper music on those strings</span>
+					<span class="ln">And bats with baby faces in the violet light<span class="lnum"
+							>380</span>
+					</span>
+					<span class="ln">Whistled, and beat their wings</span>
+					<span class="ln">And crawled head downward down a blackened wall</span>
+					<span class="ln">And upside down in air were towers</span>
+					<span class="ln">Tolling reminiscent bells, that kept the hours</span>
+					<span class="ln">And voices singing out of empty cisterns and exhausted
+						wells.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">In this decayed hole among the mountains</span>
+					<span class="ln">In the faint moonlight, the grass is singing</span>
+					<span class="ln">Over the tumbled graves, about the chapel</span>
+					<span class="ln">There is the empty chapel, only the wind's home.</span>
+					<span class="ln">It has no windows, and the door swings,<span class="lnum"
+							>390</span>
+					</span>
+					<span class="ln">Dry bones can harm no one.</span>
+					<span class="ln">Only a cock stood on the rooftree</span>
+					<span class="ln">Co co rico co co rico</span>
+					<span class="ln">In a flash of lightning. Then a damp gust</span>
+					<span class="ln">Bringing rain</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Ganga was sunken, and the limp leaves</span>
+					<span class="ln">Waited for rain, while the black clouds</span>
+					<span class="ln">Gathered far distant, over Himavant.</span>
+					<span class="ln">The jungle crouched, humped in silence.</span>
+					<span class="ln">Then spoke the thunder<span class="lnum">400</span>
+					</span>
+					<span class="ln">DA</span>
+					<span class="ln">
+						<span xml:lang="sa">Datta</span>: what have we given?<a epub:type="noteref" class="noteref"
+							href="#note-42">*</a>
+					</span>
+					<span class="ln">My friend, blood shaking my heart</span>
+					<span class="ln">The awful daring of a moment's surrender</span>
+					<span class="ln">Which an age of prudence can never retract</span>
+					<span class="ln">By this, and this only, we have existed</span>
+					<span class="ln">Which is not to be found in our obituaries </span>
+					<span class="ln">Or in memories draped by the beneficent spider<a
+							epub:type="noteref" class="noteref" href="#note-43">*</a>
+					</span>
+					<span class="ln">Or under seals broken by the lean solicitor</span>
+					<span class="ln">In our empty rooms<span class="lnum">410</span>
+					</span>
+					<span class="ln">DA</span>
+					<span class="ln">
+						<span xml:lang="sa">Dayadhvam</span>: I have heard the key<a
+							epub:type="noteref" class="noteref" href="#note-44">*</a>
+					</span>
+					<span class="ln">Turn in the door once and turn once only</span>
+					<span class="ln">We think of the key, each in his prison</span>
+					<span class="ln">Thinking of the key, each confirms a prison</span>
+					<span class="ln">Only at nightfall, aetherial rumours</span>
+					<span class="ln">Revive for a moment a broken Coriolanus</span>
+					<span class="ln">DA</span>
+					<span class="ln">
+						<span xml:lang="sa">Damyata</span>: The boat responded</span>
+					<span class="ln">Gaily, to the hand expert with sail and oar<span class="lnum"
+							>420</span>
+					</span>
+					<span class="ln">The sea was calm, your heart would have responded</span>
+					<span class="ln">Gaily, when invited, beating obedient</span>
+					<span class="ln">To controlling hands</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">I sat upon the shore</span>
+					<span class="ln">Fishing, with the arid plain behind me<a epub:type="noteref" class="noteref"
+							href="#note-45">*</a>
+					</span>
+					<span class="ln">Shall I at least set my lands in order?</span>
+					<span class="ln">London Bridge is falling down falling down falling down</span>
+					<span class="ln" xml:lang="it">
+						<em>Poi s'ascose nel foco che gli affina</em>
+						<a epub:type="noteref" class="noteref" href="#note-46">*</a>
+					</span>
+					<span class="ln">
+						<span xml:lang="it">
+							<em>Quando fiam ceu chelidon</em>
+						</span> - O swallow swallow<a epub:type="noteref" class="noteref" href="#note-47">*</a>
+					</span>
+					<span class="ln" xml:lang="fr">
+						<em>Le Prince d'Aquitaine a la tour abolie</em>
+						<a epub:type="noteref" class="noteref" href="#note-48">*</a>
+						<span class="lnum">430</span>
+					</span>
+					<span class="ln">These fragments I have shored against my ruins</span>
+					<span class="ln">Why then Ile fit you. Hieronymo's mad againe.<a
+							epub:type="noteref" class="noteref" href="#note-49">*</a>
+					</span>
+					<span class="ln" xml:lang="sa">Datta. Dayadhvam. Damyata.</span>
+					<div class="linegroup">
+						<span class="ln" xml:lang="sa">Shantih shantih shantih<a epub:type="noteref" class="noteref"
+								href="#note-50">*</a>
+						</span>
+					</div>
+				</div>
+			</section>
+		</section>
+		<section epub:type="backmatter" id="backmatter">
+			<section epub:type="rearnotes">
+				<h2>NOTES ON "THE WASTE LAND"</h2>
+				<p>Not only the title, but the plan and a good deal of the incidental symbolism of
+					the poem were suggested by Miss Jessie L. Weston's book on the Grail legend:
+					From Ritual to Romance</p>
+				<p>Indeed, so deeply am I indebted, Miss Weston's book will elucidate the
+					difficulties of the poem much better than my notes can do; and I recommend it
+					(apart from the great interest of the book itself) to any who think such
+					elucidation of the poem worth the trouble. To another work of anthropology I am
+					indebted in general, one which has influenced our generation profoundly; I mean
+					The Golden Bough; I have used especially the two volumes Adonis, Attis, Osiris.
+					Anyone who is acquainted with these works will immediately recognise in the poem
+					certain references to vegetation ceremonies.</p>
+				<section>
+					<h3>I. THE BURIAL OF THE DEAD</h3>
+					<div epub:type="rearnote" id="note-1">
+						<p>Line 20. Cf. Ezekiel 2:1.</p>
+					</div>
+					<div epub:type="rearnote" id="note-2">
+						<p>23. Cf. Ecclesiastes 12:5.</p>
+					</div>
+					<div epub:type="rearnote" id="note-3">
+						<p>31. V. Tristan und Isolde, i, verses 5-8.</p>
+					</div>
+					<div epub:type="rearnote" id="note-4">
+						<p>42. Id. iii, verse 24.</p>
+					</div>
+					<div epub:type="rearnote" id="note-5">
+						<p>46. I am not familiar with the exact constitution of the Tarot pack of
+							cards, from which I have obviously departed to suit my own convenience.
+							The Hanged Man, a member of the traditional pack, fits my purpose in two
+							ways: because he is associated in my mind with the Hanged God of Frazer,
+							and because I associate him with the hooded figure in the passage of the
+							disciples to Emmaus in Part V. The Phoenician Sailor and the Merchant
+							appear later; also the "crowds of people," and Death by Water is
+							executed in Part IV. The Man with Three Staves (an authentic member of
+							the Tarot pack) I associate, quite arbitrarily, with the Fisher King
+							himself.</p>
+					</div>
+					<div epub:type="rearnote" id="note-6">
+						<p>60. Cf. Baudelaire:</p>
+						<blockquote xml:lang="fr">
+							<p>"Fourmillante cite;, cite; pleine de reves,<br />Ou le spectre en
+								plein jour raccroche le passant."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-7">
+						<p>63. Cf. Inferno, iii. 55-7.</p>
+						<blockquote xml:lang="it">
+							<p>"si lunga tratta<br />di gente, ch'io non avrei mai creduto<br />che
+								morte tanta n'avesse disfatta."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-8">
+						<p>64. Cf. Inferno, iv. 25-7:</p>
+						<blockquote xml:lang="it">
+							<p>"Quivi, secondo che per ascoltahre,<br />"non avea pianto, ma' che di
+								sospiri,<br />"che l'aura eterna facevan tremare."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-9">
+						<p>68. A phenomenon which I have often noticed.</p>
+					</div>
+					<div epub:type="rearnote" id="note-10">
+						<p>74. Cf. the Dirge in Webster's White Devil .</p>
+					</div>
+					<div epub:type="rearnote" id="note-11">
+						<p>76. V. Baudelaire, Preface to Fleurs du Mal.</p>
+					</div>
+				</section>
+				<section>
+					<h3>II. A GAME OF CHESS</h3>
+					<div epub:type="rearnote" id="note-12">
+						<p>77. Cf. Antony and Cleopatra, II. ii., l. 190.</p>
+					</div>
+					<div epub:type="rearnote" id="note-13">
+						<p>92. Laquearia. V. Aeneid, I. 726:</p>
+						<blockquote xml:lang="la">
+							<p>dependent lychni laquearibus aureis incensi, et noctem
+								flammis<br />funalia vincunt.</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-14">
+						<p>98. Sylvan scene. V. Milton, Paradise Lost, iv. 140.</p>
+					</div>
+					<div epub:type="rearnote" id="note-15">
+						<p>99. V. Ovid, Metamorphoses, vi, Philomela.</p>
+					</div>
+					<div epub:type="rearnote" id="note-16">
+						<p>100. Cf. Part III, l. 204.</p>
+					</div>
+					<div epub:type="rearnote" id="note-17">
+						<p>115. Cf. Part III, l. 195.</p>
+					</div>
+					<div epub:type="rearnote" id="note-18">
+						<p>118. Cf. Webster:</p>
+						<blockquote>
+							<p>"Is the wind in that door still?"</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-19">
+						<p>126. Cf. Part I, l. 37, 48.</p>
+					</div>
+					<div epub:type="rearnote" id="note-20">
+						<p>138. Cf. the game of chess in Middleton's Women beware Women.</p>
+					</div>
+				</section>
+				<section>
+					<h3>III. THE FIRE SERMON</h3>
+					<div epub:type="rearnote" id="note-21">
+						<p>176. V. Spenser, Prothalamion.</p>
+					</div>
+					<div epub:type="rearnote" id="note-22">
+						<p>192. Cf. The Tempest, I. ii.</p>
+					</div>
+					<div epub:type="rearnote" id="note-23">
+						<p>196. Cf. Marvell, To His Coy Mistress.</p>
+					</div>
+					<div epub:type="rearnote" id="note-24">
+						<p>197. Cf. Day, Parliament of Bees:</p>
+						<blockquote>
+							<div>
+								<span class="ln">"When of the sudden, listening, you shall
+									hear,</span>
+								<span class="ln">"A noise of horns and hunting, which shall
+									bring</span>
+								<span class="ln">"Actaeon to Diana in the spring,</span>
+								<span class="ln">"Where all shall see her naked skin . . ."</span>
+							</div>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-25">
+						<p>199. I do not know the origin of the ballad from which these lines are
+							taken: it was reported to me from Sydney, Australia.</p>
+					</div>
+					<div epub:type="rearnote" id="note-26">
+						<p>202. V. Verlaine, Parsifal.</p>
+					</div>
+					<div epub:type="rearnote" id="note-27">
+						<p>210. The currants were quoted at a price "cost insurance and freight to
+							London"; and the Bill of Lading etc. were to be handed to the buyer upon
+							payment of the sight draft.</p>
+					</div>
+					<div epub:type="rearnote" id="note-28">
+						<p>218. Tiresias, although a mere spectator and not indeed a "character," is
+							yet the most important personage in the poem, uniting all the rest. Just
+							as the one-eyed merchant, seller of currants, melts into the Phoenician
+							Sailor, and the latter is not wholly distinct from Ferdinand Prince of
+							Naples, so all the women are one woman, and the two sexes meet in
+							Tiresias. What Tiresias sees, in fact, is the substance of the poem. The
+							whole passage from Ovid is of great anthropological interest:</p>
+						<blockquote xml:lang="la">
+							<p>'. . . Cum Iunone iocos et maior vestra profecto est<br /> Quam, quae
+								contingit maribus,' dixisse, 'voluptas.'<br /> Illa negat; placuit
+								quae sit sententia docti<br /> Quaerere Tiresiae: venus huic erat
+								utraque nota.<br /> Nam duo magnorum viridi coeuntia silva<br />
+								Corpora serpentum baculi violaverat ictu<br /> Deque viro factus,
+								mirabile, femina septem<br /> Egerat autumnos; octavo rursus
+								eosdem<br /> Vidit et 'est vestrae si tanta potentia plagae,'<br />
+								Dixit 'ut auctoris sortem in contraria mutet,<br /> Nunc quoque vos
+								feriam!' percussis anguibus isdem<br /> Forma prior rediit
+								genetivaque venit imago.<br /> Arbiter hic igitur sumptus de lite
+								iocosa<br /> Dicta Iovis firmat; gravius Saturnia iusto<br /> Nec
+								pro materia fertur doluisse suique<br /> Iudicis aeterna damnavit
+								lumina nocte,<br /> At pater omnipotens (neque enim licet inrita
+								cuiquam<br /> Facta dei fecisse deo) pro lumine adempto<br /> Scire
+								futura dedit poenamque levavit honore.<br />
+							</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-29">
+						<p>221. This may not appear as exact as Sappho's lines, but I had in mind
+							the "longshore" or "dory" fisherman, who returns at nightfall.</p>
+					</div>
+					<div epub:type="rearnote" id="note-30">
+						<p>253. V. Goldsmith, the song in The Vicar of Wakefield.</p>
+					</div>
+					<div epub:type="rearnote" id="note-31">
+						<p>257. V. The Tempest, as above.</p>
+					</div>
+					<div epub:type="rearnote" id="note-32">
+						<p>264. The interior of St. Magnus Martyr is to my mind one of the finest
+							among Wren's interiors. See The Proposed Demolition of Nineteen City
+							Churches (P. S. King & Son, Ltd.).</p>
+					</div>
+					<div epub:type="rearnote" id="note-33">
+						<p>266. The Song of the (three) Thames-daughters begins here. From line 292
+							to 306 inclusive they speak in turn. V. Gutterdsammerung, III. i: the
+							Rhine-daughters.</p>
+					</div>
+					<div epub:type="rearnote" id="note-34">
+						<p>279. V. Froude, Elizabeth, Vol. I, ch. iv, letter of De Quadra to Philip
+							of Spain:</p>
+						<blockquote>
+							<div>
+								<span class="ln">"In the afternoon we were in a barge, watching the
+									games on the river.</span>
+								<span class="ln">(The queen) was alone with Lord Robert and myself
+									on the poop,</span>
+								<span class="ln">when they began to talk nonsense, and went so far
+									that Lord Robert</span>
+								<span class="ln">at last said, as I was on the spot there was no
+									reason why they</span>
+								<span class="ln">should not be married if the queen pleased."</span>
+							</div>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-35">
+						<p>293. Cf. Purgatorio, v. 133:</p>
+						<blockquote>
+							<p>"Ricorditi di me, che son la Pia;<br />Siena mi fe', disfecemi
+								Maremma."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-36">
+						<p>307. V. St. Augustine's Confessions: "to Carthage then I came, where a
+							cauldron of unholy loves sang all about mine ears."</p>
+					</div>
+					<div epub:type="rearnote" id="note-37">
+						<p>308. The complete text of the Buddha's Fire Sermon (which corresponds in
+							importance to the Sermon on the Mount) from which these words are taken,
+							will be found translated in the late Henry Clarke Warren's Buddhism in
+							Translation (Harvard Oriental Series). Mr. Warren was one of the great
+							pioneers of Buddhist studies in the Occident.</p>
+					</div>
+					<div epub:type="rearnote" id="note-38">
+						<p>309. From St. Augustine's Confessions again. The collocation of these two
+							representatives of eastern and western asceticism, as the culmination of
+							this part of the poem, is not an accident.</p>
+					</div>
+				</section>
+				<section>
+					<h3>V. WHAT THE THUNDER SAID</h3>
+					<p>In the first part of Part V three themes are employed: the journey to Emmaus,
+						the approach to the Chapel Perilous (see Miss Weston's book) and the present
+						decay of eastern Europe.</p>
+					<div epub:type="rearnote" id="note-39">
+						<p>357. This is Turdus aonalaschkae pallasii, the hermit-thrush which I have
+							heard in Quebec County. Chapman says (Handbook of Birds of Eastern North
+							America) "it is most at home in secluded woodland and thickety retreats.
+							. . . Its notes are not remarkable for variety or volume, but in purity
+							and sweetness of tone and exquisite modulation they are unequalled." Its
+							"water-dripping song" is justly celebrated.</p>
+					</div>
+					<div epub:type="rearnote" id="note-40">
+						<p>360. The following lines were stimulated by the account of one of the
+							Antarctic expeditions (I forget which, but I think one of Shackleton's):
+							it was related that the party of explorers, at the extremity of their
+							strength, had the constant delusion that there was one more member than
+							could actually be counted.</p>
+					</div>
+					<div epub:type="rearnote" id="note-41">
+						<p>367-77. Cf. Hermann Hesse, Blick ins Chaos:</p>
+						<blockquote xml:lang="de">
+							<p>"Schon ist halb Europa, schon ist zumindest der halbe Osten Europas
+								auf dem<br /> Wege zum Chaos, fhrt betrunken im heiligem Wahn am
+								Abgrund entlang<br /> und singt dazu, singt betrunken und hymnisch
+								wie Dmitri Karamasoff sang.<br /> Ueber diese Lieder lacht der
+								Bsrger beleidigt, der Heilige<br /> und Seher hrt sie mit
+								Trvnen."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-42">
+						<p>402. <q xml:lang="sa">"Datta, dayadhvam, damyata"</q> (Give, sympathize,
+							control). The fable of the meaning of the Thunder is found in the
+							Brihadaranyaka-Upanishad, 5, 1. A translation is found in Deussen's
+							Sechzig Upanishads des Veda, p. 489.</p>
+					</div>
+					<div epub:type="rearnote" id="note-43">
+						<p>408. Cf. Webster, The White Devil, v. vi:</p>
+						<blockquote>
+							<p>". . . they'll remarry<br /> Ere the worm pierce your winding-sheet,
+								ere the spider<br /> Make a thin curtain for your epitaphs."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-44">
+						<p>412. Cf. Inferno, xxxiii. 46:</p>
+						<blockquote xml:lang="it">
+							<p>"ed io sentii chiavar l'uscio di sotto<br /> all'orribile torre."</p>
+						</blockquote>
+						<p>Also F. H. Bradley, Appearance and Reality, p. 346:</p>
+						<blockquote>
+							<p>"My external sensations are no less private to myself than are my
+								thoughts or my feelings. In either case my experience falls within
+								my own circle, a circle closed on the outside; and, with all its
+								elements alike, every sphere is opaque to the others which surround
+								it. . . . In brief, regarded as an existence which appears in a
+								soul, the whole world for each is peculiar and private to that
+								soul."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-45">
+						<p>425. V. Weston, From Ritual to Romance; chapter on the Fisher King.</p>
+					</div>
+					<div epub:type="rearnote" id="note-46">
+						<p>428. V. Purgatorio, xxvi. 148.</p>
+						<blockquote xml:lang="it">
+							<p>"'Ara vos prec per aquella valor<br /> 'que vos guida al som de
+								l'escalina,<br /> 'sovegna vos a temps de ma dolor.'<br /> Poi
+								s'ascose nel foco che gli affina."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-47">
+						<p>429. V. Pervigilium Veneris. Cf. Philomela in Parts II and III.</p>
+					</div>
+					<div epub:type="rearnote" id="note-48">
+						<p>430. V. Gerard de Nerval, Sonnet El Desdichado.</p>
+					</div>
+					<div epub:type="rearnote" id="note-49">
+						<p>432. V. Kyd's Spanish Tragedy.</p>
+					</div>
+					<div epub:type="rearnote" id="note-50">
+						<p>434. Shantih. Repeated as here, a formal ending to an Upanishad. 'The
+							Peace which passeth understanding' is a feeble translation of the
+							content of this word.</p>
+					</div>
+				</section>
+			</section>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-mathml-noalt/EPUB/wasteland-cover.jpg b/src/test/resources/30/expanded/invalid/lorem-mathml-noalt/EPUB/wasteland-cover.jpg
new file mode 100644
index 0000000..8308ed4
Binary files /dev/null and b/src/test/resources/30/expanded/invalid/lorem-mathml-noalt/EPUB/wasteland-cover.jpg differ
diff --git a/src/test/resources/30/expanded/invalid/lorem-mathml-noalt/EPUB/wasteland-nav.xhtml b/src/test/resources/30/expanded/invalid/lorem-mathml-noalt/EPUB/wasteland-nav.xhtml
new file mode 100644
index 0000000..6fd9693
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-mathml-noalt/EPUB/wasteland-nav.xhtml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<link type="text/css" rel="stylesheet" href="wasteland.css" />
+	</head>
+	<body>
+		<nav epub:type="toc" id="toc">
+			<h1>Table of contents</h1>
+			<ol>
+				<li><a href="wasteland-content.xhtml#ch1">I. THE BURIAL OF THE DEAD</a></li>
+				<li><a href="wasteland-content.xhtml#ch2">II. A GAME OF CHESS</a></li>
+				<li><a href="wasteland-content.xhtml#ch3">III. THE FIRE SERMON</a></li>
+				<li><a href="wasteland-content.xhtml#ch4">IV. DEATH BY WATER</a></li>
+				<li><a href="wasteland-content.xhtml#ch5">V. WHAT THE THUNDER SAID</a></li>
+				<li><a href="wasteland-content.xhtml#backmatter">NOTES ON "THE WASTE LAND"</a></li>
+			</ol>
+		</nav>
+		<nav epub:type="landmarks">
+			<ol>
+				<li><a epub:type="frontmatter" href="wasteland-content.xhtml#frontmatter"
+						>frontmatter</a></li>
+				<li><a epub:type="bodymatter" href="wasteland-content.xhtml#bodymatter"
+						>bodymatter</a></li>
+				<li><a epub:type="backmatter" href="wasteland-content.xhtml#bodymatter"
+						>rearmatter</a></li>
+			</ol>
+		</nav>
+
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-mathml-noalt/EPUB/wasteland.css b/src/test/resources/30/expanded/invalid/lorem-mathml-noalt/EPUB/wasteland.css
new file mode 100644
index 0000000..8b4aeec
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-mathml-noalt/EPUB/wasteland.css
@@ -0,0 +1,32 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
+
+h2 {
+    margin-top: 5em;
+}
+
+h3 {
+    margin-top: 3em;
+}
+
+span.ln { 
+    display: block;
+    margin-bottom: 0.5em;
+}
+
+span.lnum {
+    float : right;
+    color : gray;
+    font-size : 90%;
+}
+
+a.noteref {
+    color : gray;
+    text-decoration : none;
+    margin-left: 0.5em;
+    margin-right: 0.5em;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-mathml-noalt/EPUB/wasteland.opf b/src/test/resources/30/expanded/invalid/lorem-mathml-noalt/EPUB/wasteland.opf
new file mode 100644
index 0000000..057d626
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-mathml-noalt/EPUB/wasteland.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xml:lang="en-US" prefix="cc: http://creativecommons.org/ns#">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:title>The Waste Land</dc:title>
+        <dc:creator>T.S. Eliot</dc:creator>
+        <dc:language>en-US</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T13:44:00Z</meta>          
+        <link rel="cc:license" refines="#cover" href="http://creativecommons.org/licenses/by-sa/3.0/" />
+        <link rel="cc:attributionURL" refines="#cover" href="http://en.wikipedia.org/wiki/Simon_Fieldhouse" />
+    </metadata> 
+    <manifest>
+        <item id="t1" href="wasteland-content.xhtml" properties="mathml" media-type="application/xhtml+xml" />
+        <item id="nav" href="wasteland-nav.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="cover" href="wasteland-cover.jpg" media-type="image/jpeg" properties="cover-image" />
+        <item id="css" href="wasteland.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-mathml-noalt/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-mathml-noalt/META-INF/container.xml
new file mode 100644
index 0000000..8bd2e5e
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-mathml-noalt/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/wasteland.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-mathml-noalt/mimetype b/src/test/resources/30/expanded/invalid/lorem-mathml-noalt/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-mathml-noalt/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-mimetype-2/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-mimetype-2/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-mimetype-2/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-mimetype-2/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-mimetype-2/EPUB/lorem.opf
new file mode 100644
index 0000000..3b65af2
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-mimetype-2/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-mimetype-2/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-mimetype-2/EPUB/lorem.xhtml
new file mode 100644
index 0000000..ce440bb
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-mimetype-2/EPUB/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-mimetype-2/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-mimetype-2/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-mimetype-2/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-mimetype-2/mimetype b/src/test/resources/30/expanded/invalid/lorem-mimetype-2/mimetype
new file mode 100644
index 0000000..8f3a928
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-mimetype-2/mimetype
@@ -0,0 +1 @@
+application/something+else
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-mimetype/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-mimetype/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-mimetype/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-mimetype/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-mimetype/EPUB/lorem.opf
new file mode 100644
index 0000000..3b65af2
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-mimetype/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-mimetype/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-mimetype/EPUB/lorem.xhtml
new file mode 100644
index 0000000..ce440bb
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-mimetype/EPUB/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-mimetype/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-mimetype/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-mimetype/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-mimetype/mimetype b/src/test/resources/30/expanded/invalid/lorem-mimetype/mimetype
new file mode 100644
index 0000000..8f3a928
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-mimetype/mimetype
@@ -0,0 +1 @@
+application/something+else
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-poster/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-poster/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-poster/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-poster/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-poster/EPUB/lorem.opf
new file mode 100644
index 0000000..0be7469
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-poster/EPUB/lorem.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav remote-resources" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+		<item id="poster" href="poster.png" media-type="text/abc" />
+		<item id="video" href="http://test.com/lorem.ogg" media-type="video/ogg" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-poster/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-poster/EPUB/lorem.xhtml
new file mode 100644
index 0000000..68c848d
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-poster/EPUB/lorem.xhtml
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		
+		<video src="http://test.com/lorem.ogg" width="640" height="360" controls="controls" poster="poster.png">
+			
+		</video>
+		
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-poster/EPUB/poster.png b/src/test/resources/30/expanded/invalid/lorem-poster/EPUB/poster.png
new file mode 100644
index 0000000..16a44e0
Binary files /dev/null and b/src/test/resources/30/expanded/invalid/lorem-poster/EPUB/poster.png differ
diff --git a/src/test/resources/30/expanded/invalid/lorem-poster/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-poster/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-poster/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-poster/mimetype b/src/test/resources/30/expanded/invalid/lorem-poster/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-poster/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-remote-2/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-remote-2/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-remote-2/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-remote-2/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-remote-2/EPUB/lorem.opf
new file mode 100644
index 0000000..750acb2
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-remote-2/EPUB/lorem.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2012-11-29T09:47:05Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+         <item id="audio" href="http://example.org/audio.mp4" media-type="audio/mp4" /> 
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/invalid/lorem-remote-2/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-remote-2/EPUB/lorem.xhtml
new file mode 100644
index 0000000..c6b9999
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-remote-2/EPUB/lorem.xhtml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<audio src="http://example.org/audio.mp4"/>
+
+			<p>Sed sollicitudin <a href="http://example.org/#foo">accumsan augue</a>, quis pulvinar
+				sem volutpat at. Vestibulum rutrum bibendum augue sit amet accumsan. Etiam tempus
+				malesuada libero vestibulum fringilla. Maecenas diam nulla, ultricies ac sodales
+				vitae, viverra ut velit. Vivamus posuere, mi sit amet vehicula tempus, nibh purus
+				scelerisque enim, non vestibulum erat arcu in libero. Aliquam vel convallis nibh.
+				Sed in nisi ipsum. Sed sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-remote-2/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-remote-2/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-remote-2/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-remote-2/mimetype b/src/test/resources/30/expanded/invalid/lorem-remote-2/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-remote-2/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-remote-3/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-remote-3/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-remote-3/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-remote-3/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-remote-3/EPUB/lorem.opf
new file mode 100644
index 0000000..40b715c
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-remote-3/EPUB/lorem.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav remote-resources" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+        <!--<item id="audio" href="http://example.org/remote.mp4" media-type="audio/mp4" />-->
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/invalid/lorem-remote-3/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-remote-3/EPUB/lorem.xhtml
new file mode 100644
index 0000000..71f1e5d
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-remote-3/EPUB/lorem.xhtml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+			
+			<audio controls="controls" src="http://example.org/remote.mp4" />
+				
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-remote-3/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-remote-3/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-remote-3/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-remote-3/mimetype b/src/test/resources/30/expanded/invalid/lorem-remote-3/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-remote-3/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-remote-4/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-remote-4/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-remote-4/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-remote-4/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-remote-4/EPUB/lorem.opf
new file mode 100644
index 0000000..b38b757
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-remote-4/EPUB/lorem.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:ED450261-BB55-4014-B168-37CC68A2AF21</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2012-11-29</dc:date>
+        <meta property="dcterms:modified">2012-11-29T09:47:52Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav remote-resources" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+<!--        <item id="audio1" href="http://example.com/audio/src-1.mp4" media-type="audio/mp4" />-->
+<!--        <item id="audio2" href="http://example.com/audio/src-2.mp4" media-type="audio/mp4" />-->
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/invalid/lorem-remote-4/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-remote-4/EPUB/lorem.xhtml
new file mode 100644
index 0000000..b82a827
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-remote-4/EPUB/lorem.xhtml
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+			
+			<audio controls="controls">
+				<source src="http://example.com/audio/src-1.mp4" type="audio/mp4"/>
+				<source src="http://example.com/audio/src-2.mp4" type="audio/mp4"/>
+			</audio>
+				
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-remote-4/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-remote-4/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-remote-4/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-remote-4/mimetype b/src/test/resources/30/expanded/invalid/lorem-remote-4/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-remote-4/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-remote/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-remote/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-remote/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-remote/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-remote/EPUB/lorem.opf
new file mode 100644
index 0000000..6a6d3a1
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-remote/EPUB/lorem.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav remote-resources" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+        <item id="invalid" href="http://example.org/remote.jpg" media-type="image/jpeg" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/invalid/lorem-remote/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-remote/EPUB/lorem.xhtml
new file mode 100644
index 0000000..2f0c576
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-remote/EPUB/lorem.xhtml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+			
+			<img src="http://example.org/remote.jpg" alt="" />
+				
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-remote/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-remote/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-remote/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-remote/mimetype b/src/test/resources/30/expanded/invalid/lorem-remote/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-remote/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-signatures/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-signatures/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-signatures/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-signatures/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-signatures/EPUB/lorem.opf
new file mode 100644
index 0000000..3b65af2
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-signatures/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-signatures/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-signatures/EPUB/lorem.xhtml
new file mode 100644
index 0000000..ce440bb
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-signatures/EPUB/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-signatures/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-signatures/META-INF/container.xml
new file mode 100644
index 0000000..c5c1567
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-signatures/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
diff --git a/src/test/resources/30/expanded/invalid/lorem-signatures/META-INF/signatures.xml b/src/test/resources/30/expanded/invalid/lorem-signatures/META-INF/signatures.xml
new file mode 100644
index 0000000..c5c1567
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-signatures/META-INF/signatures.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
diff --git a/src/test/resources/30/expanded/invalid/lorem-signatures/mimetype b/src/test/resources/30/expanded/invalid/lorem-signatures/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-signatures/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-svg-dual-2/EPUB/lorem-1.xhtml b/src/test/resources/30/expanded/invalid/lorem-svg-dual-2/EPUB/lorem-1.xhtml
new file mode 100644
index 0000000..cb6d3c5
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-svg-dual-2/EPUB/lorem-1.xhtml
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
+				xmlns="http://www.w3.org/2000/svg" version="1.1"
+				xmlns:x="http://www.w3.org/1999/xhtml">
+				<desc>Example rect01 - rectangle with sharp corners </desc>
+				
+				<rect x="1" y="1" width="1198" height="398"
+					fill="none" stroke="blue" stroke-width="2"/>
+				
+				<rect x="400" y="100" width="400" height="200"
+					fill="yellow" stroke="navy" stroke-width="10"  />			
+			</svg>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-svg-dual-2/EPUB/lorem-2.xhtml b/src/test/resources/30/expanded/invalid/lorem-svg-dual-2/EPUB/lorem-2.xhtml
new file mode 100644
index 0000000..507efb9
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-svg-dual-2/EPUB/lorem-2.xhtml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
+			xmlns="http://www.w3.org/2000/svg" version="1.1"
+			xmlns:x="http://www.w3.org/1999/xhtml">
+			<desc>Example rect01 - rectangle with sharp corners </desc>
+			
+			<rect x="1" y="1" width="1198" height="398"
+				fill="none" stroke="blue" stroke-width="2"/>
+			
+			<rect x="400" y="100" width="400" height="200"
+				fill="yellow" stroke="navy" stroke-width="10"  />			
+		</svg>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-svg-dual-2/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-svg-dual-2/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-svg-dual-2/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-svg-dual-2/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-svg-dual-2/EPUB/lorem.opf
new file mode 100644
index 0000000..1373b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-svg-dual-2/EPUB/lorem.opf
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <!-- svg properties not set on second xhtml -->
+        <item id="t1" href="lorem-1.xhtml" properties="nav svg" media-type="application/xhtml+xml" />
+        <item id="t2" href="lorem-2.xhtml" media-type="application/xhtml+xml" />
+        <item id="css" href="lorem.css" media-type="text/css" />		
+    </manifest>
+    <spine>
+        <itemref idref="t1" />      
+		<itemref idref="t2" />    		
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/invalid/lorem-svg-dual-2/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-svg-dual-2/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-svg-dual-2/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-svg-dual-2/mimetype b/src/test/resources/30/expanded/invalid/lorem-svg-dual-2/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-svg-dual-2/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-svg-dual/EPUB/lorem-1.xhtml b/src/test/resources/30/expanded/invalid/lorem-svg-dual/EPUB/lorem-1.xhtml
new file mode 100644
index 0000000..cb6d3c5
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-svg-dual/EPUB/lorem-1.xhtml
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
+				xmlns="http://www.w3.org/2000/svg" version="1.1"
+				xmlns:x="http://www.w3.org/1999/xhtml">
+				<desc>Example rect01 - rectangle with sharp corners </desc>
+				
+				<rect x="1" y="1" width="1198" height="398"
+					fill="none" stroke="blue" stroke-width="2"/>
+				
+				<rect x="400" y="100" width="400" height="200"
+					fill="yellow" stroke="navy" stroke-width="10"  />			
+			</svg>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-svg-dual/EPUB/lorem-2.xhtml b/src/test/resources/30/expanded/invalid/lorem-svg-dual/EPUB/lorem-2.xhtml
new file mode 100644
index 0000000..507efb9
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-svg-dual/EPUB/lorem-2.xhtml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
+			xmlns="http://www.w3.org/2000/svg" version="1.1"
+			xmlns:x="http://www.w3.org/1999/xhtml">
+			<desc>Example rect01 - rectangle with sharp corners </desc>
+			
+			<rect x="1" y="1" width="1198" height="398"
+				fill="none" stroke="blue" stroke-width="2"/>
+			
+			<rect x="400" y="100" width="400" height="200"
+				fill="yellow" stroke="navy" stroke-width="10"  />			
+		</svg>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-svg-dual/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-svg-dual/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-svg-dual/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-svg-dual/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-svg-dual/EPUB/lorem.opf
new file mode 100644
index 0000000..6253112
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-svg-dual/EPUB/lorem.opf
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <!-- svg properties not set on both -->
+        <item id="t1" href="lorem-1.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="t2" href="lorem-2.xhtml" media-type="application/xhtml+xml" />
+        <item id="css" href="lorem.css" media-type="text/css" />		
+    </manifest>
+    <spine>
+        <itemref idref="t1" />      
+		<itemref idref="t2" />    		
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/invalid/lorem-svg-dual/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-svg-dual/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-svg-dual/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-svg-dual/mimetype b/src/test/resources/30/expanded/invalid/lorem-svg-dual/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-svg-dual/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-svg-hyperlink-notitle/EPUB/lorem-1.xhtml b/src/test/resources/30/expanded/invalid/lorem-svg-hyperlink-notitle/EPUB/lorem-1.xhtml
new file mode 100644
index 0000000..cb6d3c5
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-svg-hyperlink-notitle/EPUB/lorem-1.xhtml
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
+				xmlns="http://www.w3.org/2000/svg" version="1.1"
+				xmlns:x="http://www.w3.org/1999/xhtml">
+				<desc>Example rect01 - rectangle with sharp corners </desc>
+				
+				<rect x="1" y="1" width="1198" height="398"
+					fill="none" stroke="blue" stroke-width="2"/>
+				
+				<rect x="400" y="100" width="400" height="200"
+					fill="yellow" stroke="navy" stroke-width="10"  />			
+			</svg>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-svg-hyperlink-notitle/EPUB/lorem-2.xhtml b/src/test/resources/30/expanded/invalid/lorem-svg-hyperlink-notitle/EPUB/lorem-2.xhtml
new file mode 100644
index 0000000..609c031
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-svg-hyperlink-notitle/EPUB/lorem-2.xhtml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
+			xmlns="http://www.w3.org/2000/svg" version="1.1"
+			xmlns:x="http://www.w3.org/1999/xhtml"
+            xmlns:xlink="http://www.w3.org/1999/xlink">
+			<desc>Example rect01 - rectangle with sharp corners </desc>
+			
+			<rect x="1" y="1" width="1198" height="398"
+				fill="none" stroke="blue" stroke-width="2"/>
+
+			<rect x="400" y="100" width="400" height="200"
+				fill="yellow" stroke="navy" stroke-width="10"  />
+
+			<a xlink:href="lorem-1.xhtml" target="ch1">
+                <rect x="10" y="20" width="75" height="30"
+                      style="stroke: #333366; fill: #6666cc"/>
+            </a>
+
+        </svg>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-svg-hyperlink-notitle/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-svg-hyperlink-notitle/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-svg-hyperlink-notitle/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-svg-hyperlink-notitle/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-svg-hyperlink-notitle/EPUB/lorem.opf
new file mode 100644
index 0000000..a0f4df0
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-svg-hyperlink-notitle/EPUB/lorem.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem-1.xhtml" properties="nav svg" media-type="application/xhtml+xml" />
+        <item id="t2" href="lorem-2.xhtml" properties="svg" media-type="application/xhtml+xml" />
+        <item id="css" href="lorem.css" media-type="text/css" />		
+    </manifest>
+    <spine>
+        <itemref idref="t1" />      
+		<itemref idref="t2" />    		
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/invalid/lorem-svg-hyperlink-notitle/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-svg-hyperlink-notitle/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-svg-hyperlink-notitle/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-svg-hyperlink-notitle/mimetype b/src/test/resources/30/expanded/invalid/lorem-svg-hyperlink-notitle/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-svg-hyperlink-notitle/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-xhtml-rng-1/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-xhtml-rng-1/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-xhtml-rng-1/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-xhtml-rng-1/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-xhtml-rng-1/EPUB/lorem.opf
new file mode 100644
index 0000000..3b65af2
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-xhtml-rng-1/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-xhtml-rng-1/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-xhtml-rng-1/EPUB/lorem.xhtml
new file mode 100644
index 0000000..7fe2fc5
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-xhtml-rng-1/EPUB/lorem.xhtml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+		<!-- trigger the epub3 rng by an undefined element -->
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum <epub:x>dolor sit</epub:x> amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-xhtml-rng-1/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-xhtml-rng-1/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-xhtml-rng-1/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-xhtml-rng-1/mimetype b/src/test/resources/30/expanded/invalid/lorem-xhtml-rng-1/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-xhtml-rng-1/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-xhtml-sch-1/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-xhtml-sch-1/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-xhtml-sch-1/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-xhtml-sch-1/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-xhtml-sch-1/EPUB/lorem.opf
new file mode 100644
index 0000000..3b65af2
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-xhtml-sch-1/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-xhtml-sch-1/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-xhtml-sch-1/EPUB/lorem.xhtml
new file mode 100644
index 0000000..f9ec80e
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-xhtml-sch-1/EPUB/lorem.xhtml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+		<!-- trigger the epub3 sch by nesting a dfn inside a dfn -->
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem <dfn>ipsum <dfn>dolor sit</dfn> amet</dfn>, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-xhtml-sch-1/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-xhtml-sch-1/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-xhtml-sch-1/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-xhtml-sch-1/mimetype b/src/test/resources/30/expanded/invalid/lorem-xhtml-sch-1/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-xhtml-sch-1/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/EPUB/lorem.opf
new file mode 100644
index 0000000..f90985c
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:013D98A5-41BF-4CAD-B870-E3B0AB7A34D1</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2012-10-16T12:26:26Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/EPUB/lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/EPUB/lorem.xhtml
new file mode 100644
index 0000000..ce440bb
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/EPUB/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/EPUB_2/lorem.css b/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/EPUB_2/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/EPUB_2/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/EPUB_2/lorem.opf b/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/EPUB_2/lorem.opf
new file mode 100644
index 0000000..a15889a
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/EPUB_2/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:E966656B-97C7-4C41-BF68-7EBA425E1A07</dc:identifier>
+        <dc:title>Lorem Ipsum - alt</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2012-10-16T12:26:51Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/EPUB_2/lorem.xhtml b/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/EPUB_2/lorem.xhtml
new file mode 100644
index 0000000..ce440bb
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/EPUB_2/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/META-INF/container.xml b/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/META-INF/container.xml
new file mode 100644
index 0000000..4cbd973
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" media-type="application/oebps-package+xml"/>
+		<rootfile full-path="EPUB_2/lorem.opf" media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
diff --git a/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/mimetype b/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/unmanifested.txt b/src/test/resources/30/expanded/invalid/lorem-xrenditions-unmanifested/unmanifested.txt
new file mode 100644
index 0000000..e69de29
diff --git a/src/test/resources/30/expanded/invalid/nav-invalid/META-INF/container.xml b/src/test/resources/30/expanded/invalid/nav-invalid/META-INF/container.xml
new file mode 100755
index 0000000..5c55364
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/nav-invalid/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+   <rootfiles>
+      <rootfile full-path="package.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/nav-invalid/OEBPS/4.xhtml b/src/test/resources/30/expanded/invalid/nav-invalid/OEBPS/4.xhtml
new file mode 100755
index 0000000..b90e03f
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/nav-invalid/OEBPS/4.xhtml
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops"
+      epub:prefix="z3986: http://www.daisy.org/z3986/2011/vocab/structure/#" xml:lang="en" lang="en">
+   <head>
+      <title>x x x x x x</title>
+      <meta charset="utf-8"/>
+      <link rel="stylesheet" type="text/css" href="css/cnib.css"/>
+   </head>
+   <body>
+      <div>
+         <span id="p7" epub:type="pagebreak">x</span>
+      </div>
+      <h1>x<br/>x·´x</h1>
+      <p class="nonindent">x x x x x x x x, x x x—x x—x?</p>
+      <p>x'x x x x x'x x, x x x x x, x x x x x x x x'x x x x x. x x x x x x'x x.</p>
+      <p>x x x x-x x x x x. x x x x x, x x x x x x. x x x x x x <em>x, x, x x x x x</em>, x x x x, x x x x x x x.</p>
+      <p>
+         <q class="double">x x x x x x'x x x x. x x—</q>
+      </p>
+      <p>x x x x x x x x x x. x x x x x x, x x x x x x x. <q class="double">x x x x x x x. x x x x x. x x x x x x x.x. x x x x x!</q>
+      </p>
+      <p>x x x x'x x x: x x x x, x x x x-x x, x<span id="p8" epub:type="pagebreak">x</span>x x x x x, x x x x-x x x x x.</p>
+      <p>x x x x x x x x x'x x x x x x x. x x x x x x. <q class="double">x'x x x x x x x x x x'x x x x x x x x x x'x x.</q>
+      </p>
+      <p>x'x x x x, x x x x, x x. x x x x. x x, x x, x x x. x x x x, x x x x x x x x. x'x x x x x x x x'x x, x x x x x x, x x, x x x x x.</p>
+      <p>
+         <em>x'x x x x x, x x x x x x x x x-x x, x x x x. x'x x x x, x x x-x x, x x x x x x x. x x x, x x x x, x x x x x x x x x x....</em>
+      </p>
+      <p>x x x, <q class="double">x, x.</q>
+      </p>
+      <p>x x x x x, x x x, x x x, x, x <em>x</em> x x x x x. <q class="double">x,</q> x x. <q class="double">x x x, x'?</q>
+      </p>
+      <p>
+         <q class="double">x x x x x.</q>
+      </p>
+      <p>
+         <q class="double">x...? x'x x x.</q>
+      </p>
+      <p>
+         <q class="double">x'x x x x x x.</q>
+      </p>
+      <div>
+         <span id="p9" epub:type="pagebreak">x</span>
+      </div>
+      <p>
+         <q class="double">x'x x x x x x.</q>
+      </p>
+      <p>
+         <q class="double">x. x x.</q>
+      </p>
+      <p>x x x x x. x x'x x x x x x x x'x x x x x. <q class="double">x'x x x?</q> x x.</p>
+      <p>
+         <q class="double">x'x x. x x x x x x. x x x.</q>
+      </p>
+      <p>
+         <q class="double">x'x x x x x x x x x!</q>
+      </p>
+      <p>
+         <q class="double">x x x x x, x. x x x x, x? x x x x x x x x x x.</q>
+      </p>
+      <p>
+         <q class="double">x'x x x x x x x x x x. x. x'x x x x x x x x.</q>
+      </p>
+      <p>
+         <q class="double">x—x x x x'x x, x x x x x x x.</q>
+      </p>
+      <p>x x. x x x x, x x x x. x x x x x x x x x x. <q class="double">x x x x x x x x x x x x x x x.</q>
+      </p>
+      <p>
+         <q class="double">x'x x x x. x x x x.</q>
+      </p>
+      <p>
+         <q class="double">x x x x x x x.</q>
+      </p>
+      <p>
+         <q class="double">x'x x x x x!</q>
+      </p>
+      <p>
+         <q class="double">x x x x x?</q>
+      </p>
+      <p>x x x. <q class="double">x x x'x x x x?</q>
+      </p>
+      <p>x x x x x x x x x x x x x x x? <q class="double">x x x x... x x x. x x x x x.</q>
+      </p>
+      <div>
+         <span id="p10" epub:type="pagebreak">x</span>
+      </div>
+      <p>x x x x x, x x x x x x x x. <q class="double">x'x x x x x x, x x x x.</q>
+      </p>
+      <p>
+         <q class="double">x'x x x x x.</q>
+      </p>
+      <p>x x x x x x x x x x x x x x. x x, x. x x, <em>x x x x x x x x x.</em> x'x x x x. x x x x x x x'x x, x'x x x.</p>
+      <p>x x x x x x'x x x x. x x x x, x x x x x x. x x x x x, x x, x x, x x x x x x—x x'x x x x x x'x x x. x x x x x, x. x'x x x x x x x. x'x x x x x x x x x x x x x.</p>
+      <p>x x x x x, x x x x x x? x x x x x x x x, x x x, x x x x x?</p>
+      <p>x x x x x, x x x'x x x x x.</p>
+      <p>x x x x x x x x x x x x x x x x x x x x. <q class="double">x x x, x x'x x x x x.</q>
+      </p>
+      <p>x x x x x x. x'x x x x x x; x x x x x x'x x x x x x x. x x x? x x'x x x x x x'x.</p>
+      <div>
+         <span id="p11" epub:type="pagebreak">x</span>
+      </div>
+      <p>
+         <q class="double">x.</q>
+      </p>
+      <p>
+         <q class="double">x x x x x x, x'x x x x x. x x'x x x x, x x x x x.</q>
+      </p>
+      <p>
+         <em>x x x x x x x, x x, x x x x x x x?</em> x x x x x x x'x x x x x, x x x x x x'x x x. x-x, x x, <q class="double">x x'x x x x, x x x. x x x x x x—x'x x x x.</q>
+      </p>
+      <p>
+         <q class="double">x'x x x x.</q>
+      </p>
+      <p>
+         <q class="double">x x x'x <em>x</em> x x x?</q>
+      </p>
+      <p>
+         <q class="double">x? x x x x x x x x x x x x x'x x x x.</q>
+      </p>
+      <p>
+         <q class="double">x x x x, x,</q> x x x. x x x x'x x x x x x x x x.</p>
+      <p>x x x x x x x'x x x x x x x x x x x x, <q class="double">x x x? x x x x, x—x x x x x x!</q>
+      </p>
+      <p>x x x. x x x x x. x x x x x'x x x x. x x x x x x x x, x x x x x x x.</p>
+   </body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/nav-invalid/OEBPS/css/cnib.css b/src/test/resources/30/expanded/invalid/nav-invalid/OEBPS/css/cnib.css
new file mode 100755
index 0000000..9b404b0
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/nav-invalid/OEBPS/css/cnib.css
@@ -0,0 +1,79 @@
+
+/*
+ * This stylesheet defines reserved class names/properties for use in CNIB documents.
+ * Full CSS support is not currently available, so updates to this document require
+ * manual tweaking of the processor.
+ */
+
+
+body {
+	font-family: Arial,Verdana,sans-serif;
+	font-size: 1em;
+}
+
+/* indenting styles */
+
+.nonindent { text-indent: 0em }
+.in1 { text-indent: 2em }
+.in2 { text-indent: 4em }
+.in3 { text-indent: 6em }
+.in4 { text-indent: 8em }
+
+/* emphasis styles */
+
+.em { font-style: italic }
+.strong { font-weight: bold }
+.underline { text-decoration: underline }
+.strike { text-decoration: line-through }
+.strike2 { text-decoration: line-through }
+
+/* quote characters */
+
+.double:before, .doubleOpen:before {
+    content: '“'
+}
+
+.double:after, .doubleClose:after {
+    content: '”'
+}
+
+.single:before, .singleOpen:before {
+    content: '‘'
+}
+
+.single:after, .singleClose:after {
+    content: '’'
+}
+
+.doubleGuillemet:before, .doubleGuillemetOpen:before {
+    content: '«'
+}
+
+.doubleGuillemet:after, .doubleGuillemetClose:after {
+    content: '»'
+}
+
+.singleGuillemet:before, .singleGuillemetOpen:before {
+    content: '‹'
+}
+
+.singleGuillemet:after, .singleGuillemetClose:after {
+    content: '›'
+}
+
+/* visibility */
+
+.hidden { visibility: hidden }
+.visible { visibility: visible }
+
+
+
+/* following styles are for XHTML(5) formatting*/
+
+span.verse-line {
+    display: block;
+}
+
+div.context-break {
+    padding: .75em;
+}
diff --git a/src/test/resources/30/expanded/invalid/nav-invalid/OEBPS/nav.xhtml b/src/test/resources/30/expanded/invalid/nav-invalid/OEBPS/nav.xhtml
new file mode 100755
index 0000000..ea1ae31
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/nav-invalid/OEBPS/nav.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+   <head>
+      <title>EPUB 3 Navigation Document</title>
+      <meta charset="utf-8"/>
+      <link rel="stylesheet" type="text/css" href="css/cnib.css"/>
+   </head>
+   <body>
+
+   </body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/nav-invalid/mimetype b/src/test/resources/30/expanded/invalid/nav-invalid/mimetype
new file mode 100755
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/nav-invalid/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/nav-invalid/package.opf b/src/test/resources/30/expanded/invalid/nav-invalid/package.opf
new file mode 100755
index 0000000..2b7210e
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/nav-invalid/package.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="pub-id">
+   <metadata>
+      <dc:identifier xmlns:dc="http://purl.org/dc/elements/1.1/" id="pub-id">x-x</dc:identifier>
+      <dc:title xmlns:dc="http://purl.org/dc/elements/1.1/" id="dctitle">x x x x x x</dc:title>
+      <dc:language xmlns:dc="http://purl.org/dc/elements/1.1/" id="dclang">x</dc:language>
+      <meta property="dcterms:modified" id="mod">2011-10-21T10:00:00Z</meta>
+      <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/" id="aut1">x x</dc:creator>
+      <meta refines="#aut1" property="role" scheme="marc:relators">x</meta>
+      <dc:identifier xmlns:dc="http://purl.org/dc/elements/1.1/" id="isbn13">x</dc:identifier>
+      <meta refines="#isbn13" property="role" scheme="onix:codelist5">x</meta>
+   </metadata>
+   <manifest>
+      <item href="OEBPS/4.xhtml" id="item4" media-type="application/xhtml+xml"/>
+      <item href="OEBPS/nav.xhtml" id="nav" properties="nav"
+            media-type="application/xhtml+xml"/>
+      <item href="OEBPS/css/cnib.css" id="css" media-type="text/css"/>
+   </manifest>
+   <spine>
+      <itemref idref="item4"/>
+   </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/wasteland-otf/EPUB/fonts.css b/src/test/resources/30/expanded/invalid/wasteland-otf/EPUB/fonts.css
new file mode 100644
index 0000000..7f8c47d
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/wasteland-otf/EPUB/fonts.css
@@ -0,0 +1,20 @@
+ at font-face {
+    font-family: 'OldStandard';
+    font-weight: normal;
+    font-style: normal;
+    src:url(OldStandard-Regular.otf) format('opentype');
+}
+
+ at font-face {
+    font-family: 'OldStandard';
+    font-weight: bold;
+    font-style: normal;
+    src:url(OldStandard-Bold.otf) format('opentype');
+}
+
+ at font-face {
+    font-family:'OldStandard';
+    font-weight: normal;
+    font-style: italic;
+    src:url(OldStandard-Italic.otf) format('opentype');
+}
diff --git a/src/test/resources/30/expanded/invalid/wasteland-otf/EPUB/wasteland-content.xhtml b/src/test/resources/30/expanded/invalid/wasteland-otf/EPUB/wasteland-content.xhtml
new file mode 100644
index 0000000..5413e82
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/wasteland-otf/EPUB/wasteland-content.xhtml
@@ -0,0 +1,1069 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<meta charset="utf-8"></meta>
+		<title>The Waste Land</title>
+		<link rel="stylesheet" type="text/css" href="wasteland.css" class="day" title="day"/> 
+		<link rel="alternate stylesheet" type="text/css" href="wasteland-night.css" class="night" title="night"/>
+		<!-- <link rel="stylesheet" type="text/css" href="wasteland-night.css" class="night" title="night"/> -->		
+	</head>
+	<body>
+		<section epub:type="frontmatter" id="frontmatter">
+			<section epub:type="titlepage" id="titlepage">
+				<h1>The Waste Land</h1>
+				<div class="aut">T.S. Eliot</div>
+				<div epub:type="epigraph">					
+					<p>
+						<span xml:lang="la">"Nam Sibyllam quidem Cumis ego ipse oculis
+							meis<br />vidi in ampulla pendere, et cum illi pueri dicerent</span>: <br />
+						<span xml:lang="grc"
+							>&#x03A3;&#x03AF;&#x03B2;&#x03C5;&#x03BB;&#x03BB;&#x03B1;
+							&#x03C4;&#x03AF;
+							&#x03F4;&#x03AD;&#x03BB;&#x03B5;&#x03B9;&#x03C2;<!--Sibylla ti theleis-->
+						</span>; <span xml:lang="la">respondebat illa</span>: <span xml:lang="grc"
+							>&#x03AC;&#x03C0;&#x03BF;&#x03F4;&#x03B1;&#x03B3;&#x03B5;&#x1FD6;&#x03B3;
+							&#x03F4;&#x03AD;&#x03BB;&#x03E3;<!--apothanein thelo-->
+						</span>."</p>
+				</div>
+				<p epub:type="dedication">For Ezra Pound: <span xml:lang="it">il miglior
+						fabbro</span></p>
+			</section>
+		</section>
+		<section epub:type="bodymatter" id="bodymatter">
+
+			<section id="ch1">
+				<h2>I. THE BURIAL OF THE DEAD</h2>
+				<div class="linegroup">
+					<div>April is the cruellest month, breeding</div>
+					<div>Lilacs out of the dead land, mixing</div>
+					<div>Memory and desire, stirring</div>
+					<div>Dull roots with spring rain.</div>
+					<div>Winter kept us warm, covering</div>
+					<div>Earth in forgetful snow, feeding</div>
+					<div>A little life with dried tubers.</div>
+					<div>Summer surprised us, coming over the Starnbergersee</div>
+					<div>With a shower of rain; we stopped in the colonnade,</div>
+					<div>And went on in sunlight, into the Hofgarten,<span class="lnum"
+							>10</span>
+					</div>
+					<div>And drank coffee, and talked for an hour.</div>
+					<div  xml:lang="de">Bin gar keine Russin, stamm' aus Litauen, echt
+						deutsch.</div>
+					<div>And when we were children, staying at the archduke's,</div>
+					<div>My cousin's, he took me out on a sled,</div>
+					<div>And I was frightened. He said, Marie,</div>
+					<div>Marie, hold on tight. And down we went.</div>
+					<div>In the mountains, there you feel free.</div>
+					<div>I read, much of the night, and go south in the winter.</div>
+				</div>
+				<div class="linegroup">
+					<div>What are the roots that clutch, what branches grow</div>
+					<div id="ln20">Out of this stony rubbish? Son of man,<a epub:type="noteref" class="noteref"
+						href="#note-1">*</a><span class="lnum">20</span>
+					</div>
+					<div>You cannot say, or guess, for you know only</div>
+					<div>A heap of broken images, where the sun beats,</div>
+					<div id="ln23">And the dead tree gives no shelter, the cricket no relief,<a
+						epub:type="noteref" class="noteref" href="#note-2">*</a></div>
+					<div>And the dry stone no sound of water. Only</div>
+					<div>There is shadow under this red rock,</div>
+					<div>(Come in under the shadow of this red rock),</div>
+					<div>And I will show you something different from either</div>
+					<div>Your shadow at morning striding behind you</div>
+					<div>Or your shadow at evening rising to meet you;</div>
+					<div>I will show you fear in a handful of dust.<span class="lnum"
+							>30</span>
+					</div>
+					<blockquote xml:lang="de">
+						<div>
+							<div id="ln31">Frisch weht der Wind<a epub:type="noteref" class="noteref"
+									href="#note-3">*</a>
+							</div>
+							<div>Der Heimat zu</div>
+							<div>Mein Irisch Kind,</div>
+							<div>Wo weilest du?</div>
+						</div>
+					</blockquote>
+					<div>"You gave me hyacinths first a year ago;</div>
+					<div>"They called me the hyacinth girl."</div>
+					<div>&#x2015;Yet when we came back, late, from the Hyacinth
+						garden,</div>
+					<div>Your arms full, and your hair wet, I could not</div>
+					<div>Speak, and my eyes failed, I was neither</div>
+					<div>Living nor dead, and I knew nothing,<span class="lnum"
+							>40</span>
+					</div>
+					<div>Looking into the heart of light, the silence.</div>
+					<div xml:lang="de" id="ln42">
+						<em>Od' und leer das Meer</em>.<a epub:type="noteref" class="noteref" href="#note-4">*</a>
+					</div>
+				</div>
+				<div class="linegroup">
+					<div>Madame Sosostris, famous clairvoyante,</div>
+					<div>Had a bad cold, nevertheless</div>
+					<div>Is known to be the wisest woman in Europe,</div>
+					<div id="ln46">With a wicked pack of cards. Here, said she,<a
+						epub:type="noteref" class="noteref" href="#note-5">*</a></div>
+					<div>Is your card, the drowned Phoenician Sailor,</div>
+					<div>(Those are pearls that were his eyes. Look!)</div>
+					<div>Here is Belladonna, the Lady of the Rocks,</div>
+					<div>The lady of situations.<span class="lnum">50</span>
+					</div>
+					<div>Here is the man with three staves, and here the Wheel,</div>
+					<div>And here is the one-eyed merchant, and this card,</div>
+					<div>Which is blank, is something he carries on his back,</div>
+					<div>Which I am forbidden to see. I do not find</div>
+					<div>The Hanged Man. Fear death by water.</div>
+					<div>I see crowds of people, walking round in a ring.</div>
+					<div>Thank you. If you see dear Mrs. Equitone,</div>
+					<div>Tell her I bring the horoscope myself:</div>
+					<div>One must be so careful these days.</div>
+				</div>
+				<div class="linegroup">
+					<div id="ln60">Unreal City,<a epub:type="noteref" class="noteref" href="#note-6">*</a><span
+							class="lnum">60</span>
+					</div>
+					<div>Under the brown fog of a winter dawn,</div>
+					<div>A crowd flowed over London Bridge, so many,</div>
+					<div id="ln63">I had not thought death had undone so many.<a
+							epub:type="noteref" class="noteref" href="#note-7">*</a>
+					</div>
+					<div id="ln64">Sighs, short and infrequent, were exhaled,<a epub:type="noteref" class="noteref"
+						href="#note-8">*</a></div>
+					<div>And each man fixed his eyes before his feet.</div>
+					<div>Flowed up the hill and down King William Street,</div>
+					<div>To where Saint Mary Woolnoth kept the hours</div>
+					<div id="ln68">With a dead sound on the final stroke of nine.<a
+							epub:type="noteref" class="noteref" href="#note-9">*</a>
+					</div>
+					<div>There I saw one I knew, and stopped him, crying
+						"Stetson!</div>
+					<div>"You who were with me in the ships at Mylae!<span class="lnum"
+							>70</span>
+					</div>
+					<div>"That corpse you planted last year in your garden,</div>
+					<div>"Has it begun to sprout? Will it bloom this year?</div>
+					<div>"Or has the sudden frost disturbed its bed?</div>
+				</div>
+				<div class="linegroup">
+					<div id="ln74">"Oh keep the Dog far hence, that's friend to men,<a
+							epub:type="noteref" class="noteref" href="#note-10">*</a>
+					</div>
+					<div>"Or with his nails he'll dig it up again!</div>
+					<div id="ln76">"You! <span xml:lang="fr">hypocrite lecteur! - mon semblable, -
+							mon frere</span> !"<a epub:type="noteref" class="noteref" href="#note-11">*</a>
+					</div>
+				</div>
+			</section>
+			<section id="ch2">
+				<h2>II. A GAME OF CHESS</h2>
+				<div class="linegroup">
+					<div id="ln77">The Chair she sat in, like a burnished throne,<a
+						epub:type="noteref" class="noteref" href="#note-12">*</a></div>
+					<div>Glowed on the marble, where the glass</div>
+					<div>Held up by standards wrought with fruited vines</div>
+					<div>From which a golden Cupidon peeped out<span class="lnum"
+							>80</span>
+					</div>
+					<div>(Another hid his eyes behind his wing)</div>
+					<div>Doubled the flames of sevenbranched candelabra</div>
+					<div>Reflecting light upon the table as</div>
+					<div>The glitter of her jewels rose to meet it,</div>
+					<div>From satin cases poured in rich profusion;</div>
+					<div>In vials of ivory and coloured glass</div>
+					<div>Unstoppered, lurked her strange synthetic perfumes,</div>
+					<div>Unguent, powdered, or liquid - troubled, confused</div>
+					<div>And drowned the sense in odours; stirred by the air</div>
+					<div>That freshened from the window, these ascended<span
+							class="lnum">90</span>
+					</div>
+					<div>In fattening the prolonged candle-flames,</div>
+					<div id="ln92">Flung their smoke into the laquearia,<a epub:type="noteref" class="noteref"
+						href="#note-13">*</a></div>
+					<div>Stirring the pattern on the coffered ceiling.</div>
+					<div>Huge sea-wood fed with copper</div>
+					<div>Burned green and orange, framed by the coloured stone,</div>
+					<div>In which sad light a carved dolphin swam.</div>
+					<div>Above the antique mantel was displayed</div>
+					<div id="ln98">As though a window gave upon the sylvan scene<a
+							epub:type="noteref" class="noteref" href="#note-14">*</a>
+					</div>
+					<div id="ln99">The change of Philomel, by the barbarous king<a
+							epub:type="noteref" class="noteref" href="#note-15">*</a>
+					</div>
+					<div id="ln100">So rudely forced; yet there the nightingale<a
+							epub:type="noteref" class="noteref" href="#note-16">*</a>
+						<span class="lnum">100</span>
+					</div>
+					<div>Filled all the desert with inviolable voice</div>
+					<div>And still she cried, and still the world pursues,</div>
+					<div>"Jug Jug" to dirty ears.</div>
+					<div>And other withered stumps of time</div>
+					<div>Were told upon the walls; staring forms</div>
+					<div>Leaned out, leaning, hushing the room enclosed.</div>
+					<div>Footsteps shuffled on the stair.</div>
+					<div>Under the firelight, under the brush, her hair</div>
+					<div>Spread out in fiery points</div>
+					<div>Glowed into words, then would be savagely still.<span
+							class="lnum">110</span>
+					</div>
+				</div>
+				<div class="linegroup">
+					<div class="linegroup">
+						<div>"My nerves are bad to-night. Yes, bad. Stay with me.</div>
+						<div>"Speak to me. Why do you never speak. Speak.</div>
+						<div>"What are you thinking of? What thinking? What?</div>
+						<div>"I never know what you are thinking. Think."</div>
+					</div>
+					<div class="linegroup">
+						<div id="ln115">I think we are in rats' alley<a epub:type="noteref" class="noteref"
+								href="#note-17">*</a>
+						</div>
+						<div>Where the dead men lost their bones.</div>
+					</div>
+				</div>
+				<div class="linegroup">
+					<div>"What is that noise?"</div>
+					<div class="indent" id="ln118">The wind under the door.<a epub:type="noteref" class="noteref" href="#note-18"
+							>*</a>
+					</div>
+					<div>"What is that noise now? What is the wind doing?"</div>
+					<div class="indent">Nothing again nothing.<span class="lnum">120</span>
+					</div>
+				</div>
+				<div class="linegroup">
+					<div>"Do</div>
+					<div>"You know nothing? Do you see nothing? Do you remember</div>
+					<div>"Nothing?"</div>
+				</div>
+				<div class="linegroup">
+					<div>I remember</div>
+					<div>Those are pearls that were his eyes.</div>
+					<div id="ln126">"Are you alive, or not? Is there nothing in your head?"<a
+							epub:type="noteref" class="noteref" href="#note-19">*</a>
+					</div>
+					<div>But</div>
+					<div>O O O O that Shakespeherian Rag&#x2015;</div>
+					<div>It's so elegant</div>
+					<div>So intelligent<span class="lnum">130</span>
+					</div>
+					<div>"What shall I do now? What shall I do?"</div>
+					<div>I shall rush out as I am, and walk the street</div>
+					<div>"With my hair down, so. What shall we do to-morrow?</div>
+					<div>"What shall we ever do?"</div>
+					<div>The hot water at ten.</div>
+					<div>And if it rains, a closed car at four.</div>
+					<div>And we shall play a game of chess,</div>
+					<div id="ln138">Pressing lidless eyes and waiting for a knock upon the door.<a
+							epub:type="noteref" class="noteref" href="#note-20">*</a>
+					</div>
+				</div>
+				<div class="linegroup">
+					<div>When Lil's husband got demobbed, I said -</div>
+					<div>I didn't mince my words, I said to her myself,<span
+							class="lnum">140</span>
+					</div>
+					<div>HURRY UP PLEASE ITS TIME</div>
+					<div>Now Albert's coming back, make yourself a bit smart.</div>
+					<div>He'll want to know what you done with that money he gave
+						you</div>
+					<div>To get yourself some teeth. He did, I was there.</div>
+					<div>You have them all out, Lil, and get a nice set,</div>
+					<div>He said, I swear, I can't bear to look at you.</div>
+					<div>And no more can't I, I said, and think of poor Albert,</div>
+					<div>He's been in the army four years, he wants a good time,</div>
+					<div>And if you don't give it him, there's others will, I
+						said.</div>
+					<div>Oh is there, she said. Something o' that, I said.<span
+							class="lnum">150</span>
+					</div>
+					<div>Then I'll know who to thank, she said, and give me a straight
+						look.</div>
+					<div>HURRY UP PLEASE ITS TIME</div>
+					<div>If you don't like it you can get on with it, I said.</div>
+					<div>Others can pick and choose if you can't.</div>
+					<div>But if Albert makes off, it won't be for lack of
+						telling.</div>
+					<div>You ought to be ashamed, I said, to look so antique.</div>
+					<div>(And her only thirty-one.)</div>
+					<div>I can't help it, she said, pulling a long face,</div>
+					<div>It's them pills I took, to bring it off, she said.</div>
+					<div>(She's had five already, and nearly died of young George.)<span
+							class="lnum">160</span>
+					</div>
+					<div>The chemist said it would be all right, but I've never been the
+						same.</div>
+					<div>You <em>are</em> a proper fool, I said.</div>
+					<div>Well, if Albert won't leave you alone, there it is, I
+						said,</div>
+					<div>What you get married for if you don't want children?</div>
+					<div>HURRY UP PLEASE ITS TIME</div>
+					<div>Well, that Sunday Albert was home, they had a hot
+						gammon,</div>
+					<div>And they asked me in to dinner, to get the beauty of it
+						hot&#x2015;</div>
+					<div>HURRY UP PLEASE ITS TIME</div>
+					<div>HURRY UP PLEASE ITS TIME</div>
+					<div>Goonight Bill. Goonight Lou. Goonight May. Goonight.<span
+							class="lnum">170</span>
+					</div>
+					<div>Ta ta. Goonight. Goonight.</div>
+					<div>Good night, ladies, good night, sweet ladies, good night, good
+						night.</div>
+				</div>
+			</section>
+			<section id="ch3">
+				<h2>III. THE FIRE SERMON</h2>
+				<div class="linegroup">
+					<div>The river's tent is broken: the last fingers of leaf</div>
+					<div>Clutch and sink into the wet bank. The wind</div>
+					<div>Crosses the brown land, unheard. The nymphs are
+						departed.</div>
+					<div id="ln176">Sweet Thames, run softly, till I end my song.<a
+							epub:type="noteref" class="noteref" href="#note-21">*</a>
+					</div>
+					<div>The river bears no empty bottles, sandwich papers,</div>
+					<div>Silk handkerchiefs, cardboard boxes, cigarette ends</div>
+					<div>Or other testimony of summer nights. The nymphs are
+						departed.</div>
+					<div>And their friends, the loitering heirs of city directors;<span
+							class="lnum">180</span>
+					</div>
+					<div>Departed, have left no addresses.</div>
+					<div>By the waters of Leman I sat down and wept . . .</div>
+					<div>Sweet Thames, run softly till I end my song,</div>
+					<div>Sweet Thames, run softly, for I speak not loud or long.</div>
+					<div>But at my back in a cold blast I hear</div>
+					<div>The rattle of the bones, and chuckle spread from ear to
+						ear.</div>
+				</div>
+				<div class="linegroup">
+					<div>A rat crept softly through the vegetation</div>
+					<div>Dragging its slimy belly on the bank</div>
+					<div>While I was fishing in the dull canal</div>
+					<div>On a winter evening round behind the gashouse<span class="lnum"
+							>190</span>
+					</div>
+					<div>Musing upon the king my brother's wreck</div>
+					<div id="ln192">And on the king my father's death before him.<a
+							epub:type="noteref" class="noteref" href="#note-22">*</a>
+					</div>
+					<div>White bodies naked on the low damp ground</div>
+					<div>And bones cast in a little low dry garret,</div>
+					<div>Rattled by the rat's foot only, year to year.</div>
+					<div id="ln196">But at my back from time to time I hear<a epub:type="noteref" class="noteref"
+							href="#note-23">*</a>
+					</div>
+					<div id="ln197">The sound of horns and motors, which shall bring<a
+							epub:type="noteref" class="noteref" href="#note-24">*</a>
+					</div>
+					<div>Sweeney to Mrs. Porter in the spring.</div>
+					<div id="ln199">O the moon shone bright on Mrs. Porter<a epub:type="noteref" class="noteref"
+							href="#note-25">*</a>
+					</div>
+					<div>And on her daughter<span class="lnum">200</span>
+					</div>
+					<div>They wash their feet in soda water</div>
+					<div id="ln202" xml:lang="fr">
+						<em>Et O ces voix d'enfants, chantant dans la coupole</em>!<a epub:type="noteref" class="noteref"
+							href="#note-26">*</a></div>
+				</div>
+				<div class="linegroup">
+					<div>Twit twit twit</div>
+					<div>Jug jug jug jug jug jug</div>
+					<div>So rudely forc'd.</div>
+					<div>Tereu</div>
+				</div>
+				<div class="linegroup">
+					<div>Unreal City</div>
+					<div>Under the brown fog of a winter noon</div>
+					<div>Mr. Eugenides, the Smyrna merchant</div>
+					<div id="ln210">Unshaven, with a pocket full of currants<a epub:type="noteref" class="noteref"
+							href="#note-27">*</a>
+						<span class="lnum">210</span>
+					</div>
+					<div>C.i.f. London: documents at sight,</div>
+					<div>Asked me in demotic French</div>
+					<div>To luncheon at the Cannon Street Hotel</div>
+					<div>Followed by a weekend at the Metropole.</div>
+				</div>
+				<div class="linegroup">
+					<div>At the violet hour, when the eyes and back</div>
+					<div>Turn upward from the desk, when the human engine waits</div>
+					<div>Like a taxi throbbing waiting,</div>
+					<div id="ln218">I Tiresias, though blind, throbbing between two lives,<a
+						epub:type="noteref" class="noteref" href="#note-28">*</a></div>
+					<div>Old man with wrinkled female breasts, can see</div>
+					<div>At the violet hour, the evening hour that strives<span
+							class="lnum">220</span>
+					</div>
+					<div id="ln221">Homeward, and brings the sailor home from sea,<a
+						epub:type="noteref" class="noteref" href="#note-29">*</a></div>
+					<div>The typist home at teatime, clears her breakfast, lights</div>
+					<div>Her stove, and lays out food in tins.</div>
+					<div>Out of the window perilously spread</div>
+					<div>Her drying combinations touched by the sun's last rays,</div>
+					<div>On the divan are piled (at night her bed)</div>
+					<div>Stockings, slippers, camisoles, and stays.</div>
+					<div>I Tiresias, old man with wrinkled dugs</div>
+					<div>Perceived the scene, and foretold the rest -</div>
+					<div>I too awaited the expected guest.<span class="lnum">230</span>
+					</div>
+					<div>He, the young man carbuncular, arrives,</div>
+					<div>A small house agent's clerk, with one bold stare,</div>
+					<div>One of the low on whom assurance sits</div>
+					<div>As a silk hat on a Bradford millionaire.</div>
+					<div>The time is now propitious, as he guesses,</div>
+					<div>The meal is ended, she is bored and tired,</div>
+					<div>Endeavours to engage her in caresses</div>
+					<div>Which still are unreproved, if undesired.</div>
+					<div>Flushed and decided, he assaults at once;</div>
+					<div>Exploring hands encounter no defence;<span class="lnum"
+							>240</span>
+					</div>
+					<div>His vanity requires no response,</div>
+					<div>And makes a welcome of indifference.</div>
+					<div>(And I Tiresias have foresuffered all</div>
+					<div>Enacted on this same divan or bed;</div>
+					<div>I who have sat by Thebes below the wall</div>
+					<div>And walked among the lowest of the dead.)</div>
+					<div>Bestows one final patronising kiss,</div>
+					<div>And gropes his way, finding the stairs unlit . . .</div>
+				</div>
+				<div class="linegroup">
+					<div>She turns and looks a moment in the glass,</div>
+					<div>Hardly aware of her departed lover;<span class="lnum"
+							>250</span>
+					</div>
+					<div>Her brain allows one half-formed thought to pass:</div>
+					<div>"Well now that's done: and I'm glad it's over."</div>
+					<div id="ln253">When lovely woman stoops to folly and<a epub:type="noteref" class="noteref"
+							href="#note-30">*</a>
+					</div>
+					<div>Paces about her room again, alone,</div>
+					<div>She smoothes her hair with automatic hand,</div>
+					<div>And puts a record on the gramophone.</div>
+				</div>
+				<div class="linegroup">
+					<div id="ln257">"This music crept by me upon the waters"<a epub:type="noteref" class="noteref"
+							href="#note-31">*</a>
+					</div>
+					<div>And along the Strand, up Queen Victoria Street.</div>
+					<div>O City city, I can sometimes hear</div>
+					<div>Beside a public bar in Lower Thames Street,<span class="lnum"
+							>260</span>
+					</div>
+					<div>The pleasant whining of a mandoline</div>
+					<div>And a clatter and a chatter from within</div>
+					<div>Where fishmen lounge at noon: where the walls</div>
+					<div id="ln264">Of Magnus Martyr hold<a epub:type="noteref" class="noteref" href="#note-32"
+							>*</a>
+					</div>
+					<div>Inexplicable splendour of Ionian white and gold.</div>
+				</div>
+				<div class="linegroup indent">
+					<div id="ln266">The river sweats<a epub:type="noteref" class="noteref" href="#note-33">*</a>
+					</div>
+					<div>Oil and tar</div>
+					<div>The barges drift</div>
+					<div>With the turning tide</div>
+					<div>Red sails<span class="lnum">270</span>
+					</div>
+					<div>Wide</div>
+					<div>To leeward, swing on the heavy spar.</div>
+					<div>The barges wash</div>
+					<div>Drifting logs</div>
+					<div>Down Greenwich reach</div>
+					<div>Past the Isle of Dogs.</div>
+					<div class="indent">Weialala leia</div>
+					<div class="indent">Wallala leialala</div>
+				</div>
+				<div class="linegroup indent">
+					<div id="ln279">Elizabeth and Leicester<a epub:type="noteref" class="noteref" href="#note-34"
+							>*</a>
+					</div>
+					<div>Beating oars<span class="lnum">280</span>
+					</div>
+					<div>The stern was formed</div>
+					<div>A gilded shell</div>
+					<div>Red and gold</div>
+					<div>The brisk swell</div>
+					<div>Rippled both shores</div>
+					<div>Southwest wind</div>
+					<div>Carried down stream</div>
+					<div>The peal of bells</div>
+					<div>White towers</div>
+					<div class="indent">Weialala leia<span class="lnum">290</span>
+					</div>
+					<div class="indent">Wallala leialala</div>
+				</div>
+				<div class="linegroup">
+					<div>"Trams and dusty trees.</div>
+					<div id="ln293">Highbury bore me. Richmond and Kew<a epub:type="noteref" class="noteref"
+							href="#note-35">*</a>
+					</div>
+					<div>Undid me. By Richmond I raised my knees</div>
+					<div>Supine on the floor of a narrow canoe."</div>
+				</div>
+				<div class="linegroup">
+					<div>"My feet are at Moorgate, and my heart</div>
+					<div>Under my feet. After the event</div>
+					<div>He wept. He promised 'a new start'.</div>
+					<div>I made no comment. What should I resent?"</div>
+					<div>"On Margate Sands.<span class="lnum">300</span>
+					</div>
+					<div>I can connect</div>
+					<div>Nothing with nothing.</div>
+					<div>The broken fingernails of dirty hands.</div>
+					<div>My people humble people who expect</div>
+					<div>Nothing."</div>
+					<div class="indent">la la</div>
+				</div>
+				<div class="linegroup">
+					<div id="ln307">To Carthage then I came<a epub:type="noteref" class="noteref" href="#note-36"
+							>*</a>
+					</div>
+				</div>
+				<div class="linegroup">
+					<div  id="ln308">Burning burning burning burning<a epub:type="noteref" class="noteref"
+							href="#note-37">*</a>
+					</div>
+					<div  id="ln309">O Lord Thou pluckest me out<a epub:type="noteref" class="noteref"
+							href="#note-38">*</a>
+					</div>
+					<div>O Lord Thou pluckest<span class="lnum">310</span>
+					</div>
+				</div>
+				<div class="linegroup">
+					<div>burning</div>
+				</div>
+			</section>
+			<section id="ch4">
+				<h2>IV. DEATH BY WATER</h2>
+				<div class="linegroup">
+					<div>Phlebas the Phoenician, a fortnight dead,</div>
+					<div>Forgot the cry of gulls, and the deep sea swell</div>
+					<div>And the profit and loss.</div>
+				</div>
+				<div class="linegroup">
+					<div class="indent2">A current under sea</div>
+					<div>Picked his bones in whispers. As he rose and fell</div>
+					<div>He passed the stages of his age and youth</div>
+					<div>Entering the whirlpool.</div>
+				</div>
+				<div class="linegroup">
+					<div class="indent2">Gentile or Jew</div>
+					<div>O you who turn the wheel and look to windward,<span
+							class="lnum">320</span>
+					</div>
+					<div>Consider Phlebas, who was once handsome and tall as you.</div>
+				</div>
+			</section>
+			<section id="ch5">
+				<h2>V. WHAT THE THUNDER SAID</h2>
+				<div class="linegroup">
+					<div>After the torchlight red on sweaty faces</div>
+					<div>After the frosty silence in the gardens</div>
+					<div>After the agony in stony places</div>
+					<div>The shouting and the crying</div>
+					<div>Prison and palace and reverberation</div>
+					<div>Of thunder of spring over distant mountains</div>
+					<div>He who was living is now dead</div>
+					<div>We who were living are now dying</div>
+					<div>With a little patience<span class="lnum">330</span>
+					</div>
+				</div>
+				<div class="linegroup">
+					<div>Here is no water but only rock</div>
+					<div>Rock and no water and the sandy road</div>
+					<div>The road winding above among the mountains</div>
+					<div>Which are mountains of rock without water</div>
+					<div>If there were water we should stop and drink</div>
+					<div>Amongst the rock one cannot stop or think</div>
+					<div>Sweat is dry and feet are in the sand</div>
+					<div>If there were only water amongst the rock</div>
+					<div>Dead mountain mouth of carious teeth that cannot spit</div>
+					<div>Here one can neither stand nor lie nor sit<span class="lnum"
+							>340</span>
+					</div>
+					<div>There is not even silence in the mountains</div>
+					<div>But dry sterile thunder without rain</div>
+					<div>There is not even solitude in the mountains</div>
+					<div>But red sullen faces sneer and snarl</div>
+					<div>From doors of mudcracked houses</div>
+					<div class="linegroup">
+						<div class="indent2">If there were water</div>
+						<div>And no rock</div>
+						<div>If there were rock</div>
+						<div>And also water</div>
+						<div>And water<span class="lnum">350</span>
+						</div>
+						<div>A spring</div>
+						<div>A pool among the rock</div>
+						<div>If there were the sound of water only</div>
+						<div>Not the cicada</div>
+						<div>And dry grass singing</div>
+						<div>But sound of water over a rock</div>
+						<div id="ln357">Where the hermit-thrush sings in the pine trees<a
+								epub:type="noteref" class="noteref" href="#note-39">*</a>
+						</div>
+						<div>Drip drop drip drop drop drop drop</div>
+						<div>But there is no water</div>
+					</div>
+				</div>
+				<div class="linegroup">
+					<div  id="ln360">Who is the third who walks always beside you?<a
+							epub:type="noteref" class="noteref" href="#note-40">*</a>
+						<span class="lnum">360</span>
+					</div>
+					<div>When I count, there are only you and I together</div>
+					<div>But when I look ahead up the white road</div>
+					<div>There is always another one walking beside you</div>
+					<div>Gliding wrapt in a brown mantle, hooded</div>
+					<div>I do not know whether a man or a woman</div>
+					<div id="ln367">&#x2015;But who is that on the other side of you?<a
+							epub:type="noteref" class="noteref" href="#note-41">*</a>
+					</div>
+				</div>
+				<div class="linegroup">
+					<div>What is that sound high in the air</div>
+					<div>Murmur of maternal lamentation</div>
+					<div>Who are those hooded hordes swarming</div>
+					<div>Over endless plains, stumbling in cracked earth<span
+							class="lnum">370</span>
+					</div>
+					<div>Ringed by the flat horizon only</div>
+					<div>What is the city over the mountains</div>
+					<div>Cracks and reforms and bursts in the violet air</div>
+					<div>Falling towers</div>
+					<div>Jerusalem Athens Alexandria</div>
+					<div>Vienna London</div>
+					<div>Unreal</div>
+				</div>
+				<div class="linegroup">
+					<div>A woman drew her long black hair out tight</div>
+					<div>And fiddled whisper music on those strings</div>
+					<div>And bats with baby faces in the violet light<span class="lnum"
+							>380</span>
+					</div>
+					<div>Whistled, and beat their wings</div>
+					<div>And crawled head downward down a blackened wall</div>
+					<div>And upside down in air were towers</div>
+					<div>Tolling reminiscent bells, that kept the hours</div>
+					<div>And voices singing out of empty cisterns and exhausted
+						wells.</div>
+				</div>
+				<div class="linegroup">
+					<div>In this decayed hole among the mountains</div>
+					<div>In the faint moonlight, the grass is singing</div>
+					<div>Over the tumbled graves, about the chapel</div>
+					<div>There is the empty chapel, only the wind's home.</div>
+					<div>It has no windows, and the door swings,<span class="lnum"
+							>390</span>
+					</div>
+					<div>Dry bones can harm no one.</div>
+					<div>Only a cock stood on the rooftree</div>
+					<div>Co co rico co co rico</div>
+					<div>In a flash of lightning. Then a damp gust</div>
+					<div>Bringing rain</div>
+				</div>
+				<div class="linegroup">
+					<div>Ganga was sunken, and the limp leaves</div>
+					<div>Waited for rain, while the black clouds</div>
+					<div>Gathered far distant, over Himavant.</div>
+					<div>The jungle crouched, humped in silence.</div>
+					<div>Then spoke the thunder<span class="lnum">400</span>
+					</div>
+					<div>DA</div>
+					<div id="ln402">
+						<span xml:lang="sa">Datta</span>: what have we given?<a epub:type="noteref" class="noteref"
+							href="#note-42">*</a>
+					</div>
+					<div>My friend, blood shaking my heart</div>
+					<div>The awful daring of a moment's surrender</div>
+					<div>Which an age of prudence can never retract</div>
+					<div>By this, and this only, we have existed</div>
+					<div>Which is not to be found in our obituaries </div>
+					<div id="ln408">Or in memories draped by the beneficent spider<a
+							epub:type="noteref" class="noteref" href="#note-43">*</a>
+					</div>
+					<div>Or under seals broken by the lean solicitor</div>
+					<div>In our empty rooms<span class="lnum">410</span>
+					</div>
+					<div>DA</div>
+					<div  id="ln412">
+						<span xml:lang="sa">Dayadhvam</span>: I have heard the key<a
+							epub:type="noteref" class="noteref" href="#note-44">*</a>
+					</div>
+					<div>Turn in the door once and turn once only</div>
+					<div>We think of the key, each in his prison</div>
+					<div>Thinking of the key, each confirms a prison</div>
+					<div>Only at nightfall, aetherial rumours</div>
+					<div>Revive for a moment a broken Coriolanus</div>
+					<div>DA</div>
+					<div>
+						<span xml:lang="sa">Damyata</span>: The boat responded</div>
+					<div>Gaily, to the hand expert with sail and oar<span class="lnum"
+							>420</span>
+					</div>
+					<div>The sea was calm, your heart would have responded</div>
+					<div>Gaily, when invited, beating obedient</div>
+					<div>To controlling hands</div>
+				</div>
+				<div class="linegroup">
+					<div class="indent">I sat upon the shore</div>
+					<div id="ln425">Fishing, with the arid plain behind me<a epub:type="noteref" class="noteref"
+							href="#note-45">*</a>
+					</div>
+					<div>Shall I at least set my lands in order?</div>
+					<div>London Bridge is falling down falling down falling down</div>
+					<div  id="ln428" xml:lang="it">
+						<em>Poi s'ascose nel foco che gli affina</em>
+						<a epub:type="noteref" class="noteref" href="#note-46">*</a>
+					</div>
+					<div id="ln429">
+						<span xml:lang="it">
+							<em>Quando fiam ceu chelidon</em>
+						</span> - O swallow swallow<a epub:type="noteref" class="noteref" href="#note-47">*</a>
+					</div>
+					<div  id="ln430" xml:lang="fr">
+						<em>Le Prince d'Aquitaine a la tour abolie</em>
+						<a epub:type="noteref" class="noteref" href="#note-48">*</a>
+						<span class="lnum">430</span>
+					</div>
+					<div>These fragments I have shored against my ruins</div>
+					<div id="ln432">Why then Ile fit you. Hieronymo's mad againe.<a
+							epub:type="noteref" class="noteref" href="#note-49">*</a>
+					</div>
+					<div  xml:lang="sa">Datta. Dayadhvam. Damyata.</div>
+					<div id="ln434" class="linegroup indent">
+						<span  xml:lang="sa">Shantih shantih shantih<a epub:type="noteref" class="noteref"
+								href="#note-50">*</a>
+						</span>
+					</div>
+				</div>
+			</section>
+		</section>
+		<section epub:type="backmatter" id="backmatter">
+			<section epub:type="rearnotes" id="rearnotes">
+				<h2>NOTES ON "THE WASTE LAND"</h2>
+				<p>Not only the title, but the plan and a good deal of the incidental symbolism of
+					the poem were suggested by Miss Jessie L. Weston's book on the Grail legend:
+					From Ritual to Romance</p>
+				<p>Indeed, so deeply am I indebted, Miss Weston's book will elucidate the
+					difficulties of the poem much better than my notes can do; and I recommend it
+					(apart from the great interest of the book itself) to any who think such
+					elucidation of the poem worth the trouble. To another work of anthropology I am
+					indebted in general, one which has influenced our generation profoundly; I mean
+					The Golden Bough; I have used especially the two volumes Adonis, Attis, Osiris.
+					Anyone who is acquainted with these works will immediately recognise in the poem
+					certain references to vegetation ceremonies.</p>
+				<section>
+					<h3>I. THE BURIAL OF THE DEAD</h3>
+					<div epub:type="rearnote" id="note-1">
+						<p><a href="#ln20">Line 20.</a> Cf. Ezekiel 2:1.</p>
+					</div>
+					<div epub:type="rearnote" id="note-2">
+						<p><a href="#ln23">23.</a> Cf. Ecclesiastes 12:5.</p>
+					</div>
+					<div epub:type="rearnote" id="note-3">
+						<p><a href="#ln31">31.</a> V. Tristan und Isolde, i, verses 5-8.</p>
+					</div>
+					<div epub:type="rearnote" id="note-4">
+						<p><a href="#ln42">42.</a> Id. iii, verse 24.</p>
+					</div>
+					<div epub:type="rearnote" id="note-5">
+						<p><a href="#ln46">46.</a> I am not familiar with the exact constitution of the Tarot pack of
+							cards, from which I have obviously departed to suit my own convenience.
+							The Hanged Man, a member of the traditional pack, fits my purpose in two
+							ways: because he is associated in my mind with the Hanged God of Frazer,
+							and because I associate him with the hooded figure in the passage of the
+							disciples to Emmaus in Part V. The Phoenician Sailor and the Merchant
+							appear later; also the "crowds of people," and Death by Water is
+							executed in Part IV. The Man with Three Staves (an authentic member of
+							the Tarot pack) I associate, quite arbitrarily, with the Fisher King
+							himself.</p>
+					</div>
+					<div epub:type="rearnote" id="note-6">
+						<p><a href="#ln60">60.</a> Cf. Baudelaire:</p>
+						<blockquote xml:lang="fr">
+							<p>"Fourmillante cite;, cite; pleine de reves,<br />Ou le spectre en
+								plein jour raccroche le passant."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-7">
+						<p><a href="#ln63">63.</a> Cf. Inferno, iii. 55-7.</p>
+						<blockquote xml:lang="it">
+							<p>"si lunga tratta<br />di gente, ch'io non avrei mai creduto<br />che
+								morte tanta n'avesse disfatta."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-8">
+						<p><a href="#ln64">64.</a> Cf. Inferno, iv. 25-7:</p>
+						<blockquote xml:lang="it">
+							<p>"Quivi, secondo che per ascoltahre,<br />"non avea pianto, ma' che di
+								sospiri,<br />"che l'aura eterna facevan tremare."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-9">
+						<p><a href="#ln68">68.</a> A phenomenon which I have often noticed.</p>
+					</div>
+					<div epub:type="rearnote" id="note-10">
+						<p><a href="#ln74">74.</a> Cf. the Dirge in Webster's White Devil .</p>
+					</div>
+					<div epub:type="rearnote" id="note-11">
+						<p><a href="#ln76">76.</a> V. Baudelaire, Preface to Fleurs du Mal.</p>
+					</div>
+				</section>
+				<section>
+					<h3>II. A GAME OF CHESS</h3>
+					<div epub:type="rearnote" id="note-12">
+						<p><a href="#ln77">77.</a> Cf. Antony and Cleopatra, II. ii., l. 190.</p>
+					</div>
+					<div epub:type="rearnote" id="note-13">
+						<p><a href="#ln92">92.</a> Laquearia. V. Aeneid, I. 726:</p>
+						<blockquote xml:lang="la">
+							<p>dependent lychni laquearibus aureis incensi, et noctem
+								flammis<br />funalia vincunt.</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-14">
+						<p><a href="#ln98">98.</a> Sylvan scene. V. Milton, Paradise Lost, iv. 140.</p>
+					</div>
+					<div epub:type="rearnote" id="note-15">
+						<p><a href="#ln99">99.</a> V. Ovid, Metamorphoses, vi, Philomela.</p>
+					</div>
+					<div epub:type="rearnote" id="note-16">
+						<p><a href="#ln100">100.</a> Cf. Part III, l. 204.</p>
+					</div>
+					<div epub:type="rearnote" id="note-17">
+						<p><a href="#ln115">115.</a> Cf. Part III, l. 195.</p>
+					</div>
+					<div epub:type="rearnote" id="note-18">
+						<p><a href="#ln118">118.</a> Cf. Webster:</p>
+						<blockquote>
+							<p>"Is the wind in that door still?"</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-19">
+						<p><a href="#ln126">126.</a> Cf. Part I, l. 37, 48.</p>
+					</div>
+					<div epub:type="rearnote" id="note-20">
+						<p><a href="#ln138">138.</a> Cf. the game of chess in Middleton's Women beware Women.</p>
+					</div>
+				</section>
+				<section>
+					<h3>III. THE FIRE SERMON</h3>
+					<div epub:type="rearnote" id="note-21">
+						<p><a href="#ln176">176.</a> V. Spenser, Prothalamion.</p>
+					</div>
+					<div epub:type="rearnote" id="note-22">
+						<p><a href="#ln192">192.</a> Cf. The Tempest, I. ii.</p>
+					</div>
+					<div epub:type="rearnote" id="note-23">
+						<p><a href="#ln196">196.</a> Cf. Marvell, To His Coy Mistress.</p>
+					</div>
+					<div epub:type="rearnote" id="note-24">
+						<p><a href="#ln197">197.</a> Cf. Day, Parliament of Bees:</p>
+						<blockquote>
+							<div>
+								<div>"When of the sudden, listening, you shall
+									hear,</div>
+								<div>"A noise of horns and hunting, which shall
+									bring</div>
+								<div>"Actaeon to Diana in the spring,</div>
+								<div>"Where all shall see her naked skin . . ."</div>
+							</div>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-25">
+						<p><a href="#ln199">199.</a> I do not know the origin of the ballad from which these lines are
+							taken: it was reported to me from Sydney, Australia.</p>
+					</div>
+					<div epub:type="rearnote" id="note-26">
+						<p><a href="#ln202">202.</a> V. Verlaine, Parsifal.</p>
+					</div>
+					<div epub:type="rearnote" id="note-27">
+						<p><a href="#ln210">210.</a> The currants were quoted at a price "cost insurance and freight to
+							London"; and the Bill of Lading etc. were to be handed to the buyer upon
+							payment of the sight draft.</p>
+					</div>
+					<div epub:type="rearnote" id="note-28">
+						<p><a href="#ln218">218.</a> Tiresias, although a mere spectator and not indeed a "character," is
+							yet the most important personage in the poem, uniting all the rest. Just
+							as the one-eyed merchant, seller of currants, melts into the Phoenician
+							Sailor, and the latter is not wholly distinct from Ferdinand Prince of
+							Naples, so all the women are one woman, and the two sexes meet in
+							Tiresias. What Tiresias sees, in fact, is the substance of the poem. The
+							whole passage from Ovid is of great anthropological interest:</p>
+						<blockquote xml:lang="la">
+							<p>'. . . Cum Iunone iocos et maior vestra profecto est<br /> Quam, quae
+								contingit maribus,' dixisse, 'voluptas.'<br /> Illa negat; placuit
+								quae sit sententia docti<br /> Quaerere Tiresiae: venus huic erat
+								utraque nota.<br /> Nam duo magnorum viridi coeuntia silva<br />
+								Corpora serpentum baculi violaverat ictu<br /> Deque viro factus,
+								mirabile, femina septem<br /> Egerat autumnos; octavo rursus
+								eosdem<br /> Vidit et 'est vestrae si tanta potentia plagae,'<br />
+								Dixit 'ut auctoris sortem in contraria mutet,<br /> Nunc quoque vos
+								feriam!' percussis anguibus isdem<br /> Forma prior rediit
+								genetivaque venit imago.<br /> Arbiter hic igitur sumptus de lite
+								iocosa<br /> Dicta Iovis firmat; gravius Saturnia iusto<br /> Nec
+								pro materia fertur doluisse suique<br /> Iudicis aeterna damnavit
+								lumina nocte,<br /> At pater omnipotens (neque enim licet inrita
+								cuiquam<br /> Facta dei fecisse deo) pro lumine adempto<br /> Scire
+								futura dedit poenamque levavit honore.<br />
+							</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-29">
+						<p><a href="#ln221">221.</a> This may not appear as exact as Sappho's lines, but I had in mind
+							the "longshore" or "dory" fisherman, who returns at nightfall.</p>
+					</div>
+					<div epub:type="rearnote" id="note-30">
+						<p><a href="#ln253">253.</a> V. Goldsmith, the song in The Vicar of Wakefield.</p>
+					</div>
+					<div epub:type="rearnote" id="note-31">
+						<p><a href="#ln257">257.</a> V. The Tempest, as above.</p>
+					</div>
+					<div epub:type="rearnote" id="note-32">
+						<p><a href="#ln264">264.</a> The interior of St. Magnus Martyr is to my mind one of the finest
+							among Wren's interiors. See The Proposed Demolition of Nineteen City
+							Churches (P. S. King & Son, Ltd.).</p>
+					</div>
+					<div epub:type="rearnote" id="note-33">
+						<p><a href="#ln266">266.</a> The Song of the (three) Thames-daughters begins here. From line 292
+							to 306 inclusive they speak in turn. V. Gutterdsammerung, III. i: the
+							Rhine-daughters.</p>
+					</div>
+					<div epub:type="rearnote" id="note-34">
+						<p><a href="#ln279">279.</a> V. Froude, Elizabeth, Vol. I, ch. iv, letter of De Quadra to Philip
+							of Spain:</p>
+						<blockquote>
+							<div>
+								<div>"In the afternoon we were in a barge, watching the
+									games on the river.</div>
+								<div>(The queen) was alone with Lord Robert and myself
+									on the poop,</div>
+								<div>when they began to talk nonsense, and went so far
+									that Lord Robert</div>
+								<div>at last said, as I was on the spot there was no
+									reason why they</div>
+								<div>should not be married if the queen pleased."</div>
+							</div>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-35">
+						<p><a href="#ln293">293.</a> Cf. Purgatorio, v. 133:</p>
+						<blockquote>
+							<p>"Ricorditi di me, che son la Pia;<br />Siena mi fe', disfecemi
+								Maremma."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-36">
+						<p><a href="#ln307">307.</a> V. St. Augustine's Confessions: "to Carthage then I came, where a
+							cauldron of unholy loves sang all about mine ears."</p>
+					</div>
+					<div epub:type="rearnote" id="note-37">
+						<p><a href="#ln308">308.</a> The complete text of the Buddha's Fire Sermon (which corresponds in
+							importance to the Sermon on the Mount) from which these words are taken,
+							will be found translated in the late Henry Clarke Warren's Buddhism in
+							Translation (Harvard Oriental Series). Mr. Warren was one of the great
+							pioneers of Buddhist studies in the Occident.</p>
+					</div>
+					<div epub:type="rearnote" id="note-38">
+						<p><a href="#ln309">309.</a> From St. Augustine's Confessions again. The collocation of these two
+							representatives of eastern and western asceticism, as the culmination of
+							this part of the poem, is not an accident.</p>
+					</div>
+				</section>
+				<section>
+					<h3>V. WHAT THE THUNDER SAID</h3>
+					<p>In the first part of Part V three themes are employed: the journey to Emmaus,
+						the approach to the Chapel Perilous (see Miss Weston's book) and the present
+						decay of eastern Europe.</p>
+					<div epub:type="rearnote" id="note-39">
+						<p><a href="#ln357">357.</a> This is Turdus aonalaschkae pallasii, the hermit-thrush which I have
+							heard in Quebec County. Chapman says (Handbook of Birds of Eastern North
+							America) "it is most at home in secluded woodland and thickety retreats.
+							. . . Its notes are not remarkable for variety or volume, but in purity
+							and sweetness of tone and exquisite modulation they are unequalled." Its
+							"water-dripping song" is justly celebrated.</p>
+					</div>
+					<div epub:type="rearnote" id="note-40">
+						<p><a href="#ln360">360.</a> The following lines were stimulated by the account of one of the
+							Antarctic expeditions (I forget which, but I think one of Shackleton's):
+							it was related that the party of explorers, at the extremity of their
+							strength, had the constant delusion that there was one more member than
+							could actually be counted.</p>
+					</div>
+					<div epub:type="rearnote" id="note-41">
+						<p><a href="#ln367">367-77.</a> Cf. Hermann Hesse, Blick ins Chaos:</p>
+						<blockquote xml:lang="de">
+							<p>"Schon ist halb Europa, schon ist zumindest der halbe Osten Europas
+								auf dem<br /> Wege zum Chaos, fhrt betrunken im heiligem Wahn am
+								Abgrund entlang<br /> und singt dazu, singt betrunken und hymnisch
+								wie Dmitri Karamasoff sang.<br /> Ueber diese Lieder lacht der
+								Bsrger beleidigt, der Heilige<br /> und Seher hrt sie mit
+								Trvnen."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-42">
+						<p><a href="#ln402">402.</a> <q xml:lang="sa">"Datta, dayadhvam, damyata"</q> (Give, sympathize,
+							control). The fable of the meaning of the Thunder is found in the
+							Brihadaranyaka-Upanishad, 5, 1. A translation is found in Deussen's
+							Sechzig Upanishads des Veda, p. 489.</p>
+					</div>
+					<div epub:type="rearnote" id="note-43">
+						<p><a href="#ln408">408.</a> Cf. Webster, The White Devil, v. vi:</p>
+						<blockquote>
+							<p>". . . they'll remarry<br /> Ere the worm pierce your winding-sheet,
+								ere the spider<br /> Make a thin curtain for your epitaphs."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-44">
+						<p><a href="#ln412">412.</a> Cf. Inferno, xxxiii. 46:</p>
+						<blockquote xml:lang="it">
+							<p>"ed io sentii chiavar l'uscio di sotto<br /> all'orribile torre."</p>
+						</blockquote>
+						<p>Also F. H. Bradley, Appearance and Reality, p. 346:</p>
+						<blockquote>
+							<p>"My external sensations are no less private to myself than are my
+								thoughts or my feelings. In either case my experience falls within
+								my own circle, a circle closed on the outside; and, with all its
+								elements alike, every sphere is opaque to the others which surround
+								it. . . . In brief, regarded as an existence which appears in a
+								soul, the whole world for each is peculiar and private to that
+								soul."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-45">
+						<p><a href="#ln425">425.</a> V. Weston, From Ritual to Romance; chapter on the Fisher King.</p>
+					</div>
+					<div epub:type="rearnote" id="note-46">
+						<p><a href="#ln428">428.</a> V. Purgatorio, xxvi. 148.</p>
+						<blockquote xml:lang="it">
+							<p>"'Ara vos prec per aquella valor<br /> 'que vos guida al som de
+								l'escalina,<br /> 'sovegna vos a temps de ma dolor.'<br /> Poi
+								s'ascose nel foco che gli affina."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-47">
+						<p><a href="#ln429">429.</a> V. Pervigilium Veneris. Cf. Philomela in Parts II and III.</p>
+					</div>
+					<div epub:type="rearnote" id="note-48">
+						<p><a href="#ln430">430.</a> V. Gerard de Nerval, Sonnet El Desdichado.</p>
+					</div>
+					<div epub:type="rearnote" id="note-49">
+						<p><a href="#ln432">432.</a> V. Kyd's Spanish Tragedy.</p>
+					</div>
+					<div epub:type="rearnote" id="note-50">
+						<p><a href="#ln434">434.</a> Shantih. Repeated as here, a formal ending to an Upanishad. 'The
+							Peace which passeth understanding' is a feeble translation of the
+							content of this word.</p>
+					</div>
+				</section>
+			</section>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/wasteland-otf/EPUB/wasteland-cover.jpg b/src/test/resources/30/expanded/invalid/wasteland-otf/EPUB/wasteland-cover.jpg
new file mode 100644
index 0000000..8308ed4
Binary files /dev/null and b/src/test/resources/30/expanded/invalid/wasteland-otf/EPUB/wasteland-cover.jpg differ
diff --git a/src/test/resources/30/expanded/invalid/wasteland-otf/EPUB/wasteland-nav.xhtml b/src/test/resources/30/expanded/invalid/wasteland-otf/EPUB/wasteland-nav.xhtml
new file mode 100644
index 0000000..0997eb1
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/wasteland-otf/EPUB/wasteland-nav.xhtml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<meta charset="utf-8"></meta>		
+		<link rel="stylesheet" type="text/css" href="wasteland.css" class="day" title="day"/> 
+		<link rel="alternate stylesheet" type="text/css" href="wasteland-night.css" class="night" title="night"/>		
+	</head>
+	<body>
+		<nav epub:type="toc" id="toc">			
+			<ol>
+				<li><a href="wasteland-content.xhtml#ch1">I. THE BURIAL OF THE DEAD</a></li>
+				<li><a href="wasteland-content.xhtml#ch2">II. A GAME OF CHESS</a></li>
+				<li><a href="wasteland-content.xhtml#ch3">III. THE FIRE SERMON</a></li>
+				<li><a href="wasteland-content.xhtml#ch4">IV. DEATH BY WATER</a></li>
+				<li><a href="wasteland-content.xhtml#ch5">V. WHAT THE THUNDER SAID</a></li>
+				<li><a href="wasteland-content.xhtml#rearnotes">NOTES ON "THE WASTE LAND"</a></li>
+			</ol>			
+		</nav>
+		<nav epub:type="landmarks">
+			<ol>
+				<li><a epub:type="frontmatter" href="wasteland-content.xhtml#frontmatter"
+						>frontmatter</a></li>
+				<li><a epub:type="bodymatter" href="wasteland-content.xhtml#bodymatter"
+						>bodymatter</a></li>
+				<li><a epub:type="backmatter" href="wasteland-content.xhtml#backmatter"
+						>backmatter</a></li>
+			</ol>
+		</nav>
+
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/wasteland-otf/EPUB/wasteland-night.css b/src/test/resources/30/expanded/invalid/wasteland-otf/EPUB/wasteland-night.css
new file mode 100644
index 0000000..f63448c
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/wasteland-otf/EPUB/wasteland-night.css
@@ -0,0 +1,19 @@
+ at charset "UTF-8";
+ at import "wasteland.css";
+
+body {
+    color: rgb(255,250,205);
+    background-color: rgb(20,20,20);
+}
+
+span.lnum {
+    color: rgb(175,170,125);
+}
+
+a.noteref {
+    color: rgb(120,120,120);
+}
+
+section#rearnotes a {
+    color: rgb(255,250,205);
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/wasteland-otf/EPUB/wasteland.css b/src/test/resources/30/expanded/invalid/wasteland-otf/EPUB/wasteland.css
new file mode 100644
index 0000000..1e4f240
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/wasteland-otf/EPUB/wasteland.css
@@ -0,0 +1,59 @@
+ at charset "UTF-8";
+ at import "fonts.css";
+ at namespace "http://www.w3.org/1999/xhtml";
+ at namespace epub "http://www.idpf.org/2007/ops";
+
+body {
+    margin-left: 6em;
+    margin-right: 16em;
+    color: black;
+    /* use sans-serif as fallback to make the difference obvious */    
+    font-family: 'OldStandard', sans-serif;    
+    background-color: rgb(255,255,245);
+    line-height: 1.5em;
+}
+
+h2 {
+    margin-top: 5em;
+    margin-bottom: 2em;
+}
+
+h3 {
+    margin-top: 3em;
+}
+
+.linegroup { 
+    margin-top: 1.6em; 
+}
+
+span.lnum {
+    float: right;
+    color: gray;
+    font-size : 90%;
+}
+
+a.noteref {    
+    color: rgb(215,215,195);
+    text-decoration: none;
+    margin-left: 0.5em;
+    margin-right: 0.5em;
+}
+
+section#rearnotes a {
+    color: black;
+    text-decoration: none;    
+    border-bottom : 1px dotted gray;
+    margin-right: 0.8em;
+}
+
+.indent {
+    padding-left: 3em;
+}
+
+.indent2 {
+    padding-left: 5em;
+}
+
+*[epub|type~='dedication'] {
+    padding-left: 2em;
+}
diff --git a/src/test/resources/30/expanded/invalid/wasteland-otf/EPUB/wasteland.ncx b/src/test/resources/30/expanded/invalid/wasteland-otf/EPUB/wasteland.ncx
new file mode 100644
index 0000000..0f1da8b
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/wasteland-otf/EPUB/wasteland.ncx
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/" xmlns="http://www.daisy.org/z3986/2005/ncx/"
+    version="2005-1" xml:lang="en">
+    <head>
+        <meta name="dtb:uid" content="code.google.com.epub-samples.wasteland-otf"/>
+    </head>
+    <docTitle>
+        <text>The Waste Land</text>
+    </docTitle>
+    <navMap>
+        <!-- 2.01 NCX: playOrder is optional -->
+        <navPoint id="ch1">
+            <navLabel>
+                <text>I. THE BURIAL OF THE DEAD</text>
+            </navLabel>
+            <content src="wasteland-content.xhtml#ch1"/>
+        </navPoint>
+        <navPoint id="ch2">
+            <navLabel>
+                <text>II. A GAME OF CHESS</text>
+            </navLabel>
+            <content src="wasteland-content.xhtml#ch2"/>
+        </navPoint>
+        <navPoint id="ch3">
+            <navLabel>
+                <text>III. THE FIRE SERMON</text>
+            </navLabel>
+            <content src="wasteland-content.xhtml#ch3"/>
+        </navPoint>
+        <navPoint id="ch4">
+            <navLabel>
+                <text>IV. DEATH BY WATER</text>
+            </navLabel>
+            <content src="wasteland-content.xhtml#ch4"/>
+        </navPoint>
+        <navPoint id="ch5">
+            <navLabel>
+                <text>V. WHAT THE THUNDER SAID</text>
+            </navLabel>
+            <content src="wasteland-content.xhtml#ch5"/>
+        </navPoint>
+        <navPoint id="rearnotes">
+            <navLabel>
+                <text>NOTES ON "THE WASTE LAND"</text>
+            </navLabel>
+            <content src="wasteland-content.xhtml#rearnotes"/>
+        </navPoint>
+    </navMap>
+</ncx>
diff --git a/src/test/resources/30/expanded/invalid/wasteland-otf/EPUB/wasteland.opf b/src/test/resources/30/expanded/invalid/wasteland-otf/EPUB/wasteland.opf
new file mode 100644
index 0000000..9dc11d9
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/wasteland-otf/EPUB/wasteland.opf
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xml:lang="en-US" prefix="cc: http://creativecommons.org/ns#">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">code.google.com.epub-samples.wasteland-otf</dc:identifier>
+        <dc:title>The Waste Land</dc:title>
+        <dc:creator>T.S. Eliot</dc:creator>
+        <dc:language>en-US</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <dc:description>Using OTF fonts, fallback to sans-serif system font</dc:description>
+        <meta property="dcterms:modified">2012-01-18T12:47:00Z</meta>
+        <!-- rights expressions for the work as a whole -->
+        <dc:rights>This work is shared with the public using the Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) license.</dc:rights>        
+        <link rel="cc:license" href="http://creativecommons.org/licenses/by-sa/3.0/"/>
+        <meta property="cc:attributionURL">http://code.google.com/p/epub-samples/</meta>
+        <!-- rights expression for the cover image -->       
+        <link rel="cc:license" refines="#cover" href="http://creativecommons.org/licenses/by-sa/3.0/" />
+        <link rel="cc:attributionURL" refines="#cover" href="http://en.wikipedia.org/wiki/Simon_Fieldhouse" />        
+        <!-- cover meta element included for 2.0 reading system compatibility: -->
+        <meta name="cover" content="cover"/>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="wasteland-content.xhtml" media-type="application/xhtml+xml" />
+        <item id="nav" href="wasteland-nav.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="cover" href="wasteland-cover.jpg" media-type="image/jpeg" properties="cover-image" />
+        <item id="css" href="wasteland.css" media-type="text/css" />
+        <item id="css-fonts" href="fonts.css" media-type="text/css" />
+        <item id="css-night" href="wasteland-night.css" media-type="text/css" />
+        <item id="font.OldStandard.regular" href="OldStandard-Regular.otf" media-type="application/vnd.ms-opentype"/>
+        <item id="font.OldStandard.italic" href="OldStandard-Italic.otf" media-type="application/vnd.ms-opentype"/>
+        <item id="font.OldStandard.bold" href="OldStandard-Bold.otf" media-type="application/vnd.ms-opentype"/>        
+        <!-- ncx included for 2.0 reading system compatibility: -->
+        <item id="ncx" href="wasteland.ncx" media-type="application/x-dtbncx+xml" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/invalid/wasteland-otf/META-INF/container.xml b/src/test/resources/30/expanded/invalid/wasteland-otf/META-INF/container.xml
new file mode 100644
index 0000000..8bd2e5e
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/wasteland-otf/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/wasteland.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/wasteland-otf/mimetype b/src/test/resources/30/expanded/invalid/wasteland-otf/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/wasteland-otf/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/xhtml-extension/EPUB/lorem.css b/src/test/resources/30/expanded/invalid/xhtml-extension/EPUB/lorem.css
new file mode 100644
index 0000000..59fa2ed
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/xhtml-extension/EPUB/lorem.css
@@ -0,0 +1,4 @@
+body {
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/xhtml-extension/EPUB/lorem.html b/src/test/resources/30/expanded/invalid/xhtml-extension/EPUB/lorem.html
new file mode 100644
index 0000000..ce440bb
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/xhtml-extension/EPUB/lorem.html
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/invalid/xhtml-extension/EPUB/lorem.opf b/src/test/resources/30/expanded/invalid/xhtml-extension/EPUB/lorem.opf
new file mode 100644
index 0000000..569bc97
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/xhtml-extension/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.html" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/xhtml-extension/META-INF/container.xml b/src/test/resources/30/expanded/invalid/xhtml-extension/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/xhtml-extension/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/invalid/xhtml-extension/mimetype b/src/test/resources/30/expanded/invalid/xhtml-extension/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/invalid/xhtml-extension/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/make.sh b/src/test/resources/30/expanded/make.sh
new file mode 100755
index 0000000..babc407
--- /dev/null
+++ b/src/test/resources/30/expanded/make.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+DIR="invalid/lorem-xhtml-rng-1"
+OUTNAME="lorem-xhtml-rng-1"
+
+cd $DIR
+
+zip $OUTNAME.epub -X0D mimetype
+
+zip $OUTNAME.epub -X9rD EPUB -x.svn
+
+zip $OUTNAME.epub -X9rD META-INF -x.svn
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture.txt b/src/test/resources/30/expanded/valid/cc-shared-culture.txt
new file mode 100644
index 0000000..dec3393
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/cc-shared-culture.txt
@@ -0,0 +1,34 @@
+# creation date is not stable between different runs
+[format version] 3.0
+[format name] application/epub+zip
+
+[title] Creative Commons - A Shared Culture
+[creator] Jesse Dylan
+[language] en-US
+[publisher] Creative Commons
+[contributor] mgylling
+[rights] This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike (CC BY-NC-SA) license.
+[unique identifier] code.google.com.epub-samples.cc-shared-culture
+
+[reference] http://creativecommons.org/licenses/by-nc-sa/3.0/
+[reference] http://creativecommons.org/licenses/by-nc/2.0/
+[reference] http://creativecommons.org/licenses/by-nc-sa/2.0/
+
+[items count] 21
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[declared mimetype] image/jpeg
+[declared mimetype] application/vnd.ms-opentype
+[declared mimetype] video/mp4
+[declared mimetype] video/webm
+[declared mimetype] audio/mpeg
+[declared mimetype] text/vtt
+[declared mimetype] application/ttml+xml
+[declared mimetype] text/javascript
+
+[hasScripts] text/javascript
+
+[reference] http://en.wikipedia.org/wiki/Jesse_Dylan
+[reference] http://my.barackobama.com/page/invite/yeswecanvideo
+[reference] http://creativecommons.org/videos/a-shared-culture
+[reference] http://mirrors.creativecommons.org/asharedculture
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/audio/asharedculture_soundtrack.mp3 b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/audio/asharedculture_soundtrack.mp3
new file mode 100644
index 0000000..1985441
Binary files /dev/null and b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/audio/asharedculture_soundtrack.mp3 differ
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/captions/cc-en.vtt b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/captions/cc-en.vtt
new file mode 100644
index 0000000..b04485d
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/captions/cc-en.vtt
@@ -0,0 +1,225 @@
+WEBVTT
+
+1
+00:00:00.000 --> 00:00:05.000
+What does it mean to be human if we don't have a shared culture?
+
+2
+00:00:05.000 --> 00:00:08.000
+What does a shared culture mean if we can't share it?
+
+3
+00:00:08.000 --> 00:00:10.000
+It's only in the last 100, or 150 years or so,
+
+4
+00:00:10.000 --> 00:00:14.000
+That we started tightly restricting how that culture gets used.
+
+5
+00:00:14.000 --> 00:00:18.000
+The Internet enabled an infrastructure where anybody could participate without asking permission.
+
+6
+00:00:18.000 --> 00:00:21.000
+We have all these new technologies that allow people to express themselves,
+
+7
+00:00:21.000 --> 00:00:27.000
+take control of their own creative impulses, but the law's getting in the way.
+
+8
+00:00:27.000 --> 00:00:31.000
+Creative Commons is designed to save the world from failed sharing.
+
+9
+00:00:31.000 --> 00:00:33.000
+People who actually want to share stuff.
+
+10
+00:00:33.000 --> 00:00:36.000
+Who put it up on the web because they want to share it under certain terms.
+
+11
+00:00:36.000 --> 00:00:39.000
+So we wanted to create a simple way, for creators
+
+12
+00:00:39.000 --> 00:00:44.000
+to say to the world here's the freedom  that I want to run with my creative work.
+
+13
+00:00:44.000 --> 00:00:46.000
+Here are the things you're allowed to do.
+
+14
+00:00:46.000 --> 00:00:50.000
+Can I reproduce it, can I copy it, can I put it in my text book?
+
+15
+00:00:50.000 --> 00:00:52.000
+Can I use that photograph? Can I make a new version of it?
+
+16
+00:00:52.000 --> 00:00:59.000
+Creative Commons gives tools to creators to make a choice about copyright.
+
+17
+00:00:59.000 --> 00:01:02.000
+Creative Commons license can cover anything that copyright covers.
+
+18
+00:01:02.000 --> 00:01:05.000
+Every license says "You need to give me attribution".
+
+19
+00:01:05.000 --> 00:01:08.000
+"I created this, give me credit for the work I did."
+
+20
+00:01:08.000 --> 00:01:11.000
+The basic choices are commercial use, or not.
+
+21
+00:01:11.000 --> 00:01:15.000
+Can you make derivative works, versions, adaptations or not?
+
+22
+00:01:15.000 --> 00:01:17.000
+And do you want me to have to share alike?
+
+23
+00:01:17.000 --> 00:01:21.000
+So if I take your stuff, do I have to offer it to the next person under the same terms?
+
+24
+00:01:21.000 --> 00:01:26.000
+There's no requirement for you to do anything with your work other than what you want to do.
+
+25
+00:01:26.000 --> 00:01:33.000
+You own the copyright to it.  What we've done is given you the right to exercise your copyright in more ways, more simply.
+
+26
+00:01:33.000 --> 00:01:38.000
+So the idea here is to enable the creative impulses that the technology turns loose,
+
+27
+00:01:38.000 --> 00:01:40.000
+and get the law out of the way.
+
+28
+00:01:40.000 --> 00:01:46.000
+The work of Creative Commons is really about laying the infrastructure and ground work for this new type of culture.
+
+29
+00:01:46.000 --> 00:01:48.000
+A new kind of Folk Culture.
+
+30
+00:01:48.000 --> 00:01:51.000
+Somebody from Deli, somebody from New York, somebody from Singapore,
+
+31
+00:01:51.000 --> 00:01:57.000
+can feel comfortable using photo that was created and given away by somebody in The United States, or in China,
+
+32
+00:01:57.000 --> 00:02:00.000
+or wherever that the licenses have been extended to.
+
+33
+00:02:00.000 --> 00:02:02.000
+With their identity being preserved.
+
+34
+00:02:02.000 --> 00:02:06.000
+Which means that people can actually create new kinds of things,
+
+35
+00:02:06.000 --> 00:02:08.000
+come together and build things.
+
+36
+00:02:08.000 --> 00:02:11.000
+Mash-ups that people can do with peoples Flicker photos.
+
+37
+00:02:11.000 --> 00:02:14.000
+And CCmixter has allowed artists to make music together.
+
+38
+00:02:14.000 --> 00:02:16.000
+It's really about creativity and connection.
+
+39
+00:02:16.000 --> 00:02:18.000
+Access and control.
+
+40
+00:02:18.000 --> 00:02:24.000
+From amateurs who simply for the love of what they are doing and they want to share it and they want other people to be able to make use of it,
+
+41
+00:02:24.000 --> 00:02:26.000
+to commercial organizations.
+
+42
+00:02:26.000 --> 00:02:31.000
+In the end, this will have a very successful place in the for profit economy
+
+43
+00:02:31.000 --> 00:02:34.000
+Creative Commons is the bridge to this future.
+
+44
+00:02:34.000 --> 00:02:37.000
+You've got to move away from thinking about content to thinking about communities.
+
+45
+00:02:37.000 --> 00:02:40.000
+Communities that develop around content
+
+46
+00:02:40.000 --> 00:02:45.000
+and the sharing that the licenses allow enable these communities to come together.
+
+47
+00:02:45.000 --> 00:02:49.000
+A physical Commons  like a park where anybody can enter equally
+
+48
+00:02:49.000 --> 00:02:53.000
+A Commons with intellectual works is actually much freer
+
+49
+00:02:53.000 --> 00:02:57.000
+It really is going to be the pillar for communications between people, cultural exchanges.
+
+50
+00:02:57.000 --> 00:03:00.000
+The space for more speech, more free expression
+
+51
+00:03:00.000 --> 00:03:03.000
+And that's the kind of Commons we're trying to create.
+
+52
+00:03:03.000 --> 00:03:04.000
+Creative Commons
+
+53
+00:03:04.000 --> 00:03:07.000
+All images and music used to create this work were licensed under Creative Commons licenses
+
+54
+00:03:07.000 --> 00:03:15.000
+Attributions:
+
+55
+00:03:15.000 --> 00:03:18.000
+Please visit http://mirrors.creativecommons.org/asharedculture for expanded credits,
+
+56
+00:03:18.000 --> 00:03:21.000
+including links to all the creators and CC licensed works that made this video possible
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/captions/cc-en.xml b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/captions/cc-en.xml
new file mode 100644
index 0000000..08e8a2c
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/captions/cc-en.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tt xmlns:tts="http://www.w3.org/2006/04/ttaf1#styling" xmlns="http://www.w3.org/2006/04/ttaf1">
+  <head/>
+  <body>
+    <div>
+      <p begin="00:00:00.00" dur="00:00:05.00">What does it mean to be human if we don't have a shared culture?</p>
+      <p begin="00:00:05.00" dur="00:00:03.00">What does a shared culture mean if we can't share it?</p>
+      <p begin="00:00:08.00" dur="00:00:02.00">It's only in the last 100, or 150 years or so,</p>
+      <p begin="00:00:10.00" dur="00:00:04.00">That we started tightly restricting how that culture gets used.</p>
+      <p begin="00:00:14.00" dur="00:00:04.00">The Internet enabled an infrastructure where anybody could participate without asking permission.</p>
+      <p begin="00:00:18.00" dur="00:00:03.00">We have all these new technologies that allow people to express themselves,</p>
+      <p begin="00:00:21.00" dur="00:00:06.00">take control of their own creative impulses, but the law's getting in the way.</p>
+      <p begin="00:00:27.00" dur="00:00:04.00">Creative Commons is designed to save the world from failed sharing.</p>
+      <p begin="00:00:31.00" dur="00:00:02.00">People who actually want to share stuff.</p>
+      <p begin="00:00:33.00" dur="00:00:03.00">Who put it up on the web because they want to share it under certain terms.</p>
+      <p begin="00:00:36.00" dur="00:00:03.00">So we wanted to create a simple way, for creators</p>
+      <p begin="00:00:39.00" dur="00:00:05.00">to say to the world here's the freedom  that I want to run with my creative work.</p>
+      <p begin="00:00:44.00" dur="00:00:02.00">Here are the things you're allowed to do.</p>
+      <p begin="00:00:46.00" dur="00:00:04.00">Can I reproduce it, can I copy it, can I put it in my text book?</p>
+      <p begin="00:00:50.00" dur="00:00:02.00">Can I use that photograph? Can I make a new version of it?</p>
+      <p begin="00:00:52.00" dur="00:00:07.00">Creative Commons gives tools to creators to make a choice about copyright.</p>
+      <p begin="00:00:59.00" dur="00:00:03.00">Creative Commons licence can cover anything that copyright covers.</p>
+      <p begin="00:01:02.00" dur="00:00:03.00">Every licence says "You need to give me attribution".</p>
+      <p begin="00:01:05.00" dur="00:00:03.00">"I created this, give me credit for the work I did."</p>
+      <p begin="00:01:08.00" dur="00:00:03.00">The basic choices are commercial use, or not.</p>
+      <p begin="00:01:11.00" dur="00:00:04.00">Can you make derivative works, versions, adaptations or not?</p>
+      <p begin="00:01:15.00" dur="00:00:02.00">And do you want me to have to share alike?</p>
+      <p begin="00:01:17.00" dur="00:00:04.00">So if I take your stuff, do I have to offer it to the next person under the same terms?</p>
+      <p begin="00:01:21.00" dur="00:00:05.00">There's no requirement for you to do anything with your work other than what you want to do.</p>
+      <p begin="00:01:26.00" dur="00:00:07.00">You own the copyright to it.  What we've done is given you the right to exercise your copyright in more ways, more simply.</p>
+      <p begin="00:01:33.00" dur="00:00:05.00">So the idea here is to enable the creative impulses that the technology turns loose,</p>
+      <p begin="00:01:38.00" dur="00:00:02.00">and get the law out of the way.</p>
+      <p begin="00:01:40.00" dur="00:00:06.00">The work of Creative Commons is really about laying the infrastructure and ground work for this new type of culture.</p>
+      <p begin="00:01:46.00" dur="00:00:02.00">A new kind of Folk Culture.</p>
+      <p begin="00:01:48.00" dur="00:00:03.00">Somebody from Deli, somebody from New York, somebody from Singapore,</p>
+      <p begin="00:01:51.00" dur="00:00:06.00">can feel comfortable using photo that was created and given away by somebody in The United States, or in China,</p>
+      <p begin="00:01:57.00" dur="00:00:03.00">or wherever that the licenses have been extended to.</p>
+      <p begin="00:02:00.00" dur="00:00:02.00">With their identity being preserved.</p>
+      <p begin="00:02:02.00" dur="00:00:04.00">Which means that people can actually create new kinds of things,</p>
+      <p begin="00:02:06.00" dur="00:00:02.00">come together and build things.</p>
+      <p begin="00:02:08.00" dur="00:00:03.00">Mash-ups that people can do with peoples Flicker photos.</p>
+      <p begin="00:02:11.00" dur="00:00:03.00">And CCmixter has allowed artists to make music together.</p>
+      <p begin="00:02:14.00" dur="00:00:02.00">It's really about creativity and connection.</p>
+      <p begin="00:02:16.00" dur="00:00:02.00">Access and control.</p>
+      <p begin="00:02:18.00" dur="00:00:06.00">From amateurs who simply for the love of what they are doing and they want to share it and they want other people to be able to make use of it,</p>
+      <p begin="00:02:24.00" dur="00:00:02.00">to commercial organizations.</p>
+      <p begin="00:02:26.00" dur="00:00:05.00">In the end, this will have a very successful place in the for profit economy</p>
+      <p begin="00:02:31.00" dur="00:00:03.00">Creative Commons is the bridge to this future.</p>
+      <p begin="00:02:34.00" dur="00:00:03.00">You've got to move away from thinking about content to thinking about communities.</p>
+      <p begin="00:02:37.00" dur="00:00:03.00">Communities that develop around content</p>
+      <p begin="00:02:40.00" dur="00:00:05.00">and the sharing that the licences allow enable these communities to come together.</p>
+      <p begin="00:02:45.00" dur="00:00:04.00">A physical Commons  like a park where anybody can enter equally</p>
+      <p begin="00:02:49.00" dur="00:00:04.00">A Commons with intellectual works is actually much freer</p>
+      <p begin="00:02:53.00" dur="00:00:04.00">It really is going to be the pillar for communications between people, cultural exchanges.</p>
+      <p begin="00:02:57.00" dur="00:00:03.00">The space for more speech, more free expression</p>
+      <p begin="00:03:00.00" dur="00:00:03.00">And that's the kind of Commons we're trying to create.</p>
+      <p begin="00:03:03.00" dur="00:00:01.00">Creative Commons</p>
+      <p begin="00:03:04.00" dur="00:00:03.00">All images and music used to create this work were licenced under Creative Commons licenses</p>
+      <p begin="00:03:07.00" dur="00:00:08.00">Attributions:</p>
+      <p begin="00:03:15.00" dur="00:00:03.00">Please visit http://mirrors.creativecommons.org/asharedculture for expanded credits,</p>
+      <p begin="00:03:18.00" dur="00:00:03.00">including links to all the creators and CC licensed works that made this vidoe possible</p>
+    </div>
+  </body>
+</tt>
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/captions/cc-fr.vtt b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/captions/cc-fr.vtt
new file mode 100644
index 0000000..1ece730
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/captions/cc-fr.vtt
@@ -0,0 +1,221 @@
+WEBVTT
+
+1
+00:00:01.000 --> 00:00:05.000
+Que signifie être humain si nous ne partageons pas notre culture ?
+
+2
+00:00:05.000 --> 00:00:08.000
+Que signifie « partager notre culture » si ce partage est entravé ?
+
+3
+00:00:08.000 --> 00:00:10.000
+Il n’y a que cent, cent cinquante ans
+
+4
+00:00:10.000 --> 00:00:14.000
+que nous avons commencé à encadrer strictement l’usage de la culture.
+
+5
+00:00:14.000 --> 00:00:18.000
+Internet permet désormais à chacun de participer, sans en demander la permission.
+
+6
+00:00:18.000 --> 00:00:21.000
+Les nouvelles technologies offrent la possibilité à tous de créer, de s’exprimer
+
+7
+00:00:21.000 --> 00:00:27.000
+tout en gardant le contrôle de leurs créations… mais le droit fait encore obstacle.
+
+8
+00:00:27.000 --> 00:00:31.000
+L’objectif des Creative Commons (CC) est de lever cet obstacle, partout dans le monde.
+
+9
+00:00:31.000 --> 00:00:33.000
+Aux personnes qui souhaitent partager leurs créations,
+
+10
+00:00:33.000 --> 00:00:36.000
+qui les publient sur Internet parce qu’ils veulent les partager sous certaines conditions,
+
+11
+00:00:36.000 --> 00:00:39.000
+nous proposons une manière simple pour les auteurs
+
+12
+00:00:39.000 --> 00:00:44.000
+de dire publiquement : voici l’usage que j’autorise de mes créations,
+
+13
+00:00:44.000 --> 00:00:46.000
+voici ce que vous avez le droit d’en faire.
+
+14
+00:00:46.000 --> 00:00:50.000
+Ai-je le droit de reproduire, de copier, d’inclure dans mon manuel scolaire ?
+
+15
+00:00:50.000 --> 00:00:52.000
+Puis-je utiliser cette photo ? Ai-je le droit de la modifier ?
+
+16
+00:00:52.000 --> 00:00:55.050
+Les licences CC offrent aux créateurs des outils pour choisir un droit d’auteur.
+
+17
+00:01:02.000 --> 00:01:05.000
+Chaque licence CC commence par dire « cette création est mienne…
+
+18
+00:01:05.000 --> 00:01:08.000
+j’en suis l’auteur, attribue-moi la paternité du travail que j’ai créé » (BY)
+
+19
+00:01:08.000 --> 00:01:11.000
+Puis viennent les options : peut-on en faire un usage commercial ou pas ? (NC)
+
+20
+00:01:11.000 --> 00:01:15.000
+Peut-on en faire des versions adaptées, modifiées, dérivées ou pas ? (ND)
+
+21
+00:01:15.000 --> 00:01:17.000
+Souhaitez-vous que ces versions modifiées disposent à leur tour des mêmes droits…
+
+22
+00:01:17.000 --> 00:01:21.000
+… en garantissant que ces nouvelles versions aient la même licence que votre création d’origine ? (SA)
+
+23
+00:01:21.000 --> 00:01:26.000
+Vous n’autoriserez de vos créations que ce que bon vous semble.
+
+24
+00:01:26.000 --> 00:01:33.000
+Vous conservez les droits d’auteur de votre œuvre. Nous ne faisons que vous aider à fixer les conditions juridiques de son utilisation.
+
+25
+00:01:33.000 --> 00:01:38.000
+Il s’agit ici de favoriser la création rendue possible par la technologie,
+
+26
+00:01:38.000 --> 00:01:40.000
+et ne pas laisser la loi freiner son partage.
+
+27
+00:01:40.000 --> 00:01:46.000
+La but des Creative Commons est de fournir un socle et une infrastructure à cette nouvelle culture issue du réseau,
+
+28
+00:01:46.000 --> 00:01:48.000
+une nouvelle sorte de culture populaire.
+
+29
+00:01:48.000 --> 00:01:51.000
+Un habitant de New Dehli, New-York, ou Singapour
+
+30
+00:01:51.000 --> 00:01:57.000
+peut souhaiter utiliser une photo créée et partagée par quelqu’un vivant aux États-Unis, ou en Chine,
+
+31
+00:01:57.000 --> 00:02:00.000
+ou partout où s’appliquent ces licences,
+
+32
+00:02:00.000 --> 00:02:02.000
+tout en garantissant la paternité de l’œuvre.
+
+33
+00:02:02.000 --> 00:02:06.000
+On peut alors véritablement produire ensemble de nouveaux contenus,
+
+34
+00:02:06.000 --> 00:02:08.000
+se donner rendez-vous pour créer collaborativement.
+
+35
+00:02:08.000 --> 00:02:11.000
+Des collages deviennent possibles à partir de photos de l’annuaire Flickr
+
+36
+00:02:11.000 --> 00:02:14.000
+et CCmixter a permis aux musiciens de travailler ensemble.
+
+37
+00:02:14.000 --> 00:02:16.000
+C’est véritablement faire le lien entre la créativité et la connectivité
+
+38
+00:02:16.000 --> 00:02:18.000
+l’accessibilité et le contrôle.
+
+39
+00:02:18.000 --> 00:02:24.000
+Des amateurs, animés par le plaisir de faire ce qu’ils font, et qui souhaitent le partager, avec d’autres amateurs…
+
+40
+00:02:24.000 --> 00:02:26.000
+… ou des structures commerciales.
+
+41
+00:02:26.000 --> 00:02:31.000
+Car il y aura également là de nombreuses opportunités pour l’économie traditionnelle.
+
+42
+00:02:31.000 --> 00:02:34.000
+Creative Commons construit des ponts vers l’avenir.
+
+43
+00:02:34.000 --> 00:02:37.000
+Il ne faut plus penser contenus, mais penser communautés,
+
+44
+00:02:37.000 --> 00:02:40.000
+des communautés qui se développent autour des contenus.
+
+45
+00:02:40.000 --> 00:02:45.000
+Et c’est ce partage (rendu possible par les licences CC) qui permet à ces communautés de se rassembler.
+
+46
+00:02:45.000 --> 00:02:49.000
+Les biens communs physiques sont comme un jardin public où chacun peut librement se promener à sa guise.
+
+47
+00:02:49.000 --> 00:02:53.000
+Les biens communs numériques issus d’une œuvre intellectuelle sont quelque part encore plus libres.
+
+48
+00:02:53.000 --> 00:02:57.000
+Ils offrent un espace toujours plus grand de communication et d’échanges culturels.
+
+49
+00:02:57.000 --> 00:03:00.000
+Un espace pour s’exprimer plus librement.
+
+50
+00:03:00.000 --> 00:03:03.000
+Et ce sont ces biens communs dont nous favorisons la création.
+
+51
+00:03:03.000 --> 00:03:04.000
+CREATIVE COMMONS
+
+52
+00:03:04.000 --> 00:03:07.000
+Toutes les images et la musique qui ont contribué à créer cette œuvre sont sous licences Creative Commons.
+
+53
+00:03:07.000 --> 00:03:15.000
+Droits attribués à…
+
+54
+00:03:15.000 --> 00:03:18.000
+Voir http://mirrors.creativecommons.org/asharedculture pour de plus amples détails
+
+55
+00:03:18.000 --> 00:03:21.000
+y compris les liens vers tous les créateurs et œuvres sous licence CC qui ont rendu cette vidéo possible.
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/captions/cc-fr.xml b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/captions/cc-fr.xml
new file mode 100644
index 0000000..02362af
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/captions/cc-fr.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tt xmlns:tts="http://www.w3.org/2006/04/ttaf1#styling" xmlns="http://www.w3.org/2006/04/ttaf1">
+  <head/>
+  <body>
+    <div>
+      <p begin="00:00:01.00" dur="00:00:04.00">Que signifie être humain si nous ne partageons pas notre culture ?</p>
+      <p begin="00:00:05.00" dur="00:00:03.00">Que signifie « partager notre culture » si ce partage est entravé ?</p>
+      <p begin="00:00:08.00" dur="00:00:02.00">Il n’y a que cent, cent cinquante ans</p>
+      <p begin="00:00:10.00" dur="00:00:04.00">que nous avons commencé à encadrer strictement l’usage de la culture.</p>
+      <p begin="00:00:14.00" dur="00:00:04.00">Internet permet désormais à chacun de participer, sans en demander la permission.</p>
+      <p begin="00:00:18.00" dur="00:00:03.00">Les nouvelles technologies offrent la possibilité à tous de créer, de s’exprimer</p>
+      <p begin="00:00:21.00" dur="00:00:06.00">tout en gardant le contrôle de leurs créations… mais le droit fait encore obstacle.</p>
+      <p begin="00:00:27.00" dur="00:00:04.00">L’objectif des Creative Commons (CC) est de lever cet obstacle, partout dans le monde.</p>
+      <p begin="00:00:31.00" dur="00:00:02.00">Aux personnes qui souhaitent partager leurs créations,</p>
+      <p begin="00:00:33.00" dur="00:00:03.00">qui les publient sur Internet parce qu’ils veulent les partager sous certaines conditions,</p>
+      <p begin="00:00:36.00" dur="00:00:03.00">nous proposons une manière simple pour les auteurs</p>
+      <p begin="00:00:39.00" dur="00:00:05.00">de dire publiquement : voici l’usage que j’autorise de mes créations,</p>
+      <p begin="00:00:44.00" dur="00:00:02.00">voici ce que vous avez le droit d’en faire.</p>
+      <p begin="00:00:46.00" dur="00:00:04.00">Ai-je le droit de reproduire, de copier, d’inclure dans mon manuel scolaire ?</p>
+      <p begin="00:00:50.00" dur="00:00:02.00">Puis-je utiliser cette photo ? Ai-je le droit de la modifier ?</p>
+      <p begin="00:00:52.00" dur="00:00:03.50">Les licences CC offrent aux créateurs des outils pour choisir un droit d’auteur.</p>
+      <p begin="00:01:02.00" dur="00:00:03.00">Chaque licence CC commence par dire « cette création est mienne…</p>
+      <p begin="00:01:05.00" dur="00:00:03.00">j’en suis l’auteur, attribue-moi la paternité du travail que j’ai créé » (BY)</p>
+      <p begin="00:01:08.00" dur="00:00:03.00">Puis viennent les options : peut-on en faire un usage commercial ou pas ? (NC)</p>
+      <p begin="00:01:11.00" dur="00:00:04.00">Peut-on en faire des versions adaptées, modifiées, dérivées ou pas ? (ND)</p>
+      <p begin="00:01:15.00" dur="00:00:02.00">Souhaitez-vous que ces versions modifiées disposent à leur tour des mêmes droits…</p>
+      <p begin="00:01:17.00" dur="00:00:04.00">… en garantissant que ces nouvelles versions aient la même licence que votre création d’origine ? (SA)</p>
+      <p begin="00:01:21.00" dur="00:00:05.00">Vous n’autoriserez de vos créations que ce que bon vous semble.</p>
+      <p begin="00:01:26.00" dur="00:00:07.00">Vous conservez les droits d’auteur de votre œuvre. Nous ne faisons que vous aider à fixer les conditions juridiques de son utilisation.</p>
+      <p begin="00:01:33.00" dur="00:00:05.00">Il s’agit ici de favoriser la création rendue possible par la technologie,</p>
+      <p begin="00:01:38.00" dur="00:00:02.00">et ne pas laisser la loi freiner son partage.</p>
+      <p begin="00:01:40.00" dur="00:00:06.00">La but des Creative Commons est de fournir un socle et une infrastructure à cette nouvelle culture issue du réseau,</p>
+      <p begin="00:01:46.00" dur="00:00:02.00">une nouvelle sorte de culture populaire.</p>
+      <p begin="00:01:48.00" dur="00:00:03.00">Un habitant de New Dehli, New-York, ou Singapour</p>
+      <p begin="00:01:51.00" dur="00:00:06.00">peut souhaiter utiliser une photo créée et partagée par quelqu’un vivant aux États-Unis, ou en Chine,</p>
+      <p begin="00:01:57.00" dur="00:00:03.00">ou partout où s’appliquent ces licences,</p>
+      <p begin="00:02:00.00" dur="00:00:02.00">tout en garantissant la paternité de l’œuvre.</p>
+      <p begin="00:02:02.00" dur="00:00:04.00">On peut alors véritablement produire ensemble de nouveaux contenus,</p>
+      <p begin="00:02:06.00" dur="00:00:02.00">se donner rendez-vous pour créer collaborativement.</p>
+      <p begin="00:02:08.00" dur="00:00:03.00">Des collages deviennent possibles à partir de photos de l’annuaire Flickr</p>
+      <p begin="00:02:11.00" dur="00:00:03.00">et CCmixter a permis aux musiciens de travailler ensemble.</p>
+      <p begin="00:02:14.00" dur="00:00:02.00">C’est véritablement faire le lien entre la créativité et la connectivité</p>
+      <p begin="00:02:16.00" dur="00:00:02.00">l’accessibilité et le contrôle.</p>
+      <p begin="00:02:18.00" dur="00:00:06.00">Des amateurs, animés par le plaisir de faire ce qu’ils font, et qui souhaitent le partager, avec d’autres amateurs…</p>
+      <p begin="00:02:24.00" dur="00:00:02.00">… ou des structures commerciales.</p>
+      <p begin="00:02:26.00" dur="00:00:05.00">Car il y aura également là de nombreuses opportunités pour l’économie traditionnelle.</p>
+      <p begin="00:02:31.00" dur="00:00:03.00">Creative Commons construit des ponts vers l’avenir.</p>
+      <p begin="00:02:34.00" dur="00:00:03.00">Il ne faut plus penser contenus, mais penser communautés,</p>
+      <p begin="00:02:37.00" dur="00:00:03.00">des communautés qui se développent autour des contenus.</p>
+      <p begin="00:02:40.00" dur="00:00:05.00">Et c’est ce partage (rendu possible par les licences CC) qui permet à ces communautés de se rassembler.</p>
+      <p begin="00:02:45.00" dur="00:00:04.00">Les biens communs physiques sont comme un jardin public où chacun peut librement se promener à sa guise.</p>
+      <p begin="00:02:49.00" dur="00:00:04.00">Les biens communs numériques issus d’une œuvre intellectuelle sont quelque part encore plus libres.</p>
+      <p begin="00:02:53.00" dur="00:00:04.00">Ils offrent un espace toujours plus grand de communication et d’échanges culturels.</p>
+      <p begin="00:02:57.00" dur="00:00:03.00">Un espace pour s’exprimer plus librement.</p>
+      <p begin="00:03:00.00" dur="00:00:03.00">Et ce sont ces biens communs dont nous favorisons la création.</p>
+      <p begin="00:03:03.00" dur="00:00:01.00">CREATIVE COMMONS</p>
+      <p begin="00:03:04.00" dur="00:00:03.00">Toutes les images et la musique qui ont contribué à créer cette œuvre sont sous licences Creative Commons.</p>
+      <p begin="00:03:07.00" dur="00:00:08.00">Droits attribués à…</p>
+      <p begin="00:03:15.00" dur="00:00:03.00">Voir http://mirrors.creativecommons.org/asharedculture pour de plus amples détails</p>
+      <p begin="00:03:18.00" dur="00:00:03.00">y compris les liens vers tous les créateurs et œuvres sous licence CC qui ont rendu cette vidéo possible.</p>
+    </div>
+  </body>
+</tt>
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/css/shared-culture.css b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/css/shared-culture.css
new file mode 100644
index 0000000..d3166e0
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/css/shared-culture.css
@@ -0,0 +1,125 @@
+ at charset "UTF-8";
+ at namespace "http://www.w3.org/1999/xhtml";
+ at namespace epub "http://www.idpf.org/2007/ops";
+
+body {
+    font-family: 'QuicksandLight', Gothic, Helvetica, Arial;    
+    background-color: rgb(240,240,240);
+    font-size: 1em;
+    line-height: 1.33em;
+}
+
+p {
+    padding: 0;    
+    text-align: justify;
+}
+
+hgroup, figure.block, figcaption, section {
+    display: block;
+}
+
+hgroup#covertitle {
+    margin-top: 4em;
+}
+
+hgroup#covertitle h2 {
+    margin-left: 8em;
+}
+
+h1, h2 {    
+    font-weight: bold;
+    letter-spacing: 0.2em;        
+    /* text-shadow: 3px 3px 2px rgb(210,210,210); */
+}
+
+h1 {
+    margin-bottom: 0.3em;    
+}
+
+h2 {
+    margin-top: 0em;
+    margin-left: 4em;
+    font-size: 95%;
+}
+
+section.base {
+    margin: 1em;
+    padding: 2em;
+    background-color: rgb(235,235,235);    
+}
+
+section#toc {
+    background-color: inherit;
+}
+
+#video1 {
+    display:block;
+    width: 360px;
+    height: 200px;       
+    margin:auto;
+}
+
+.errmsg {    
+    color:red;
+    font-weight:bold;
+    /* margin-left: -5em; */
+}
+
+a:link, a:visited, a:hover, a:active {
+    color:inherit;
+}
+
+nav ol {
+    list-style-type: none;
+    margin-left: 1em;
+}
+
+nav ol a {
+    text-decoration: none;
+}
+
+nav[epub|type~='toc'] a > span.toc-label {
+    display:block;
+}
+
+nav[epub|type~='toc'] a > span.toc-desc {
+    display:block;
+    font-style:italic;
+    font-size: 90%;
+    margin-left: 3em; 
+}
+
+p.trigger-ctrl {    
+    width: 360px;
+    margin: auto;
+    padding-top: 0.5em;
+}
+
+img.right {
+    float:right;
+    margin-left:2em;
+    width:50%;
+    height:50%;
+
+}
+
+img.left {
+    float:left;
+    margin-right:2em;
+    width:50%;
+    height:50%;
+}
+
+ at font-face {
+    font-family: 'QuicksandLight';
+    src: url('../fonts/Quicksand_Light.otf') format('truetype');
+    font-weight: normal;
+    font-style: normal;
+}
+
+ at font-face {
+    font-family: 'QuicksandLight';
+    src: url('../fonts/Quicksand_Bold_Oblique.otf') format('truetype');
+    font-weight: bold;
+    font-style: normal;
+}
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/fonts/Quicksand_Bold_Oblique.otf b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/fonts/Quicksand_Bold_Oblique.otf
new file mode 100755
index 0000000..ebee4bd
Binary files /dev/null and b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/fonts/Quicksand_Bold_Oblique.otf differ
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/fonts/Quicksand_Light.otf b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/fonts/Quicksand_Light.otf
new file mode 100755
index 0000000..798c1a7
Binary files /dev/null and b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/fonts/Quicksand_Light.otf differ
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/images/2565514353_2ae2073e14.jpg b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/images/2565514353_2ae2073e14.jpg
new file mode 100644
index 0000000..5764e66
Binary files /dev/null and b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/images/2565514353_2ae2073e14.jpg differ
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/images/326261902_3fa36f548d.jpg b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/images/326261902_3fa36f548d.jpg
new file mode 100644
index 0000000..b97c90d
Binary files /dev/null and b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/images/326261902_3fa36f548d.jpg differ
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/package.opf b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/package.opf
new file mode 100644
index 0000000..9373a0f
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/package.opf
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" xml:lang="en" unique-identifier="uid" prefix="cc: http://creativecommons.org/ns#">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title id="title">Creative Commons - A Shared Culture</dc:title>
+    <dc:creator>Jesse Dylan</dc:creator>
+    <dc:identifier id="uid">code.google.com.epub-samples.cc-shared-culture</dc:identifier>
+    <dc:language>en-US</dc:language>
+    <meta property="dcterms:modified">2012-01-20T12:47:00Z</meta>
+    <dc:publisher>Creative Commons</dc:publisher>  
+    <dc:contributor>mgylling</dc:contributor>
+    <dc:description>Multiple video tests (see Navigation Document (toc) for details)</dc:description>
+    <dc:rights>This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike (CC BY-NC-SA) license.</dc:rights>               
+    <link rel="cc:license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"/>
+    <meta property="cc:attributionURL">http://creativecommons.org/videos/a-shared-culture</meta>
+    <link refines="#img1" rel="cc:license" href="http://creativecommons.org/licenses/by-nc/2.0/"/>
+    <link refines="#img2" rel="cc:license" href="http://creativecommons.org/licenses/by-nc-sa/2.0/"/>
+  </metadata>
+  <manifest>
+    <item id="font1" href="fonts/Quicksand_Light.otf" media-type="application/vnd.ms-opentype"/>
+    <item id="font2" href="fonts/Quicksand_Bold_Oblique.otf" media-type="application/vnd.ms-opentype"/>                       
+    <item id="img1" href="images/326261902_3fa36f548d.jpg" media-type="image/jpeg" properties="cover-image"/>
+    <item id="img2" href="images/2565514353_2ae2073e14.jpg" media-type="image/jpeg"/>    
+    <item id="video1" href="video/shared-culture.mp4" media-type="video/mp4"/>
+    <item id="video2" href="video/shared-culture.webm" media-type="video/webm"/>
+    <item id="bgs1" href="audio/asharedculture_soundtrack.mp3" media-type="audio/mpeg"/>
+    <item id="style" href="css/shared-culture.css" media-type="text/css"/>
+    <item id="cap1" href="captions/cc-en.vtt" media-type="text/vtt"/>
+    <item id="cap2" href="captions/cc-fr.vtt" media-type="text/vtt"/>
+    <item id="cap3" href="captions/cc-en.xml" media-type="application/ttml+xml"/>
+    <item id="cap4" href="captions/cc-fr.xml" media-type="application/ttml+xml"/>
+    <item id="js" href="script/shared.js" media-type="text/javascript"/>    
+    <item id="cover" href="xhtml/cover.xhtml" media-type="application/xhtml+xml"/>
+    <item id="toc" properties="nav" href="xhtml/toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="p10" href="xhtml/p10.xhtml" media-type="application/xhtml+xml"/>
+    <item id="p20" href="xhtml/p20.xhtml" media-type="application/xhtml+xml" properties="scripted"/>
+    <item id="p30" href="xhtml/p30.xhtml" media-type="application/xhtml+xml"/>
+    <item id="p40" href="xhtml/p40.xhtml" media-type="application/xhtml+xml"/>
+    <item id="p50" href="xhtml/p50.xhtml" media-type="application/xhtml+xml"/>
+    <item id="p60" href="xhtml/p60.xhtml" media-type="application/xhtml+xml"/>    
+  </manifest>
+  <spine>
+    <itemref idref="cover" linear="no"/>
+    <itemref idref="toc"/>
+    <itemref idref="p10"/>
+    <itemref idref="p20"/>
+    <itemref idref="p30"/>
+    <itemref idref="p40"/>
+    <itemref idref="p50"/>
+    <itemref idref="p60"/>    
+  </spine>
+</package>
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/script/shared.js b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/script/shared.js
new file mode 100644
index 0000000..01ebf2d
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/script/shared.js
@@ -0,0 +1,30 @@
+function checkReadingSystemSupport() {
+    var neededFeatures =["mouse-events", "spine-scripting", "dom-manipulation"];
+    var support = typeof navigator.epubReadingSystem != 'undefined';
+    if (support) {
+        for (var i = 0; i < neededFeatures.length; i++) {
+            if (!navigator.epubReadingSystem.hasFeature(neededFeatures[i])) {
+                return false;
+            }
+        }
+    }
+    return support;
+}
+
+function togglePlay() {
+    var video = document.getElementsByTagName('video')[0];
+    if (video.ended || video.paused) {
+        video.play();
+    } else {
+        video.pause();
+    }
+}
+
+function toggleControls() {
+    var video = document.getElementsByTagName('video')[0];
+    if (video.controls) {
+        video.removeAttribute('controls', 0);
+    } else {
+        video.controls = 'controls';
+    }
+}
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/video/shared-culture.mp4 b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/video/shared-culture.mp4
new file mode 100644
index 0000000..b6d63ec
Binary files /dev/null and b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/video/shared-culture.mp4 differ
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/video/shared-culture.webm b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/video/shared-culture.webm
new file mode 100644
index 0000000..a0fe6b9
Binary files /dev/null and b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/video/shared-culture.webm differ
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/xhtml/cover.xhtml b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/xhtml/cover.xhtml
new file mode 100644
index 0000000..21f9b1e
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/xhtml/cover.xhtml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+   <head>
+      <meta charset="utf-8" />
+      <link rel="stylesheet" type="text/css" href="../css/shared-culture.css" />
+   </head>
+   <body style="text-align: center;">
+      <hgroup id="covertitle">
+         <h1>creative commons</h1>
+         <h2>a shared culture</h2>                           
+      </hgroup>
+      
+      <img id="img-cover" src="../images/326261902_3fa36f548d.jpg" alt="cover-image, child against a wall" />
+      
+   </body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/xhtml/p10.xhtml b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/xhtml/p10.xhtml
new file mode 100644
index 0000000..a74af11
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/xhtml/p10.xhtml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <meta charset="utf-8" />
+        <link rel="stylesheet" type="text/css" href="../css/shared-culture.css" />
+    </head>
+    <body>
+        <section class="base">
+            <hgroup>
+                <h1>creative commons</h1>
+                <h2>a shared culture</h2>
+            </hgroup>
+            
+                <p>To celebrate our 2008 fundraising campaign, Creative Commons has
+                    released “A Shared Culture,” a short video by renowned filmmaker <a
+                        href="http://en.wikipedia.org/wiki/Jesse_Dylan">Jesse Dylan</a>. Known for
+                    helming a variety of films, music videos, and the Emmy Award-winning <a
+                        href="http://my.barackobama.com/page/invite/yeswecanvideo">“Yes We Can”</a>
+                    Barack Obama campaign video collaboration with rapper will.i.am, Dylan created
+                    “A Shared Culture” to help spread the word about the Creative Commons mission. </p>
+                <!-- height="240" width="360" -->
+                <video id="video1" controls="controls">
+                    <source src="../video/shared-culture.mp4" type="video/mp4"/>
+                    <source src="../video/shared-culture.webm" type="video/webm"/>
+                    <div class="errmsg">
+                        <p>Your Reading System does not support (this) video.</p>
+                        <pre><code>
+<video id="video1" controls="controls">                    
+  <source src="../video/shared-culture.mp4" type="video/mp4"/>
+  <source src="../video/shared-culture.webm" type="video/webm"/>    
+</video>
+                        </code></pre>
+                    </div>
+                </video>
+                <p>In the video, some of the leading thinkers behind Creative Commons
+                    describe how the organization is helping “save the world from failed sharing”
+                    through free tools that enable creators to easily make their work available to
+                    the public for legal sharing and remix. Dylan puts the Creative Commons system
+                    into action by punctuating the interview footage with dozens of photos that have
+                    been offered to the public for use under CC licenses. Similarly, he used two
+                    CC-licensed instrumental pieces by Nine Inch Nails as the video’s soundtrack
+                    music. These tracks, “17 Ghosts II” and “21 Ghosts III,” come from the Nine Inch
+                    Nails album Ghosts I-IV, which was released earlier this year under a Creative
+                    Commons BY-NC-SA license. (See <a
+                        href="http://creativecommons.org/videos/a-shared-culture">attribution</a>.)
+                </p>
+            
+        </section>
+        
+    </body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/xhtml/p20.xhtml b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/xhtml/p20.xhtml
new file mode 100644
index 0000000..a8fd5c8
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/xhtml/p20.xhtml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <meta charset="utf-8" />
+        <link rel="stylesheet" type="text/css" href="../css/shared-culture.css" />
+        <script type="text/javascript" src="../script/shared.js"></script>
+        <script>                 
+            window.onload = function() { //s/b jq  $(document).ready
+                var video = document.getElementsByTagName('video')[0];
+
+                //P.E. style, let video at controls remain set if RS scripting not supported                
+                if(checkReadingSystemSupport()) video.removeAttribute('controls', 0);
+
+                video.addEventListener('click', function(e){
+                        e.preventDefault();
+                        togglePlay();
+                }, false);
+                
+                video.addEventListener('dblclick', function(e){
+                        e.preventDefault();
+                        toggleControls();
+                }, false);    
+                
+                video.addEventListener('keyup', function (e) {
+                    var k = e ? e.which : window.event.keyCode;
+                    if (k == 32) {
+                        e.preventDefault();
+                        togglePlay();
+                    }
+                },false);
+            }
+        </script>
+    </head>
+    <body>
+        <section class="base">
+            <h2>what does it mean to be human</h2>
+            <p>What does it mean to be human if we don't have a shared culture? What does a shared
+                culture mean if we can't share it? It's only in the last 100, or 150 years or so,
+                that we started tightly restricting how that culture gets used.</p>
+            <video id="video1" role="button" aria-controls="video1" controls="">
+                <source src="../video/shared-culture.mp4" type="video/mp4"></source>
+                <source src="../video/shared-culture.webm" type="video/webm"></source>
+                <div class="errmsg">
+                    <p>Your Reading System does not support (this) video.</p>
+                    <pre><code>
+<video id="video1">                    
+  <source src="../video/shared-culture.mp4" type="video/mp4"/>
+  <source src="../video/shared-culture.webm" type="video/webm"/>    
+</video>
+                        </code></pre>
+                </div>
+            </video>
+            <p>The Internet enabled an infrastructure where anybody could participate without asking
+                permission. We have all these new technologies that allow people to express
+                themselves, take control of their own creative impulses, but the law's getting in
+                the way.</p>
+        </section>
+    </body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/xhtml/p30.xhtml b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/xhtml/p30.xhtml
new file mode 100644
index 0000000..0803c18
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/xhtml/p30.xhtml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <meta charset="utf-8" />
+        <link rel="stylesheet" type="text/css" href="../css/shared-culture.css" />
+    </head>
+    <body>
+        <section class="base">
+            <h2>to save the world from failed sharing</h2>
+            <p>Creative Commons is designed to save the world from failed sharing. People who
+                actually want to share stuff, who put it up on the web because they want to share it
+                under certain terms.</p>
+            
+            <video id="video1" autoplay="" role="button" aria-controls="video1" controls="">
+                <source src="../video/shared-culture.mp4" type="video/mp4"/>
+                <source src="../video/shared-culture.webm" type="video/webm"/>
+                <track src="../captions/cc-en.vtt" srclang="en" kind="subtitles" label="English"/>
+                <track src="../captions/cc-fr.vtt" srclang="fr" kind="subtitles" label="Français"/>                
+                <div class="errmsg">
+                    <p>Your Reading System does not support (this) video.</p>
+                    <pre><code>
+<video id="video1"autoplay="" role="button" aria-controls="video1" controls="">
+    <source src="../video/shared-culture.mp4" type="video/mp4"></source>
+    <source src="../video/shared-culture.webm" type="video/webm"></source>
+    <track src="../captions/cc-en.vtt" srclang="en" kind="subtitles" label="English"></track>
+    <track src="../captions/cc-fr.vtt" srclang="fr" kind="subtitles" label="Français"></track>
+</video>
+                    </code></pre>
+                </div>
+            </video>
+            
+            <p>So we wanted to create a simple way, for creators to say to the world here's the
+                freedom that I want to run with my creative work. Here are the things you're allowed
+                to do. Can I reproduce it, can I copy it, can I put it in my text book? Can I use
+                that photograph? Can I make a new version of it? Creative Commons gives tools to
+                creators to make a choice about copyright.</p>
+        </section>        
+    </body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/xhtml/p40.xhtml b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/xhtml/p40.xhtml
new file mode 100644
index 0000000..1265ce8
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/xhtml/p40.xhtml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <meta charset="utf-8" />
+        <link rel="stylesheet" type="text/css" href="../css/shared-culture.css" />
+    </head>
+    <body>
+        <section class="base">
+            <h2>exercise your copyright in more ways</h2>
+            <p>Creative Commons licence can cover anything that copyright covers. Every licence says
+                "You need to give me attribution. I created this, give me credit for the work I
+                did." The basic choices are commercial use, or not. Can you make derivative works,
+                versions, adaptations or not? And do you want me to have to share alike?</p>
+                        
+            <video id="video1" autoplay="" role="button" aria-controls="video1" controls="">
+                <source src="../video/shared-culture.mp4" type="video/mp4"/>
+                <source src="../video/shared-culture.webm" type="video/webm"/>
+                <track src="../captions/cc-en.xml" srclang="en" kind="subtitles" label="English"/>
+                <track src="../captions/cc-fr.xml" srclang="fr" kind="subtitles" label="Français"/>                
+                <div class="errmsg">
+                    <p>Your Reading System does not support (this) video.</p>
+                    <pre><code>
+<video id="video1" autoplay="" role="button" aria-controls="video1" controls="">
+    <source src="../video/shared-culture.mp4" type="video/mp4"></source>
+    <source src="../video/shared-culture.webm" type="video/webm"></source>
+    <track src="../captions/cc-en.xml" srclang="en" kind="subtitles" label="English"></track>
+    <track src="../captions/cc-fr.xml" srclang="fr" kind="subtitles" label="Français"></track>
+</video>
+                    </code></pre>
+                </div>
+            </video>
+            
+            <p>So if I take your stuff, do I have to offer it to the next person under the same
+                terms? There's no requirement for you to do anything with your work other than what
+                you want to do. You own the copyright to it. What we've done is given you the right
+                to exercise your copyright in more ways, more simply.</p>
+        </section>        
+    </body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/xhtml/p50.xhtml b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/xhtml/p50.xhtml
new file mode 100644
index 0000000..680a8d7
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/xhtml/p50.xhtml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops"
+    xmlns:ev="http://www.w3.org/2001/xml-events" xml:lang="en" lang="en">
+    <head>
+        <meta charset="utf-8" />
+        <link rel="stylesheet" type="text/css" href="../css/shared-culture.css" />
+    </head>
+    <body>
+        <section class="base">
+            <h2>a new kind of folk culture</h2>
+            <p>So the idea here is to enable the creative impulses that the technology turns loose,
+                and get the law out of the way. The work of Creative Commons is really about laying
+                the infrastructure and ground work for this new type of culture.</p>
+            
+            <epub:trigger ev:observer="pause" ev:event="click" action="pause" ref="video1"/>
+            <epub:trigger ev:observer="resume" ev:event="click" action="resume" ref="video1"/>
+            <epub:trigger ev:observer="mute" ev:event="click" action="mute" ref="video1"/>
+            <epub:trigger ev:observer="mute" ev:event="click" action="show" ref="muted"/>
+            <epub:trigger ev:observer="unmute" ev:event="click" action="unmute" ref="video1"/>
+            <epub:trigger ev:observer="unmute" ev:event="click" action="hide" ref="muted"/>
+            
+            <video id="video1" role="button" aria-controls="video1">
+                <source src="../video/shared-culture.mp4" type="video/mp4"/>
+                <source src="../video/shared-culture.webm" type="video/webm"/>
+                <div class="errmsg">
+                    <p>Your Reading System does not support (this) video.</p>
+                    <pre><code>
+<video id="video1" role="button" aria-controls="video1">
+    <source src="../video/shared-culture.mp4" type="video/mp4"></source>
+    <source src="../video/shared-culture.webm" type="video/webm"></source>
+</video>
+                    </code></pre>
+                </div>
+            </video>
+            <p class="trigger-ctrl" style="text-align: center;">
+                <button class="button" id="resume">play</button>
+                <button class="button" id="pause">pause</button>
+                <button class="button" id="mute">mute</button>
+                <button class="button" id="unmute">unmute</button>
+                <br/>
+                <button id="muted" disabled="" style="visibility:hidden">MUTED</button>
+            </p>
+                        
+            <p>A new kind of Folk Culture. Somebody from Delhi, somebody from New York, somebody
+                from Singapore, can feel comfortable using photo that was created and given away by
+                somebody in The United States, or in China, or wherever that the licenses have been
+                extended to. With their identity being preserved. Which means that people can
+                actually create new kinds of things, come together and build things.</p>
+        </section>        
+    </body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/xhtml/p60.xhtml b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/xhtml/p60.xhtml
new file mode 100644
index 0000000..2afe535
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/xhtml/p60.xhtml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops"
+    xmlns:ev="http://www.w3.org/2001/xml-events"
+    epub:prefix="media: http://idpf.org/epub/vocab/media/#" xml:lang="en" lang="en">
+    <head>
+        <meta charset="utf-8" />
+        <!-- note: the media vocabulary referenced does not (yet) exist, used
+               as an indicator that ultimately for background tracks to work,
+               a way to indicate nature is needed so that reading systems can
+               integrate on/off, volume controls etc with UI.                           
+        -->
+        <link rel="stylesheet" type="text/css" href="../css/shared-culture.css" />
+    </head>
+    <body>
+        <section class="base">
+            <h1>the entire transcript</h1>
+            <audio id="bgsound" epub:type="media:soundtrack media:background"
+                src="../audio/asharedculture_soundtrack.mp3" autoplay="" loop="">
+                <div class="errmsg">
+                    <p>Your Reading System does not support (this) audio</p>
+                </div>    
+            </audio>
+            
+            <p>What does it mean to be human if we don't have a shared culture? What does a shared
+                culture mean if we can't share it? It's only in the last 100, or 150 years or so,
+                that we started tightly restricting how that culture gets used.</p>
+            <p>The Internet enabled an infrastructure where anybody could participate without asking
+                permission. We have all these new technologies that allow people to express
+                themselves, take control of their own creative impulses, but the law's getting in
+                the way.</p>
+            <p>Creative Commons is designed to save the world from failed sharing. People who
+                actually want to share stuff, who put it up on the web because they want to share it
+                under certain terms.</p>
+            <img class="left" src="../images/326261902_3fa36f548d.jpg"
+                alt="child against a wall" />
+            <p>So we wanted to create a simple way, for creators to say to the world here's the
+                freedom that I want to run with my creative work. Here are the things you're allowed
+                to do. Can I reproduce it, can I copy it, can I put it in my text book? Can I use
+                that photograph? Can I make a new version of it? Creative Commons gives tools to
+                creators to make a choice about copyright.</p>
+            <p>Creative Commons licence can cover anything that copyright covers. Every licence says
+                "You need to give me attribution. I created this, give me credit for the work I
+                did." The basic choices are commercial use, or not. Can you make derivative works,
+                versions, adaptations or not? And do you want me to have to share alike?</p>
+            <p>So if I take your stuff, do I have to offer it to the next person under the same
+                terms? There's no requirement for you to do anything with your work other than what
+                you want to do. You own the copyright to it. What we've done is given you the right
+                to exercise your copyright in more ways, more simply.</p>
+            <img class="right" src="../images/2565514353_2ae2073e14.jpg"
+                alt="the blue sky with an ampersand-shaped cloud" />
+            <p>So the idea here is to enable the creative impulses that the technology turns loose,
+                and get the law out of the way. The work of Creative Commons is really about laying
+                the infrastructure and ground work for this new type of culture.</p>
+            <p>A new kind of Folk Culture. Somebody from Delhi, somebody from New York, somebody
+                from Singapore, can feel comfortable using photo that was created and given away by
+                somebody in The United States, or in China, or wherever that the licenses have been
+                extended to. With their identity being preserved. Which means that people can
+                actually create new kinds of things, come together and build things.</p>
+            <p>Mash-ups that people can do with peoples Flicker photos. And CCmixter has allowed
+                artists to make music together. It's really about creativity and connection. Access
+                and control. From amateurs who simply for the love of what they are doing and they
+                want to share it and they want other people to be able to make use of it, to
+                commercial organizations.</p>
+            <p>In the end, this will have a very successful place in the for profit economy.
+                Creative Commons is the bridge to this future. You've got to move away from thinking
+                about content to thinking about communities. Communities that develop around content
+                and the sharing that the licences allow enable these communities to come
+                together.</p>
+            <p>A physical Commons like a park where anybody can enter equally, a Commons with
+                intellectual works is actually much freer. It really is going to be the pillar for
+                communications between people, cultural exchanges. The space for more speech, more
+                free expression. And that's the kind of Commons we're trying to create.</p>
+            <footer style="text-align:left;">
+                <p>Creative Commons</p>
+                <p>All images and music used to create this work were licenced under Creative
+                    Commons licenses</p>
+                <p id="attributions">Attributions: Please visit <a
+                        href="http://mirrors.creativecommons.org/asharedculture"
+                        >http://mirrors.creativecommons.org/asharedculture</a> for expanded credits,
+                    including links to all the creators and CC licensed works that made this video
+                    possible</p>
+            </footer>
+        </section>
+    </body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/xhtml/toc.xhtml b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/xhtml/toc.xhtml
new file mode 100644
index 0000000..50002b4
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/cc-shared-culture/EPUB/xhtml/toc.xhtml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+   <head>
+      <meta charset="utf-8" />
+      <link rel="stylesheet" type="text/css" href="../css/shared-culture.css" />
+   </head>
+   <body>
+      <section class="base" id="toc">
+         <h1>a shared culture</h1>
+         <nav epub:type="toc">
+            <h2>table of contents</h2>
+            <ol>
+               <li>
+                  <a href="p10.xhtml">
+                     <span class="toc-label">a shared culture</span>
+                     <span class="toc-desc">Unscripted, using <code>@controls</code>. Video sources:
+                        mp4, webm</span>
+                  </a>
+               </li>
+               <li>
+                  <a href="p20.xhtml">
+                     <span class="toc-label">what does it mean to be human</span>
+                     <span class="toc-desc"><code>epubReadingSystem</code> aware scripted video
+                        control using <code>click</code> and <code>dblclick</code>, space key. Video
+                        sources: mp4, webm</span>
+                  </a>
+               </li>
+               <li>
+                  <a href="p30.xhtml">
+                     <span class="toc-label">to save the world from failed sharing</span>
+                     <span class="toc-desc">Unscripted,
+                           <code>@autoplay</code>+<code>@controls</code>, <code>WEBVTT</code>
+                        subtitles in two languages. Video sources: mp4, webm</span>
+                  </a>
+               </li>
+               <li>
+                  <a href="p40.xhtml">
+                     <span class="toc-label">exercise your copyright in more ways</span>
+                     <span class="toc-desc">Unscripted,
+                           <code>@autoplay</code>+<code>@controls</code>, <code>TTML</code>
+                        subtitles in two languages. Video sources: mp4, webm</span>
+                  </a>
+               </li>               
+               <li>
+                  <a href="p50.xhtml">
+                     <span class="toc-label">a new kind of folk culture</span>
+                     <span class="toc-desc">Unscripted, using <code>epub:trigger</code>. Video sources: mp4, webm</span>
+                  </a>
+               </li>
+               <li>
+                  <a href="p60.xhtml">
+                     <span class="toc-label">the entire transcript</span>
+                     <span class="toc-desc">Unscripted, <code>audio</code> background soundtrack. Audio sources: <code>mp3</code></span>
+                  </a>
+               </li>
+            </ol>
+         </nav>
+         <nav epub:type="landmarks">
+            <h2>guide</h2>
+            <ol>
+               <li>
+                  <a epub:type="toc" href="#toc">Table of Contents</a>
+               </li>
+               <li>
+                  <a epub:type="bodymatter" href="p10.xhtml">Begin Reading</a>
+               </li>
+            </ol>
+         </nav>
+      </section>
+   </body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture/META-INF/container.xml b/src/test/resources/30/expanded/valid/cc-shared-culture/META-INF/container.xml
new file mode 100644
index 0000000..71d6709
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/cc-shared-culture/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+<rootfiles>
+<rootfile full-path="EPUB/package.opf" media-type="application/oebps-package+xml"/>
+</rootfiles>
+</container>
diff --git a/src/test/resources/30/expanded/valid/cc-shared-culture/mimetype b/src/test/resources/30/expanded/valid/cc-shared-culture/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/cc-shared-culture/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/collections-preview/EPUB/chapter1.xhtml b/src/test/resources/30/expanded/valid/collections-preview/EPUB/chapter1.xhtml
new file mode 100644
index 0000000..72e25da
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/collections-preview/EPUB/chapter1.xhtml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/collections-preview/EPUB/chapter2.xhtml b/src/test/resources/30/expanded/valid/collections-preview/EPUB/chapter2.xhtml
new file mode 100644
index 0000000..72e25da
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/collections-preview/EPUB/chapter2.xhtml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/collections-preview/EPUB/chapter3.xhtml b/src/test/resources/30/expanded/valid/collections-preview/EPUB/chapter3.xhtml
new file mode 100644
index 0000000..72e25da
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/collections-preview/EPUB/chapter3.xhtml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/collections-preview/EPUB/lorem.css b/src/test/resources/30/expanded/valid/collections-preview/EPUB/lorem.css
new file mode 100644
index 0000000..59fa2ed
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/collections-preview/EPUB/lorem.css
@@ -0,0 +1,4 @@
+body {
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/collections-preview/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/collections-preview/EPUB/lorem.opf
new file mode 100644
index 0000000..0f094d4
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/collections-preview/EPUB/lorem.opf
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="nav" href="nav.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="c1" href="chapter1.xhtml" media-type="application/xhtml+xml" />                
+        <item id="c2" href="chapter2.xhtml" media-type="application/xhtml+xml" />                
+        <item id="c3" href="chapter3.xhtml" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="c1" />        
+        <itemref idref="c2" />        
+        <itemref idref="c3" />        
+    </spine>
+    <collection role="preview">
+        <collection role="manifest">
+            <link href="chapter1.xhtml" media-type="application/xhtml+xml"/>
+            <link href="chapter2.xhtml" media-type="application/xhtml+xml"/>
+            <link href="lorem.css" media-type="text/css"/>
+        </collection>
+        <link href="chapter1.xhtml"/>
+    </collection>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/collections-preview/EPUB/nav.xhtml b/src/test/resources/30/expanded/valid/collections-preview/EPUB/nav.xhtml
new file mode 100644
index 0000000..76d7663
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/collections-preview/EPUB/nav.xhtml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Table of Contents</h1>
+		<nav epub:type="toc">
+			<ol>
+				<li><a href="chapter1.xhtml#ch1">Chapter 1</a></li>
+				<li><a href="chapter2.xhtml#ch1">Chapter 2</a></li>
+				<li><a href="chapter3.xhtml#ch1">Chapter 3</a></li>
+			</ol>
+		</nav>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/collections-preview/META-INF/container.xml b/src/test/resources/30/expanded/valid/collections-preview/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/collections-preview/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/collections-preview/mimetype b/src/test/resources/30/expanded/valid/collections-preview/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/collections-preview/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/fallbacks.txt b/src/test/resources/30/expanded/valid/fallbacks.txt
new file mode 100644
index 0000000..dc8b6c0
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/fallbacks.txt
@@ -0,0 +1,13 @@
+# creation date is not stable between different runs
+[format version] 3.0
+[format name] application/epub+zip
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[items count] 5
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[declared mimetype] image/xyz
+[declared mimetype] image/abc
+[declared mimetype] image/jpeg
diff --git a/src/test/resources/30/expanded/valid/fallbacks/EPUB/image.abc b/src/test/resources/30/expanded/valid/fallbacks/EPUB/image.abc
new file mode 100755
index 0000000..4d55c1e
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/fallbacks/EPUB/image.abc
@@ -0,0 +1 @@
+<xyz/>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/fallbacks/EPUB/image.jpeg b/src/test/resources/30/expanded/valid/fallbacks/EPUB/image.jpeg
new file mode 100644
index 0000000..ff336a5
Binary files /dev/null and b/src/test/resources/30/expanded/valid/fallbacks/EPUB/image.jpeg differ
diff --git a/src/test/resources/30/expanded/valid/fallbacks/EPUB/image.xyz b/src/test/resources/30/expanded/valid/fallbacks/EPUB/image.xyz
new file mode 100755
index 0000000..4d55c1e
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/fallbacks/EPUB/image.xyz
@@ -0,0 +1 @@
+<xyz/>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/fallbacks/EPUB/lorem.css b/src/test/resources/30/expanded/valid/fallbacks/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/fallbacks/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/fallbacks/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/fallbacks/EPUB/lorem.opf
new file mode 100644
index 0000000..b57f6a7
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/fallbacks/EPUB/lorem.opf
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+        <item id="img1" href="image.xyz" media-type="image/xyz" fallback="img2"/>
+        <item id="img2" href="image.abc" media-type="image/abc" fallback="img3"/>
+        <item id="img3" href="image.jpeg" media-type="image/jpeg"/>
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/valid/fallbacks/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/fallbacks/EPUB/lorem.xhtml
new file mode 100644
index 0000000..e81335b
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/fallbacks/EPUB/lorem.xhtml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<img src="image.xyz" alt=""/>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/fallbacks/META-INF/container.xml b/src/test/resources/30/expanded/valid/fallbacks/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/fallbacks/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/fallbacks/mimetype b/src/test/resources/30/expanded/valid/fallbacks/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/fallbacks/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue188/EPUB/epub+logo.png b/src/test/resources/30/expanded/valid/issue188/EPUB/epub+logo.png
new file mode 100644
index 0000000..16a44e0
Binary files /dev/null and b/src/test/resources/30/expanded/valid/issue188/EPUB/epub+logo.png differ
diff --git a/src/test/resources/30/expanded/valid/issue188/EPUB/lorem.css b/src/test/resources/30/expanded/valid/issue188/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue188/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue188/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/issue188/EPUB/lorem.opf
new file mode 100644
index 0000000..defa7a4
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue188/EPUB/lorem.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:9788C92A-C6DC-4239-8E3B-D524E89E7B02</dc:identifier>
+        <dc:title>Issue 188</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2012-10-15</dc:date>
+        <meta property="dcterms:modified">2012-10-15T13:11:26Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="img" href="epub+logo.png" media-type="image/png" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/valid/issue188/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/issue188/EPUB/lorem.xhtml
new file mode 100644
index 0000000..5258f52
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue188/EPUB/lorem.xhtml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<img src="epub+logo.png" alt=""/>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/issue188/META-INF/container.xml b/src/test/resources/30/expanded/valid/issue188/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue188/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue188/mimetype b/src/test/resources/30/expanded/valid/issue188/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue188/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue198/META-INF/container.xml b/src/test/resources/30/expanded/valid/issue198/META-INF/container.xml
new file mode 100644
index 0000000..54bfc8d
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue198/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+    <rootfiles>
+        <rootfile full-path="OEBPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
diff --git a/src/test/resources/30/expanded/valid/issue198/OEBPS/content.opf b/src/test/resources/30/expanded/valid/issue198/OEBPS/content.opf
new file mode 100644
index 0000000..626c3cc
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue198/OEBPS/content.opf
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BookID" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
+    <dc:title>Test Book</dc:title>
+    <dc:identifier id="BookID" >id</dc:identifier>
+    <dc:language>lang</dc:language>
+    <meta property="dcterms:modified">2012-09-01T17:18:00Z</meta>
+  </metadata>
+  <manifest>
+    <!-- TOC -->
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+
+    <!-- PAGES -->
+    <item id="page_0001.xhtml" href="page_0001.xhtml" properties="nav" media-type="application/xhtml+xml" />
+    <item id="page_0002.xhtml" href="page_0002.xhtml" media-type="application/xhtml+xml" />
+
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page_0001.xhtml" />
+    <itemref idref="page_0002.xhtml" />
+ 
+  </spine>
+</package>
+
diff --git a/src/test/resources/30/expanded/valid/issue198/OEBPS/page_0001.xhtml b/src/test/resources/30/expanded/valid/issue198/OEBPS/page_0001.xhtml
new file mode 100644
index 0000000..f473ee4
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue198/OEBPS/page_0001.xhtml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+<head>
+  <title>>First Page</title>
+
+</head>
+
+<body>
+  <nav epub:type="toc">
+    <ol>
+      <li><a href="#ch1">Chapter 1</a></li>
+      <li><a href="page_0002.xhtml#page002">Chapter 2</a></li>
+    </ol>
+  </nav>
+  
+  <h2 id="ch1">Chapter 1</h2>
+  <p>
+Go to second page: <a href="page_0002.xhtml#end_of_book">ok</a>
+</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue198/OEBPS/page_0002.xhtml b/src/test/resources/30/expanded/valid/issue198/OEBPS/page_0002.xhtml
new file mode 100644
index 0000000..6b7a505
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue198/OEBPS/page_0002.xhtml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang ="en">
+<head>
+	<title>Page 2</title>
+</head>
+<body id="page002"><p>
+words</p>
+
+<div><a data-trigger="ShowPopup" data-showpopup-target="!body #popup"><span class="button"></span></a></div>
+<p>more words</p>
+
+<div class="hidden">
+		<div id="popup" class="modal">
+			<div class="modal-header">
+				<h1>Boiled Peanut Hummus</h1>
+			</div>
+			<p>hi</p>
+			</div>
+			</div>
+
+
+
+<p>
+<a id="end_of_book"></a>
+</p></body></html>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue198/OEBPS/toc.ncx b/src/test/resources/30/expanded/valid/issue198/OEBPS/toc.ncx
new file mode 100644
index 0000000..ecb9b2a
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue198/OEBPS/toc.ncx
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta content="id" name="dtb:uid" />
+    <meta content="0" name="dtb:depth" />
+    <meta content="0" name="dtb:totalPageCount" />
+    <meta content="0" name="dtb:maxPageNumber" />
+  </head>
+  <docTitle>
+    <text>Test Book</text>
+  </docTitle>
+  <navMap>
+    <navPoint id="navpoint1" playOrder="1">
+      <navLabel>
+        <text>Introduction</text>
+      </navLabel>
+      <content src="page_0001.xhtml" />
+    </navPoint>
+    <navPoint id="navpoint4" playOrder="2">
+      <navLabel>
+        <text>Cherished Breads</text>
+      </navLabel>
+      <content src="page_0002.xhtml#end_of_book" />
+    </navPoint>
+  </navMap>
+</ncx>
+
diff --git a/src/test/resources/30/expanded/valid/issue198/mimetype b/src/test/resources/30/expanded/valid/issue198/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue198/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue211a/EPUB/lorem.css b/src/test/resources/30/expanded/valid/issue211a/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue211a/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue211a/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/issue211a/EPUB/lorem.opf
new file mode 100644
index 0000000..9538148
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue211a/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446441231401923</dc:identifier>
+        <dc:title>Issue 211 a</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2012-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/valid/issue211a/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/issue211a/EPUB/lorem.xhtml
new file mode 100644
index 0000000..9a54315
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue211a/EPUB/lorem.xhtml
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			
+			<figure>
+				<figcaption>caption</figcaption>
+				<style scoped="scoped"> </style>
+				
+			</figure>
+			
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/issue211a/META-INF/container.xml b/src/test/resources/30/expanded/valid/issue211a/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue211a/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue211a/mimetype b/src/test/resources/30/expanded/valid/issue211a/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue211a/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue211b/EPUB/lorem.css b/src/test/resources/30/expanded/valid/issue211b/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue211b/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue211b/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/issue211b/EPUB/lorem.opf
new file mode 100644
index 0000000..3a53ff9
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue211b/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-441203491231401923</dc:identifier>
+        <dc:title>Issue 211 b</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2012-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/valid/issue211b/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/issue211b/EPUB/lorem.xhtml
new file mode 100644
index 0000000..559f91a
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue211b/EPUB/lorem.xhtml
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			
+			<figure>
+				<style scoped="scoped"> </style>
+				<figcaption>caption</figcaption>				
+				    				
+			</figure>
+			
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/issue211b/META-INF/container.xml b/src/test/resources/30/expanded/valid/issue211b/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue211b/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue211b/mimetype b/src/test/resources/30/expanded/valid/issue211b/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue211b/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue225/EPUB/lorem.css b/src/test/resources/30/expanded/valid/issue225/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue225/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue225/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/issue225/EPUB/lorem.opf
new file mode 100644
index 0000000..3b65af2
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue225/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue225/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/issue225/EPUB/lorem.xhtml
new file mode 100644
index 0000000..943b67e
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue225/EPUB/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor <a href="">sit amet</a>, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. <a href=" ">sit amet</a> Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/issue225/META-INF/container.xml b/src/test/resources/30/expanded/valid/issue225/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue225/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue225/mimetype b/src/test/resources/30/expanded/valid/issue225/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue225/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue226/EPUB/doc.pdf b/src/test/resources/30/expanded/valid/issue226/EPUB/doc.pdf
new file mode 100644
index 0000000..02915c2
Binary files /dev/null and b/src/test/resources/30/expanded/valid/issue226/EPUB/doc.pdf differ
diff --git a/src/test/resources/30/expanded/valid/issue226/EPUB/lorem.css b/src/test/resources/30/expanded/valid/issue226/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue226/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue226/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/issue226/EPUB/lorem.opf
new file mode 100644
index 0000000..9500c29
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue226/EPUB/lorem.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="pdf" href="doc.pdf" media-type="application/pdf" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue226/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/issue226/EPUB/lorem.xhtml
new file mode 100644
index 0000000..0a760e2
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue226/EPUB/lorem.xhtml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p><a href="#ch2">See chap 2</a></p>
+			<object data="doc.pdf">
+				<p>You cannot open PDF docs.</p>
+			</object>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/issue226/META-INF/container.xml b/src/test/resources/30/expanded/valid/issue226/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue226/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue226/mimetype b/src/test/resources/30/expanded/valid/issue226/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue226/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue237/EPUB/lorem.css b/src/test/resources/30/expanded/valid/issue237/EPUB/lorem.css
new file mode 100644
index 0000000..28c0343
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue237/EPUB/lorem.css
@@ -0,0 +1,8 @@
+ at namespace xlink url('http://www.w3.org/1999/xlink');
+
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue237/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/issue237/EPUB/lorem.opf
new file mode 100644
index 0000000..fa882c6
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue237/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/valid/issue237/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/issue237/EPUB/lorem.xhtml
new file mode 100644
index 0000000..ce440bb
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue237/EPUB/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/issue237/META-INF/container.xml b/src/test/resources/30/expanded/valid/issue237/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue237/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue237/mimetype b/src/test/resources/30/expanded/valid/issue237/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue237/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue249/EPUB/lorem.css b/src/test/resources/30/expanded/valid/issue249/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue249/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue249/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/issue249/EPUB/lorem.opf
new file mode 100644
index 0000000..79614b9
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue249/EPUB/lorem.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav remote-resources" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+        <item id="video" href="https://www.youtube.com/v/xyz?version=3" media-type="application/x-shockwave-flash"/>
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/valid/issue249/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/issue249/EPUB/lorem.xhtml
new file mode 100644
index 0000000..17232e8
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue249/EPUB/lorem.xhtml
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+			
+			<object type="application/x-shockwave-flash" width="300" height="400">
+				<param name="movie" value="https://www.youtube.com/v/xyz?version=3" />
+				<p>Video not available.</p>
+			</object>
+				
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/issue249/META-INF/container.xml b/src/test/resources/30/expanded/valid/issue249/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue249/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue249/mimetype b/src/test/resources/30/expanded/valid/issue249/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue249/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue267.txt b/src/test/resources/30/expanded/valid/issue267.txt
new file mode 100644
index 0000000..18fd414
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue267.txt
@@ -0,0 +1,14 @@
+# creation date is not stable between different runs
+[format version] 3.0
+[format name] application/epub+zip
+[title] My Main Title
+[title] First Subtitle
+[title] Another subtitle
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[items count] 2
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[characters count] 6061
+
diff --git a/src/test/resources/30/expanded/valid/issue267/EPUB/lorem.css b/src/test/resources/30/expanded/valid/issue267/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue267/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue267/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/issue267/EPUB/lorem.opf
new file mode 100644
index 0000000..8482a56
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue267/EPUB/lorem.opf
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+    <dc:title id='title'>My Main Title</dc:title>
+    <meta refines="#title" property="title-type">main</meta>
+    <meta refines="#title" property="display-seq">1</meta>
+    <dc:title id='subtitle2'>First Subtitle</dc:title>
+    <meta refines="#subtitle2" property="title-type">subtitle</meta>
+    <meta refines="#subtitle2" property="display-seq">2</meta>
+    <dc:title id='subtitle3'>Another subtitle</dc:title>
+    <meta refines="#subtitle3" property="title-type">subtitle</meta>
+    <meta refines="#subtitle3" property="display-seq">3</meta>
+    <dc:language>la</dc:language>
+    <dc:date>2011-09-01</dc:date>
+    <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+  </metadata> 
+  <manifest>
+    <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />
+    <item id="css" href="lorem.css" media-type="text/css" />
+  </manifest>
+  <spine>
+    <itemref idref="t1" />
+  </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue267/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/issue267/EPUB/lorem.xhtml
new file mode 100644
index 0000000..ce440bb
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue267/EPUB/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/issue267/META-INF/container.xml b/src/test/resources/30/expanded/valid/issue267/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue267/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue267/mimetype b/src/test/resources/30/expanded/valid/issue267/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue267/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue270/EPUB/lorem-2.xhtml b/src/test/resources/30/expanded/valid/issue270/EPUB/lorem-2.xhtml
new file mode 100644
index 0000000..dbd91b4
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue270/EPUB/lorem-2.xhtml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/issue270/EPUB/lorem.css b/src/test/resources/30/expanded/valid/issue270/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue270/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue270/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/issue270/EPUB/lorem.opf
new file mode 100644
index 0000000..835bdde
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue270/EPUB/lorem.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="t2" href="lorem-2.xhtml" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+        <itemref idref="t2" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue270/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/issue270/EPUB/lorem.xhtml
new file mode 100644
index 0000000..a21baab
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue270/EPUB/lorem.xhtml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="./lorem-2.xhtml#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/issue270/META-INF/container.xml b/src/test/resources/30/expanded/valid/issue270/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue270/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/issue270/mimetype b/src/test/resources/30/expanded/valid/issue270/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/issue270/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-audio.txt b/src/test/resources/30/expanded/valid/lorem-audio.txt
new file mode 100644
index 0000000..65bc8f5
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-audio.txt
@@ -0,0 +1,12 @@
+# creation date is not stable between different runs
+[format version] 3.0
+[format name] application/epub+zip
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[items count] 4
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[declared mimetype] audio/mp3
+[declared mimetype] audio/mp4
diff --git a/src/test/resources/30/expanded/valid/lorem-audio/EPUB/audio.mp3 b/src/test/resources/30/expanded/valid/lorem-audio/EPUB/audio.mp3
new file mode 100644
index 0000000..e69de29
diff --git a/src/test/resources/30/expanded/valid/lorem-audio/EPUB/audio.mp4 b/src/test/resources/30/expanded/valid/lorem-audio/EPUB/audio.mp4
new file mode 100644
index 0000000..e69de29
diff --git a/src/test/resources/30/expanded/valid/lorem-audio/EPUB/lorem.css b/src/test/resources/30/expanded/valid/lorem-audio/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-audio/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-audio/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/lorem-audio/EPUB/lorem.opf
new file mode 100644
index 0000000..cdcf638
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-audio/EPUB/lorem.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+		<item id="mp3" href="audio.mp3" media-type="audio/mp3" />
+		<item id="mp4" href="audio.mp4" media-type="audio/mp4" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-audio/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/lorem-audio/EPUB/lorem.xhtml
new file mode 100644
index 0000000..2b0d588
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-audio/EPUB/lorem.xhtml
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+	<audio controls="controls">
+  <source src="audio.mp3" type="audio/mp3" />
+  <source src="audio.mp4" type="audio/mp4" />
+
+	</audio>
+	
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-audio/META-INF/container.xml b/src/test/resources/30/expanded/valid/lorem-audio/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-audio/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-audio/mimetype b/src/test/resources/30/expanded/valid/lorem-audio/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-audio/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-dual.txt b/src/test/resources/30/expanded/valid/lorem-basic-dual.txt
new file mode 100644
index 0000000..9be38bf
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-dual.txt
@@ -0,0 +1,10 @@
+# creation date is not stable between different runs
+[format version] 3.0
+[format name] application/epub+zip
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:661e8400-a29c-41d4-a716-2278971238567
+[items count] 4
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-dual/EPUB/1-lorem.xhtml b/src/test/resources/30/expanded/valid/lorem-basic-dual/EPUB/1-lorem.xhtml
new file mode 100644
index 0000000..d75d361
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-dual/EPUB/1-lorem.xhtml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>		
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-dual/EPUB/2-lorem.xhtml b/src/test/resources/30/expanded/valid/lorem-basic-dual/EPUB/2-lorem.xhtml
new file mode 100644
index 0000000..3ea6a83
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-dual/EPUB/2-lorem.xhtml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section id="ch3">
+			<h2>Chapter 3</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch4">
+			<h2>Chapter 4</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-dual/EPUB/lorem.css b/src/test/resources/30/expanded/valid/lorem-basic-dual/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-dual/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-dual/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/lorem-basic-dual/EPUB/lorem.opf
new file mode 100644
index 0000000..87ab179
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-dual/EPUB/lorem.opf
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:661e8400-a29c-41d4-a716-2278971238567</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2012-04-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="1-lorem.xhtml" media-type="application/xhtml+xml" />
+        <item id="t2" href="2-lorem.xhtml" media-type="application/xhtml+xml" />
+        <item id="nav" href="nav.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />    
+        <itemref idref="t2" />    
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-dual/EPUB/nav.xhtml b/src/test/resources/30/expanded/valid/lorem-basic-dual/EPUB/nav.xhtml
new file mode 100644
index 0000000..eecc315
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-dual/EPUB/nav.xhtml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="1-lorem.xhtml#ch1">Chapter 1</a></li>
+					<li><a href="1-lorem.xhtml#ch2">Chapter 2</a></li>
+					<li><a href="2-lorem.xhtml#ch3">Chapter 3</a></li>
+					<li><a href="2-lorem.xhtml#ch4">Chapter 4</a></li>
+				</ol>
+			</nav>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-dual/META-INF/container.xml b/src/test/resources/30/expanded/valid/lorem-basic-dual/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-dual/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-dual/mimetype b/src/test/resources/30/expanded/valid/lorem-basic-dual/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-dual/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-mathml/EPUB/wasteland-content.xhtml b/src/test/resources/30/expanded/valid/lorem-basic-mathml/EPUB/wasteland-content.xhtml
new file mode 100644
index 0000000..d93497c
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-mathml/EPUB/wasteland-content.xhtml
@@ -0,0 +1,1082 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>The Waste Land</title>
+		<link type="text/css" rel="stylesheet" href="wasteland.css"/>
+	</head>
+	<body>
+		<section epub:type="frontmatter" id="frontmatter">
+			<section epub:type="titlepage" id="titlepage">
+				<h1>The Waste Land</h1>
+				<div class="aut">T.S. Eliot</div>
+				<div epub:type="epigraph">					
+					<p>
+						<span xml:lang="la">"Nam Sibyllam quidem Cumis ego ipse oculis
+							meis<br />vidi in ampulla pendere, et cum illi pueri dicerent</span>: <br />
+						<span xml:lang="grc"
+							>&#x03A3;&#x03AF;&#x03B2;&#x03C5;&#x03BB;&#x03BB;&#x03B1;
+							&#x03C4;&#x03AF;
+							&#x03F4;&#x03AD;&#x03BB;&#x03B5;&#x03B9;&#x03C2;<!--Sibylla ti theleis-->
+						</span>; <span xml:lang="la">respondebat illa</span>: <span xml:lang="grc"
+							>&#x03AC;&#x03C0;&#x03BF;&#x03F4;&#x03B1;&#x03B3;&#x03B5;&#x1FD6;&#x03B3;
+							&#x03F4;&#x03AD;&#x03BB;&#x03E3;<!--apothanein thelo-->
+						</span>."</p>
+				</div>
+				<p epub:type="dedication">For Ezra Pound: <span xml:lang="it">il miglior
+						fabbro</span></p>
+			</section>
+		</section>
+		<section epub:type="bodymatter" id="bodymatter">
+
+			<section id="ch1">
+				<h2>I. THE BURIAL OF THE DEAD</h2>
+   
+   	  <math xmlns="http://www.w3.org/1998/Math/MathML" alttext="2x+y-z">
+         <mrow>
+            <mn>2</mn>
+            <mo> &#x2061;<!--INVISIBLE TIMES--></mo>
+            <mi>x</mi>
+         </mrow>
+         <mrow>
+            <mo>+</mo>
+            <mi>y</mi>
+            <mo>-</mo>
+            <mi>z</mi>
+         </mrow>
+      </math>
+				
+				<div class="linegroup">
+					<span class="ln">April is the cruellest month, breeding</span>
+					<span class="ln">Lilacs out of the dead land, mixing</span>
+					<span class="ln">Memory and desire, stirring</span>
+					<span class="ln">Dull roots with spring rain.</span>
+					<span class="ln">Winter kept us warm, covering</span>
+					<span class="ln">Earth in forgetful snow, feeding</span>
+					<span class="ln">A little life with dried tubers.</span>
+					<span class="ln">Summer surprised us, coming over the Starnbergersee</span>
+					<span class="ln">With a shower of rain; we stopped in the colonnade,</span>
+					<span class="ln">And went on in sunlight, into the Hofgarten,<span class="lnum"
+							>10</span>
+					</span>
+					<span class="ln">And drank coffee, and talked for an hour.</span>
+					<span class="ln" xml:lang="de">Bin gar keine Russin, stamm' aus Litauen, echt
+						deutsch.</span>
+					<span class="ln">And when we were children, staying at the archduke's,</span>
+					<span class="ln">My cousin's, he took me out on a sled,</span>
+					<span class="ln">And I was frightened. He said, Marie,</span>
+					<span class="ln">Marie, hold on tight. And down we went.</span>
+					<span class="ln">In the mountains, there you feel free.</span>
+					<span class="ln">I read, much of the night, and go south in the winter.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">What are the roots that clutch, what branches grow</span>
+					<span class="ln">Out of this stony rubbish? Son of man<a epub:type="noteref" class="noteref"
+							href="#note-1">*</a>,<span class="lnum">20</span>
+					</span>
+					<span class="ln">You cannot say, or guess, for you know only</span>
+					<span class="ln">A heap of broken images, where the sun beats,</span>
+					<span class="ln">And the dead tree gives no shelter, the cricket no relief<a
+							epub:type="noteref" class="noteref" href="#note-2">*</a>,</span>
+					<span class="ln">And the dry stone no sound of water. Only</span>
+					<span class="ln">There is shadow under this red rock,</span>
+					<span class="ln">(Come in under the shadow of this red rock),</span>
+					<span class="ln">And I will show you something different from either</span>
+					<span class="ln">Your shadow at morning striding behind you</span>
+					<span class="ln">Or your shadow at evening rising to meet you;</span>
+					<span class="ln">I will show you fear in a handful of dust.<span class="lnum"
+							>30</span>
+					</span>
+					<blockquote xml:lang="de">
+						<div>
+							<span class="ln">Frisch weht der Wind<a epub:type="noteref" class="noteref"
+									href="#note-3">*</a>
+							</span>
+							<span class="ln">Der Heimat zu</span>
+							<span class="ln">Mein Irisch Kind,</span>
+							<span class="ln">Wo weilest du?</span>
+						</div>
+					</blockquote>
+					<span class="ln">"You gave me hyacinths first a year ago;</span>
+					<span class="ln">"They called me the hyacinth girl."</span>
+					<span class="ln">&#x2015;Yet when we came back, late, from the Hyacinth
+						garden,</span>
+					<span class="ln">Your arms full, and your hair wet, I could not</span>
+					<span class="ln">Speak, and my eyes failed, I was neither</span>
+					<span class="ln">Living nor dead, and I knew nothing,<span class="lnum"
+							>40</span>
+					</span>
+					<span class="ln">Looking into the heart of light, the silence.</span>
+					<span class="ln" xml:lang="de">
+						<em>Od' und leer das Meer</em>.<a epub:type="noteref" class="noteref" href="#note-4">*</a>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Madame Sosostris, famous clairvoyante,</span>
+					<span class="ln">Had a bad cold, nevertheless</span>
+					<span class="ln">Is known to be the wisest woman in Europe,</span>
+					<span class="ln">With a wicked pack of cards. Here, said she<a
+							epub:type="noteref" class="noteref" href="#note-5">*</a>,</span>
+					<span class="ln">Is your card, the drowned Phoenician Sailor,</span>
+					<span class="ln">(Those are pearls that were his eyes. Look!)</span>
+					<span class="ln">Here is Belladonna, the Lady of the Rocks,</span>
+					<span class="ln">The lady of situations.<span class="lnum">50</span>
+					</span>
+					<span class="ln">Here is the man with three staves, and here the Wheel,</span>
+					<span class="ln">And here is the one-eyed merchant, and this card,</span>
+					<span class="ln">Which is blank, is something he carries on his back,</span>
+					<span class="ln">Which I am forbidden to see. I do not find</span>
+					<span class="ln">The Hanged Man. Fear death by water.</span>
+					<span class="ln">I see crowds of people, walking round in a ring.</span>
+					<span class="ln">Thank you. If you see dear Mrs. Equitone,</span>
+					<span class="ln">Tell her I bring the horoscope myself:</span>
+					<span class="ln">One must be so careful these days.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Unreal City<a epub:type="noteref" class="noteref" href="#note-6">*</a>,<span
+							class="lnum">60</span>
+					</span>
+					<span class="ln">Under the brown fog of a winter dawn,</span>
+					<span class="ln">A crowd flowed over London Bridge, so many,</span>
+					<span class="ln">I had not thought death had undone so many.<a
+							epub:type="noteref" class="noteref" href="#note-7">*</a>
+					</span>
+					<span class="ln">Sighs, short and infrequent, were exhaled<a epub:type="noteref" class="noteref"
+							href="#note-8">*</a>,</span>
+					<span class="ln">And each man fixed his eyes before his feet.</span>
+					<span class="ln">Flowed up the hill and down King William Street,</span>
+					<span class="ln">To where Saint Mary Woolnoth kept the hours</span>
+					<span class="ln">With a dead sound on the final stroke of nine.<a
+							epub:type="noteref" class="noteref" href="#note-9">*</a>
+					</span>
+					<span class="ln">There I saw one I knew, and stopped him, crying
+						"Stetson!</span>
+					<span class="ln">"You who were with me in the ships at Mylae!<span class="lnum"
+							>70</span>
+					</span>
+					<span class="ln">"That corpse you planted last year in your garden,</span>
+					<span class="ln">"Has it begun to sprout? Will it bloom this year?</span>
+					<span class="ln">"Or has the sudden frost disturbed its bed?</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"Oh keep the Dog far hence, that's friend to men,<a
+							epub:type="noteref" class="noteref" href="#note-10">*</a>
+					</span>
+					<span class="ln">"Or with his nails he'll dig it up again!</span>
+					<span class="ln">"You! <span xml:lang="fr">hypocrite lecteur! - mon semblable, -
+							mon frere</span> !"<a epub:type="noteref" class="noteref" href="#note-11">*</a>
+					</span>
+				</div>
+			</section>
+			<section id="ch2">
+				<h2>II. A GAME OF CHESS</h2>
+				<div class="linegroup">
+					<span class="ln">The Chair she sat in, like a burnished throne<a
+							epub:type="noteref" class="noteref" href="#note-12">*</a>,</span>
+					<span class="ln">Glowed on the marble, where the glass</span>
+					<span class="ln">Held up by standards wrought with fruited vines</span>
+					<span class="ln">From which a golden Cupidon peeped out<span class="lnum"
+							>80</span>
+					</span>
+					<span class="ln">(Another hid his eyes behind his wing)</span>
+					<span class="ln">Doubled the flames of sevenbranched candelabra</span>
+					<span class="ln">Reflecting light upon the table as</span>
+					<span class="ln">The glitter of her jewels rose to meet it,</span>
+					<span class="ln">From satin cases poured in rich profusion;</span>
+					<span class="ln">In vials of ivory and coloured glass</span>
+					<span class="ln">Unstoppered, lurked her strange synthetic perfumes,</span>
+					<span class="ln">Unguent, powdered, or liquid - troubled, confused</span>
+					<span class="ln">And drowned the sense in odours; stirred by the air</span>
+					<span class="ln">That freshened from the window, these ascended<span
+							class="lnum">90</span>
+					</span>
+					<span class="ln">In fattening the prolonged candle-flames,</span>
+					<span class="ln">Flung their smoke into the laquearia<a epub:type="noteref" class="noteref"
+							href="#note-13">*</a>,</span>
+					<span class="ln">Stirring the pattern on the coffered ceiling.</span>
+					<span class="ln">Huge sea-wood fed with copper</span>
+					<span class="ln">Burned green and orange, framed by the coloured stone,</span>
+					<span class="ln">In which sad light a carved dolphin swam.</span>
+					<span class="ln">Above the antique mantel was displayed</span>
+					<span class="ln">As though a window gave upon the sylvan scene<a
+							epub:type="noteref" class="noteref" href="#note-14">*</a>
+					</span>
+					<span class="ln">The change of Philomel, by the barbarous king<a
+							epub:type="noteref" class="noteref" href="#note-15">*</a>
+					</span>
+					<span class="ln">So rudely forced; yet there the nightingale<a
+							epub:type="noteref" class="noteref" href="#note-16">*</a>
+						<span class="lnum">100</span>
+					</span>
+					<span class="ln">Filled all the desert with inviolable voice</span>
+					<span class="ln">And still she cried, and still the world pursues,</span>
+					<span class="ln">"Jug Jug" to dirty ears.</span>
+					<span class="ln">And other withered stumps of time</span>
+					<span class="ln">Were told upon the walls; staring forms</span>
+					<span class="ln">Leaned out, leaning, hushing the room enclosed.</span>
+					<span class="ln">Footsteps shuffled on the stair.</span>
+					<span class="ln">Under the firelight, under the brush, her hair</span>
+					<span class="ln">Spread out in fiery points</span>
+					<span class="ln">Glowed into words, then would be savagely still.<span
+							class="lnum">110</span>
+					</span>
+				</div>
+				<div class="linegroup">
+					<div class="linegroup">
+						<span class="ln">"My nerves are bad to-night. Yes, bad. Stay with me.</span>
+						<span class="ln">"Speak to me. Why do you never speak. Speak.</span>
+						<span class="ln">"What are you thinking of? What thinking? What?</span>
+						<span class="ln">"I never know what you are thinking. Think."</span>
+					</div>
+					<div class="linegroup">
+						<span class="ln">I think we are in rats' alley<a epub:type="noteref" class="noteref"
+								href="#note-17">*</a>
+						</span>
+						<span class="ln">Where the dead men lost their bones.</span>
+					</div>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"What is that noise?"</span>
+					<span class="ln">The wind under the door.<a epub:type="noteref" class="noteref" href="#note-18"
+							>*</a>
+					</span>
+					<span class="ln">"What is that noise now? What is the wind doing?"</span>
+					<span class="ln">Nothing again nothing.<span class="lnum">120</span>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"Do</span>
+					<span class="ln">"You know nothing? Do you see nothing? Do you remember</span>
+					<span class="ln">"Nothing?"</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">I remember</span>
+					<span class="ln">Those are pearls that were his eyes.</span>
+					<span class="ln">"Are you alive, or not? Is there nothing in your head?"<a
+							epub:type="noteref" class="noteref" href="#note-19">*</a>
+					</span>
+					<span class="ln">But</span>
+					<span class="ln">O O O O that Shakespeherian Rag&#x2015;</span>
+					<span class="ln">It's so elegant</span>
+					<span class="ln">So intelligent<span class="lnum">130</span>
+					</span>
+					<span class="ln">"What shall I do now? What shall I do?"</span>
+					<span class="ln">I shall rush out as I am, and walk the street</span>
+					<span class="ln">"With my hair down, so. What shall we do to-morrow?</span>
+					<span class="ln">"What shall we ever do?"</span>
+					<span class="ln">The hot water at ten.</span>
+					<span class="ln">And if it rains, a closed car at four.</span>
+					<span class="ln">And we shall play a game of chess,</span>
+					<span class="ln">Pressing lidless eyes and waiting for a knock upon the door.<a
+							epub:type="noteref" class="noteref" href="#note-20">*</a>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">When Lil's husband got demobbed, I said -</span>
+					<span class="ln">I didn't mince my words, I said to her myself,<span
+							class="lnum">140</span>
+					</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">Now Albert's coming back, make yourself a bit smart.</span>
+					<span class="ln">He'll want to know what you done with that money he gave
+						you</span>
+					<span class="ln">To get yourself some teeth. He did, I was there.</span>
+					<span class="ln">You have them all out, Lil, and get a nice set,</span>
+					<span class="ln">He said, I swear, I can't bear to look at you.</span>
+					<span class="ln">And no more can't I, I said, and think of poor Albert,</span>
+					<span class="ln">He's been in the army four years, he wants a good time,</span>
+					<span class="ln">And if you don't give it him, there's others will, I
+						said.</span>
+					<span class="ln">Oh is there, she said. Something o' that, I said.<span
+							class="lnum">150</span>
+					</span>
+					<span class="ln">Then I'll know who to thank, she said, and give me a straight
+						look.</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">If you don't like it you can get on with it, I said.</span>
+					<span class="ln">Others can pick and choose if you can't.</span>
+					<span class="ln">But if Albert makes off, it won't be for lack of
+						telling.</span>
+					<span class="ln">You ought to be ashamed, I said, to look so antique.</span>
+					<span class="ln">(And her only thirty-one.)</span>
+					<span class="ln">I can't help it, she said, pulling a long face,</span>
+					<span class="ln">It's them pills I took, to bring it off, she said.</span>
+					<span class="ln">(She's had five already, and nearly died of young George.)<span
+							class="lnum">160</span>
+					</span>
+					<span class="ln">The chemist said it would be all right, but I've never been the
+						same.</span>
+					<span class="ln">You <em>are</em> a proper fool, I said.</span>
+					<span class="ln">Well, if Albert won't leave you alone, there it is, I
+						said,</span>
+					<span class="ln">What you get married for if you don't want children?</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">Well, that Sunday Albert was home, they had a hot
+						gammon,</span>
+					<span class="ln">And they asked me in to dinner, to get the beauty of it
+						hot&#x2015;</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">Goonight Bill. Goonight Lou. Goonight May. Goonight.<span
+							class="lnum">170</span>
+					</span>
+					<span class="ln">Ta ta. Goonight. Goonight.</span>
+					<span class="ln">Good night, ladies, good night, sweet ladies, good night, good
+						night.</span>
+				</div>
+			</section>
+			<section id="ch3">
+				<h2>III. THE FIRE SERMON</h2>
+				<div class="linegroup">
+					<span class="ln">The river's tent is broken: the last fingers of leaf</span>
+					<span class="ln">Clutch and sink into the wet bank. The wind</span>
+					<span class="ln">Crosses the brown land, unheard. The nymphs are
+						departed.</span>
+					<span class="ln">Sweet Thames, run softly, till I end my song.<a
+							epub:type="noteref" class="noteref" href="#note-21">*</a>
+					</span>
+					<span class="ln">The river bears no empty bottles, sandwich papers,</span>
+					<span class="ln">Silk handkerchiefs, cardboard boxes, cigarette ends</span>
+					<span class="ln">Or other testimony of summer nights. The nymphs are
+						departed.</span>
+					<span class="ln">And their friends, the loitering heirs of city directors;<span
+							class="lnum">180</span>
+					</span>
+					<span class="ln">Departed, have left no addresses.</span>
+					<span class="ln">By the waters of Leman I sat down and wept . . .</span>
+					<span class="ln">Sweet Thames, run softly till I end my song,</span>
+					<span class="ln">Sweet Thames, run softly, for I speak not loud or long.</span>
+					<span class="ln">But at my back in a cold blast I hear</span>
+					<span class="ln">The rattle of the bones, and chuckle spread from ear to
+						ear.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">A rat crept softly through the vegetation</span>
+					<span class="ln">Dragging its slimy belly on the bank</span>
+					<span class="ln">While I was fishing in the dull canal</span>
+					<span class="ln">On a winter evening round behind the gashouse<span class="lnum"
+							>190</span>
+					</span>
+					<span class="ln">Musing upon the king my brother's wreck</span>
+					<span class="ln">And on the king my father's death before him.<a
+							epub:type="noteref" class="noteref" href="#note-22">*</a>
+					</span>
+					<span class="ln">White bodies naked on the low damp ground</span>
+					<span class="ln">And bones cast in a little low dry garret,</span>
+					<span class="ln">Rattled by the rat's foot only, year to year.</span>
+					<span class="ln">But at my back from time to time I hear<a epub:type="noteref" class="noteref"
+							href="#note-23">*</a>
+					</span>
+					<span class="ln">The sound of horns and motors, which shall bring<a
+							epub:type="noteref" class="noteref" href="#note-24">*</a>
+					</span>
+					<span class="ln">Sweeney to Mrs. Porter in the spring.</span>
+					<span class="ln">O the moon shone bright on Mrs. Porter<a epub:type="noteref" class="noteref"
+							href="#note-25">*</a>
+					</span>
+					<span class="ln">And on her daughter<span class="lnum">200</span>
+					</span>
+					<span class="ln">They wash their feet in soda water</span>
+					<span class="ln" xml:lang="fr">
+						<em>Et O ces voix d'enfants, chantant dans la coupole<a epub:type="noteref" class="noteref"
+								href="#note-26">*</a>
+						</em>!</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Twit twit twit</span>
+					<span class="ln">Jug jug jug jug jug jug</span>
+					<span class="ln">So rudely forc'd.</span>
+					<span class="ln">Tereu</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Unreal City</span>
+					<span class="ln">Under the brown fog of a winter noon</span>
+					<span class="ln">Mr. Eugenides, the Smyrna merchant</span>
+					<span class="ln">Unshaven, with a pocket full of currants<a epub:type="noteref" class="noteref"
+							href="#note-27">*</a>
+						<span class="lnum">210</span>
+					</span>
+					<span class="ln">C.i.f. London: documents at sight,</span>
+					<span class="ln">Asked me in demotic French</span>
+					<span class="ln">To luncheon at the Cannon Street Hotel</span>
+					<span class="ln">Followed by a weekend at the Metropole.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">At the violet hour, when the eyes and back</span>
+					<span class="ln">Turn upward from the desk, when the human engine waits</span>
+					<span class="ln">Like a taxi throbbing waiting,</span>
+					<span class="ln">I Tiresias, though blind, throbbing between two lives<a
+							epub:type="noteref" class="noteref" href="#note-28">*</a>,</span>
+					<span class="ln">Old man with wrinkled female breasts, can see</span>
+					<span class="ln">At the violet hour, the evening hour that strives<span
+							class="lnum">220</span>
+					</span>
+					<span class="ln">Homeward, and brings the sailor home from sea<a
+							epub:type="noteref" class="noteref" href="#note-29">*</a>,</span>
+					<span class="ln">The typist home at teatime, clears her breakfast, lights</span>
+					<span class="ln">Her stove, and lays out food in tins.</span>
+					<span class="ln">Out of the window perilously spread</span>
+					<span class="ln">Her drying combinations touched by the sun's last rays,</span>
+					<span class="ln">On the divan are piled (at night her bed)</span>
+					<span class="ln">Stockings, slippers, camisoles, and stays.</span>
+					<span class="ln">I Tiresias, old man with wrinkled dugs</span>
+					<span class="ln">Perceived the scene, and foretold the rest -</span>
+					<span class="ln">I too awaited the expected guest.<span class="lnum">230</span>
+					</span>
+					<span class="ln">He, the young man carbuncular, arrives,</span>
+					<span class="ln">A small house agent's clerk, with one bold stare,</span>
+					<span class="ln">One of the low on whom assurance sits</span>
+					<span class="ln">As a silk hat on a Bradford millionaire.</span>
+					<span class="ln">The time is now propitious, as he guesses,</span>
+					<span class="ln">The meal is ended, she is bored and tired,</span>
+					<span class="ln">Endeavours to engage her in caresses</span>
+					<span class="ln">Which still are unreproved, if undesired.</span>
+					<span class="ln">Flushed and decided, he assaults at once;</span>
+					<span class="ln">Exploring hands encounter no defence;<span class="lnum"
+							>240</span>
+					</span>
+					<span class="ln">His vanity requires no response,</span>
+					<span class="ln">And makes a welcome of indifference.</span>
+					<span class="ln">(And I Tiresias have foresuffered all</span>
+					<span class="ln">Enacted on this same divan or bed;</span>
+					<span class="ln">I who have sat by Thebes below the wall</span>
+					<span class="ln">And walked among the lowest of the dead.)</span>
+					<span class="ln">Bestows one final patronising kiss,</span>
+					<span class="ln">And gropes his way, finding the stairs unlit . . .</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">She turns and looks a moment in the glass,</span>
+					<span class="ln">Hardly aware of her departed lover;<span class="lnum"
+							>250</span>
+					</span>
+					<span class="ln">Her brain allows one half-formed thought to pass:</span>
+					<span class="ln">"Well now that's done: and I'm glad it's over."</span>
+					<span class="ln">When lovely woman stoops to folly and<a epub:type="noteref" class="noteref"
+							href="#note-30">*</a>
+					</span>
+					<span class="ln">Paces about her room again, alone,</span>
+					<span class="ln">She smoothes her hair with automatic hand,</span>
+					<span class="ln">And puts a record on the gramophone.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"This music crept by me upon the waters"<a epub:type="noteref" class="noteref"
+							href="#note-31">*</a>
+					</span>
+					<span class="ln">And along the Strand, up Queen Victoria Street.</span>
+					<span class="ln">O City city, I can sometimes hear</span>
+					<span class="ln">Beside a public bar in Lower Thames Street,<span class="lnum"
+							>260</span>
+					</span>
+					<span class="ln">The pleasant whining of a mandoline</span>
+					<span class="ln">And a clatter and a chatter from within</span>
+					<span class="ln">Where fishmen lounge at noon: where the walls</span>
+					<span class="ln">Of Magnus Martyr hold<a epub:type="noteref" class="noteref" href="#note-32"
+							>*</a>
+					</span>
+					<span class="ln">Inexplicable splendour of Ionian white and gold.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">The river sweats<a epub:type="noteref" class="noteref" href="#note-33">*</a>
+					</span>
+					<span class="ln">Oil and tar</span>
+					<span class="ln">The barges drift</span>
+					<span class="ln">With the turning tide</span>
+					<span class="ln">Red sails<span class="lnum">270</span>
+					</span>
+					<span class="ln">Wide</span>
+					<span class="ln">To leeward, swing on the heavy spar.</span>
+					<span class="ln">The barges wash</span>
+					<span class="ln">Drifting logs</span>
+					<span class="ln">Down Greenwich reach</span>
+					<span class="ln">Past the Isle of Dogs.</span>
+					<span class="ln">Weialala leia</span>
+					<span class="ln">Wallala leialala</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Elizabeth and Leicester<a epub:type="noteref" class="noteref" href="#note-34"
+							>*</a>
+					</span>
+					<span class="ln">Beating oars<span class="lnum">280</span>
+					</span>
+					<span class="ln">The stern was formed</span>
+					<span class="ln">A gilded shell</span>
+					<span class="ln">Red and gold</span>
+					<span class="ln">The brisk swell</span>
+					<span class="ln">Rippled both shores</span>
+					<span class="ln">Southwest wind</span>
+					<span class="ln">Carried down stream</span>
+					<span class="ln">The peal of bells</span>
+					<span class="ln">White towers</span>
+					<span class="ln">Weialala leia<span class="lnum">290</span>
+					</span>
+					<span class="ln">Wallala leialala</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"Trams and dusty trees.</span>
+					<span class="ln">Highbury bore me. Richmond and Kew<a epub:type="noteref" class="noteref"
+							href="#note-35">*</a>
+					</span>
+					<span class="ln">Undid me. By Richmond I raised my knees</span>
+					<span class="ln">Supine on the floor of a narrow canoe."</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"My feet are at Moorgate, and my heart</span>
+					<span class="ln">Under my feet. After the event</span>
+					<span class="ln">He wept. He promised 'a new start'.</span>
+					<span class="ln">I made no comment. What should I resent?"</span>
+					<span class="ln">"On Margate Sands.<span class="lnum">300</span>
+					</span>
+					<span class="ln">I can connect</span>
+					<span class="ln">Nothing with nothing.</span>
+					<span class="ln">The broken fingernails of dirty hands.</span>
+					<span class="ln">My people humble people who expect</span>
+					<span class="ln">Nothing."</span>
+					<span class="ln">la la</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">To Carthage then I came<a epub:type="noteref" class="noteref" href="#note-36"
+							>*</a>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Burning burning burning burning<a epub:type="noteref" class="noteref"
+							href="#note-37">*</a>
+					</span>
+					<span class="ln">O Lord Thou pluckest me out<a epub:type="noteref" class="noteref"
+							href="#note-38">*</a>
+					</span>
+					<span class="ln">O Lord Thou pluckest<span class="lnum">310</span>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">burning</span>
+				</div>
+			</section>
+			<section id="ch4">
+				<h2>IV. DEATH BY WATER</h2>
+				<div class="linegroup">
+					<span class="ln">Phlebas the Phoenician, a fortnight dead,</span>
+					<span class="ln">Forgot the cry of gulls, and the deep sea swell</span>
+					<span class="ln">And the profit and loss.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">A current under sea</span>
+					<span class="ln">Picked his bones in whispers. As he rose and fell</span>
+					<span class="ln">He passed the stages of his age and youth</span>
+					<span class="ln">Entering the whirlpool.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Gentile or Jew</span>
+					<span class="ln">O you who turn the wheel and look to windward,<span
+							class="lnum">320</span>
+					</span>
+					<span class="ln">Consider Phlebas, who was once handsome and tall as you.</span>
+				</div>
+			</section>
+			<section id="ch5">
+				<h2>V. WHAT THE THUNDER SAID</h2>
+				<div class="linegroup">
+					<span class="ln">After the torchlight red on sweaty faces</span>
+					<span class="ln">After the frosty silence in the gardens</span>
+					<span class="ln">After the agony in stony places</span>
+					<span class="ln">The shouting and the crying</span>
+					<span class="ln">Prison and palace and reverberation</span>
+					<span class="ln">Of thunder of spring over distant mountains</span>
+					<span class="ln">He who was living is now dead</span>
+					<span class="ln">We who were living are now dying</span>
+					<span class="ln">With a little patience<span class="lnum">330</span>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Here is no water but only rock</span>
+					<span class="ln">Rock and no water and the sandy road</span>
+					<span class="ln">The road winding above among the mountains</span>
+					<span class="ln">Which are mountains of rock without water</span>
+					<span class="ln">If there were water we should stop and drink</span>
+					<span class="ln">Amongst the rock one cannot stop or think</span>
+					<span class="ln">Sweat is dry and feet are in the sand</span>
+					<span class="ln">If there were only water amongst the rock</span>
+					<span class="ln">Dead mountain mouth of carious teeth that cannot spit</span>
+					<span class="ln">Here one can neither stand nor lie nor sit<span class="lnum"
+							>340</span>
+					</span>
+					<span class="ln">There is not even silence in the mountains</span>
+					<span class="ln">But dry sterile thunder without rain</span>
+					<span class="ln">There is not even solitude in the mountains</span>
+					<span class="ln">But red sullen faces sneer and snarl</span>
+					<span class="ln">From doors of mudcracked houses</span>
+					<div class="linegroup">
+						<span class="ln">If there were water</span>
+						<span class="ln">And no rock</span>
+						<span class="ln">If there were rock</span>
+						<span class="ln">And also water</span>
+						<span class="ln">And water<span class="lnum">350</span>
+						</span>
+						<span class="ln">A spring</span>
+						<span class="ln">A pool among the rock</span>
+						<span class="ln">If there were the sound of water only</span>
+						<span class="ln">Not the cicada</span>
+						<span class="ln">And dry grass singing</span>
+						<span class="ln">But sound of water over a rock</span>
+						<span class="ln">Where the hermit-thrush sings in the pine trees<a
+								epub:type="noteref" class="noteref" href="#note-39">*</a>
+						</span>
+						<span class="ln">Drip drop drip drop drop drop drop</span>
+						<span class="ln">But there is no water</span>
+					</div>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Who is the third who walks always beside you?<a
+							epub:type="noteref" class="noteref" href="#note-40">*</a>
+						<span class="lnum">360</span>
+					</span>
+					<span class="ln">When I count, there are only you and I together</span>
+					<span class="ln">But when I look ahead up the white road</span>
+					<span class="ln">There is always another one walking beside you</span>
+					<span class="ln">Gliding wrapt in a brown mantle, hooded</span>
+					<span class="ln">I do not know whether a man or a woman</span>
+					<span class="ln">&#x2015;But who is that on the other side of you?<a
+							epub:type="noteref" class="noteref" href="#note-41">*</a>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">What is that sound high in the air</span>
+					<span class="ln">Murmur of maternal lamentation</span>
+					<span class="ln">Who are those hooded hordes swarming</span>
+					<span class="ln">Over endless plains, stumbling in cracked earth<span
+							class="lnum">370</span>
+					</span>
+					<span class="ln">Ringed by the flat horizon only</span>
+					<span class="ln">What is the city over the mountains</span>
+					<span class="ln">Cracks and reforms and bursts in the violet air</span>
+					<span class="ln">Falling towers</span>
+					<span class="ln">Jerusalem Athens Alexandria</span>
+					<span class="ln">Vienna London</span>
+					<span class="ln">Unreal</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">A woman drew her long black hair out tight</span>
+					<span class="ln">And fiddled whisper music on those strings</span>
+					<span class="ln">And bats with baby faces in the violet light<span class="lnum"
+							>380</span>
+					</span>
+					<span class="ln">Whistled, and beat their wings</span>
+					<span class="ln">And crawled head downward down a blackened wall</span>
+					<span class="ln">And upside down in air were towers</span>
+					<span class="ln">Tolling reminiscent bells, that kept the hours</span>
+					<span class="ln">And voices singing out of empty cisterns and exhausted
+						wells.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">In this decayed hole among the mountains</span>
+					<span class="ln">In the faint moonlight, the grass is singing</span>
+					<span class="ln">Over the tumbled graves, about the chapel</span>
+					<span class="ln">There is the empty chapel, only the wind's home.</span>
+					<span class="ln">It has no windows, and the door swings,<span class="lnum"
+							>390</span>
+					</span>
+					<span class="ln">Dry bones can harm no one.</span>
+					<span class="ln">Only a cock stood on the rooftree</span>
+					<span class="ln">Co co rico co co rico</span>
+					<span class="ln">In a flash of lightning. Then a damp gust</span>
+					<span class="ln">Bringing rain</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Ganga was sunken, and the limp leaves</span>
+					<span class="ln">Waited for rain, while the black clouds</span>
+					<span class="ln">Gathered far distant, over Himavant.</span>
+					<span class="ln">The jungle crouched, humped in silence.</span>
+					<span class="ln">Then spoke the thunder<span class="lnum">400</span>
+					</span>
+					<span class="ln">DA</span>
+					<span class="ln">
+						<span xml:lang="sa">Datta</span>: what have we given?<a epub:type="noteref" class="noteref"
+							href="#note-42">*</a>
+					</span>
+					<span class="ln">My friend, blood shaking my heart</span>
+					<span class="ln">The awful daring of a moment's surrender</span>
+					<span class="ln">Which an age of prudence can never retract</span>
+					<span class="ln">By this, and this only, we have existed</span>
+					<span class="ln">Which is not to be found in our obituaries </span>
+					<span class="ln">Or in memories draped by the beneficent spider<a
+							epub:type="noteref" class="noteref" href="#note-43">*</a>
+					</span>
+					<span class="ln">Or under seals broken by the lean solicitor</span>
+					<span class="ln">In our empty rooms<span class="lnum">410</span>
+					</span>
+					<span class="ln">DA</span>
+					<span class="ln">
+						<span xml:lang="sa">Dayadhvam</span>: I have heard the key<a
+							epub:type="noteref" class="noteref" href="#note-44">*</a>
+					</span>
+					<span class="ln">Turn in the door once and turn once only</span>
+					<span class="ln">We think of the key, each in his prison</span>
+					<span class="ln">Thinking of the key, each confirms a prison</span>
+					<span class="ln">Only at nightfall, aetherial rumours</span>
+					<span class="ln">Revive for a moment a broken Coriolanus</span>
+					<span class="ln">DA</span>
+					<span class="ln">
+						<span xml:lang="sa">Damyata</span>: The boat responded</span>
+					<span class="ln">Gaily, to the hand expert with sail and oar<span class="lnum"
+							>420</span>
+					</span>
+					<span class="ln">The sea was calm, your heart would have responded</span>
+					<span class="ln">Gaily, when invited, beating obedient</span>
+					<span class="ln">To controlling hands</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">I sat upon the shore</span>
+					<span class="ln">Fishing, with the arid plain behind me<a epub:type="noteref" class="noteref"
+							href="#note-45">*</a>
+					</span>
+					<span class="ln">Shall I at least set my lands in order?</span>
+					<span class="ln">London Bridge is falling down falling down falling down</span>
+					<span class="ln" xml:lang="it">
+						<em>Poi s'ascose nel foco che gli affina</em>
+						<a epub:type="noteref" class="noteref" href="#note-46">*</a>
+					</span>
+					<span class="ln">
+						<span xml:lang="it">
+							<em>Quando fiam ceu chelidon</em>
+						</span> - O swallow swallow<a epub:type="noteref" class="noteref" href="#note-47">*</a>
+					</span>
+					<span class="ln" xml:lang="fr">
+						<em>Le Prince d'Aquitaine a la tour abolie</em>
+						<a epub:type="noteref" class="noteref" href="#note-48">*</a>
+						<span class="lnum">430</span>
+					</span>
+					<span class="ln">These fragments I have shored against my ruins</span>
+					<span class="ln">Why then Ile fit you. Hieronymo's mad againe.<a
+							epub:type="noteref" class="noteref" href="#note-49">*</a>
+					</span>
+					<span class="ln" xml:lang="sa">Datta. Dayadhvam. Damyata.</span>
+					<div class="linegroup">
+						<span class="ln" xml:lang="sa">Shantih shantih shantih<a epub:type="noteref" class="noteref"
+								href="#note-50">*</a>
+						</span>
+					</div>
+				</div>
+			</section>
+		</section>
+		<section epub:type="backmatter" id="backmatter">
+			<section epub:type="rearnotes">
+				<h2>NOTES ON "THE WASTE LAND"</h2>
+				<p>Not only the title, but the plan and a good deal of the incidental symbolism of
+					the poem were suggested by Miss Jessie L. Weston's book on the Grail legend:
+					From Ritual to Romance</p>
+				<p>Indeed, so deeply am I indebted, Miss Weston's book will elucidate the
+					difficulties of the poem much better than my notes can do; and I recommend it
+					(apart from the great interest of the book itself) to any who think such
+					elucidation of the poem worth the trouble. To another work of anthropology I am
+					indebted in general, one which has influenced our generation profoundly; I mean
+					The Golden Bough; I have used especially the two volumes Adonis, Attis, Osiris.
+					Anyone who is acquainted with these works will immediately recognise in the poem
+					certain references to vegetation ceremonies.</p>
+				<section>
+					<h3>I. THE BURIAL OF THE DEAD</h3>
+					<div epub:type="rearnote" id="note-1">
+						<p>Line 20. Cf. Ezekiel 2:1.</p>
+					</div>
+					<div epub:type="rearnote" id="note-2">
+						<p>23. Cf. Ecclesiastes 12:5.</p>
+					</div>
+					<div epub:type="rearnote" id="note-3">
+						<p>31. V. Tristan und Isolde, i, verses 5-8.</p>
+					</div>
+					<div epub:type="rearnote" id="note-4">
+						<p>42. Id. iii, verse 24.</p>
+					</div>
+					<div epub:type="rearnote" id="note-5">
+						<p>46. I am not familiar with the exact constitution of the Tarot pack of
+							cards, from which I have obviously departed to suit my own convenience.
+							The Hanged Man, a member of the traditional pack, fits my purpose in two
+							ways: because he is associated in my mind with the Hanged God of Frazer,
+							and because I associate him with the hooded figure in the passage of the
+							disciples to Emmaus in Part V. The Phoenician Sailor and the Merchant
+							appear later; also the "crowds of people," and Death by Water is
+							executed in Part IV. The Man with Three Staves (an authentic member of
+							the Tarot pack) I associate, quite arbitrarily, with the Fisher King
+							himself.</p>
+					</div>
+					<div epub:type="rearnote" id="note-6">
+						<p>60. Cf. Baudelaire:</p>
+						<blockquote xml:lang="fr">
+							<p>"Fourmillante cite;, cite; pleine de reves,<br />Ou le spectre en
+								plein jour raccroche le passant."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-7">
+						<p>63. Cf. Inferno, iii. 55-7.</p>
+						<blockquote xml:lang="it">
+							<p>"si lunga tratta<br />di gente, ch'io non avrei mai creduto<br />che
+								morte tanta n'avesse disfatta."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-8">
+						<p>64. Cf. Inferno, iv. 25-7:</p>
+						<blockquote xml:lang="it">
+							<p>"Quivi, secondo che per ascoltahre,<br />"non avea pianto, ma' che di
+								sospiri,<br />"che l'aura eterna facevan tremare."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-9">
+						<p>68. A phenomenon which I have often noticed.</p>
+					</div>
+					<div epub:type="rearnote" id="note-10">
+						<p>74. Cf. the Dirge in Webster's White Devil .</p>
+					</div>
+					<div epub:type="rearnote" id="note-11">
+						<p>76. V. Baudelaire, Preface to Fleurs du Mal.</p>
+					</div>
+				</section>
+				<section>
+					<h3>II. A GAME OF CHESS</h3>
+					<div epub:type="rearnote" id="note-12">
+						<p>77. Cf. Antony and Cleopatra, II. ii., l. 190.</p>
+					</div>
+					<div epub:type="rearnote" id="note-13">
+						<p>92. Laquearia. V. Aeneid, I. 726:</p>
+						<blockquote xml:lang="la">
+							<p>dependent lychni laquearibus aureis incensi, et noctem
+								flammis<br />funalia vincunt.</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-14">
+						<p>98. Sylvan scene. V. Milton, Paradise Lost, iv. 140.</p>
+					</div>
+					<div epub:type="rearnote" id="note-15">
+						<p>99. V. Ovid, Metamorphoses, vi, Philomela.</p>
+					</div>
+					<div epub:type="rearnote" id="note-16">
+						<p>100. Cf. Part III, l. 204.</p>
+					</div>
+					<div epub:type="rearnote" id="note-17">
+						<p>115. Cf. Part III, l. 195.</p>
+					</div>
+					<div epub:type="rearnote" id="note-18">
+						<p>118. Cf. Webster:</p>
+						<blockquote>
+							<p>"Is the wind in that door still?"</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-19">
+						<p>126. Cf. Part I, l. 37, 48.</p>
+					</div>
+					<div epub:type="rearnote" id="note-20">
+						<p>138. Cf. the game of chess in Middleton's Women beware Women.</p>
+					</div>
+				</section>
+				<section>
+					<h3>III. THE FIRE SERMON</h3>
+					<div epub:type="rearnote" id="note-21">
+						<p>176. V. Spenser, Prothalamion.</p>
+					</div>
+					<div epub:type="rearnote" id="note-22">
+						<p>192. Cf. The Tempest, I. ii.</p>
+					</div>
+					<div epub:type="rearnote" id="note-23">
+						<p>196. Cf. Marvell, To His Coy Mistress.</p>
+					</div>
+					<div epub:type="rearnote" id="note-24">
+						<p>197. Cf. Day, Parliament of Bees:</p>
+						<blockquote>
+							<div>
+								<span class="ln">"When of the sudden, listening, you shall
+									hear,</span>
+								<span class="ln">"A noise of horns and hunting, which shall
+									bring</span>
+								<span class="ln">"Actaeon to Diana in the spring,</span>
+								<span class="ln">"Where all shall see her naked skin . . ."</span>
+							</div>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-25">
+						<p>199. I do not know the origin of the ballad from which these lines are
+							taken: it was reported to me from Sydney, Australia.</p>
+					</div>
+					<div epub:type="rearnote" id="note-26">
+						<p>202. V. Verlaine, Parsifal.</p>
+					</div>
+					<div epub:type="rearnote" id="note-27">
+						<p>210. The currants were quoted at a price "cost insurance and freight to
+							London"; and the Bill of Lading etc. were to be handed to the buyer upon
+							payment of the sight draft.</p>
+					</div>
+					<div epub:type="rearnote" id="note-28">
+						<p>218. Tiresias, although a mere spectator and not indeed a "character," is
+							yet the most important personage in the poem, uniting all the rest. Just
+							as the one-eyed merchant, seller of currants, melts into the Phoenician
+							Sailor, and the latter is not wholly distinct from Ferdinand Prince of
+							Naples, so all the women are one woman, and the two sexes meet in
+							Tiresias. What Tiresias sees, in fact, is the substance of the poem. The
+							whole passage from Ovid is of great anthropological interest:</p>
+						<blockquote xml:lang="la">
+							<p>'. . . Cum Iunone iocos et maior vestra profecto est<br /> Quam, quae
+								contingit maribus,' dixisse, 'voluptas.'<br /> Illa negat; placuit
+								quae sit sententia docti<br /> Quaerere Tiresiae: venus huic erat
+								utraque nota.<br /> Nam duo magnorum viridi coeuntia silva<br />
+								Corpora serpentum baculi violaverat ictu<br /> Deque viro factus,
+								mirabile, femina septem<br /> Egerat autumnos; octavo rursus
+								eosdem<br /> Vidit et 'est vestrae si tanta potentia plagae,'<br />
+								Dixit 'ut auctoris sortem in contraria mutet,<br /> Nunc quoque vos
+								feriam!' percussis anguibus isdem<br /> Forma prior rediit
+								genetivaque venit imago.<br /> Arbiter hic igitur sumptus de lite
+								iocosa<br /> Dicta Iovis firmat; gravius Saturnia iusto<br /> Nec
+								pro materia fertur doluisse suique<br /> Iudicis aeterna damnavit
+								lumina nocte,<br /> At pater omnipotens (neque enim licet inrita
+								cuiquam<br /> Facta dei fecisse deo) pro lumine adempto<br /> Scire
+								futura dedit poenamque levavit honore.<br />
+							</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-29">
+						<p>221. This may not appear as exact as Sappho's lines, but I had in mind
+							the "longshore" or "dory" fisherman, who returns at nightfall.</p>
+					</div>
+					<div epub:type="rearnote" id="note-30">
+						<p>253. V. Goldsmith, the song in The Vicar of Wakefield.</p>
+					</div>
+					<div epub:type="rearnote" id="note-31">
+						<p>257. V. The Tempest, as above.</p>
+					</div>
+					<div epub:type="rearnote" id="note-32">
+						<p>264. The interior of St. Magnus Martyr is to my mind one of the finest
+							among Wren's interiors. See The Proposed Demolition of Nineteen City
+							Churches (P. S. King & Son, Ltd.).</p>
+					</div>
+					<div epub:type="rearnote" id="note-33">
+						<p>266. The Song of the (three) Thames-daughters begins here. From line 292
+							to 306 inclusive they speak in turn. V. Gutterdsammerung, III. i: the
+							Rhine-daughters.</p>
+					</div>
+					<div epub:type="rearnote" id="note-34">
+						<p>279. V. Froude, Elizabeth, Vol. I, ch. iv, letter of De Quadra to Philip
+							of Spain:</p>
+						<blockquote>
+							<div>
+								<span class="ln">"In the afternoon we were in a barge, watching the
+									games on the river.</span>
+								<span class="ln">(The queen) was alone with Lord Robert and myself
+									on the poop,</span>
+								<span class="ln">when they began to talk nonsense, and went so far
+									that Lord Robert</span>
+								<span class="ln">at last said, as I was on the spot there was no
+									reason why they</span>
+								<span class="ln">should not be married if the queen pleased."</span>
+							</div>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-35">
+						<p>293. Cf. Purgatorio, v. 133:</p>
+						<blockquote>
+							<p>"Ricorditi di me, che son la Pia;<br />Siena mi fe', disfecemi
+								Maremma."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-36">
+						<p>307. V. St. Augustine's Confessions: "to Carthage then I came, where a
+							cauldron of unholy loves sang all about mine ears."</p>
+					</div>
+					<div epub:type="rearnote" id="note-37">
+						<p>308. The complete text of the Buddha's Fire Sermon (which corresponds in
+							importance to the Sermon on the Mount) from which these words are taken,
+							will be found translated in the late Henry Clarke Warren's Buddhism in
+							Translation (Harvard Oriental Series). Mr. Warren was one of the great
+							pioneers of Buddhist studies in the Occident.</p>
+					</div>
+					<div epub:type="rearnote" id="note-38">
+						<p>309. From St. Augustine's Confessions again. The collocation of these two
+							representatives of eastern and western asceticism, as the culmination of
+							this part of the poem, is not an accident.</p>
+					</div>
+				</section>
+				<section>
+					<h3>V. WHAT THE THUNDER SAID</h3>
+					<p>In the first part of Part V three themes are employed: the journey to Emmaus,
+						the approach to the Chapel Perilous (see Miss Weston's book) and the present
+						decay of eastern Europe.</p>
+					<div epub:type="rearnote" id="note-39">
+						<p>357. This is Turdus aonalaschkae pallasii, the hermit-thrush which I have
+							heard in Quebec County. Chapman says (Handbook of Birds of Eastern North
+							America) "it is most at home in secluded woodland and thickety retreats.
+							. . . Its notes are not remarkable for variety or volume, but in purity
+							and sweetness of tone and exquisite modulation they are unequalled." Its
+							"water-dripping song" is justly celebrated.</p>
+					</div>
+					<div epub:type="rearnote" id="note-40">
+						<p>360. The following lines were stimulated by the account of one of the
+							Antarctic expeditions (I forget which, but I think one of Shackleton's):
+							it was related that the party of explorers, at the extremity of their
+							strength, had the constant delusion that there was one more member than
+							could actually be counted.</p>
+					</div>
+					<div epub:type="rearnote" id="note-41">
+						<p>367-77. Cf. Hermann Hesse, Blick ins Chaos:</p>
+						<blockquote xml:lang="de">
+							<p>"Schon ist halb Europa, schon ist zumindest der halbe Osten Europas
+								auf dem<br /> Wege zum Chaos, fhrt betrunken im heiligem Wahn am
+								Abgrund entlang<br /> und singt dazu, singt betrunken und hymnisch
+								wie Dmitri Karamasoff sang.<br /> Ueber diese Lieder lacht der
+								Bsrger beleidigt, der Heilige<br /> und Seher hrt sie mit
+								Trvnen."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-42">
+						<p>402. <q xml:lang="sa">"Datta, dayadhvam, damyata"</q> (Give, sympathize,
+							control). The fable of the meaning of the Thunder is found in the
+							Brihadaranyaka-Upanishad, 5, 1. A translation is found in Deussen's
+							Sechzig Upanishads des Veda, p. 489.</p>
+					</div>
+					<div epub:type="rearnote" id="note-43">
+						<p>408. Cf. Webster, The White Devil, v. vi:</p>
+						<blockquote>
+							<p>". . . they'll remarry<br /> Ere the worm pierce your winding-sheet,
+								ere the spider<br /> Make a thin curtain for your epitaphs."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-44">
+						<p>412. Cf. Inferno, xxxiii. 46:</p>
+						<blockquote xml:lang="it">
+							<p>"ed io sentii chiavar l'uscio di sotto<br /> all'orribile torre."</p>
+						</blockquote>
+						<p>Also F. H. Bradley, Appearance and Reality, p. 346:</p>
+						<blockquote>
+							<p>"My external sensations are no less private to myself than are my
+								thoughts or my feelings. In either case my experience falls within
+								my own circle, a circle closed on the outside; and, with all its
+								elements alike, every sphere is opaque to the others which surround
+								it. . . . In brief, regarded as an existence which appears in a
+								soul, the whole world for each is peculiar and private to that
+								soul."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-45">
+						<p>425. V. Weston, From Ritual to Romance; chapter on the Fisher King.</p>
+					</div>
+					<div epub:type="rearnote" id="note-46">
+						<p>428. V. Purgatorio, xxvi. 148.</p>
+						<blockquote xml:lang="it">
+							<p>"'Ara vos prec per aquella valor<br /> 'que vos guida al som de
+								l'escalina,<br /> 'sovegna vos a temps de ma dolor.'<br /> Poi
+								s'ascose nel foco che gli affina."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-47">
+						<p>429. V. Pervigilium Veneris. Cf. Philomela in Parts II and III.</p>
+					</div>
+					<div epub:type="rearnote" id="note-48">
+						<p>430. V. Gerard de Nerval, Sonnet El Desdichado.</p>
+					</div>
+					<div epub:type="rearnote" id="note-49">
+						<p>432. V. Kyd's Spanish Tragedy.</p>
+					</div>
+					<div epub:type="rearnote" id="note-50">
+						<p>434. Shantih. Repeated as here, a formal ending to an Upanishad. 'The
+							Peace which passeth understanding' is a feeble translation of the
+							content of this word.</p>
+					</div>
+				</section>
+			</section>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-mathml/EPUB/wasteland-cover.jpg b/src/test/resources/30/expanded/valid/lorem-basic-mathml/EPUB/wasteland-cover.jpg
new file mode 100644
index 0000000..8308ed4
Binary files /dev/null and b/src/test/resources/30/expanded/valid/lorem-basic-mathml/EPUB/wasteland-cover.jpg differ
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-mathml/EPUB/wasteland-nav.xhtml b/src/test/resources/30/expanded/valid/lorem-basic-mathml/EPUB/wasteland-nav.xhtml
new file mode 100644
index 0000000..6fd9693
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-mathml/EPUB/wasteland-nav.xhtml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<link type="text/css" rel="stylesheet" href="wasteland.css" />
+	</head>
+	<body>
+		<nav epub:type="toc" id="toc">
+			<h1>Table of contents</h1>
+			<ol>
+				<li><a href="wasteland-content.xhtml#ch1">I. THE BURIAL OF THE DEAD</a></li>
+				<li><a href="wasteland-content.xhtml#ch2">II. A GAME OF CHESS</a></li>
+				<li><a href="wasteland-content.xhtml#ch3">III. THE FIRE SERMON</a></li>
+				<li><a href="wasteland-content.xhtml#ch4">IV. DEATH BY WATER</a></li>
+				<li><a href="wasteland-content.xhtml#ch5">V. WHAT THE THUNDER SAID</a></li>
+				<li><a href="wasteland-content.xhtml#backmatter">NOTES ON "THE WASTE LAND"</a></li>
+			</ol>
+		</nav>
+		<nav epub:type="landmarks">
+			<ol>
+				<li><a epub:type="frontmatter" href="wasteland-content.xhtml#frontmatter"
+						>frontmatter</a></li>
+				<li><a epub:type="bodymatter" href="wasteland-content.xhtml#bodymatter"
+						>bodymatter</a></li>
+				<li><a epub:type="backmatter" href="wasteland-content.xhtml#bodymatter"
+						>rearmatter</a></li>
+			</ol>
+		</nav>
+
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-mathml/EPUB/wasteland.css b/src/test/resources/30/expanded/valid/lorem-basic-mathml/EPUB/wasteland.css
new file mode 100644
index 0000000..8b4aeec
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-mathml/EPUB/wasteland.css
@@ -0,0 +1,32 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
+
+h2 {
+    margin-top: 5em;
+}
+
+h3 {
+    margin-top: 3em;
+}
+
+span.ln { 
+    display: block;
+    margin-bottom: 0.5em;
+}
+
+span.lnum {
+    float : right;
+    color : gray;
+    font-size : 90%;
+}
+
+a.noteref {
+    color : gray;
+    text-decoration : none;
+    margin-left: 0.5em;
+    margin-right: 0.5em;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-mathml/EPUB/wasteland.opf b/src/test/resources/30/expanded/valid/lorem-basic-mathml/EPUB/wasteland.opf
new file mode 100644
index 0000000..057d626
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-mathml/EPUB/wasteland.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xml:lang="en-US" prefix="cc: http://creativecommons.org/ns#">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:title>The Waste Land</dc:title>
+        <dc:creator>T.S. Eliot</dc:creator>
+        <dc:language>en-US</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T13:44:00Z</meta>          
+        <link rel="cc:license" refines="#cover" href="http://creativecommons.org/licenses/by-sa/3.0/" />
+        <link rel="cc:attributionURL" refines="#cover" href="http://en.wikipedia.org/wiki/Simon_Fieldhouse" />
+    </metadata> 
+    <manifest>
+        <item id="t1" href="wasteland-content.xhtml" properties="mathml" media-type="application/xhtml+xml" />
+        <item id="nav" href="wasteland-nav.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="cover" href="wasteland-cover.jpg" media-type="image/jpeg" properties="cover-image" />
+        <item id="css" href="wasteland.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-mathml/META-INF/container.xml b/src/test/resources/30/expanded/valid/lorem-basic-mathml/META-INF/container.xml
new file mode 100644
index 0000000..8bd2e5e
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-mathml/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/wasteland.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-mathml/mimetype b/src/test/resources/30/expanded/valid/lorem-basic-mathml/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-mathml/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-ncx/EPUB/lorem.css b/src/test/resources/30/expanded/valid/lorem-basic-ncx/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-ncx/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-ncx/EPUB/lorem.ncx b/src/test/resources/30/expanded/valid/lorem-basic-ncx/EPUB/lorem.ncx
new file mode 100644
index 0000000..fe3524a
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-ncx/EPUB/lorem.ncx
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/"
+    xmlns="http://www.daisy.org/z3986/2005/ncx/"
+    version="2005-1"
+    xml:lang="en">
+    <head>
+        <meta name="dtb:uid" content="urn:uuid:550e8400-e29b-41d4-a716-4466674412314"/>
+        <meta name="dtb:depth" content="1"/>
+        <meta name="dtb:totalPageCount" content="0"/>
+        <meta name="dtb:maxPageNumber" content="0"/>
+    </head>
+    <docTitle>
+        <text>Lorem Ipsum</text>
+    </docTitle>
+    <navMap>
+        <navPoint id="ch1" playOrder="1">
+            <navLabel>
+                <text>Chapter 1</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch1"/>
+        </navPoint>
+        <navPoint id="ch2" playOrder="2">
+            <navLabel>
+                <text>Chapter 2</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch2"/>
+        </navPoint>
+    </navMap>
+</ncx>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-ncx/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/lorem-basic-ncx/EPUB/lorem.opf
new file mode 100644
index 0000000..c6dc7fb
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-ncx/EPUB/lorem.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+        <item id="ncx" href="lorem.ncx" media-type="application/x-dtbncx+xml" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-ncx/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/lorem-basic-ncx/EPUB/lorem.xhtml
new file mode 100644
index 0000000..ce440bb
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-ncx/EPUB/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-ncx/META-INF/container.xml b/src/test/resources/30/expanded/valid/lorem-basic-ncx/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-ncx/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-ncx/mimetype b/src/test/resources/30/expanded/valid/lorem-basic-ncx/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-ncx/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-switch.txt b/src/test/resources/30/expanded/valid/lorem-basic-switch.txt
new file mode 100644
index 0000000..f5d9231
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-switch.txt
@@ -0,0 +1,15 @@
+# creation date is not stable between different runs
+[format version] 3.0
+[format name] application/epub+zip
+[title] The Waste Land
+[creator] T.S. Eliot
+[language] en-US
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-446655440000
+[items count] 4
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[declared mimetype] image/jpeg
+[reference] http://creativecommons.org/licenses/by-sa/3.0/
+[reference] http://en.wikipedia.org/wiki/Simon_Fieldhouse
+
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-switch/EPUB/wasteland-content.xhtml b/src/test/resources/30/expanded/valid/lorem-basic-switch/EPUB/wasteland-content.xhtml
new file mode 100644
index 0000000..f9312ff
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-switch/EPUB/wasteland-content.xhtml
@@ -0,0 +1,1091 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>The Waste Land</title>
+		<link type="text/css" rel="stylesheet" href="wasteland.css"/>
+	</head>
+	<body>
+		<section epub:type="frontmatter" id="frontmatter">
+			<section epub:type="titlepage" id="titlepage">
+				<h1>The Waste Land</h1>
+				<div class="aut">T.S. Eliot</div>
+				<div epub:type="epigraph">					
+					<p>
+						<span xml:lang="la">"Nam Sibyllam quidem Cumis ego ipse oculis
+							meis<br />vidi in ampulla pendere, et cum illi pueri dicerent</span>: <br />
+						<span xml:lang="grc"
+							>&#x03A3;&#x03AF;&#x03B2;&#x03C5;&#x03BB;&#x03BB;&#x03B1;
+							&#x03C4;&#x03AF;
+							&#x03F4;&#x03AD;&#x03BB;&#x03B5;&#x03B9;&#x03C2;<!--Sibylla ti theleis-->
+						</span>; <span xml:lang="la">respondebat illa</span>: <span xml:lang="grc"
+							>&#x03AC;&#x03C0;&#x03BF;&#x03F4;&#x03B1;&#x03B3;&#x03B5;&#x1FD6;&#x03B3;
+							&#x03F4;&#x03AD;&#x03BB;&#x03E3;<!--apothanein thelo-->
+						</span>."</p>
+				</div>
+				<p epub:type="dedication">For Ezra Pound: <span xml:lang="it">il miglior
+						fabbro</span></p>
+			</section>
+		</section>
+		<section epub:type="bodymatter" id="bodymatter">
+
+			<section id="ch1">
+				<h2>I. THE BURIAL OF THE DEAD</h2>
+				<epub:switch id="mathmlSwitch">
+   
+   <epub:case required-namespace="http://www.w3.org/1998/Math/MathML">
+   	  <math xmlns="http://www.w3.org/1998/Math/MathML" alttext="2x+y-z">
+         <mrow>
+            <mn>2</mn>
+            <mo> &#x2061;<!--INVISIBLE TIMES--></mo>
+            <mi>x</mi>
+         </mrow>
+         <mrow>
+            <mo>+</mo>
+            <mi>y</mi>
+            <mo>-</mo>
+            <mi>z</mi>
+         </mrow>
+      </math>
+   </epub:case>
+   
+   <epub:default>
+      <p>2x + y - z</p>
+   </epub:default>
+   
+</epub:switch>
+				
+				<div class="linegroup">
+					<span class="ln">April is the cruellest month, breeding</span>
+					<span class="ln">Lilacs out of the dead land, mixing</span>
+					<span class="ln">Memory and desire, stirring</span>
+					<span class="ln">Dull roots with spring rain.</span>
+					<span class="ln">Winter kept us warm, covering</span>
+					<span class="ln">Earth in forgetful snow, feeding</span>
+					<span class="ln">A little life with dried tubers.</span>
+					<span class="ln">Summer surprised us, coming over the Starnbergersee</span>
+					<span class="ln">With a shower of rain; we stopped in the colonnade,</span>
+					<span class="ln">And went on in sunlight, into the Hofgarten,<span class="lnum"
+							>10</span>
+					</span>
+					<span class="ln">And drank coffee, and talked for an hour.</span>
+					<span class="ln" xml:lang="de">Bin gar keine Russin, stamm' aus Litauen, echt
+						deutsch.</span>
+					<span class="ln">And when we were children, staying at the archduke's,</span>
+					<span class="ln">My cousin's, he took me out on a sled,</span>
+					<span class="ln">And I was frightened. He said, Marie,</span>
+					<span class="ln">Marie, hold on tight. And down we went.</span>
+					<span class="ln">In the mountains, there you feel free.</span>
+					<span class="ln">I read, much of the night, and go south in the winter.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">What are the roots that clutch, what branches grow</span>
+					<span class="ln">Out of this stony rubbish? Son of man<a epub:type="noteref" class="noteref"
+							href="#note-1">*</a>,<span class="lnum">20</span>
+					</span>
+					<span class="ln">You cannot say, or guess, for you know only</span>
+					<span class="ln">A heap of broken images, where the sun beats,</span>
+					<span class="ln">And the dead tree gives no shelter, the cricket no relief<a
+							epub:type="noteref" class="noteref" href="#note-2">*</a>,</span>
+					<span class="ln">And the dry stone no sound of water. Only</span>
+					<span class="ln">There is shadow under this red rock,</span>
+					<span class="ln">(Come in under the shadow of this red rock),</span>
+					<span class="ln">And I will show you something different from either</span>
+					<span class="ln">Your shadow at morning striding behind you</span>
+					<span class="ln">Or your shadow at evening rising to meet you;</span>
+					<span class="ln">I will show you fear in a handful of dust.<span class="lnum"
+							>30</span>
+					</span>
+					<blockquote xml:lang="de">
+						<div>
+							<span class="ln">Frisch weht der Wind<a epub:type="noteref" class="noteref"
+									href="#note-3">*</a>
+							</span>
+							<span class="ln">Der Heimat zu</span>
+							<span class="ln">Mein Irisch Kind,</span>
+							<span class="ln">Wo weilest du?</span>
+						</div>
+					</blockquote>
+					<span class="ln">"You gave me hyacinths first a year ago;</span>
+					<span class="ln">"They called me the hyacinth girl."</span>
+					<span class="ln">&#x2015;Yet when we came back, late, from the Hyacinth
+						garden,</span>
+					<span class="ln">Your arms full, and your hair wet, I could not</span>
+					<span class="ln">Speak, and my eyes failed, I was neither</span>
+					<span class="ln">Living nor dead, and I knew nothing,<span class="lnum"
+							>40</span>
+					</span>
+					<span class="ln">Looking into the heart of light, the silence.</span>
+					<span class="ln" xml:lang="de">
+						<em>Od' und leer das Meer</em>.<a epub:type="noteref" class="noteref" href="#note-4">*</a>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Madame Sosostris, famous clairvoyante,</span>
+					<span class="ln">Had a bad cold, nevertheless</span>
+					<span class="ln">Is known to be the wisest woman in Europe,</span>
+					<span class="ln">With a wicked pack of cards. Here, said she<a
+							epub:type="noteref" class="noteref" href="#note-5">*</a>,</span>
+					<span class="ln">Is your card, the drowned Phoenician Sailor,</span>
+					<span class="ln">(Those are pearls that were his eyes. Look!)</span>
+					<span class="ln">Here is Belladonna, the Lady of the Rocks,</span>
+					<span class="ln">The lady of situations.<span class="lnum">50</span>
+					</span>
+					<span class="ln">Here is the man with three staves, and here the Wheel,</span>
+					<span class="ln">And here is the one-eyed merchant, and this card,</span>
+					<span class="ln">Which is blank, is something he carries on his back,</span>
+					<span class="ln">Which I am forbidden to see. I do not find</span>
+					<span class="ln">The Hanged Man. Fear death by water.</span>
+					<span class="ln">I see crowds of people, walking round in a ring.</span>
+					<span class="ln">Thank you. If you see dear Mrs. Equitone,</span>
+					<span class="ln">Tell her I bring the horoscope myself:</span>
+					<span class="ln">One must be so careful these days.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Unreal City<a epub:type="noteref" class="noteref" href="#note-6">*</a>,<span
+							class="lnum">60</span>
+					</span>
+					<span class="ln">Under the brown fog of a winter dawn,</span>
+					<span class="ln">A crowd flowed over London Bridge, so many,</span>
+					<span class="ln">I had not thought death had undone so many.<a
+							epub:type="noteref" class="noteref" href="#note-7">*</a>
+					</span>
+					<span class="ln">Sighs, short and infrequent, were exhaled<a epub:type="noteref" class="noteref"
+							href="#note-8">*</a>,</span>
+					<span class="ln">And each man fixed his eyes before his feet.</span>
+					<span class="ln">Flowed up the hill and down King William Street,</span>
+					<span class="ln">To where Saint Mary Woolnoth kept the hours</span>
+					<span class="ln">With a dead sound on the final stroke of nine.<a
+							epub:type="noteref" class="noteref" href="#note-9">*</a>
+					</span>
+					<span class="ln">There I saw one I knew, and stopped him, crying
+						"Stetson!</span>
+					<span class="ln">"You who were with me in the ships at Mylae!<span class="lnum"
+							>70</span>
+					</span>
+					<span class="ln">"That corpse you planted last year in your garden,</span>
+					<span class="ln">"Has it begun to sprout? Will it bloom this year?</span>
+					<span class="ln">"Or has the sudden frost disturbed its bed?</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"Oh keep the Dog far hence, that's friend to men,<a
+							epub:type="noteref" class="noteref" href="#note-10">*</a>
+					</span>
+					<span class="ln">"Or with his nails he'll dig it up again!</span>
+					<span class="ln">"You! <span xml:lang="fr">hypocrite lecteur! - mon semblable, -
+							mon frere</span> !"<a epub:type="noteref" class="noteref" href="#note-11">*</a>
+					</span>
+				</div>
+			</section>
+			<section id="ch2">
+				<h2>II. A GAME OF CHESS</h2>
+				<div class="linegroup">
+					<span class="ln">The Chair she sat in, like a burnished throne<a
+							epub:type="noteref" class="noteref" href="#note-12">*</a>,</span>
+					<span class="ln">Glowed on the marble, where the glass</span>
+					<span class="ln">Held up by standards wrought with fruited vines</span>
+					<span class="ln">From which a golden Cupidon peeped out<span class="lnum"
+							>80</span>
+					</span>
+					<span class="ln">(Another hid his eyes behind his wing)</span>
+					<span class="ln">Doubled the flames of sevenbranched candelabra</span>
+					<span class="ln">Reflecting light upon the table as</span>
+					<span class="ln">The glitter of her jewels rose to meet it,</span>
+					<span class="ln">From satin cases poured in rich profusion;</span>
+					<span class="ln">In vials of ivory and coloured glass</span>
+					<span class="ln">Unstoppered, lurked her strange synthetic perfumes,</span>
+					<span class="ln">Unguent, powdered, or liquid - troubled, confused</span>
+					<span class="ln">And drowned the sense in odours; stirred by the air</span>
+					<span class="ln">That freshened from the window, these ascended<span
+							class="lnum">90</span>
+					</span>
+					<span class="ln">In fattening the prolonged candle-flames,</span>
+					<span class="ln">Flung their smoke into the laquearia<a epub:type="noteref" class="noteref"
+							href="#note-13">*</a>,</span>
+					<span class="ln">Stirring the pattern on the coffered ceiling.</span>
+					<span class="ln">Huge sea-wood fed with copper</span>
+					<span class="ln">Burned green and orange, framed by the coloured stone,</span>
+					<span class="ln">In which sad light a carved dolphin swam.</span>
+					<span class="ln">Above the antique mantel was displayed</span>
+					<span class="ln">As though a window gave upon the sylvan scene<a
+							epub:type="noteref" class="noteref" href="#note-14">*</a>
+					</span>
+					<span class="ln">The change of Philomel, by the barbarous king<a
+							epub:type="noteref" class="noteref" href="#note-15">*</a>
+					</span>
+					<span class="ln">So rudely forced; yet there the nightingale<a
+							epub:type="noteref" class="noteref" href="#note-16">*</a>
+						<span class="lnum">100</span>
+					</span>
+					<span class="ln">Filled all the desert with inviolable voice</span>
+					<span class="ln">And still she cried, and still the world pursues,</span>
+					<span class="ln">"Jug Jug" to dirty ears.</span>
+					<span class="ln">And other withered stumps of time</span>
+					<span class="ln">Were told upon the walls; staring forms</span>
+					<span class="ln">Leaned out, leaning, hushing the room enclosed.</span>
+					<span class="ln">Footsteps shuffled on the stair.</span>
+					<span class="ln">Under the firelight, under the brush, her hair</span>
+					<span class="ln">Spread out in fiery points</span>
+					<span class="ln">Glowed into words, then would be savagely still.<span
+							class="lnum">110</span>
+					</span>
+				</div>
+				<div class="linegroup">
+					<div class="linegroup">
+						<span class="ln">"My nerves are bad to-night. Yes, bad. Stay with me.</span>
+						<span class="ln">"Speak to me. Why do you never speak. Speak.</span>
+						<span class="ln">"What are you thinking of? What thinking? What?</span>
+						<span class="ln">"I never know what you are thinking. Think."</span>
+					</div>
+					<div class="linegroup">
+						<span class="ln">I think we are in rats' alley<a epub:type="noteref" class="noteref"
+								href="#note-17">*</a>
+						</span>
+						<span class="ln">Where the dead men lost their bones.</span>
+					</div>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"What is that noise?"</span>
+					<span class="ln">The wind under the door.<a epub:type="noteref" class="noteref" href="#note-18"
+							>*</a>
+					</span>
+					<span class="ln">"What is that noise now? What is the wind doing?"</span>
+					<span class="ln">Nothing again nothing.<span class="lnum">120</span>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"Do</span>
+					<span class="ln">"You know nothing? Do you see nothing? Do you remember</span>
+					<span class="ln">"Nothing?"</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">I remember</span>
+					<span class="ln">Those are pearls that were his eyes.</span>
+					<span class="ln">"Are you alive, or not? Is there nothing in your head?"<a
+							epub:type="noteref" class="noteref" href="#note-19">*</a>
+					</span>
+					<span class="ln">But</span>
+					<span class="ln">O O O O that Shakespeherian Rag&#x2015;</span>
+					<span class="ln">It's so elegant</span>
+					<span class="ln">So intelligent<span class="lnum">130</span>
+					</span>
+					<span class="ln">"What shall I do now? What shall I do?"</span>
+					<span class="ln">I shall rush out as I am, and walk the street</span>
+					<span class="ln">"With my hair down, so. What shall we do to-morrow?</span>
+					<span class="ln">"What shall we ever do?"</span>
+					<span class="ln">The hot water at ten.</span>
+					<span class="ln">And if it rains, a closed car at four.</span>
+					<span class="ln">And we shall play a game of chess,</span>
+					<span class="ln">Pressing lidless eyes and waiting for a knock upon the door.<a
+							epub:type="noteref" class="noteref" href="#note-20">*</a>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">When Lil's husband got demobbed, I said -</span>
+					<span class="ln">I didn't mince my words, I said to her myself,<span
+							class="lnum">140</span>
+					</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">Now Albert's coming back, make yourself a bit smart.</span>
+					<span class="ln">He'll want to know what you done with that money he gave
+						you</span>
+					<span class="ln">To get yourself some teeth. He did, I was there.</span>
+					<span class="ln">You have them all out, Lil, and get a nice set,</span>
+					<span class="ln">He said, I swear, I can't bear to look at you.</span>
+					<span class="ln">And no more can't I, I said, and think of poor Albert,</span>
+					<span class="ln">He's been in the army four years, he wants a good time,</span>
+					<span class="ln">And if you don't give it him, there's others will, I
+						said.</span>
+					<span class="ln">Oh is there, she said. Something o' that, I said.<span
+							class="lnum">150</span>
+					</span>
+					<span class="ln">Then I'll know who to thank, she said, and give me a straight
+						look.</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">If you don't like it you can get on with it, I said.</span>
+					<span class="ln">Others can pick and choose if you can't.</span>
+					<span class="ln">But if Albert makes off, it won't be for lack of
+						telling.</span>
+					<span class="ln">You ought to be ashamed, I said, to look so antique.</span>
+					<span class="ln">(And her only thirty-one.)</span>
+					<span class="ln">I can't help it, she said, pulling a long face,</span>
+					<span class="ln">It's them pills I took, to bring it off, she said.</span>
+					<span class="ln">(She's had five already, and nearly died of young George.)<span
+							class="lnum">160</span>
+					</span>
+					<span class="ln">The chemist said it would be all right, but I've never been the
+						same.</span>
+					<span class="ln">You <em>are</em> a proper fool, I said.</span>
+					<span class="ln">Well, if Albert won't leave you alone, there it is, I
+						said,</span>
+					<span class="ln">What you get married for if you don't want children?</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">Well, that Sunday Albert was home, they had a hot
+						gammon,</span>
+					<span class="ln">And they asked me in to dinner, to get the beauty of it
+						hot&#x2015;</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">Goonight Bill. Goonight Lou. Goonight May. Goonight.<span
+							class="lnum">170</span>
+					</span>
+					<span class="ln">Ta ta. Goonight. Goonight.</span>
+					<span class="ln">Good night, ladies, good night, sweet ladies, good night, good
+						night.</span>
+				</div>
+			</section>
+			<section id="ch3">
+				<h2>III. THE FIRE SERMON</h2>
+				<div class="linegroup">
+					<span class="ln">The river's tent is broken: the last fingers of leaf</span>
+					<span class="ln">Clutch and sink into the wet bank. The wind</span>
+					<span class="ln">Crosses the brown land, unheard. The nymphs are
+						departed.</span>
+					<span class="ln">Sweet Thames, run softly, till I end my song.<a
+							epub:type="noteref" class="noteref" href="#note-21">*</a>
+					</span>
+					<span class="ln">The river bears no empty bottles, sandwich papers,</span>
+					<span class="ln">Silk handkerchiefs, cardboard boxes, cigarette ends</span>
+					<span class="ln">Or other testimony of summer nights. The nymphs are
+						departed.</span>
+					<span class="ln">And their friends, the loitering heirs of city directors;<span
+							class="lnum">180</span>
+					</span>
+					<span class="ln">Departed, have left no addresses.</span>
+					<span class="ln">By the waters of Leman I sat down and wept . . .</span>
+					<span class="ln">Sweet Thames, run softly till I end my song,</span>
+					<span class="ln">Sweet Thames, run softly, for I speak not loud or long.</span>
+					<span class="ln">But at my back in a cold blast I hear</span>
+					<span class="ln">The rattle of the bones, and chuckle spread from ear to
+						ear.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">A rat crept softly through the vegetation</span>
+					<span class="ln">Dragging its slimy belly on the bank</span>
+					<span class="ln">While I was fishing in the dull canal</span>
+					<span class="ln">On a winter evening round behind the gashouse<span class="lnum"
+							>190</span>
+					</span>
+					<span class="ln">Musing upon the king my brother's wreck</span>
+					<span class="ln">And on the king my father's death before him.<a
+							epub:type="noteref" class="noteref" href="#note-22">*</a>
+					</span>
+					<span class="ln">White bodies naked on the low damp ground</span>
+					<span class="ln">And bones cast in a little low dry garret,</span>
+					<span class="ln">Rattled by the rat's foot only, year to year.</span>
+					<span class="ln">But at my back from time to time I hear<a epub:type="noteref" class="noteref"
+							href="#note-23">*</a>
+					</span>
+					<span class="ln">The sound of horns and motors, which shall bring<a
+							epub:type="noteref" class="noteref" href="#note-24">*</a>
+					</span>
+					<span class="ln">Sweeney to Mrs. Porter in the spring.</span>
+					<span class="ln">O the moon shone bright on Mrs. Porter<a epub:type="noteref" class="noteref"
+							href="#note-25">*</a>
+					</span>
+					<span class="ln">And on her daughter<span class="lnum">200</span>
+					</span>
+					<span class="ln">They wash their feet in soda water</span>
+					<span class="ln" xml:lang="fr">
+						<em>Et O ces voix d'enfants, chantant dans la coupole<a epub:type="noteref" class="noteref"
+								href="#note-26">*</a>
+						</em>!</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Twit twit twit</span>
+					<span class="ln">Jug jug jug jug jug jug</span>
+					<span class="ln">So rudely forc'd.</span>
+					<span class="ln">Tereu</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Unreal City</span>
+					<span class="ln">Under the brown fog of a winter noon</span>
+					<span class="ln">Mr. Eugenides, the Smyrna merchant</span>
+					<span class="ln">Unshaven, with a pocket full of currants<a epub:type="noteref" class="noteref"
+							href="#note-27">*</a>
+						<span class="lnum">210</span>
+					</span>
+					<span class="ln">C.i.f. London: documents at sight,</span>
+					<span class="ln">Asked me in demotic French</span>
+					<span class="ln">To luncheon at the Cannon Street Hotel</span>
+					<span class="ln">Followed by a weekend at the Metropole.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">At the violet hour, when the eyes and back</span>
+					<span class="ln">Turn upward from the desk, when the human engine waits</span>
+					<span class="ln">Like a taxi throbbing waiting,</span>
+					<span class="ln">I Tiresias, though blind, throbbing between two lives<a
+							epub:type="noteref" class="noteref" href="#note-28">*</a>,</span>
+					<span class="ln">Old man with wrinkled female breasts, can see</span>
+					<span class="ln">At the violet hour, the evening hour that strives<span
+							class="lnum">220</span>
+					</span>
+					<span class="ln">Homeward, and brings the sailor home from sea<a
+							epub:type="noteref" class="noteref" href="#note-29">*</a>,</span>
+					<span class="ln">The typist home at teatime, clears her breakfast, lights</span>
+					<span class="ln">Her stove, and lays out food in tins.</span>
+					<span class="ln">Out of the window perilously spread</span>
+					<span class="ln">Her drying combinations touched by the sun's last rays,</span>
+					<span class="ln">On the divan are piled (at night her bed)</span>
+					<span class="ln">Stockings, slippers, camisoles, and stays.</span>
+					<span class="ln">I Tiresias, old man with wrinkled dugs</span>
+					<span class="ln">Perceived the scene, and foretold the rest -</span>
+					<span class="ln">I too awaited the expected guest.<span class="lnum">230</span>
+					</span>
+					<span class="ln">He, the young man carbuncular, arrives,</span>
+					<span class="ln">A small house agent's clerk, with one bold stare,</span>
+					<span class="ln">One of the low on whom assurance sits</span>
+					<span class="ln">As a silk hat on a Bradford millionaire.</span>
+					<span class="ln">The time is now propitious, as he guesses,</span>
+					<span class="ln">The meal is ended, she is bored and tired,</span>
+					<span class="ln">Endeavours to engage her in caresses</span>
+					<span class="ln">Which still are unreproved, if undesired.</span>
+					<span class="ln">Flushed and decided, he assaults at once;</span>
+					<span class="ln">Exploring hands encounter no defence;<span class="lnum"
+							>240</span>
+					</span>
+					<span class="ln">His vanity requires no response,</span>
+					<span class="ln">And makes a welcome of indifference.</span>
+					<span class="ln">(And I Tiresias have foresuffered all</span>
+					<span class="ln">Enacted on this same divan or bed;</span>
+					<span class="ln">I who have sat by Thebes below the wall</span>
+					<span class="ln">And walked among the lowest of the dead.)</span>
+					<span class="ln">Bestows one final patronising kiss,</span>
+					<span class="ln">And gropes his way, finding the stairs unlit . . .</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">She turns and looks a moment in the glass,</span>
+					<span class="ln">Hardly aware of her departed lover;<span class="lnum"
+							>250</span>
+					</span>
+					<span class="ln">Her brain allows one half-formed thought to pass:</span>
+					<span class="ln">"Well now that's done: and I'm glad it's over."</span>
+					<span class="ln">When lovely woman stoops to folly and<a epub:type="noteref" class="noteref"
+							href="#note-30">*</a>
+					</span>
+					<span class="ln">Paces about her room again, alone,</span>
+					<span class="ln">She smoothes her hair with automatic hand,</span>
+					<span class="ln">And puts a record on the gramophone.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"This music crept by me upon the waters"<a epub:type="noteref" class="noteref"
+							href="#note-31">*</a>
+					</span>
+					<span class="ln">And along the Strand, up Queen Victoria Street.</span>
+					<span class="ln">O City city, I can sometimes hear</span>
+					<span class="ln">Beside a public bar in Lower Thames Street,<span class="lnum"
+							>260</span>
+					</span>
+					<span class="ln">The pleasant whining of a mandoline</span>
+					<span class="ln">And a clatter and a chatter from within</span>
+					<span class="ln">Where fishmen lounge at noon: where the walls</span>
+					<span class="ln">Of Magnus Martyr hold<a epub:type="noteref" class="noteref" href="#note-32"
+							>*</a>
+					</span>
+					<span class="ln">Inexplicable splendour of Ionian white and gold.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">The river sweats<a epub:type="noteref" class="noteref" href="#note-33">*</a>
+					</span>
+					<span class="ln">Oil and tar</span>
+					<span class="ln">The barges drift</span>
+					<span class="ln">With the turning tide</span>
+					<span class="ln">Red sails<span class="lnum">270</span>
+					</span>
+					<span class="ln">Wide</span>
+					<span class="ln">To leeward, swing on the heavy spar.</span>
+					<span class="ln">The barges wash</span>
+					<span class="ln">Drifting logs</span>
+					<span class="ln">Down Greenwich reach</span>
+					<span class="ln">Past the Isle of Dogs.</span>
+					<span class="ln">Weialala leia</span>
+					<span class="ln">Wallala leialala</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Elizabeth and Leicester<a epub:type="noteref" class="noteref" href="#note-34"
+							>*</a>
+					</span>
+					<span class="ln">Beating oars<span class="lnum">280</span>
+					</span>
+					<span class="ln">The stern was formed</span>
+					<span class="ln">A gilded shell</span>
+					<span class="ln">Red and gold</span>
+					<span class="ln">The brisk swell</span>
+					<span class="ln">Rippled both shores</span>
+					<span class="ln">Southwest wind</span>
+					<span class="ln">Carried down stream</span>
+					<span class="ln">The peal of bells</span>
+					<span class="ln">White towers</span>
+					<span class="ln">Weialala leia<span class="lnum">290</span>
+					</span>
+					<span class="ln">Wallala leialala</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"Trams and dusty trees.</span>
+					<span class="ln">Highbury bore me. Richmond and Kew<a epub:type="noteref" class="noteref"
+							href="#note-35">*</a>
+					</span>
+					<span class="ln">Undid me. By Richmond I raised my knees</span>
+					<span class="ln">Supine on the floor of a narrow canoe."</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"My feet are at Moorgate, and my heart</span>
+					<span class="ln">Under my feet. After the event</span>
+					<span class="ln">He wept. He promised 'a new start'.</span>
+					<span class="ln">I made no comment. What should I resent?"</span>
+					<span class="ln">"On Margate Sands.<span class="lnum">300</span>
+					</span>
+					<span class="ln">I can connect</span>
+					<span class="ln">Nothing with nothing.</span>
+					<span class="ln">The broken fingernails of dirty hands.</span>
+					<span class="ln">My people humble people who expect</span>
+					<span class="ln">Nothing."</span>
+					<span class="ln">la la</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">To Carthage then I came<a epub:type="noteref" class="noteref" href="#note-36"
+							>*</a>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Burning burning burning burning<a epub:type="noteref" class="noteref"
+							href="#note-37">*</a>
+					</span>
+					<span class="ln">O Lord Thou pluckest me out<a epub:type="noteref" class="noteref"
+							href="#note-38">*</a>
+					</span>
+					<span class="ln">O Lord Thou pluckest<span class="lnum">310</span>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">burning</span>
+				</div>
+			</section>
+			<section id="ch4">
+				<h2>IV. DEATH BY WATER</h2>
+				<div class="linegroup">
+					<span class="ln">Phlebas the Phoenician, a fortnight dead,</span>
+					<span class="ln">Forgot the cry of gulls, and the deep sea swell</span>
+					<span class="ln">And the profit and loss.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">A current under sea</span>
+					<span class="ln">Picked his bones in whispers. As he rose and fell</span>
+					<span class="ln">He passed the stages of his age and youth</span>
+					<span class="ln">Entering the whirlpool.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Gentile or Jew</span>
+					<span class="ln">O you who turn the wheel and look to windward,<span
+							class="lnum">320</span>
+					</span>
+					<span class="ln">Consider Phlebas, who was once handsome and tall as you.</span>
+				</div>
+			</section>
+			<section id="ch5">
+				<h2>V. WHAT THE THUNDER SAID</h2>
+				<div class="linegroup">
+					<span class="ln">After the torchlight red on sweaty faces</span>
+					<span class="ln">After the frosty silence in the gardens</span>
+					<span class="ln">After the agony in stony places</span>
+					<span class="ln">The shouting and the crying</span>
+					<span class="ln">Prison and palace and reverberation</span>
+					<span class="ln">Of thunder of spring over distant mountains</span>
+					<span class="ln">He who was living is now dead</span>
+					<span class="ln">We who were living are now dying</span>
+					<span class="ln">With a little patience<span class="lnum">330</span>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Here is no water but only rock</span>
+					<span class="ln">Rock and no water and the sandy road</span>
+					<span class="ln">The road winding above among the mountains</span>
+					<span class="ln">Which are mountains of rock without water</span>
+					<span class="ln">If there were water we should stop and drink</span>
+					<span class="ln">Amongst the rock one cannot stop or think</span>
+					<span class="ln">Sweat is dry and feet are in the sand</span>
+					<span class="ln">If there were only water amongst the rock</span>
+					<span class="ln">Dead mountain mouth of carious teeth that cannot spit</span>
+					<span class="ln">Here one can neither stand nor lie nor sit<span class="lnum"
+							>340</span>
+					</span>
+					<span class="ln">There is not even silence in the mountains</span>
+					<span class="ln">But dry sterile thunder without rain</span>
+					<span class="ln">There is not even solitude in the mountains</span>
+					<span class="ln">But red sullen faces sneer and snarl</span>
+					<span class="ln">From doors of mudcracked houses</span>
+					<div class="linegroup">
+						<span class="ln">If there were water</span>
+						<span class="ln">And no rock</span>
+						<span class="ln">If there were rock</span>
+						<span class="ln">And also water</span>
+						<span class="ln">And water<span class="lnum">350</span>
+						</span>
+						<span class="ln">A spring</span>
+						<span class="ln">A pool among the rock</span>
+						<span class="ln">If there were the sound of water only</span>
+						<span class="ln">Not the cicada</span>
+						<span class="ln">And dry grass singing</span>
+						<span class="ln">But sound of water over a rock</span>
+						<span class="ln">Where the hermit-thrush sings in the pine trees<a
+								epub:type="noteref" class="noteref" href="#note-39">*</a>
+						</span>
+						<span class="ln">Drip drop drip drop drop drop drop</span>
+						<span class="ln">But there is no water</span>
+					</div>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Who is the third who walks always beside you?<a
+							epub:type="noteref" class="noteref" href="#note-40">*</a>
+						<span class="lnum">360</span>
+					</span>
+					<span class="ln">When I count, there are only you and I together</span>
+					<span class="ln">But when I look ahead up the white road</span>
+					<span class="ln">There is always another one walking beside you</span>
+					<span class="ln">Gliding wrapt in a brown mantle, hooded</span>
+					<span class="ln">I do not know whether a man or a woman</span>
+					<span class="ln">&#x2015;But who is that on the other side of you?<a
+							epub:type="noteref" class="noteref" href="#note-41">*</a>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">What is that sound high in the air</span>
+					<span class="ln">Murmur of maternal lamentation</span>
+					<span class="ln">Who are those hooded hordes swarming</span>
+					<span class="ln">Over endless plains, stumbling in cracked earth<span
+							class="lnum">370</span>
+					</span>
+					<span class="ln">Ringed by the flat horizon only</span>
+					<span class="ln">What is the city over the mountains</span>
+					<span class="ln">Cracks and reforms and bursts in the violet air</span>
+					<span class="ln">Falling towers</span>
+					<span class="ln">Jerusalem Athens Alexandria</span>
+					<span class="ln">Vienna London</span>
+					<span class="ln">Unreal</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">A woman drew her long black hair out tight</span>
+					<span class="ln">And fiddled whisper music on those strings</span>
+					<span class="ln">And bats with baby faces in the violet light<span class="lnum"
+							>380</span>
+					</span>
+					<span class="ln">Whistled, and beat their wings</span>
+					<span class="ln">And crawled head downward down a blackened wall</span>
+					<span class="ln">And upside down in air were towers</span>
+					<span class="ln">Tolling reminiscent bells, that kept the hours</span>
+					<span class="ln">And voices singing out of empty cisterns and exhausted
+						wells.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">In this decayed hole among the mountains</span>
+					<span class="ln">In the faint moonlight, the grass is singing</span>
+					<span class="ln">Over the tumbled graves, about the chapel</span>
+					<span class="ln">There is the empty chapel, only the wind's home.</span>
+					<span class="ln">It has no windows, and the door swings,<span class="lnum"
+							>390</span>
+					</span>
+					<span class="ln">Dry bones can harm no one.</span>
+					<span class="ln">Only a cock stood on the rooftree</span>
+					<span class="ln">Co co rico co co rico</span>
+					<span class="ln">In a flash of lightning. Then a damp gust</span>
+					<span class="ln">Bringing rain</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Ganga was sunken, and the limp leaves</span>
+					<span class="ln">Waited for rain, while the black clouds</span>
+					<span class="ln">Gathered far distant, over Himavant.</span>
+					<span class="ln">The jungle crouched, humped in silence.</span>
+					<span class="ln">Then spoke the thunder<span class="lnum">400</span>
+					</span>
+					<span class="ln">DA</span>
+					<span class="ln">
+						<span xml:lang="sa">Datta</span>: what have we given?<a epub:type="noteref" class="noteref"
+							href="#note-42">*</a>
+					</span>
+					<span class="ln">My friend, blood shaking my heart</span>
+					<span class="ln">The awful daring of a moment's surrender</span>
+					<span class="ln">Which an age of prudence can never retract</span>
+					<span class="ln">By this, and this only, we have existed</span>
+					<span class="ln">Which is not to be found in our obituaries </span>
+					<span class="ln">Or in memories draped by the beneficent spider<a
+							epub:type="noteref" class="noteref" href="#note-43">*</a>
+					</span>
+					<span class="ln">Or under seals broken by the lean solicitor</span>
+					<span class="ln">In our empty rooms<span class="lnum">410</span>
+					</span>
+					<span class="ln">DA</span>
+					<span class="ln">
+						<span xml:lang="sa">Dayadhvam</span>: I have heard the key<a
+							epub:type="noteref" class="noteref" href="#note-44">*</a>
+					</span>
+					<span class="ln">Turn in the door once and turn once only</span>
+					<span class="ln">We think of the key, each in his prison</span>
+					<span class="ln">Thinking of the key, each confirms a prison</span>
+					<span class="ln">Only at nightfall, aetherial rumours</span>
+					<span class="ln">Revive for a moment a broken Coriolanus</span>
+					<span class="ln">DA</span>
+					<span class="ln">
+						<span xml:lang="sa">Damyata</span>: The boat responded</span>
+					<span class="ln">Gaily, to the hand expert with sail and oar<span class="lnum"
+							>420</span>
+					</span>
+					<span class="ln">The sea was calm, your heart would have responded</span>
+					<span class="ln">Gaily, when invited, beating obedient</span>
+					<span class="ln">To controlling hands</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">I sat upon the shore</span>
+					<span class="ln">Fishing, with the arid plain behind me<a epub:type="noteref" class="noteref"
+							href="#note-45">*</a>
+					</span>
+					<span class="ln">Shall I at least set my lands in order?</span>
+					<span class="ln">London Bridge is falling down falling down falling down</span>
+					<span class="ln" xml:lang="it">
+						<em>Poi s'ascose nel foco che gli affina</em>
+						<a epub:type="noteref" class="noteref" href="#note-46">*</a>
+					</span>
+					<span class="ln">
+						<span xml:lang="it">
+							<em>Quando fiam ceu chelidon</em>
+						</span> - O swallow swallow<a epub:type="noteref" class="noteref" href="#note-47">*</a>
+					</span>
+					<span class="ln" xml:lang="fr">
+						<em>Le Prince d'Aquitaine a la tour abolie</em>
+						<a epub:type="noteref" class="noteref" href="#note-48">*</a>
+						<span class="lnum">430</span>
+					</span>
+					<span class="ln">These fragments I have shored against my ruins</span>
+					<span class="ln">Why then Ile fit you. Hieronymo's mad againe.<a
+							epub:type="noteref" class="noteref" href="#note-49">*</a>
+					</span>
+					<span class="ln" xml:lang="sa">Datta. Dayadhvam. Damyata.</span>
+					<div class="linegroup">
+						<span class="ln" xml:lang="sa">Shantih shantih shantih<a epub:type="noteref" class="noteref"
+								href="#note-50">*</a>
+						</span>
+					</div>
+				</div>
+			</section>
+		</section>
+		<section epub:type="backmatter" id="backmatter">
+			<section epub:type="rearnotes">
+				<h2>NOTES ON "THE WASTE LAND"</h2>
+				<p>Not only the title, but the plan and a good deal of the incidental symbolism of
+					the poem were suggested by Miss Jessie L. Weston's book on the Grail legend:
+					From Ritual to Romance</p>
+				<p>Indeed, so deeply am I indebted, Miss Weston's book will elucidate the
+					difficulties of the poem much better than my notes can do; and I recommend it
+					(apart from the great interest of the book itself) to any who think such
+					elucidation of the poem worth the trouble. To another work of anthropology I am
+					indebted in general, one which has influenced our generation profoundly; I mean
+					The Golden Bough; I have used especially the two volumes Adonis, Attis, Osiris.
+					Anyone who is acquainted with these works will immediately recognise in the poem
+					certain references to vegetation ceremonies.</p>
+				<section>
+					<h3>I. THE BURIAL OF THE DEAD</h3>
+					<div epub:type="rearnote" id="note-1">
+						<p>Line 20. Cf. Ezekiel 2:1.</p>
+					</div>
+					<div epub:type="rearnote" id="note-2">
+						<p>23. Cf. Ecclesiastes 12:5.</p>
+					</div>
+					<div epub:type="rearnote" id="note-3">
+						<p>31. V. Tristan und Isolde, i, verses 5-8.</p>
+					</div>
+					<div epub:type="rearnote" id="note-4">
+						<p>42. Id. iii, verse 24.</p>
+					</div>
+					<div epub:type="rearnote" id="note-5">
+						<p>46. I am not familiar with the exact constitution of the Tarot pack of
+							cards, from which I have obviously departed to suit my own convenience.
+							The Hanged Man, a member of the traditional pack, fits my purpose in two
+							ways: because he is associated in my mind with the Hanged God of Frazer,
+							and because I associate him with the hooded figure in the passage of the
+							disciples to Emmaus in Part V. The Phoenician Sailor and the Merchant
+							appear later; also the "crowds of people," and Death by Water is
+							executed in Part IV. The Man with Three Staves (an authentic member of
+							the Tarot pack) I associate, quite arbitrarily, with the Fisher King
+							himself.</p>
+					</div>
+					<div epub:type="rearnote" id="note-6">
+						<p>60. Cf. Baudelaire:</p>
+						<blockquote xml:lang="fr">
+							<p>"Fourmillante cite;, cite; pleine de reves,<br />Ou le spectre en
+								plein jour raccroche le passant."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-7">
+						<p>63. Cf. Inferno, iii. 55-7.</p>
+						<blockquote xml:lang="it">
+							<p>"si lunga tratta<br />di gente, ch'io non avrei mai creduto<br />che
+								morte tanta n'avesse disfatta."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-8">
+						<p>64. Cf. Inferno, iv. 25-7:</p>
+						<blockquote xml:lang="it">
+							<p>"Quivi, secondo che per ascoltahre,<br />"non avea pianto, ma' che di
+								sospiri,<br />"che l'aura eterna facevan tremare."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-9">
+						<p>68. A phenomenon which I have often noticed.</p>
+					</div>
+					<div epub:type="rearnote" id="note-10">
+						<p>74. Cf. the Dirge in Webster's White Devil .</p>
+					</div>
+					<div epub:type="rearnote" id="note-11">
+						<p>76. V. Baudelaire, Preface to Fleurs du Mal.</p>
+					</div>
+				</section>
+				<section>
+					<h3>II. A GAME OF CHESS</h3>
+					<div epub:type="rearnote" id="note-12">
+						<p>77. Cf. Antony and Cleopatra, II. ii., l. 190.</p>
+					</div>
+					<div epub:type="rearnote" id="note-13">
+						<p>92. Laquearia. V. Aeneid, I. 726:</p>
+						<blockquote xml:lang="la">
+							<p>dependent lychni laquearibus aureis incensi, et noctem
+								flammis<br />funalia vincunt.</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-14">
+						<p>98. Sylvan scene. V. Milton, Paradise Lost, iv. 140.</p>
+					</div>
+					<div epub:type="rearnote" id="note-15">
+						<p>99. V. Ovid, Metamorphoses, vi, Philomela.</p>
+					</div>
+					<div epub:type="rearnote" id="note-16">
+						<p>100. Cf. Part III, l. 204.</p>
+					</div>
+					<div epub:type="rearnote" id="note-17">
+						<p>115. Cf. Part III, l. 195.</p>
+					</div>
+					<div epub:type="rearnote" id="note-18">
+						<p>118. Cf. Webster:</p>
+						<blockquote>
+							<p>"Is the wind in that door still?"</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-19">
+						<p>126. Cf. Part I, l. 37, 48.</p>
+					</div>
+					<div epub:type="rearnote" id="note-20">
+						<p>138. Cf. the game of chess in Middleton's Women beware Women.</p>
+					</div>
+				</section>
+				<section>
+					<h3>III. THE FIRE SERMON</h3>
+					<div epub:type="rearnote" id="note-21">
+						<p>176. V. Spenser, Prothalamion.</p>
+					</div>
+					<div epub:type="rearnote" id="note-22">
+						<p>192. Cf. The Tempest, I. ii.</p>
+					</div>
+					<div epub:type="rearnote" id="note-23">
+						<p>196. Cf. Marvell, To His Coy Mistress.</p>
+					</div>
+					<div epub:type="rearnote" id="note-24">
+						<p>197. Cf. Day, Parliament of Bees:</p>
+						<blockquote>
+							<div>
+								<span class="ln">"When of the sudden, listening, you shall
+									hear,</span>
+								<span class="ln">"A noise of horns and hunting, which shall
+									bring</span>
+								<span class="ln">"Actaeon to Diana in the spring,</span>
+								<span class="ln">"Where all shall see her naked skin . . ."</span>
+							</div>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-25">
+						<p>199. I do not know the origin of the ballad from which these lines are
+							taken: it was reported to me from Sydney, Australia.</p>
+					</div>
+					<div epub:type="rearnote" id="note-26">
+						<p>202. V. Verlaine, Parsifal.</p>
+					</div>
+					<div epub:type="rearnote" id="note-27">
+						<p>210. The currants were quoted at a price "cost insurance and freight to
+							London"; and the Bill of Lading etc. were to be handed to the buyer upon
+							payment of the sight draft.</p>
+					</div>
+					<div epub:type="rearnote" id="note-28">
+						<p>218. Tiresias, although a mere spectator and not indeed a "character," is
+							yet the most important personage in the poem, uniting all the rest. Just
+							as the one-eyed merchant, seller of currants, melts into the Phoenician
+							Sailor, and the latter is not wholly distinct from Ferdinand Prince of
+							Naples, so all the women are one woman, and the two sexes meet in
+							Tiresias. What Tiresias sees, in fact, is the substance of the poem. The
+							whole passage from Ovid is of great anthropological interest:</p>
+						<blockquote xml:lang="la">
+							<p>'. . . Cum Iunone iocos et maior vestra profecto est<br /> Quam, quae
+								contingit maribus,' dixisse, 'voluptas.'<br /> Illa negat; placuit
+								quae sit sententia docti<br /> Quaerere Tiresiae: venus huic erat
+								utraque nota.<br /> Nam duo magnorum viridi coeuntia silva<br />
+								Corpora serpentum baculi violaverat ictu<br /> Deque viro factus,
+								mirabile, femina septem<br /> Egerat autumnos; octavo rursus
+								eosdem<br /> Vidit et 'est vestrae si tanta potentia plagae,'<br />
+								Dixit 'ut auctoris sortem in contraria mutet,<br /> Nunc quoque vos
+								feriam!' percussis anguibus isdem<br /> Forma prior rediit
+								genetivaque venit imago.<br /> Arbiter hic igitur sumptus de lite
+								iocosa<br /> Dicta Iovis firmat; gravius Saturnia iusto<br /> Nec
+								pro materia fertur doluisse suique<br /> Iudicis aeterna damnavit
+								lumina nocte,<br /> At pater omnipotens (neque enim licet inrita
+								cuiquam<br /> Facta dei fecisse deo) pro lumine adempto<br /> Scire
+								futura dedit poenamque levavit honore.<br />
+							</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-29">
+						<p>221. This may not appear as exact as Sappho's lines, but I had in mind
+							the "longshore" or "dory" fisherman, who returns at nightfall.</p>
+					</div>
+					<div epub:type="rearnote" id="note-30">
+						<p>253. V. Goldsmith, the song in The Vicar of Wakefield.</p>
+					</div>
+					<div epub:type="rearnote" id="note-31">
+						<p>257. V. The Tempest, as above.</p>
+					</div>
+					<div epub:type="rearnote" id="note-32">
+						<p>264. The interior of St. Magnus Martyr is to my mind one of the finest
+							among Wren's interiors. See The Proposed Demolition of Nineteen City
+							Churches (P. S. King & Son, Ltd.).</p>
+					</div>
+					<div epub:type="rearnote" id="note-33">
+						<p>266. The Song of the (three) Thames-daughters begins here. From line 292
+							to 306 inclusive they speak in turn. V. Gutterdsammerung, III. i: the
+							Rhine-daughters.</p>
+					</div>
+					<div epub:type="rearnote" id="note-34">
+						<p>279. V. Froude, Elizabeth, Vol. I, ch. iv, letter of De Quadra to Philip
+							of Spain:</p>
+						<blockquote>
+							<div>
+								<span class="ln">"In the afternoon we were in a barge, watching the
+									games on the river.</span>
+								<span class="ln">(The queen) was alone with Lord Robert and myself
+									on the poop,</span>
+								<span class="ln">when they began to talk nonsense, and went so far
+									that Lord Robert</span>
+								<span class="ln">at last said, as I was on the spot there was no
+									reason why they</span>
+								<span class="ln">should not be married if the queen pleased."</span>
+							</div>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-35">
+						<p>293. Cf. Purgatorio, v. 133:</p>
+						<blockquote>
+							<p>"Ricorditi di me, che son la Pia;<br />Siena mi fe', disfecemi
+								Maremma."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-36">
+						<p>307. V. St. Augustine's Confessions: "to Carthage then I came, where a
+							cauldron of unholy loves sang all about mine ears."</p>
+					</div>
+					<div epub:type="rearnote" id="note-37">
+						<p>308. The complete text of the Buddha's Fire Sermon (which corresponds in
+							importance to the Sermon on the Mount) from which these words are taken,
+							will be found translated in the late Henry Clarke Warren's Buddhism in
+							Translation (Harvard Oriental Series). Mr. Warren was one of the great
+							pioneers of Buddhist studies in the Occident.</p>
+					</div>
+					<div epub:type="rearnote" id="note-38">
+						<p>309. From St. Augustine's Confessions again. The collocation of these two
+							representatives of eastern and western asceticism, as the culmination of
+							this part of the poem, is not an accident.</p>
+					</div>
+				</section>
+				<section>
+					<h3>V. WHAT THE THUNDER SAID</h3>
+					<p>In the first part of Part V three themes are employed: the journey to Emmaus,
+						the approach to the Chapel Perilous (see Miss Weston's book) and the present
+						decay of eastern Europe.</p>
+					<div epub:type="rearnote" id="note-39">
+						<p>357. This is Turdus aonalaschkae pallasii, the hermit-thrush which I have
+							heard in Quebec County. Chapman says (Handbook of Birds of Eastern North
+							America) "it is most at home in secluded woodland and thickety retreats.
+							. . . Its notes are not remarkable for variety or volume, but in purity
+							and sweetness of tone and exquisite modulation they are unequalled." Its
+							"water-dripping song" is justly celebrated.</p>
+					</div>
+					<div epub:type="rearnote" id="note-40">
+						<p>360. The following lines were stimulated by the account of one of the
+							Antarctic expeditions (I forget which, but I think one of Shackleton's):
+							it was related that the party of explorers, at the extremity of their
+							strength, had the constant delusion that there was one more member than
+							could actually be counted.</p>
+					</div>
+					<div epub:type="rearnote" id="note-41">
+						<p>367-77. Cf. Hermann Hesse, Blick ins Chaos:</p>
+						<blockquote xml:lang="de">
+							<p>"Schon ist halb Europa, schon ist zumindest der halbe Osten Europas
+								auf dem<br /> Wege zum Chaos, fhrt betrunken im heiligem Wahn am
+								Abgrund entlang<br /> und singt dazu, singt betrunken und hymnisch
+								wie Dmitri Karamasoff sang.<br /> Ueber diese Lieder lacht der
+								Bsrger beleidigt, der Heilige<br /> und Seher hrt sie mit
+								Trvnen."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-42">
+						<p>402. <q xml:lang="sa">"Datta, dayadhvam, damyata"</q> (Give, sympathize,
+							control). The fable of the meaning of the Thunder is found in the
+							Brihadaranyaka-Upanishad, 5, 1. A translation is found in Deussen's
+							Sechzig Upanishads des Veda, p. 489.</p>
+					</div>
+					<div epub:type="rearnote" id="note-43">
+						<p>408. Cf. Webster, The White Devil, v. vi:</p>
+						<blockquote>
+							<p>". . . they'll remarry<br /> Ere the worm pierce your winding-sheet,
+								ere the spider<br /> Make a thin curtain for your epitaphs."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-44">
+						<p>412. Cf. Inferno, xxxiii. 46:</p>
+						<blockquote xml:lang="it">
+							<p>"ed io sentii chiavar l'uscio di sotto<br /> all'orribile torre."</p>
+						</blockquote>
+						<p>Also F. H. Bradley, Appearance and Reality, p. 346:</p>
+						<blockquote>
+							<p>"My external sensations are no less private to myself than are my
+								thoughts or my feelings. In either case my experience falls within
+								my own circle, a circle closed on the outside; and, with all its
+								elements alike, every sphere is opaque to the others which surround
+								it. . . . In brief, regarded as an existence which appears in a
+								soul, the whole world for each is peculiar and private to that
+								soul."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-45">
+						<p>425. V. Weston, From Ritual to Romance; chapter on the Fisher King.</p>
+					</div>
+					<div epub:type="rearnote" id="note-46">
+						<p>428. V. Purgatorio, xxvi. 148.</p>
+						<blockquote xml:lang="it">
+							<p>"'Ara vos prec per aquella valor<br /> 'que vos guida al som de
+								l'escalina,<br /> 'sovegna vos a temps de ma dolor.'<br /> Poi
+								s'ascose nel foco che gli affina."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-47">
+						<p>429. V. Pervigilium Veneris. Cf. Philomela in Parts II and III.</p>
+					</div>
+					<div epub:type="rearnote" id="note-48">
+						<p>430. V. Gerard de Nerval, Sonnet El Desdichado.</p>
+					</div>
+					<div epub:type="rearnote" id="note-49">
+						<p>432. V. Kyd's Spanish Tragedy.</p>
+					</div>
+					<div epub:type="rearnote" id="note-50">
+						<p>434. Shantih. Repeated as here, a formal ending to an Upanishad. 'The
+							Peace which passeth understanding' is a feeble translation of the
+							content of this word.</p>
+					</div>
+				</section>
+			</section>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-switch/EPUB/wasteland-cover.jpg b/src/test/resources/30/expanded/valid/lorem-basic-switch/EPUB/wasteland-cover.jpg
new file mode 100644
index 0000000..8308ed4
Binary files /dev/null and b/src/test/resources/30/expanded/valid/lorem-basic-switch/EPUB/wasteland-cover.jpg differ
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-switch/EPUB/wasteland-nav.xhtml b/src/test/resources/30/expanded/valid/lorem-basic-switch/EPUB/wasteland-nav.xhtml
new file mode 100644
index 0000000..6fd9693
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-switch/EPUB/wasteland-nav.xhtml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<link type="text/css" rel="stylesheet" href="wasteland.css" />
+	</head>
+	<body>
+		<nav epub:type="toc" id="toc">
+			<h1>Table of contents</h1>
+			<ol>
+				<li><a href="wasteland-content.xhtml#ch1">I. THE BURIAL OF THE DEAD</a></li>
+				<li><a href="wasteland-content.xhtml#ch2">II. A GAME OF CHESS</a></li>
+				<li><a href="wasteland-content.xhtml#ch3">III. THE FIRE SERMON</a></li>
+				<li><a href="wasteland-content.xhtml#ch4">IV. DEATH BY WATER</a></li>
+				<li><a href="wasteland-content.xhtml#ch5">V. WHAT THE THUNDER SAID</a></li>
+				<li><a href="wasteland-content.xhtml#backmatter">NOTES ON "THE WASTE LAND"</a></li>
+			</ol>
+		</nav>
+		<nav epub:type="landmarks">
+			<ol>
+				<li><a epub:type="frontmatter" href="wasteland-content.xhtml#frontmatter"
+						>frontmatter</a></li>
+				<li><a epub:type="bodymatter" href="wasteland-content.xhtml#bodymatter"
+						>bodymatter</a></li>
+				<li><a epub:type="backmatter" href="wasteland-content.xhtml#bodymatter"
+						>rearmatter</a></li>
+			</ol>
+		</nav>
+
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-switch/EPUB/wasteland.css b/src/test/resources/30/expanded/valid/lorem-basic-switch/EPUB/wasteland.css
new file mode 100644
index 0000000..8b4aeec
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-switch/EPUB/wasteland.css
@@ -0,0 +1,32 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
+
+h2 {
+    margin-top: 5em;
+}
+
+h3 {
+    margin-top: 3em;
+}
+
+span.ln { 
+    display: block;
+    margin-bottom: 0.5em;
+}
+
+span.lnum {
+    float : right;
+    color : gray;
+    font-size : 90%;
+}
+
+a.noteref {
+    color : gray;
+    text-decoration : none;
+    margin-left: 0.5em;
+    margin-right: 0.5em;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-switch/EPUB/wasteland.opf b/src/test/resources/30/expanded/valid/lorem-basic-switch/EPUB/wasteland.opf
new file mode 100644
index 0000000..0f587ab
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-switch/EPUB/wasteland.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xml:lang="en-US" prefix="cc: http://creativecommons.org/ns#">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:title>The Waste Land</dc:title>
+        <dc:creator>T.S. Eliot</dc:creator>
+        <dc:language>en-US</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T13:44:00Z</meta>          
+        <link rel="cc:license" refines="#cover" href="http://creativecommons.org/licenses/by-sa/3.0/" />
+        <link rel="cc:attributionURL" refines="#cover" href="http://en.wikipedia.org/wiki/Simon_Fieldhouse" />
+    </metadata> 
+    <manifest>
+        <item id="t1" href="wasteland-content.xhtml" properties="switch mathml" media-type="application/xhtml+xml" />
+        <item id="nav" href="wasteland-nav.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="cover" href="wasteland-cover.jpg" media-type="image/jpeg" properties="cover-image" />
+        <item id="css" href="wasteland.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-switch/META-INF/container.xml b/src/test/resources/30/expanded/valid/lorem-basic-switch/META-INF/container.xml
new file mode 100644
index 0000000..8bd2e5e
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-switch/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/wasteland.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-basic-switch/mimetype b/src/test/resources/30/expanded/valid/lorem-basic-switch/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic-switch/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-basic.txt b/src/test/resources/30/expanded/valid/lorem-basic.txt
new file mode 100644
index 0000000..9ab8173
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic.txt
@@ -0,0 +1,12 @@
+# creation date is not stable between different runs
+[format version] 3.0
+[format name] application/epub+zip
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[items count] 2
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[characters count] 6061
+
diff --git a/src/test/resources/30/expanded/valid/lorem-basic/EPUB/lorem.css b/src/test/resources/30/expanded/valid/lorem-basic/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-basic/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/lorem-basic/EPUB/lorem.opf
new file mode 100644
index 0000000..3b65af2
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-basic/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/lorem-basic/EPUB/lorem.xhtml
new file mode 100644
index 0000000..ce440bb
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic/EPUB/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-basic/META-INF/container.xml b/src/test/resources/30/expanded/valid/lorem-basic/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-basic/mimetype b/src/test/resources/30/expanded/valid/lorem-basic/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-basic/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-bindings.txt b/src/test/resources/30/expanded/valid/lorem-bindings.txt
new file mode 100644
index 0000000..e0e9f30
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-bindings.txt
@@ -0,0 +1,12 @@
+# creation date is not stable between different runs
+[format version] 3.0
+[format name] application/epub+zip
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[items count] 3
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[declared mimetype] application/x-demo-slideshow
+[hasScripts] text/javascript
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-bindings/EPUB/lorem.css b/src/test/resources/30/expanded/valid/lorem-bindings/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-bindings/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-bindings/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/lorem-bindings/EPUB/lorem.opf
new file mode 100644
index 0000000..c246889
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-bindings/EPUB/lorem.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav scripted" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+		<item id="slideshow" href="slideshow.xml" media-type="application/x-demo-slideshow" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+	<bindings>
+        <mediaType handler="t1"
+            media-type="application/x-demo-slideshow"/>
+    </bindings>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-bindings/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/lorem-bindings/EPUB/lorem.xhtml
new file mode 100644
index 0000000..c839642
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-bindings/EPUB/lorem.xhtml
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<script type="text/javascript">
+			
+		</script>
+		<object data="slideshow.xml" 
+            type="application/x-demo-slideshow">
+        </object>
+		
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-bindings/EPUB/slideshow.xml b/src/test/resources/30/expanded/valid/lorem-bindings/EPUB/slideshow.xml
new file mode 100644
index 0000000..e69de29
diff --git a/src/test/resources/30/expanded/valid/lorem-bindings/META-INF/container.xml b/src/test/resources/30/expanded/valid/lorem-bindings/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-bindings/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-bindings/mimetype b/src/test/resources/30/expanded/valid/lorem-bindings/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-bindings/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-css-import.txt b/src/test/resources/30/expanded/valid/lorem-css-import.txt
new file mode 100644
index 0000000..dc91df1
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-css-import.txt
@@ -0,0 +1,10 @@
+# creation date is not stable between different runs
+[format version] 3.0
+[format name] application/epub+zip
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[items count] 3
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
diff --git a/src/test/resources/30/expanded/valid/lorem-css-import/EPUB/import.css b/src/test/resources/30/expanded/valid/lorem-css-import/EPUB/import.css
new file mode 100644
index 0000000..e26550f
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-css-import/EPUB/import.css
@@ -0,0 +1,3 @@
+p {
+    color: black;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-css-import/EPUB/lorem.css b/src/test/resources/30/expanded/valid/lorem-css-import/EPUB/lorem.css
new file mode 100644
index 0000000..fa3276f
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-css-import/EPUB/lorem.css
@@ -0,0 +1,8 @@
+ at import "import.css";
+
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-css-import/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/lorem-css-import/EPUB/lorem.opf
new file mode 100644
index 0000000..bf0b42c
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-css-import/EPUB/lorem.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-10-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />         
+        <item id="css2" href="import.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/valid/lorem-css-import/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/lorem-css-import/EPUB/lorem.xhtml
new file mode 100644
index 0000000..ce440bb
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-css-import/EPUB/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-css-import/META-INF/container.xml b/src/test/resources/30/expanded/valid/lorem-css-import/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-css-import/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-css-import/mimetype b/src/test/resources/30/expanded/valid/lorem-css-import/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-css-import/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-foreign.txt b/src/test/resources/30/expanded/valid/lorem-foreign.txt
new file mode 100644
index 0000000..26ed94b
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-foreign.txt
@@ -0,0 +1,12 @@
+# creation date is not stable between different runs
+[format version] 3.0
+[format name] application/epub+zip
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[items count] 3
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[declared mimetype] video/ogg
+[reference] http://test.com/lorem.ogg
diff --git a/src/test/resources/30/expanded/valid/lorem-foreign/EPUB/lorem.css b/src/test/resources/30/expanded/valid/lorem-foreign/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-foreign/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-foreign/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/lorem-foreign/EPUB/lorem.opf
new file mode 100644
index 0000000..a9f1098
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-foreign/EPUB/lorem.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav remote-resources" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+		<item id="video" href="http://test.com/lorem.ogg" media-type="video/ogg" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-foreign/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/lorem-foreign/EPUB/lorem.xhtml
new file mode 100644
index 0000000..abf3dac
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-foreign/EPUB/lorem.xhtml
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		
+		<video src="http://test.com/lorem.ogg" width="640" height="360" controls="controls" >
+			Your reader doesn't support video tag!
+		</video>
+		
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-foreign/META-INF/container.xml b/src/test/resources/30/expanded/valid/lorem-foreign/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-foreign/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-foreign/mimetype b/src/test/resources/30/expanded/valid/lorem-foreign/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-foreign/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-image/EPUB/image.png b/src/test/resources/30/expanded/valid/lorem-image/EPUB/image.png
new file mode 100644
index 0000000..16a44e0
Binary files /dev/null and b/src/test/resources/30/expanded/valid/lorem-image/EPUB/image.png differ
diff --git a/src/test/resources/30/expanded/valid/lorem-image/EPUB/lorem.css b/src/test/resources/30/expanded/valid/lorem-image/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-image/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-image/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/lorem-image/EPUB/lorem.opf
new file mode 100644
index 0000000..a09c502
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-image/EPUB/lorem.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:7070D4CD-A6A2-435B-8811-6B8EA65BBD14</dc:identifier>
+        <dc:title>Lorem Ipsum with Image</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2012-10-15</dc:date>
+        <meta property="dcterms:modified">2012-10-15T13:01:45Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="img" href="image.png" media-type="image/png" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/valid/lorem-image/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/lorem-image/EPUB/lorem.xhtml
new file mode 100644
index 0000000..32bde54
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-image/EPUB/lorem.xhtml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<img src="image.png" alt=""/>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-image/META-INF/container.xml b/src/test/resources/30/expanded/valid/lorem-image/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-image/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-image/mimetype b/src/test/resources/30/expanded/valid/lorem-image/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-image/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-link.txt b/src/test/resources/30/expanded/valid/lorem-link.txt
new file mode 100644
index 0000000..430c913
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-link.txt
@@ -0,0 +1,13 @@
+# creation date is not stable between different runs
+[format version] 3.0
+[format name] application/epub+zip
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[items count] 3
+# Not defined mimetype ...
+[declared mimetype] null
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+
diff --git a/src/test/resources/30/expanded/valid/lorem-link/EPUB/licence.txt b/src/test/resources/30/expanded/valid/lorem-link/EPUB/licence.txt
new file mode 100644
index 0000000..a8a9406
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-link/EPUB/licence.txt
@@ -0,0 +1 @@
+this is a test
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-link/EPUB/lorem.css b/src/test/resources/30/expanded/valid/lorem-link/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-link/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-link/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/lorem-link/EPUB/lorem.opf
new file mode 100644
index 0000000..8753aee
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-link/EPUB/lorem.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+		<link rel="xml-signature" href="licence.txt" />
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-link/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/lorem-link/EPUB/lorem.xhtml
new file mode 100644
index 0000000..ce440bb
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-link/EPUB/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-link/META-INF/container.xml b/src/test/resources/30/expanded/valid/lorem-link/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-link/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-link/mimetype b/src/test/resources/30/expanded/valid/lorem-link/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-link/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-object-fallbacks.txt b/src/test/resources/30/expanded/valid/lorem-object-fallbacks.txt
new file mode 100644
index 0000000..6d286fb
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-object-fallbacks.txt
@@ -0,0 +1,13 @@
+# creation date is not stable between different runs
+[format version] 3.0
+[format name] application/epub+zip
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[items count] 4
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[declared mimetype] application/x-demo-slideshow2
+[declared mimetype] video/avi
+[hasScripts] text/javascript
diff --git a/src/test/resources/30/expanded/valid/lorem-object-fallbacks/EPUB/lorem.css b/src/test/resources/30/expanded/valid/lorem-object-fallbacks/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-object-fallbacks/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-object-fallbacks/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/lorem-object-fallbacks/EPUB/lorem.opf
new file mode 100644
index 0000000..b9d68c0
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-object-fallbacks/EPUB/lorem.opf
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav scripted" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+		<item id="slideshow" href="slideshow.xml" media-type="application/x-demo-slideshow2" />
+		<item id="video" href="video.avi" media-type="video/avi" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+	<bindings>
+        <mediaType handler="t1"
+            media-type="application/x-demo-slideshow"/>
+    </bindings>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-object-fallbacks/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/lorem-object-fallbacks/EPUB/lorem.xhtml
new file mode 100644
index 0000000..427304f
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-object-fallbacks/EPUB/lorem.xhtml
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<script type="text/javascript">
+			
+		</script>
+		
+		<object type="application/x-demo-slideshow3">
+			<object data="slideshow.xml" type="application/x-demo-slideshow2">
+				<video src="video.avi" >
+					Your System can't read this!
+				</video>
+			</object>
+		</object>
+		
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-object-fallbacks/EPUB/slideshow.xml b/src/test/resources/30/expanded/valid/lorem-object-fallbacks/EPUB/slideshow.xml
new file mode 100644
index 0000000..e69de29
diff --git a/src/test/resources/30/expanded/valid/lorem-object-fallbacks/EPUB/video.avi b/src/test/resources/30/expanded/valid/lorem-object-fallbacks/EPUB/video.avi
new file mode 100644
index 0000000..e69de29
diff --git a/src/test/resources/30/expanded/valid/lorem-object-fallbacks/META-INF/container.xml b/src/test/resources/30/expanded/valid/lorem-object-fallbacks/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-object-fallbacks/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-object-fallbacks/mimetype b/src/test/resources/30/expanded/valid/lorem-object-fallbacks/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-object-fallbacks/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-poster.txt b/src/test/resources/30/expanded/valid/lorem-poster.txt
new file mode 100644
index 0000000..a85c5ea
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-poster.txt
@@ -0,0 +1,13 @@
+# creation date is not stable between different runs
+[format version] 3.0
+[format name] application/epub+zip
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[items count] 4
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[declared mimetype] image/png
+[declared mimetype] video/ogg
+[reference] http://test.com/lorem.ogg
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-poster/EPUB/lorem.css b/src/test/resources/30/expanded/valid/lorem-poster/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-poster/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-poster/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/lorem-poster/EPUB/lorem.opf
new file mode 100644
index 0000000..adbf0a1
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-poster/EPUB/lorem.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav remote-resources" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+		<item id="poster" href="poster.png" media-type="image/png" />
+		<item id="video" href="http://test.com/lorem.ogg" media-type="video/ogg" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-poster/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/lorem-poster/EPUB/lorem.xhtml
new file mode 100644
index 0000000..68c848d
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-poster/EPUB/lorem.xhtml
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		
+		<video src="http://test.com/lorem.ogg" width="640" height="360" controls="controls" poster="poster.png">
+			
+		</video>
+		
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-poster/EPUB/poster.png b/src/test/resources/30/expanded/valid/lorem-poster/EPUB/poster.png
new file mode 100644
index 0000000..16a44e0
Binary files /dev/null and b/src/test/resources/30/expanded/valid/lorem-poster/EPUB/poster.png differ
diff --git a/src/test/resources/30/expanded/valid/lorem-poster/META-INF/container.xml b/src/test/resources/30/expanded/valid/lorem-poster/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-poster/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-poster/mimetype b/src/test/resources/30/expanded/valid/lorem-poster/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-poster/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-remote-2/EPUB/lorem.css b/src/test/resources/30/expanded/valid/lorem-remote-2/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-remote-2/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-remote-2/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/lorem-remote-2/EPUB/lorem.opf
new file mode 100644
index 0000000..5ff291f
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-remote-2/EPUB/lorem.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:2012-11-29T09:37:34Z</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2012-11-29</dc:date>
+        <meta property="dcterms:modified">2012-11-29T09:37:34Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav remote-resources" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+        <item id="audio1" href="http://example.com/audio/src-1.mp4" media-type="audio/mp4" />
+        <item id="audio2" href="http://example.com/audio/src-2.mp4" media-type="audio/mp4" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/valid/lorem-remote-2/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/lorem-remote-2/EPUB/lorem.xhtml
new file mode 100644
index 0000000..b82a827
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-remote-2/EPUB/lorem.xhtml
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+			
+			<audio controls="controls">
+				<source src="http://example.com/audio/src-1.mp4" type="audio/mp4"/>
+				<source src="http://example.com/audio/src-2.mp4" type="audio/mp4"/>
+			</audio>
+				
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-remote-2/META-INF/container.xml b/src/test/resources/30/expanded/valid/lorem-remote-2/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-remote-2/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-remote-2/mimetype b/src/test/resources/30/expanded/valid/lorem-remote-2/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-remote-2/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-remote-https/EPUB/lorem.css b/src/test/resources/30/expanded/valid/lorem-remote-https/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-remote-https/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-remote-https/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/lorem-remote-https/EPUB/lorem.opf
new file mode 100644
index 0000000..fbdbbc6
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-remote-https/EPUB/lorem.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav remote-resources" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+        <item id="audio" href="https://example.org/remote.mp4" media-type="audio/mp4" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/valid/lorem-remote-https/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/lorem-remote-https/EPUB/lorem.xhtml
new file mode 100644
index 0000000..f488f4b
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-remote-https/EPUB/lorem.xhtml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+			
+			<audio controls="controls" src="https://example.org/remote.mp4" />
+				
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-remote-https/META-INF/container.xml b/src/test/resources/30/expanded/valid/lorem-remote-https/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-remote-https/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-remote-https/mimetype b/src/test/resources/30/expanded/valid/lorem-remote-https/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-remote-https/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-remote-queryurl/EPUB/lorem.css b/src/test/resources/30/expanded/valid/lorem-remote-queryurl/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-remote-queryurl/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-remote-queryurl/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/lorem-remote-queryurl/EPUB/lorem.opf
new file mode 100644
index 0000000..9071ccd
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-remote-queryurl/EPUB/lorem.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav remote-resources" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+        <item id="audio" href="http://example.org/remote.mp4?test" media-type="audio/mp4" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/valid/lorem-remote-queryurl/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/lorem-remote-queryurl/EPUB/lorem.xhtml
new file mode 100644
index 0000000..265a5e0
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-remote-queryurl/EPUB/lorem.xhtml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+			
+			<audio controls="controls" src="http://example.org/remote.mp4?test" />
+				
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-remote-queryurl/META-INF/container.xml b/src/test/resources/30/expanded/valid/lorem-remote-queryurl/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-remote-queryurl/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-remote-queryurl/mimetype b/src/test/resources/30/expanded/valid/lorem-remote-queryurl/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-remote-queryurl/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-remote.txt b/src/test/resources/30/expanded/valid/lorem-remote.txt
new file mode 100644
index 0000000..7ccf243
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-remote.txt
@@ -0,0 +1,13 @@
+# creation date is not stable between different runs
+[format version] 3.0
+[format name] application/epub+zip
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[items count] 3
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[declared mimetype] audio/mp4
+
+[reference] http://example.org/remote.mp4
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-remote/EPUB/lorem.css b/src/test/resources/30/expanded/valid/lorem-remote/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-remote/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-remote/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/lorem-remote/EPUB/lorem.opf
new file mode 100644
index 0000000..70dbe62
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-remote/EPUB/lorem.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav remote-resources" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+        <item id="audio" href="http://example.org/remote.mp4" media-type="audio/mp4" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/valid/lorem-remote/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/lorem-remote/EPUB/lorem.xhtml
new file mode 100644
index 0000000..71f1e5d
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-remote/EPUB/lorem.xhtml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+			
+			<audio controls="controls" src="http://example.org/remote.mp4" />
+				
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-remote/META-INF/container.xml b/src/test/resources/30/expanded/valid/lorem-remote/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-remote/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-remote/mimetype b/src/test/resources/30/expanded/valid/lorem-remote/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-remote/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-svg-dual.txt b/src/test/resources/30/expanded/valid/lorem-svg-dual.txt
new file mode 100644
index 0000000..dc91df1
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-svg-dual.txt
@@ -0,0 +1,10 @@
+# creation date is not stable between different runs
+[format version] 3.0
+[format name] application/epub+zip
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[items count] 3
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
diff --git a/src/test/resources/30/expanded/valid/lorem-svg-dual/EPUB/lorem-1.xhtml b/src/test/resources/30/expanded/valid/lorem-svg-dual/EPUB/lorem-1.xhtml
new file mode 100644
index 0000000..cb6d3c5
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-svg-dual/EPUB/lorem-1.xhtml
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
+				xmlns="http://www.w3.org/2000/svg" version="1.1"
+				xmlns:x="http://www.w3.org/1999/xhtml">
+				<desc>Example rect01 - rectangle with sharp corners </desc>
+				
+				<rect x="1" y="1" width="1198" height="398"
+					fill="none" stroke="blue" stroke-width="2"/>
+				
+				<rect x="400" y="100" width="400" height="200"
+					fill="yellow" stroke="navy" stroke-width="10"  />			
+			</svg>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-svg-dual/EPUB/lorem-2.xhtml b/src/test/resources/30/expanded/valid/lorem-svg-dual/EPUB/lorem-2.xhtml
new file mode 100644
index 0000000..4b5bd43
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-svg-dual/EPUB/lorem-2.xhtml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
+			xmlns="http://www.w3.org/2000/svg" version="1.1"
+			xmlns:x="http://www.w3.org/1999/xhtml"
+            xmlns:xlink="http://www.w3.org/1999/xlink">
+			<desc>Example rect01 - rectangle with sharp corners </desc>
+			
+			<rect x="1" y="1" width="1198" height="398"
+				fill="none" stroke="blue" stroke-width="2"/>
+
+			<rect x="400" y="100" width="400" height="200"
+				fill="yellow" stroke="navy" stroke-width="10"  />
+
+			<a xlink:href="lorem-1.xhtml" target="ch1" xlink:title="link">
+                <rect x="10" y="20" width="75" height="30"
+                      style="stroke: #333366; fill: #6666cc"/>
+            </a>
+
+        </svg>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-svg-dual/EPUB/lorem.css b/src/test/resources/30/expanded/valid/lorem-svg-dual/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-svg-dual/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-svg-dual/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/lorem-svg-dual/EPUB/lorem.opf
new file mode 100644
index 0000000..a0f4df0
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-svg-dual/EPUB/lorem.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem-1.xhtml" properties="nav svg" media-type="application/xhtml+xml" />
+        <item id="t2" href="lorem-2.xhtml" properties="svg" media-type="application/xhtml+xml" />
+        <item id="css" href="lorem.css" media-type="text/css" />		
+    </manifest>
+    <spine>
+        <itemref idref="t1" />      
+		<itemref idref="t2" />    		
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/valid/lorem-svg-dual/META-INF/container.xml b/src/test/resources/30/expanded/valid/lorem-svg-dual/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-svg-dual/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-svg-dual/mimetype b/src/test/resources/30/expanded/valid/lorem-svg-dual/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-svg-dual/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-svg-hyperlink.txt b/src/test/resources/30/expanded/valid/lorem-svg-hyperlink.txt
new file mode 100644
index 0000000..bb2b7c4
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-svg-hyperlink.txt
@@ -0,0 +1,11 @@
+# creation date is not stable between different runs
+[format version] 3.0
+[format name] application/epub+zip
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[items count] 3
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[declared mimetype] image/svg+xml
diff --git a/src/test/resources/30/expanded/valid/lorem-svg-hyperlink/EPUB/lorem.css b/src/test/resources/30/expanded/valid/lorem-svg-hyperlink/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-svg-hyperlink/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-svg-hyperlink/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/lorem-svg-hyperlink/EPUB/lorem.opf
new file mode 100644
index 0000000..61e6546
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-svg-hyperlink/EPUB/lorem.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+		<item id="svg" href="rect.svg" media-type="image/svg+xml" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />      
+		<itemref idref="svg" />    		
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-svg-hyperlink/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/lorem-svg-hyperlink/EPUB/lorem.xhtml
new file mode 100644
index 0000000..19712e2
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-svg-hyperlink/EPUB/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+			<a href="rect.svg"> click for svg image</a>
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-svg-hyperlink/EPUB/rect.svg b/src/test/resources/30/expanded/valid/lorem-svg-hyperlink/EPUB/rect.svg
new file mode 100644
index 0000000..960f4f5
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-svg-hyperlink/EPUB/rect.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-svg-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-svg-30.sch"?>
+<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
+    xmlns="http://www.w3.org/2000/svg" version="1.1"
+    xmlns:x="http://www.w3.org/1999/xhtml">
+    <desc>Example rect01 - rectangle with sharp corners </desc>
+    
+    <rect x="1" y="1" width="1198" height="398"
+        fill="none" stroke="blue" stroke-width="2"/>
+    
+    <rect x="400" y="100" width="400" height="200"
+        fill="yellow" stroke="navy" stroke-width="10"  />
+    
+    <foreignObject width="123" height="123" requiredExtensions="http://www.idpf.org/2007/ops">        
+        <x:p></x:p>
+    </foreignObject>
+</svg>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-svg-hyperlink/META-INF/container.xml b/src/test/resources/30/expanded/valid/lorem-svg-hyperlink/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-svg-hyperlink/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-svg-hyperlink/mimetype b/src/test/resources/30/expanded/valid/lorem-svg-hyperlink/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-svg-hyperlink/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-svg.txt b/src/test/resources/30/expanded/valid/lorem-svg.txt
new file mode 100644
index 0000000..bb2b7c4
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-svg.txt
@@ -0,0 +1,11 @@
+# creation date is not stable between different runs
+[format version] 3.0
+[format name] application/epub+zip
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[items count] 3
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[declared mimetype] image/svg+xml
diff --git a/src/test/resources/30/expanded/valid/lorem-svg/EPUB/lorem.css b/src/test/resources/30/expanded/valid/lorem-svg/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-svg/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-svg/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/lorem-svg/EPUB/lorem.opf
new file mode 100644
index 0000000..61e6546
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-svg/EPUB/lorem.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+		<item id="svg" href="rect.svg" media-type="image/svg+xml" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />      
+		<itemref idref="svg" />    		
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-svg/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/lorem-svg/EPUB/lorem.xhtml
new file mode 100644
index 0000000..ce440bb
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-svg/EPUB/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-svg/EPUB/rect.svg b/src/test/resources/30/expanded/valid/lorem-svg/EPUB/rect.svg
new file mode 100644
index 0000000..960f4f5
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-svg/EPUB/rect.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-svg-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-svg-30.sch"?>
+<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
+    xmlns="http://www.w3.org/2000/svg" version="1.1"
+    xmlns:x="http://www.w3.org/1999/xhtml">
+    <desc>Example rect01 - rectangle with sharp corners </desc>
+    
+    <rect x="1" y="1" width="1198" height="398"
+        fill="none" stroke="blue" stroke-width="2"/>
+    
+    <rect x="400" y="100" width="400" height="200"
+        fill="yellow" stroke="navy" stroke-width="10"  />
+    
+    <foreignObject width="123" height="123" requiredExtensions="http://www.idpf.org/2007/ops">        
+        <x:p></x:p>
+    </foreignObject>
+</svg>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-svg/META-INF/container.xml b/src/test/resources/30/expanded/valid/lorem-svg/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-svg/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-svg/mimetype b/src/test/resources/30/expanded/valid/lorem-svg/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-svg/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-xrenditions/EPUB/lorem.css b/src/test/resources/30/expanded/valid/lorem-xrenditions/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-xrenditions/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-xrenditions/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/lorem-xrenditions/EPUB/lorem.opf
new file mode 100644
index 0000000..f90985c
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-xrenditions/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:013D98A5-41BF-4CAD-B870-E3B0AB7A34D1</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2012-10-16T12:26:26Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-xrenditions/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/lorem-xrenditions/EPUB/lorem.xhtml
new file mode 100644
index 0000000..ce440bb
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-xrenditions/EPUB/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-xrenditions/EPUB_2/lorem.css b/src/test/resources/30/expanded/valid/lorem-xrenditions/EPUB_2/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-xrenditions/EPUB_2/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-xrenditions/EPUB_2/lorem.opf b/src/test/resources/30/expanded/valid/lorem-xrenditions/EPUB_2/lorem.opf
new file mode 100644
index 0000000..a15889a
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-xrenditions/EPUB_2/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:E966656B-97C7-4C41-BF68-7EBA425E1A07</dc:identifier>
+        <dc:title>Lorem Ipsum - alt</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2012-10-16T12:26:51Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/lorem-xrenditions/EPUB_2/lorem.xhtml b/src/test/resources/30/expanded/valid/lorem-xrenditions/EPUB_2/lorem.xhtml
new file mode 100644
index 0000000..ce440bb
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-xrenditions/EPUB_2/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/lorem-xrenditions/META-INF/container.xml b/src/test/resources/30/expanded/valid/lorem-xrenditions/META-INF/container.xml
new file mode 100644
index 0000000..4cbd973
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-xrenditions/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" media-type="application/oebps-package+xml"/>
+		<rootfile full-path="EPUB_2/lorem.opf" media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
diff --git a/src/test/resources/30/expanded/valid/lorem-xrenditions/mimetype b/src/test/resources/30/expanded/valid/lorem-xrenditions/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/lorem-xrenditions/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/svg-cover.txt b/src/test/resources/30/expanded/valid/svg-cover.txt
new file mode 100644
index 0000000..bb2b7c4
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/svg-cover.txt
@@ -0,0 +1,11 @@
+# creation date is not stable between different runs
+[format version] 3.0
+[format name] application/epub+zip
+[title] Lorem Ipsum
+[language] la
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-4466674412314
+[items count] 3
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[declared mimetype] image/svg+xml
diff --git a/src/test/resources/30/expanded/valid/svg-cover/EPUB/cover.svg b/src/test/resources/30/expanded/valid/svg-cover/EPUB/cover.svg
new file mode 100755
index 0000000..e68384a
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/svg-cover/EPUB/cover.svg
@@ -0,0 +1,262 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg version="1.1" baseProfile="basic"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 width="100%" height="100%" viewBox="0 0 1571 2068"
+	 xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#AAB2AB;}
+	.st1{fill:url(#path2455_2_);stroke:#000000;stroke-width:3;}
+	.st2{fill:url(#path3337_3_);stroke:#000000;stroke-width:3;}
+	.st3{fill:url(#path2429_2_);stroke:#000000;stroke-width:3;}
+	.st4{fill:url(#path3262_2_);stroke:#000000;stroke-width:3;}
+	.st5{opacity:0.6089;}
+	.st6{fill:url(#path3292_2_);stroke:#000000;stroke-width:3;}
+	.st7{fill:url(#path3385_2_);stroke:#000000;stroke-width:4;}
+	.st8{fill:url(#path2440_2_);stroke:#000000;stroke-width:3;}
+	.st9{fill:url(#path2455_3_);stroke:#000000;stroke-width:3;}
+	.st10{fill:url(#path2414_2_);stroke:#000000;stroke-width:3;}
+	.st11{fill:url(#path2429_3_);stroke:#000000;stroke-width:3;}
+	.st13{fill:url(#path3262_3_);stroke:#000000;stroke-width:3;}
+	.st14{fill:url(#path2382_2_);stroke:#000000;stroke-width:3;}
+	.st15{fill:url(#path3292_3_);stroke:#000000;stroke-width:3;}
+	.st16{fill:url(#path3279_2_);}
+	.st17{fill:url(#path3279_3_);}
+	.st18{fill:url(#path3385_3_);stroke:#000000;stroke-width:4;}
+	.st19{fill:url(#path3316_2_);stroke:#000000;stroke-width:4;}
+	.st20{fill:url(#path2440_3_);stroke:#000000;stroke-width:3;}
+	.st21{fill:url(#path2414_3_);stroke:#000000;stroke-width:3;}
+	.st22{fill:url(#path3373_2_);stroke:#000000;stroke-width:3;}
+	.st23{opacity:0.5;}
+	.st24{fill:#FFFFFF;}
+	.st25{fill:url(#path2460_2_);stroke:#000000;stroke-width:3;}
+	.st26{fill:url(#path2382_3_);stroke:#000000;stroke-width:3;}
+	.st27{fill:url(#path3316_3_);stroke:#000000;stroke-width:4;}
+	.st28{fill:none;stroke:#000000;stroke-width:3;}
+	.st29{fill:url(#path3350_2_);}
+	.st30{fill:url(#path3350_3_);}
+	.st31{fill:url(#path3303_2_);stroke:#000000;stroke-width:3;}
+	.st32{fill:url(#path3373_3_);stroke:#000000;stroke-width:3;}
+	.st33{fill:url(#path2477_2_);}
+	.st34{fill:url(#path2477_3_);}
+	.st35{fill:url(#path3337_2_);stroke:#000000;stroke-width:3;}
+	.st36{fill:url(#path2460_3_);stroke:#000000;stroke-width:3;}
+	.st37{fill:url(#path3303_3_);stroke:#000000;stroke-width:3;}
+</style>
+<defs>
+</defs>
+<path d="M830.432,1371.498c24.959-0.574,28.99,21.695,28.99,37.438l-20.351,1.921c0-9.406-1.345-20.351-8.255-20.351
+	c-5.376,0.191-7.104,5.951-7.104,14.015c0,9.6,8.255,20.352,16.318,32.062c9.6,14.398,19.391,28.414,19.391,43.58
+	c0,18.816-6.145,35.518-28.798,35.518c-26.688,0-30.143-20.157-30.143-41.084l20.352-1.92c0,11.711,1.151,23.998,9.791,23.998
+	c6.144,0,8.447-6.719,8.447-15.551c0-9.408-8.831-20.734-16.703-32.639c-9.791-14.398-19.006-28.797-19.006-43.965
+	C803.362,1389.162,810.85,1371.883,830.432,1371.498z"/>
+<path d="M908.188,1373.035h20.16l-21.504,141.109H886.11l-21.503-141.109h20.158l10.367,77.562l0.771,5.951h1.151l0.767-5.951
+	L908.188,1373.035z"/>
+<path d="M970.971,1423.719v-21.692c0,0,0.386-10.367-6.912-10.367c-7.293,0-6.909,10.367-6.909,10.367v84.856
+	c0,0-0.384,10.367,6.909,10.367c7.298,0,6.912-10.367,6.912-10.367v-25.535h-8.256v-17.471h28.992v70.268h-12.289l-2.496-6.719
+	c-3.84,4.799-9.598,8.254-16.125,8.254c-26.303,0-24.383-30.524-24.383-30.524v-83.129c0,0-0.191-30.527,27.645-30.527
+	c27.841,0,27.648,30.527,27.648,30.527v21.692H970.971z"/>
+<path d="M1036.441,1373.035h19.391v19.391h-19.391V1373.035z M1036.441,1514.145v-105.016h19.391v105.016H1036.441z"/>
+<path d="M1090.584,1431.398c0,59.516,0,60.858,0,82.745h-19.391v-105.016h19.391v8.83c1.535-0.959,9.023-10.367,15.742-10.367
+	c10.367,0,14.592,11.904,14.592,20.543v86.01h-19.391v-83.131c0-4.03-2.306-4.606-4.609-4.606
+	C1093.078,1426.406,1090.584,1431.398,1090.584,1431.398z"/>
+<path d="M1191.188,1371.498c24.959-0.574,28.99,21.695,28.99,37.438l-20.35,1.921c0-9.406-1.344-20.351-8.256-20.351
+	c-5.377,0.191-7.104,5.951-7.104,14.015c0,9.6,8.254,20.352,16.318,32.062c9.6,14.398,19.391,28.414,19.391,43.58
+	c0,18.816-6.143,35.518-28.799,35.518c-26.686,0-30.141-20.157-30.141-41.084l20.352-1.92c0,11.711,1.15,23.998,9.789,23.998
+	c6.146,0,8.449-6.719,8.449-15.551c0-9.408-8.832-20.734-16.703-32.639c-9.793-14.398-19.008-28.797-19.008-43.965
+	C1164.117,1389.162,1171.605,1371.883,1191.188,1371.498z"/>
+<path d="M1231.316,1409.129h19.391v6.91c0,0,8.254-8.447,15.357-8.447c10.561,0,14.975,11.904,14.975,20.543v67.004
+	c0,8.64-4.414,20.541-14.975,20.541c-7.104,0-15.357-8.446-15.357-8.446v43.006h-19.391V1409.129z M1250.707,1491.105
+	c0,3.071,2.879,6.336,5.758,6.336s5.185-2.688,5.185-6.336v-58.939c0-3.646-2.306-6.336-5.185-6.336
+	c-2.688,0-5.758,2.688-5.758,6.336C1250.707,1455.973,1250.707,1470.947,1250.707,1491.105z"/>
+<path d="M1295.633,1373.035h19.392v19.391h-19.392V1373.035z M1295.633,1514.145v-105.016h19.392v105.016H1295.633z"/>
+<path d="M1349.777,1431.398c0,59.516,0,60.858,0,82.745h-19.392v-105.016h19.392v8.83c1.535-0.959,9.022-10.367,15.741-10.367
+	c10.367,0,14.591,11.904,14.591,20.543v86.01h-19.392v-83.131c0-4.03-2.305-4.606-4.606-4.606
+	C1352.271,1426.406,1349.777,1431.398,1349.777,1431.398z"/>
+<path d="M1443.66,1476.516v12.097c0,0,0,27.067-25.15,27.067c-24.959,0-24.959-27.645-24.959-27.645v-52.797
+	c0,0,0.193-27.646,25.15-27.646c25.15,0,24.959,27.07,24.959,27.07v30.524h-32.062v22.849c0,0,0,10.559,7.104,10.559
+	c7.297,0,6.912-10.559,6.912-10.559v-11.521L1443.66,1476.516L1443.66,1476.516z M1411.598,1450.021h14.017v-14.783
+	c0,0,0.385-10.752-6.912-10.752c-7.104,0-7.104,10.752-7.104,10.752V1450.021z"/>
+<linearGradient id="path3337_2_" gradientUnits="userSpaceOnUse" x1="932.6846" y1="-3838.2734" x2="600.4062" y2="-3149.8252" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#EAEAEA"/>
+	<stop  offset="0.8138" style="stop-color:#DDDDDD"/>
+	<stop  offset="0.9069" style="stop-color:#B1B1B1"/>
+	<stop  offset="0.9534" style="stop-color:#9B9B9B"/>
+	<stop  offset="1" style="stop-color:#858585"/>
+</linearGradient>
+<path id="path3337_1_" class="st35" d="M1353.061,229.191l-634.88,296.985l-71.595,154.932l263.803,255.067l187.937-113.549
+	L1353.061,229.191z"/>
+<linearGradient id="path3350_2_" gradientUnits="userSpaceOnUse" x1="1157.3047" y1="-3609.6172" x2="428.555" y2="-3364.7397" gradientTransform="matrix(1 0 0 1 224.6709 4002.4297)">
+	<stop  offset="0" style="stop-color:#E7E7E7"/>
+	<stop  offset="0.8711" style="stop-color:#D0D0D0"/>
+	<stop  offset="0.9071" style="stop-color:#FBFBFB"/>
+	<stop  offset="1" style="stop-color:#FDFDFD"/>
+</linearGradient>
+<path id="path3350_1_" class="st29" d="M1350.137,232.287L719.857,527.295l-72.401,154.417l18.715,17.433l96.462,8.794
+	l114.44,25.759l473.062-501.411H1350.137z"/>
+<path id="path3259_1_" class="st28" d="M1350.885,231.45L822.578,792.6"/>
+<linearGradient id="path3385_2_" gradientUnits="userSpaceOnUse" x1="510.9668" y1="-3334.5342" x2="428.7348" y2="-3310.9626" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#FBFBFB"/>
+	<stop  offset="1" style="stop-color:#EEEEEE"/>
+</linearGradient>
+<path id="path3385_1_" class="st7" d="M646.722,682.15l-1.54,18.817l114.366-42.635L646.722,682.15z"/>
+<linearGradient id="path3373_2_" gradientUnits="userSpaceOnUse" x1="621.335" y1="-3225.8447" x2="598.6064" y2="-3215.897" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#ACACAC"/>
+	<stop  offset="1" style="stop-color:#877D7C"/>
+</linearGradient>
+<path id="path3373_1_" class="st22" d="M759.1,657.046l158.331,241.119l-118.187,43.941L759.1,657.046z"/>
+<linearGradient id="path3292_2_" gradientUnits="userSpaceOnUse" x1="634.895" y1="-2900.3848" x2="898.5454" y2="-3227.6746" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#7D7D7D"/>
+	<stop  offset="1" style="stop-color:#818181"/>
+</linearGradient>
+<path id="path3292_1_" class="st6" d="M865.494,1117.352l272.563-321.498l-33.495-41.825l-270.847,332.403L865.494,1117.352z"/>
+<linearGradient id="path3316_2_" gradientUnits="userSpaceOnUse" x1="975.0586" y1="-3153.8574" x2="1027.5601" y2="-3209.0376" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#848484"/>
+	<stop  offset="0.2936" style="stop-color:#D2D2D2"/>
+	<stop  offset="1" style="stop-color:#ECECEC"/>
+</linearGradient>
+<path id="path3316_1_" class="st19" d="M1303.627,952.146l-129.742-196.791l-83.994-11.476l-6.504,21.499L1303.627,952.146z"/>
+<linearGradient id="path3303_2_" gradientUnits="userSpaceOnUse" x1="897.3359" y1="-3130.7104" x2="1090.8107" y2="-3164.666" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#808080"/>
+	<stop  offset="0.0979" style="stop-color:#D1D1D1"/>
+	<stop  offset="1" style="stop-color:#ECE4D7"/>
+</linearGradient>
+<path id="path3303_1_" class="st31" d="M1303.41,952.342l-211.633-175.228l18.205-19.354l5.36,3.226L1303.41,952.342
+	L1303.41,952.342z"/>
+<linearGradient id="path2429_2_" gradientUnits="userSpaceOnUse" x1="7.7139" y1="-3795.7832" x2="275.9096" y2="-3300.3032" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#E6E5E0"/>
+	<stop  offset="1" style="stop-color:#F2EEEF"/>
+</linearGradient>
+<path id="path2429_1_" class="st3" d="M205.652,143.872l290.951,660.35l119.131,6.258L205.652,143.872z"/>
+<linearGradient id="path2460_2_" gradientUnits="userSpaceOnUse" x1="900.4668" y1="-3090.0889" x2="648.6813" y2="-3042.946" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#FFFFFF"/>
+	<stop  offset="0.9135" style="stop-color:#E6E6E6"/>
+	<stop  offset="1" style="stop-color:#858585"/>
+</linearGradient>
+<path id="path2460_1_" class="st25" d="M823.172,1140.922l291.43-380.356l-25.713-17.142L756.745,955.566L823.172,1140.922
+	L823.172,1140.922z"/>
+<linearGradient id="path2477_2_" gradientUnits="userSpaceOnUse" x1="755.0024" y1="-3051.8447" x2="680.5519" y2="-3074.7996" gradientTransform="matrix(1 0 0 1 222.5278 4001)">
+	<stop  offset="0" style="stop-color:#F6F6F6"/>
+	<stop  offset="0.8583" style="stop-color:#E8E8E8"/>
+	<stop  offset="1" style="stop-color:#848484"/>
+</linearGradient>
+<path id="path2477_1_" class="st33" d="M822.51,1139.691l290.197-378.936l-23.914-15.628L877.934,1006.93L822.51,1139.691z"/>
+<linearGradient id="path3262_2_" gradientUnits="userSpaceOnUse" x1="511.0596" y1="-2954.0752" x2="619.0073" y2="-2929.4319" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#F3F3F3"/>
+	<stop  offset="0.9221" style="stop-color:#F6F6F6"/>
+	<stop  offset="1" style="stop-color:#919191"/>
+</linearGradient>
+<path id="path3262_1_" class="st4" d="M822.258,1140.506L708.331,986.807l132.806,11.332l12.996,11.256L822.258,1140.506
+	L822.258,1140.506z"/>
+<linearGradient id="path3279_2_" gradientUnits="userSpaceOnUse" x1="513.9253" y1="-2870.145" x2="570.7205" y2="-3041.8015" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#F3F3F3"/>
+	<stop  offset="0.6192" style="stop-color:#F6F6F6"/>
+	<stop  offset="1" style="stop-color:#919191"/>
+</linearGradient>
+<path id="path3279_1_" class="st16" d="M837.387,1050.443l-129.056-63.637l132.806,11.332l11.859,9.521L837.387,1050.443
+	L837.387,1050.443z"/>
+<linearGradient id="path2440_2_" gradientUnits="userSpaceOnUse" x1="589.332" y1="-3269.6738" x2="473.4179" y2="-3132.5469" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#FFFFFF"/>
+	<stop  offset="0.9007" style="stop-color:#DEDEDE"/>
+	<stop  offset="1" style="stop-color:#9E9E9E"/>
+</linearGradient>
+<path id="path2440_1_" class="st8" d="M530.292,738.309l229.001-80.127l94.618,349.51l-33.463-1.871L530.292,738.309z"/>
+<linearGradient id="path2455_2_" gradientUnits="userSpaceOnUse" x1="638.0103" y1="-3227.4702" x2="516.0342" y2="-3094.1296" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#FFFFFF"/>
+	<stop  offset="0.9007" style="stop-color:#DEDEDE"/>
+	<stop  offset="1" style="stop-color:#9E9E9E"/>
+</linearGradient>
+<path id="path2455_1_" class="st1" d="M718.029,947.681l41.062-290.169l94.819,350.18l-33.463-1.871L718.029,947.681
+	L718.029,947.681z"/>
+<linearGradient id="path2382_2_" gradientUnits="userSpaceOnUse" x1="-248.8364" y1="-3229.5376" x2="482.8853" y2="-3121.2249" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#A1A1A1"/>
+	<stop  offset="0.6384" style="stop-color:#ABABAB"/>
+	<stop  offset="0.8293" style="stop-color:#C7C7C7"/>
+	<stop  offset="1" style="stop-color:#E3E3E3"/>
+</linearGradient>
+<path id="path2382_1_" class="st14" d="M547.716,732.152l-132.961-37.69L42.198,878.373l731.477,153.795l79.407-23.627
+	L705.49,893.335L547.716,732.152L547.716,732.152z"/>
+<linearGradient id="path2414_2_" gradientUnits="userSpaceOnUse" x1="131.9819" y1="-2957.0391" x2="215.4882" y2="-3202.2952" gradientTransform="matrix(1 0 0 1 272.0254 4028.2734)">
+	<stop  offset="0" style="stop-color:#A6A6A6"/>
+	<stop  offset="0.6456" style="stop-color:#B5B5B5"/>
+	<stop  offset="0.8757" style="stop-color:#D4D4D4"/>
+	<stop  offset="1" style="stop-color:#E1E1E1"/>
+</linearGradient>
+<path id="path2414_1_" class="st10" d="M42.198,878.373l731.477,153.795l79.17-23.676L705.489,893.335L42.198,878.373
+	L42.198,878.373z"/>
+<path id="path3817_1_" class="st0" d="M67.316,1935.454l226.709,0.404c3.166,0,5.999-0.471,5.999,6.318l-0.277,74.659H61.594V1941.9
+	C61.594,1938.551,61.918,1935.454,67.316,1935.454z"/>
+<path id="path5906_1_" class="st24" d="M129.544,1973.651c0.009,15.059-12.193,27.273-27.254,27.282
+	c-15.061,0.01-27.277-12.19-27.287-27.25c0-0.011,0-0.021,0-0.032c-0.008-15.062,12.195-27.274,27.254-27.283
+	c15.062-0.01,27.277,12.192,27.287,27.25C129.544,1973.628,129.544,1973.64,129.544,1973.651z"/>
+<path id="path5708_1_" d="M124.441,1951.442c6.047,6.047,9.072,13.452,9.072,22.209c0,8.76-2.971,16.084-8.917,21.977
+	c-6.305,6.202-13.762,9.304-22.363,9.304c-8.496,0-15.82-3.073-21.973-9.228c-6.152-6.151-9.227-13.502-9.227-22.053
+	c0-8.549,3.074-15.953,9.227-22.209c5.996-6.049,13.32-9.072,21.973-9.072C110.994,1942.37,118.395,1945.394,124.441,1951.442z
+	 M84.332,1955.509c-5.111,5.165-7.668,11.213-7.668,18.15s2.531,12.934,7.59,17.992c5.061,5.059,11.085,7.588,18.074,7.588
+	c6.988,0,13.064-2.555,18.229-7.666c4.904-4.746,7.355-10.715,7.355-17.914c0-7.144-2.492-13.207-7.475-18.188
+	c-4.98-4.98-11.015-7.473-18.109-7.473S89.234,1950.503,84.332,1955.509z M97.787,1970.608c-0.782-1.704-1.951-2.555-3.51-2.555
+	c-2.758,0-4.137,1.855-4.137,5.566s1.379,5.565,4.137,5.565c1.82,0,3.121-0.903,3.9-2.715l3.822,2.035
+	c-1.82,3.236-4.554,4.855-8.199,4.855c-2.809,0-5.063-0.861-6.752-2.584c-1.693-1.723-2.538-4.1-2.538-7.127
+	c0-2.975,0.871-5.338,2.613-7.088c1.746-1.747,3.917-2.623,6.521-2.623c3.852,0,6.609,1.519,8.275,4.552L97.787,1970.608z
+	 M115.767,1970.608c-0.783-1.704-1.928-2.555-3.439-2.555c-2.812,0-4.219,1.855-4.219,5.566s1.406,5.565,4.219,5.565
+	c1.824,0,3.101-0.903,3.828-2.715l3.908,2.035c-1.818,3.236-4.549,4.855-8.186,4.855c-2.804,0-5.053-0.861-6.742-2.584
+	c-1.688-1.723-2.532-4.1-2.532-7.127c0-2.975,0.857-5.338,2.572-7.088c1.712-1.747,3.897-2.623,6.547-2.623
+	c3.846,0,6.6,1.519,8.26,4.552L115.767,1970.608z"/>
+<path id="path294_1_" d="M296.008,1934.501H64.992c-2.477,0-4.492,2.015-4.492,4.494v78.49c0,0.561,0.453,1.016,1.014,1.016h237.971
+	c0.561,0,1.016-0.455,1.016-1.016v-78.49C300.5,1936.516,298.484,1934.501,296.008,1934.501z M64.992,1936.53h231.015
+	c1.357,0,2.461,1.104,2.461,2.464c0,0,0,31.637,0,54.49H133.356c-6.051,10.939-17.711,18.369-31.094,18.369
+	c-13.387,0-25.043-7.422-31.089-18.369h-8.645c0-22.854,0-54.49,0-54.49C62.527,1937.636,63.634,1936.53,64.992,1936.53z"/>
+<path id="path298_1_" class="st24" d="M233.027,2009.966c0.16,0.31,0.373,0.559,0.639,0.753c0.266,0.191,0.577,0.333,0.933,0.425
+	c0.36,0.094,0.73,0.142,1.111,0.142c0.259,0,0.537-0.022,0.833-0.066c0.295-0.043,0.573-0.128,0.832-0.25
+	c0.259-0.123,0.477-0.293,0.647-0.51c0.176-0.216,0.261-0.491,0.261-0.825c0-0.358-0.115-0.649-0.344-0.872
+	c-0.229-0.225-0.53-0.408-0.898-0.556c-0.371-0.148-0.791-0.277-1.258-0.391c-0.471-0.111-0.945-0.235-1.428-0.371
+	c-0.494-0.123-0.977-0.273-1.447-0.453c-0.467-0.18-0.886-0.412-1.258-0.697c-0.371-0.283-0.67-0.64-0.898-1.066
+	c-0.229-0.425-0.344-0.943-0.344-1.549c0-0.68,0.146-1.271,0.435-1.772c0.291-0.499,0.672-0.918,1.143-1.252
+	c0.467-0.334,1-0.582,1.594-0.742c0.59-0.16,1.184-0.242,1.777-0.242c0.692,0,1.355,0.078,1.993,0.234
+	c0.637,0.154,1.204,0.404,1.695,0.753c0.496,0.346,0.886,0.788,1.178,1.325c0.289,0.538,0.435,1.191,0.435,1.958h-2.826
+	c-0.026-0.396-0.109-0.724-0.249-0.982c-0.142-0.26-0.332-0.465-0.562-0.613c-0.236-0.147-0.504-0.254-0.805-0.314
+	c-0.303-0.062-0.631-0.094-0.988-0.094c-0.233,0-0.469,0.026-0.7,0.074c-0.237,0.051-0.447,0.138-0.637,0.26
+	c-0.194,0.125-0.352,0.279-0.473,0.463c-0.121,0.188-0.184,0.423-0.184,0.707c0,0.259,0.046,0.471,0.146,0.631
+	c0.1,0.159,0.295,0.309,0.584,0.445c0.289,0.135,0.691,0.271,1.203,0.408c0.514,0.135,1.184,0.309,2.012,0.52
+	c0.247,0.049,0.588,0.138,1.027,0.27c0.438,0.129,0.874,0.335,1.305,0.621c0.433,0.285,0.807,0.665,1.123,1.141
+	c0.314,0.476,0.471,1.086,0.471,1.828c0,0.607-0.117,1.17-0.352,1.689c-0.237,0.52-0.586,0.967-1.049,1.343
+	c-0.463,0.379-1.039,0.672-1.724,0.884c-0.688,0.21-1.482,0.313-2.383,0.313c-0.73,0-1.438-0.09-2.125-0.269
+	c-0.686-0.181-1.293-0.462-1.82-0.846c-0.524-0.385-0.941-0.876-1.25-1.469c-0.309-0.594-0.457-1.299-0.445-2.116h2.826
+	C232.787,2009.28,232.867,2009.657,233.027,2009.966z"/>
+<path id="path300_1_" class="st24" d="M249.438,1999.995l4.957,13.244h-3.027l-1-2.949h-4.957l-1.038,2.949h-2.932l5.01-13.244
+	H249.438z M249.605,2008.116l-1.668-4.855h-0.039l-1.726,4.855H249.605z"/>
+<path id="path304_1_" class="st24" d="M180.492,1999.995c0.633,0,1.208,0.057,1.729,0.168c0.521,0.111,0.967,0.293,1.337,0.546
+	c0.371,0.254,0.66,0.591,0.866,1.01c0.203,0.421,0.307,0.94,0.307,1.56c0,0.668-0.152,1.222-0.457,1.668
+	c-0.301,0.445-0.752,0.809-1.346,1.094c0.818,0.235,1.43,0.647,1.833,1.234c0.402,0.589,0.605,1.295,0.605,2.126
+	c0,0.667-0.129,1.245-0.391,1.733c-0.259,0.488-0.611,0.887-1.05,1.197c-0.439,0.31-0.941,0.538-1.503,0.686
+	c-0.566,0.148-1.145,0.223-1.74,0.223h-6.432v-13.244H180.492L180.492,1999.995z M180.121,2005.353c0.52,0,0.945-0.123,1.281-0.369
+	c0.336-0.248,0.501-0.648,0.501-1.203c0-0.309-0.057-0.562-0.166-0.76c-0.113-0.197-0.262-0.35-0.447-0.461
+	c-0.186-0.111-0.401-0.19-0.641-0.232c-0.243-0.043-0.494-0.064-0.752-0.064h-2.731v3.089L180.121,2005.353L180.121,2005.353z
+	 M180.291,2010.974c0.285,0,0.557-0.027,0.818-0.083c0.257-0.057,0.49-0.148,0.688-0.277c0.2-0.132,0.355-0.308,0.475-0.528
+	c0.12-0.223,0.176-0.506,0.176-0.854c0-0.678-0.192-1.164-0.577-1.455c-0.382-0.289-0.892-0.436-1.523-0.436h-3.18v3.635h3.124
+	V2010.974z"/>
+<path id="path306_1_" class="st24" d="M185.881,1999.995h3.267l3.102,5.23l3.082-5.23h3.246l-4.914,8.162v5.082h-2.922v-5.156
+	L185.881,1999.995z"/>
+<path id="path6318_2_" class="st24" d="M265.307,1964.461c0.008,11.692-9.463,21.176-21.154,21.185
+	c-11.691,0.01-21.176-9.461-21.188-21.153c0-0.01,0-0.021,0-0.031c-0.008-11.691,9.465-21.173,21.156-21.184
+	c11.691-0.008,21.178,9.463,21.186,21.153C265.307,1964.442,265.307,1964.452,265.307,1964.461z"/>
+<path id="path6322_2_" d="M243.984,1941.271c-6.426,0-11.861,2.242-16.313,6.725c-4.566,4.639-6.85,10.127-6.85,16.466
+	s2.283,11.789,6.85,16.349c4.566,4.562,10.004,6.843,16.313,6.843c6.387,0,11.919-2.302,16.605-6.9
+	c4.41-4.367,6.617-9.797,6.617-16.291c0-6.493-2.246-11.982-6.737-16.466C255.98,1943.514,250.486,1941.271,243.984,1941.271z
+	 M244.043,1945.446c5.264,0,9.734,1.855,13.412,5.566c3.713,3.672,5.57,8.154,5.57,13.449c0,5.334-1.816,9.76-5.456,13.276
+	c-3.832,3.787-8.341,5.68-13.527,5.68c-5.188,0-9.656-1.873-13.411-5.621c-3.754-3.75-5.631-8.193-5.631-13.336
+	c0-5.139,1.896-9.623,5.689-13.449C234.328,1947.302,238.779,1945.446,244.043,1945.446z"/>
+<path id="path6324_2_" d="M233.705,1961.188c0.924-5.834,5.034-8.953,10.182-8.953c7.403,0,11.915,5.373,11.915,12.535
+	c0,6.99-4.801,12.42-12.032,12.42c-4.976,0-9.428-3.061-10.238-9.068h5.841c0.174,3.119,2.2,4.217,5.092,4.217
+	c3.295,0,5.438-3.061,5.438-7.742c0-4.908-1.852-7.508-5.324-7.508c-2.542,0-4.742,0.924-5.205,4.1l1.701-0.008l-4.602,4.598
+	l-4.597-4.598L233.705,1961.188z"/>
+<circle id="circle315_1_" class="st24" cx="187.219" cy="1964.935" r="21.473"/>
+<path id="path319_1_" d="M193.436,1958.72c0-0.826-0.672-1.497-1.498-1.497h-9.486c-0.826,0-1.498,0.67-1.498,1.497v9.486h2.645
+	v11.232h7.191v-11.232h2.646V1958.72L193.436,1958.72z"/>
+<circle id="circle321_1_" cx="187.195" cy="1952.729" r="3.243"/>
+<path id="path323_1_" d="M187.164,1941.271c-6.422,0-11.864,2.242-16.313,6.725c-4.566,4.637-6.849,10.127-6.849,16.465
+	s2.283,11.789,6.849,16.351c4.566,4.561,10.005,6.839,16.313,6.839c6.387,0,11.921-2.298,16.603-6.897
+	c4.415-4.367,6.62-9.797,6.62-16.292c0-6.494-2.244-11.982-6.735-16.465C199.164,1943.515,193.667,1941.271,187.164,1941.271z
+	 M187.223,1945.446c5.264,0,9.734,1.855,13.41,5.566c3.717,3.67,5.574,8.154,5.574,13.449c0,5.332-1.819,9.76-5.457,13.277
+	c-3.832,3.787-8.34,5.681-13.527,5.681s-9.656-1.874-13.41-5.624c-3.753-3.748-5.63-8.193-5.63-13.334
+	c0-5.14,1.896-9.622,5.689-13.449C177.507,1947.302,181.96,1945.446,187.223,1945.446z"/>
+</svg>
diff --git a/src/test/resources/30/expanded/valid/svg-cover/EPUB/lorem.css b/src/test/resources/30/expanded/valid/svg-cover/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/svg-cover/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/svg-cover/EPUB/lorem.opf b/src/test/resources/30/expanded/valid/svg-cover/EPUB/lorem.opf
new file mode 100644
index 0000000..642217e
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/svg-cover/EPUB/lorem.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />  
+        <item id="css" href="lorem.css" media-type="text/css" />
+        <item id="c" href="cover.svg" properties="cover-image" media-type="image/svg+xml" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/valid/svg-cover/EPUB/lorem.xhtml b/src/test/resources/30/expanded/valid/svg-cover/EPUB/lorem.xhtml
new file mode 100644
index 0000000..ce440bb
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/svg-cover/EPUB/lorem.xhtml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>
+		<section>
+			<h2>Table of Contents</h2>
+			<nav epub:type="toc">
+				<ol>
+					<li><a href="#ch1">Chapter 1</a></li>
+					<li><a href="#ch2">Chapter 2</a></li>
+				</ol>
+			</nav>
+		</section>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/svg-cover/META-INF/container.xml b/src/test/resources/30/expanded/valid/svg-cover/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/svg-cover/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/svg-cover/mimetype b/src/test/resources/30/expanded/valid/svg-cover/mimetype
new file mode 100644
index 0000000..37d8a24
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/svg-cover/mimetype
@@ -0,0 +1 @@
+application/epub+zip    
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/svg-in-spine.txt b/src/test/resources/30/expanded/valid/svg-in-spine.txt
new file mode 100644
index 0000000..3e30ca9
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/svg-in-spine.txt
@@ -0,0 +1,22 @@
+# creation date is not stable between different runs
+[format version] 3.0
+[format name] application/epub+zip
+[title] SVG in Spine
+[creator] ePub Sample project
+[language] en-US
+[publisher] ePub Sample
+[contributor] Takeshi Kanai
+[rights] This work is licensed under a Creative Commons Attribution (CC BY SA) license.
+[unique identifier] code.google.com.epub-samples.svg-in-spine
+
+[items count] 15
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[declared mimetype] image/svg+xml
+[declared mimetype] image/jpeg
+[declared mimetype] image/png
+
+[reference] http://creativecommons.org/licenses/by-sa/3.0/
+[reference] http://creativecommons.org/licenses/by/3.0/
+
+[hasFixedLayout] pre-paginated
diff --git a/src/test/resources/30/expanded/valid/svg-in-spine/META-INF/container.xml b/src/test/resources/30/expanded/valid/svg-in-spine/META-INF/container.xml
new file mode 100755
index 0000000..5e7d7e3
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/svg-in-spine/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
diff --git a/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/Tsuru_wiki-1b.svg b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/Tsuru_wiki-1b.svg
new file mode 100755
index 0000000..4cb6ed9
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/Tsuru_wiki-1b.svg
@@ -0,0 +1,1238 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   version="1.1"
+   width="100%"
+   height="100%"
+   viewBox="0 0 1571 2068"
+   id="svg2958">
+  <defs
+     id="defs2960">
+    <filter
+       x="-0.14593534"
+       y="-0.20076357"
+       width="1.2918707"
+       height="1.401527"
+       color-interpolation-filters="sRGB"
+       id="filter17414">
+      <feGaussianBlur
+         id="feGaussianBlur17416"
+         stdDeviation="9.3373345" />
+    </filter>
+    <linearGradient
+       x1="330.5"
+       y1="205.25"
+       x2="330.5"
+       y2="103.75"
+       id="linearGradient8933"
+       xlink:href="#linearGradient5670"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(116.75852,-17.209644)" />
+    <linearGradient
+       id="linearGradient5670">
+      <stop
+         id="stop5672"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop5676"
+         style="stop-color:#525252;stop-opacity:1"
+         offset="0.5" />
+      <stop
+         id="stop5674"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="Arrow2Mend"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path7228"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker2989"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path2991"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker2993"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path2995"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <linearGradient
+       x1="625.75354"
+       y1="215.99176"
+       x2="604.1344"
+       y2="205.12955"
+       id="linearGradient2957"
+       xlink:href="#linearGradient9100"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.88795942,0.883926,0.88326636,0.88751554,871.7667,-147.24074)" />
+    <linearGradient
+       id="linearGradient9100">
+      <stop
+         id="stop9102"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop9104"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="648.06592"
+       y1="237.39313"
+       x2="609.09961"
+       y2="230.6972"
+       id="linearGradient2955"
+       xlink:href="#linearGradient9100"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0667289,0.44478393,-0.44445116,1.0659584,167.74323,-202.43352)" />
+    <linearGradient
+       id="linearGradient3002">
+      <stop
+         id="stop3004"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3006"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker3008"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path3010"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker3012"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path3014"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker3016"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path3018"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <linearGradient
+       x1="1144.8535"
+       y1="242.76775"
+       x2="1031.1976"
+       y2="129.11174"
+       id="linearGradient3302"
+       xlink:href="#linearGradient9100"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6326536,0.63947585,-0.6395599,0.63264637,152.20253,112.02484)" />
+    <linearGradient
+       id="linearGradient3021">
+      <stop
+         id="stop3023"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3025"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker3027"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path3029"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker3031"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path3033"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <linearGradient
+       x1="553.70715"
+       y1="893.52917"
+       x2="486.02695"
+       y2="747.05707"
+       id="linearGradient3278"
+       xlink:href="#linearGradient9100"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.97079185,0.3125577,-0.31262008,0.97075458,292.61769,-105.17378)" />
+    <linearGradient
+       id="linearGradient3036">
+      <stop
+         id="stop3038"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3040"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="517.60529"
+       y1="826.21625"
+       x2="461.5741"
+       y2="807.81812"
+       id="linearGradient3262"
+       xlink:href="#linearGradient9100"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.97079185,0.3125577,-0.31262008,0.97075458,292.61769,-105.17378)" />
+    <linearGradient
+       id="linearGradient3043">
+      <stop
+         id="stop3045"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3047"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="519.73395"
+       y1="872.08545"
+       x2="434.95486"
+       y2="875.06519"
+       id="linearGradient3254"
+       xlink:href="#linearGradient9100"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.97079185,0.3125577,-0.31262008,0.97075458,292.61769,-105.17378)" />
+    <linearGradient
+       id="linearGradient3050">
+      <stop
+         id="stop3052"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3054"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="533.73145"
+       y1="981.53448"
+       x2="496.93643"
+       y2="847.24878"
+       id="linearGradient3270"
+       xlink:href="#linearGradient9100"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.97079185,0.3125577,-0.31262008,0.97075458,292.61769,-105.17378)" />
+    <linearGradient
+       id="linearGradient3057">
+      <stop
+         id="stop3059"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3061"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker3063"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path3065"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <linearGradient
+       id="linearGradient9100-7">
+      <stop
+         id="stop9102-9"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop9104-3"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3967">
+      <stop
+         id="stop3969"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3971"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3974">
+      <stop
+         id="stop3976"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3978"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="Arrow2Mend-8"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path7228-0"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker3982"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path3984"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <linearGradient
+       id="linearGradient3987">
+      <stop
+         id="stop3989"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3991"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3994">
+      <stop
+         id="stop3996"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3998"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker4000"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path4002"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker4004"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path4006"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <linearGradient
+       id="linearGradient4009">
+      <stop
+         id="stop4011"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop4013"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4016">
+      <stop
+         id="stop4018"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop4020"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4023">
+      <stop
+         id="stop4025"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop4027"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4030">
+      <stop
+         id="stop4032"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop4034"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker4036"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path4038"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker4040"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path4042"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker4044"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path4046"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <linearGradient
+       x1="330.5"
+       y1="205.25"
+       x2="330.5"
+       y2="103.75"
+       id="linearGradient3284"
+       xlink:href="#linearGradient5670"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2,0,0,2,-0.28486,-86.032058)" />
+    <linearGradient
+       x1="625.75354"
+       y1="215.99176"
+       x2="604.1344"
+       y2="205.12955"
+       id="linearGradient3386"
+       xlink:href="#linearGradient9100"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.7759188,1.767852,1.7665327,1.7750311,1509.7315,-346.09425)" />
+    <linearGradient
+       x1="648.06592"
+       y1="237.39313"
+       x2="609.09961"
+       y2="230.6972"
+       id="linearGradient3397"
+       xlink:href="#linearGradient9100"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.1334578,0.88956786,-0.88890232,2.1319168,101.68456,-456.47981)" />
+    <linearGradient
+       x1="1144.8535"
+       y1="242.76775"
+       x2="1031.1976"
+       y2="129.11174"
+       id="linearGradient3420"
+       xlink:href="#linearGradient9100"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.2653072,1.2789517,-1.2791198,1.2652927,70.60316,172.43691)" />
+    <linearGradient
+       x1="553.70715"
+       y1="893.52917"
+       x2="486.02695"
+       y2="747.05707"
+       id="linearGradient3429"
+       xlink:href="#linearGradient9100"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9415837,0.6251154,-0.62524016,1.9415092,351.43348,-261.96033)" />
+    <linearGradient
+       x1="517.60529"
+       y1="826.21625"
+       x2="461.5741"
+       y2="807.81812"
+       id="linearGradient3433"
+       xlink:href="#linearGradient9100"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9415837,0.6251154,-0.62524016,1.9415092,351.43348,-261.96033)" />
+    <linearGradient
+       x1="519.73395"
+       y1="872.08545"
+       x2="434.95486"
+       y2="875.06519"
+       id="linearGradient3436"
+       xlink:href="#linearGradient9100"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9415837,0.6251154,-0.62524016,1.9415092,351.43348,-261.96033)" />
+    <linearGradient
+       x1="533.73145"
+       y1="981.53448"
+       x2="496.93643"
+       y2="847.24878"
+       id="linearGradient3441"
+       xlink:href="#linearGradient9100"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9415837,0.6251154,-0.62524016,1.9415092,351.43348,-261.96033)" />
+  </defs>
+   <!--
+  <metadata
+     id="metadata2963">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  -->
+  <path
+     d="m 212.49824,1789.2483 157.86592,159.7909 156.32966,-161.309 -68.06436,-54.8266 -177.57446,-13.6749 -68.55676,70.0196 z"
+     id="path3841"
+     style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 364.62866,1718.4251 -83.9135,0.286 -67.53302,69.1602 150.11254,145.4137 1.33398,-214.8599 z"
+     id="path3843"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 377.13862,1721.3305 74.1237,-5.1563 75.4315,71.5559 -149.34252,145.9623 -0.21268,-212.3619 z"
+     id="path3845"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 218.6514,1776.1678 145.5757,157.8024 3.28176,-221.1814 2.29412,0.2451 7.104,220.7013 144.2521,-159.0546 -62.84022,-63.0677 -179.8442,2.7611 -59.82326,61.7938 z"
+     id="path3847"
+     style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="M 217.6862,1775.2717 370.2974,1930.521 521.28322,1775.5108 372.25646,1620.8572 217.6862,1775.2717 z"
+     id="path3849"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 375.47308,1918.2714 85.06626,-201.7742"
+     id="path3853"
+     style="fill:none;stroke:#000000;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:7.99999966, 3.99999984, 1.99999992, 3.99999984;stroke-dashoffset:0" />
+  <path
+     d="M 364.79096,1919.107 280.24078,1715.0514"
+     id="path3855"
+     style="fill:none;stroke:#000000;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:7.99999966, 3.99999984, 1.99999992, 3.99999984;stroke-dashoffset:0" />
+  <path
+     d="m 372.95182,1922.8384 c 57.86606,-244.7502 12.57676,-350.4227 11.97676,-352.4227"
+     id="path7534"
+     style="fill:none;stroke:#000000;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#Arrow2Mend)" />
+  <path
+     d="m 608.13628,1785.2751 170.66684,172.7371 169.0142,-174.3862 -177.9797,-160.6422 -161.70134,162.2913 z"
+     id="path8614"
+     style="fill:url(#linearGradient3441);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 772.60832,1708.7084 -90.72002,0.3113 -73.01266,74.7668 162.28498,157.1947 1.4477,-232.2728 z"
+     id="path8616"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 786.13292,1711.8489 80.13624,-5.576 81.54816,77.3531 -161.45988,157.7954 -0.22452,-229.5725 z"
+     id="path8618"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 694.01496,1699.7786 78.15374,241.9436 12.75316,-279.448 0.95524,279.1936 88.02108,-240.1261 -179.88322,-1.5631 z"
+     id="path8620"
+     style="fill:url(#linearGradient3436);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 682.69318,1710.1819 183.34864,1.8231 -12.39588,-185.8873 -170.95276,184.0642 z"
+     id="path8632"
+     style="fill:url(#linearGradient3433);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 769.20746,1939.501 -91.22136,-233.7606 176.15402,-181.7079 -106.12756,205.6098 21.1949,209.8587 z"
+     id="path8634"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 787.5585,1939.4518 110.68222,-218.2397 -44.6711,-196.031 11.37974,184.649 -77.39086,229.6217 z"
+     id="path8636"
+     style="fill:url(#linearGradient3429);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 683.7268,1708.0193 57.39808,19.3472"
+     id="path8638"
+     style="fill:none;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 869.54318,1712.1121 20.66594,7.9744"
+     id="path8640"
+     style="fill:none;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 708.84098,1732.502 c 45.37026,25.1147 88.26632,-18.5886 89.66632,-19.5886"
+     id="path10254"
+     style="fill:none;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
+  <path
+     d="m 890.04404,1726.857 c -17.7355,16.1064 -69.42442,-13.0063 -72.22442,-15.0063"
+     id="path10789"
+     style="fill:none;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
+  <path
+     d="m 279.82482,1713.3248 178.9891,0.8857"
+     id="path3296"
+     style="fill:none;stroke:#000000;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:5.99999976, 5.99999976;stroke-dashoffset:0" />
+  <path
+     d="m 373.0109,1630.3289 -2.65172,287.2965"
+     id="path3298"
+     style="fill:none;stroke:#000000;stroke-width:0.99999982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     d="m 1210.4393,1617.1754 164.8364,166.6139 -166.6554,168.4327 -164.8169,-170.2121 166.6359,-164.8345 z"
+     id="rect2468"
+     style="fill:url(#linearGradient3420);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000048px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1203.7706,1938.253 -159.9982,-156.6983 82.2267,-80.8859 77.7715,237.5842 z"
+     id="path2472"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999964px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1212.8579,1938.302 161.6899,-154.9717 -81.3436,-81.7639 -80.3463,236.7356 z"
+     id="path2470"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999964px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1115.4747,1714.2426 186.2836,1.9086 -90.5479,-227.6573 -95.7357,225.7487 z"
+     id="path2474"
+     style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999964px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1204.2564,1939.1642 6.055,-452.4925 -96.7643,226.9421 90.7093,225.5504 z"
+     id="path2462"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999964px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1212.7596,1939.2098 -1.1418,-452.5311 94.2947,227.9677 -93.1529,224.5634 z"
+     id="path2466"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999964px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1120.0209,1713.8127 79.5133,0.4268"
+     id="path2490"
+     style="fill:none;stroke:#000000;stroke-width:0.99999982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     d="m 1219.027,1714.3806 79.5133,0.4269"
+     id="path3293"
+     style="fill:none;stroke:#000000;stroke-width:0.99999982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     d="m 1368.7979,1655.5979 c 29.2227,-28.0418 58.9446,-21.5525 74.4347,-10.4649"
+     id="path3358"
+     style="fill:none;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
+  <path
+     d="m 1428.4234,1651.4019 a 16.7655,15.468547 0 0 1 -33.531,0 16.7655,15.468547 0 1 1 33.531,0 z"
+     id="path3360"
+     style="fill:none;stroke:#000000;stroke-width:1.99999976;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+  <rect
+     width="189.01894"
+     height="188.99692"
+     x="1382.5045"
+     y="122.16998"
+     transform="matrix(0.70540795,0.70880155,-0.7087146,0.7054953,0,0)"
+     id="rect2893"
+     style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 884.3865,1321.6511 1.8844,-255.5086 -131.9086,132.7916 130.0242,122.717 z"
+     id="path2895"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 684.10356,781.66469 299.71758,-0.75752 -3.68686,-294.62328 -296.03072,295.3808 z"
+     id="path2897"
+     style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999964px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <rect
+     width="298.22162"
+     height="298.10223"
+     x="271.45688"
+     y="495.99612"
+     transform="matrix(0.99999726,0.00233883,-0.00233703,0.99999727,0,0)"
+     id="rect2899"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="M 270.01638,793.93603 568.3583,497.10339"
+     id="path2901"
+     style="fill:none;stroke:#000000;stroke-width:1.99999964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:5.9999993, 5.9999993;stroke-dashoffset:0" />
+  <path
+     d="m 681.91246,783.11805 298.58728,-297.19792 -0.6962,297.89462 -297.89108,-0.6967 z"
+     id="path2903"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999964px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="M 977.25456,782.35031 830.29404,634.69923"
+     id="path2905"
+     style="fill:none;stroke:#000000;stroke-width:1.99999964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:5.9999992, 5.9999992;stroke-dashoffset:0" />
+  <path
+     d="m 274.99286,501.94493 c 202.52868,85.06602 281.56496,277.77138 283.96496,281.77138"
+     id="path2907"
+     style="fill:none;stroke:#000000;stroke-width:1.99999964px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
+  <path
+     d="M 713.5096,770.27985 C 945.47158,742.38183 970.7989,514.18761 970.8189,513.98761"
+     id="path2909"
+     style="fill:none;stroke:#000000;stroke-width:1.99999964px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
+  <path
+     d="m 1215.3344,807.07539 129.3414,-310.9445 -220.0922,90.78684 90.7508,220.15766 z"
+     id="path2911"
+     style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999964px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1124.4722,586.64621 220.7433,-90.73716 -124.3494,308.68534 -96.3939,-217.94818 z"
+     id="path2913"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999964px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1220.8503,804.56567 c 40.441,-110.02478 63.9463,-191.2941 67.7011,-310.32596 l -165.4901,91.6959 97.789,218.63006 z"
+     id="path2915"
+     style="fill:url(#linearGradient3397);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999964px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="M 1264.2445,647.16731 1124.6662,587.11757"
+     id="path2917"
+     style="fill:none;stroke:#000000;stroke-width:1.99999964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:5.9999992, 5.9999992;stroke-dashoffset:0" />
+  <path
+     d="m 1122.9601,585.14215 164.8272,-92.476 c -50.0937,113.09988 -67.1844,181.20662 -72.1452,315.25346 l -92.682,-222.77746 z"
+     id="path2919"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999964px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1124.0377,585.59153 109.2709,56.92578"
+     id="path2921"
+     style="fill:none;stroke:#000000;stroke-width:1.99999964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:7.99999894, 3.99999946, 1.99999974, 3.99999946;stroke-dashoffset:0" />
+  <path
+     d="m 358.09184,1335.8143 258.34166,-263.4678 -256.69846,-0.6389 -123.17236,128.6928 121.52916,135.4139 z"
+     id="path2923"
+     style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999964px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 359.73598,1071.3893 258.72892,0.6855 -256.87108,252.4188 -1.85784,-253.1043 z"
+     id="path2925"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999964px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 359.93368,1073.801 119.3063,124.3206 -118.80254,127.7874 -0.50376,-252.108 z"
+     id="path2927"
+     style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="M 358.93324,1071.7181 233.79538,1199.8278 357.00982,1321.0333 482.64436,1196.9362 358.93324,1071.718 z"
+     id="path2929"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 358.41418,1080.6908 -1.13658,233.0853"
+     id="path2931"
+     style="fill:none;stroke:#000000;stroke-width:0.99999982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     d="M 884.0749,1320.945 C 798.3597,1227.1098 737.2873,1160.1612 684.6901,1042.2391 l 203.678,24.1495 -4.2932,254.5564 z"
+     id="path2933"
+     style="fill:url(#linearGradient3386);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999964px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="M 771.8149,1185.7499 886.7295,1066.9868"
+     id="path2935"
+     style="fill:none;stroke:#000000;stroke-width:1.99999964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:5.99999924, 5.99999924;stroke-dashoffset:0" />
+  <path
+     d="m 888.1443,1065.5507 -203.3328,-25.2044 c 96.6626,92.9623 145.103,151.614 205.0698,284.1108 l 131.856,-125.1821 -133.593,-133.7243 z"
+     id="path2937"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999964px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 887.2473,1066.4436 -79.5934,110.9932"
+     id="path2939"
+     style="fill:none;stroke:#000000;stroke-width:1.99999964;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:7.999999, 3.9999995, 1.99999976, 3.9999995;stroke-dashoffset:0" />
+  <path
+     d="m 889.8209,1323.1577 -0.3896,-256.217"
+     id="path2941"
+     style="fill:none;stroke:#000000;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:5.99999952, 5.99999952;stroke-dashoffset:0" />
+  <path
+     d="m 568.37202,1256.5211 c 30.57508,29.4802 61.75848,22.7475 78.02908,11.1574"
+     id="path2943"
+     style="fill:none;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
+  <path
+     d="m 630.88705,1261.0677 a 17.580888,16.222515 0.13395795 0 0 -35.16168,-0.082 17.580888,16.222515 0.13395795 1 0 35.16168,0.082 z"
+     id="path2945"
+     style="fill:none;stroke:#000000;stroke-width:1.99999988;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+  <path
+     d="m 1153.9878,433.20683 c 18.3869,10.358 16.0677,38.62016 16.0677,38.62016 l -12.3495,-4e-4 18.4483,22.26182 18.7479,-22.67058 -12.3497,-5.4e-4 c 0,0 -3.667,-27.96762 14.9048,-38.4716 l -21.8405,8.9307 -21.629,-8.66956 z"
+     id="path4180"
+     style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 747.4635,981.81935 c 18.3868,10.35796 16.0678,38.62015 16.0678,38.62015 l -12.3498,-5e-4 18.4484,22.2619 18.7478,-22.6706 -12.3496,-5e-4 c 0,0 -3.667,-27.96767 14.9048,-38.47163 l -21.8406,8.93072 -21.6288,-8.66954 z"
+     id="path4182"
+     style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1089.1135,1182.0357 147.634,150.1997 146.9894,-150.8443 -147.634,-154.0675 -146.9894,154.7121 z"
+     id="path3232"
+     style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1235.4581,1026.679 -145.6998,154.0674 140.3994,136.7015 5.3004,-290.7689 z"
+     id="path3226"
+     style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1238.0369,1027.3236 145.6998,154.0675 -140.3992,136.4735 -5.3006,-290.541 z"
+     id="path3228"
+     style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1094.9157,1169.7877 136.1146,148.3049 5.0726,-290.1244 6.8178,289.9355 135.6586,-148.7607 -142.4764,-144.3979 -141.1872,145.0426 z"
+     id="path3230"
+     style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1236.7767,1024.2599 -142.7638,144.6853 142.718,145.9288 141.9628,-144.9524 -141.917,-145.6617 z"
+     id="path3224"
+     style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1236.3991,1303.98 0,-268.0251"
+     id="path3234"
+     style="fill:none;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1236.3991,1311.2731 83.07,-200.5315"
+     id="path3236"
+     style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:5.9999999, 5.9999999;stroke-dashoffset:0" />
+  <path
+     d="m 1236.3991,1310.3615 -82.6466,-199.5092"
+     id="path3238"
+     style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:5.9999999, 5.9999999;stroke-dashoffset:0" />
+  <path
+     d="m 1130.2923,1185.5758 c 35.0392,-48.5166 90.2936,-48.5166 90.2936,-48.5166 0,0 -43.1254,-17.5198 -79.5124,5.3908"
+     id="path6972"
+     style="fill:none;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
+  <path
+     d="m 1341.2021,1184.7354 c -35.0394,-48.5166 -90.2936,-48.5166 -90.2936,-48.5166 0,0 43.1252,-17.5198 79.5122,5.3908"
+     id="path7501"
+     style="fill:none;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
+  <g
+     transform="matrix(1.9999896,0,0,2.0000104,-153.8019,-51.61277)"
+     id="text2989"
+     style="font-size:11.32046127px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans">
+    <path
+       d="m 223.61708,447.48448 1.82409,0 0,-6.2959 -1.98439,0.39798 0,-1.01707 1.97334,-0.39799 1.11657,0 0,7.31298 1.8241,0 0,0.93968 -4.75371,0 0,-0.93968"
+       id="path3896" />
+    <path
+       d="m 230.60945,447.02016 1.16632,0 0,1.404 -1.16632,0 0,-1.404"
+       id="path3898" />
+  </g>
+  <g
+     transform="matrix(1.9999896,0,0,2.0000104,-153.8019,-51.61277)"
+     id="text2993"
+     style="font-size:11.32046127px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans">
+    <path
+       d="m 434.9812,446.71974 3.89694,0 0,0.93968 -5.24014,0 0,-0.93968 c 0.42378,-0.43852 1.00049,-1.02629 1.73013,-1.7633 0.73332,-0.74069 1.19395,-1.2179 1.3819,-1.43164 0.35744,-0.40166 0.60618,-0.74069 0.74622,-1.01707 0.14371,-0.28006 0.21557,-0.55459 0.21557,-0.82361 0,-0.43851 -0.15477,-0.79596 -0.46431,-1.07235 -0.30587,-0.27637 -0.70569,-0.41456 -1.19949,-0.41456 -0.35008,0 -0.72043,0.0608 -1.11104,0.18241 -0.38693,0.12161 -0.8015,0.30586 -1.2437,0.55275 l 0,-1.12762 c 0.44957 [...]
+       id="path3891" />
+    <path
+       d="m 441.20525,446.25542 1.16631,0 0,1.404 -1.16631,0 0,-1.404"
+       id="path3893" />
+  </g>
+  <g
+     transform="matrix(1.9999896,0,0,2.0000104,-153.8019,-51.61277)"
+     id="text2997"
+     style="font-size:11.32046127px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans">
+    <path
+       d="m 637.25143,443.20973 c 0.53433,0.11424 0.95074,0.35193 1.24923,0.71306 0.30217,0.36114 0.45325,0.80703 0.45326,1.33767 -1e-5,0.8144 -0.28007,1.44454 -0.84019,1.89043 -0.56013,0.44589 -1.3561,0.66883 -2.38791,0.66883 -0.3464,0 -0.70385,-0.035 -1.07235,-0.10502 -0.36482,-0.0663 -0.74254,-0.16767 -1.13315,-0.30402 l 0,-1.07787 c 0.30954,0.18057 0.64857,0.31691 1.01707,0.40904 0.36851,0.0921 0.75359,0.13819 1.15527,0.13819 0.70015,0 1.23264,-0.13819 1.59746,-0.41457 0.3685,-0.2763 [...]
+       id="path3886" />
+    <path
+       d="m 641.0544,446.25542 1.16631,0 0,1.404 -1.16631,0 0,-1.404"
+       id="path3888" />
+  </g>
+  <g
+     transform="matrix(1.9999896,0,0,2.0000104,-1409.8019,444.38723)"
+     id="text3001"
+     style="font-size:11.32046127px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans">
+    <path
+       d="m 827.09108,435.99757 -2.81906,4.40547 2.81906,0 0,-4.40547 m -0.29296,-0.97286 1.404,0 0,5.37833 1.17738,0 0,0.92863 -1.17738,0 0,1.9457 -1.11104,0 0,-1.9457 -3.72558,0 0,-1.07788 3.43262,-5.22908"
+       id="path3881" />
+    <path
+       d="m 831.20912,441.87337 1.16632,0 0,1.404 -1.16632,0 0,-1.404"
+       id="path3883" />
+  </g>
+  <g
+     transform="matrix(1.9999896,0,0,2.0000104,-1409.8019,444.38723)"
+     id="text3005"
+     style="font-size:11.32046127px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans">
+    <path
+       d="m 1071.3355,437.88275 4.3833,0 0,0.93968 -3.3607,0 0,2.02309 c 0.1621,-0.0553 0.3243,-0.0958 0.4864,-0.1216 0.1621,-0.0295 0.3243,-0.0442 0.4864,-0.0442 0.9213,0 1.6509,0.25243 2.189,0.75727 0.538,0.50486 0.807,1.18843 0.807,2.05073 0,0.8881 -0.2764,1.57904 -0.8292,2.07284 -0.5527,0.49011 -1.3321,0.73517 -2.3381,0.73517 -0.3464,0 -0.7002,-0.0295 -1.0613,-0.0884 -0.3575,-0.059 -0.7278,-0.1474 -1.1111,-0.26532 l 0,-1.12209 c 0.3317,0.18056 0.6744,0.31507 1.0282,0.40351 0.3537,0.0 [...]
+       id="path3876" />
+    <path
+       d="m 1078.5324,444.7314 1.1663,0 0,1.40401 -1.1663,0 0,-1.40401"
+       id="path3878" />
+  </g>
+  <g
+     transform="matrix(1.9999896,0,0,2.0000104,-1409.8019,444.38723)"
+     id="text3009"
+     style="font-size:11.32046127px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans">
+    <path
+       d="m 1232.9915,440.89333 c -0.5012,1e-5 -0.8991,0.17136 -1.1939,0.51406 -0.2912,0.34272 -0.4367,0.81256 -0.4367,1.40953 0,0.5933 0.1455,1.06314 0.4367,1.40953 0.2948,0.34271 0.6927,0.51407 1.1939,0.51407 0.5012,0 0.8973,-0.17136 1.1884,-0.51407 0.2948,-0.34639 0.4422,-0.81623 0.4423,-1.40953 -10e-5,-0.59697 -0.1475,-1.06681 -0.4423,-1.40953 -0.2911,-0.3427 -0.6872,-0.51405 -1.1884,-0.51406 m 2.2166,-3.49895 0,1.01707 c -0.2801,-0.13265 -0.5638,-0.23399 -0.8513,-0.30401 -0.2837,-0. [...]
+       id="path3871" />
+    <path
+       d="m 1237.6734,444.06063 1.1663,0 0,1.404 -1.1663,0 0,-1.404"
+       id="path3873" />
+  </g>
+  <g
+     transform="matrix(1.9999896,0,0,2.0000104,-193.8019,424.38723)"
+     id="text3013"
+     style="font-size:11.32046127px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans">
+    <path
+       d="m 200.71049,767.24624 5.30647,0 0,0.47537 -2.99594,7.77729 -1.16632,0 2.81906,-7.31297 -3.96327,0 0,-0.93969"
+       id="path3932" />
+    <path
+       d="m 208.20035,774.0949 1.16632,0 0,1.404 -1.16632,0 0,-1.404"
+       id="path3934" />
+  </g>
+  <g
+     transform="matrix(1.9999896,0,0,2.0000104,-193.8019,424.38723)"
+     id="text3017"
+     style="font-size:11.32046127px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans">
+    <path
+       d="m 415.88382,771.95955 c -0.53065,10e-6 -0.9489,0.14188 -1.25476,0.42563 -0.30218,0.28375 -0.45326,0.67436 -0.45326,1.17184 0,0.49749 0.15108,0.8881 0.45326,1.17185 0.30586,0.28375 0.72411,0.42562 1.25476,0.42562 0.53064,0 0.94889,-0.14187 1.25476,-0.42562 0.30585,-0.28744 0.45878,-0.67805 0.45878,-1.17185 0,-0.49748 -0.15293,-0.88809 -0.45878,-1.17184 -0.30218,-0.28375 -0.72044,-0.42562 -1.25476,-0.42563 m -1.11657,-0.47537 c -0.47906,-0.11791 -0.85309,-0.34086 -1.1221,-0.66883 [...]
+       id="path3927" />
+    <path
+       d="m 420.70386,774.4746 1.16631,0 0,1.404 -1.16631,0 0,-1.404"
+       id="path3929" />
+  </g>
+  <g
+     transform="matrix(1.9999896,0,0,2.0000104,-193.8019,424.38723)"
+     id="text3021"
+     style="font-size:11.32046127px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans">
+    <path
+       d="m 627.74254,774.85013 0,-1.01707 c 0.28007,0.13266 0.56381,0.234 0.85125,0.30401 0.28743,0.07 0.56934,0.10503 0.84572,0.10503 0.737,0 1.29897,-0.2469 1.68591,-0.7407 0.39061,-0.49748 0.61355,-1.25107 0.66883,-2.26077 -0.21374,0.31691 -0.48459,0.56013 -0.81255,0.72964 -0.32797,0.16951 -0.69095,0.25427 -1.08893,0.25426 -0.82546,1e-5 -1.47955,-0.24873 -1.96229,-0.74622 -0.47906,-0.50116 -0.71858,-1.18473 -0.71858,-2.05073 0,-0.84755 0.25058,-1.52744 0.75175,-2.03967 0.50116,-0.512 [...]
+       id="path3922" />
+    <path
+       d="m 634.89522,773.61748 1.16631,0 0,1.404 -1.16631,0 0,-1.404"
+       id="path3924" />
+  </g>
+  <g
+     transform="matrix(2,0,0,2,-233.8019,-51.61277)"
+     id="text3534"
+     style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Georgia;-inkscape-font-specification:Georgia">
+    <path
+       d="m 337.07861,106.18958 c 0.97915,1.02085 1.74477,2.25522 2.29688,3.70312 0.55206,1.43751 0.8281,3.03126 0.82812,4.78125 -2e-5,1.76043 -0.28127,3.35938 -0.84375,4.79688 -0.56252,1.4375 -1.34377,2.66146 -2.34375,3.67187 -0.96877,1 -2.09376,1.77083 -3.375,2.3125 -1.28126,0.54167 -2.64584,0.8125 -4.09375,0.8125 -1.54167,0 -2.96876,-0.28646 -4.28125,-0.85937 -1.30209,-0.58334 -2.42188,-1.39063 -3.35937,-2.42188 -0.93751,-1.01041 -1.67709,-2.23437 -2.21875,-3.67187 -0.53125,-1.44791 - [...]
+       id="path3856"
+       style="font-size:32px" />
+    <path
+       d="m 354.37549,112.31458 c -1e-5,0.53126 -0.13022,1.00522 -0.39063,1.42187 -0.26043,0.40626 -0.66147,0.60939 -1.20312,0.60938 -0.58335,10e-6 -1.03126,-0.15103 -1.34375,-0.45313 -0.30209,-0.30207 -0.45314,-0.6354 -0.45313,-1 -1e-5,-0.22915 0.0156,-0.43749 0.0469,-0.625 0.0417,-0.18749 0.0781,-0.37499 0.10937,-0.5625 -0.48959,10e-6 -1.06251,0.19793 -1.71875,0.59375 -0.65625,0.39585 -1.21355,0.95835 -1.67187,1.6875 l 0,8.96875 c -1e-5,0.36459 0.0677,0.66146 0.20312,0.89063 0.14583,0. [...]
+       id="path3858"
+       style="font-size:32px" />
+    <path
+       d="m 363.12549,125.73645 -7.45313,0 0,-1.03125 c 0.23959,-0.0208 0.48438,-0.0417 0.73438,-0.0625 0.26041,-0.0208 0.48437,-0.0625 0.67187,-0.125 0.29167,-0.0937 0.50521,-0.25521 0.64063,-0.48437 0.14583,-0.23959 0.21874,-0.54688 0.21875,-0.92188 l 0,-9.51562 c -1e-5,-0.33333 -0.0781,-0.63541 -0.23438,-0.90625 -0.14583,-0.28124 -0.35417,-0.51562 -0.625,-0.70313 -0.19792,-0.12499 -0.48437,-0.22915 -0.85937,-0.3125 -0.375,-0.0937 -0.71875,-0.15103 -1.03125,-0.17187 l 0,-1.01563 5.4375 [...]
+       id="path3860"
+       style="font-size:32px" />
+    <path
+       d="m 377.15674,125.73645 -12.46875,0 0,-0.82812 8.71875,-13.3125 -2.15625,0 c -0.90626,10e-6 -1.61459,0.0156 -2.125,0.0469 -0.51042,0.0313 -0.97917,0.13543 -1.40625,0.3125 -0.29167,0.1146 -0.56771,0.44272 -0.82813,0.98438 -0.25,0.54167 -0.46875,1.25001 -0.65625,2.125 l -0.95312,0 0,-4.73438 11.78125,0 0,0.64063 -8.85938,13.5 c 0.375,0.0104 0.78646,0.0208 1.23438,0.0312 0.44791,0 0.93228,0 1.45312,0 0.41666,0 0.84895,-0.005 1.29688,-0.0156 0.45832,-0.0104 1.04166,-0.0365 1.75,-0.07 [...]
+       id="path3862"
+       style="font-size:32px" />
+    <path
+       d="m 395.71924,125.4552 -5.01563,0.34375 -0.23437,-0.21875 0,-1.95312 -0.0937,0 c -0.25001,0.26041 -0.53126,0.54166 -0.84375,0.84375 -0.31251,0.29166 -0.67189,0.55729 -1.07813,0.79687 -0.46876,0.28125 -0.92188,0.49479 -1.35937,0.64063 -0.43751,0.14583 -1.0573,0.21874 -1.85938,0.21875 -1.36459,-1e-5 -2.40625,-0.44271 -3.125,-1.32813 -0.70833,-0.89583 -1.0625,-2.19271 -1.0625,-3.89062 l 0,-7.375 c 0,-0.37499 -0.0729,-0.68749 -0.21875,-0.9375 -0.13542,-0.26041 -0.33854,-0.48437 -0.60 [...]
+       id="path3864"
+       style="font-size:32px" />
+    <path
+       d="m 409.37549,112.31458 c -1e-5,0.53126 -0.13022,1.00522 -0.39063,1.42187 -0.26043,0.40626 -0.66147,0.60939 -1.20312,0.60938 -0.58335,10e-6 -1.03126,-0.15103 -1.34375,-0.45313 -0.30209,-0.30207 -0.45314,-0.6354 -0.45313,-1 -1e-5,-0.22915 0.0156,-0.43749 0.0469,-0.625 0.0417,-0.18749 0.0781,-0.37499 0.10937,-0.5625 -0.48959,10e-6 -1.06251,0.19793 -1.71875,0.59375 -0.65625,0.39585 -1.21355,0.95835 -1.67187,1.6875 l 0,8.96875 c -1e-5,0.36459 0.0677,0.66146 0.20312,0.89063 0.14583,0. [...]
+       id="path3866"
+       style="font-size:32px" />
+    <path
+       d="m 427.15674,125.4552 -5.01563,0.34375 -0.23437,-0.21875 0,-1.95312 -0.0937,0 c -0.25001,0.26041 -0.53126,0.54166 -0.84375,0.84375 -0.31251,0.29166 -0.67189,0.55729 -1.07813,0.79687 -0.46876,0.28125 -0.92188,0.49479 -1.35937,0.64063 -0.43751,0.14583 -1.0573,0.21874 -1.85938,0.21875 -1.36459,-1e-5 -2.40625,-0.44271 -3.125,-1.32813 -0.70833,-0.89583 -1.0625,-2.19271 -1.0625,-3.89062 l 0,-7.375 c 0,-0.37499 -0.0729,-0.68749 -0.21875,-0.9375 -0.13542,-0.26041 -0.33854,-0.48437 -0.60 [...]
+       id="path3868"
+       style="font-size:32px" />
+  </g>
+  <g
+     transform="matrix(2,0,0,2,-233.8019,-51.61277)"
+     id="text3538"
+     style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Georgia;-inkscape-font-specification:Georgia">
+    <path
+       d="m 285.10614,152.57213 -0.4043,0 c -0.0352,-0.14062 -0.0996,-0.30664 -0.19336,-0.49805 -0.0899,-0.1953 -0.19141,-0.3789 -0.30468,-0.55078 -0.1172,-0.17968 -0.2461,-0.33593 -0.38672,-0.46875 -0.13673,-0.13671 -0.26954,-0.21484 -0.39844,-0.23437 -0.1211,-0.0156 -0.27344,-0.0273 -0.45703,-0.0352 -0.1836,-0.008 -0.35352,-0.0117 -0.50977,-0.0117 l -0.33984,0 0,6.65039 c 0,0.12891 0.0273,0.24805 0.082,0.35742 0.0547,0.10547 0.15039,0.1875 0.28711,0.2461 0.0703,0.0273 0.21679,0.0644 0. [...]
+       id="path3763" />
+    <path
+       d="m 290.05145,153.59752 c 0,0.19922 -0.0488,0.37696 -0.14648,0.5332 -0.0977,0.15235 -0.24805,0.22852 -0.45117,0.22852 -0.21876,0 -0.38673,-0.0566 -0.50391,-0.16992 -0.11328,-0.11328 -0.16993,-0.23828 -0.16992,-0.375 -10e-6,-0.0859 0.006,-0.16406 0.0176,-0.23438 0.0156,-0.0703 0.0293,-0.14062 0.041,-0.21094 -0.1836,1e-5 -0.39844,0.0742 -0.64453,0.22266 -0.2461,0.14844 -0.45508,0.35938 -0.62695,0.63281 l 0,3.36328 c 0,0.13672 0.0254,0.24805 0.0762,0.33399 0.0547,0.0859 0.13867,0.15 [...]
+       id="path3765" />
+    <path
+       d="m 295.99872,158.52525 c -0.1836,0.0664 -0.34571,0.11914 -0.48633,0.15821 -0.13672,0.043 -0.29297,0.0644 -0.46875,0.0644 -0.30469,0 -0.54883,-0.0703 -0.73242,-0.21094 -0.17969,-0.14453 -0.29493,-0.35351 -0.3457,-0.62695 l -0.0352,0 c -0.25391,0.28125 -0.52735,0.49609 -0.82031,0.64453 -0.28907,0.14844 -0.63868,0.22266 -1.04883,0.22266 -0.4336,0 -0.79102,-0.13282 -1.07227,-0.39844 -0.27734,-0.26563 -0.41601,-0.61328 -0.41601,-1.04297 0,-0.22265 0.0312,-0.42187 0.0937,-0.59766 0.06 [...]
+       id="path3767" />
+    <path
+       d="m 302.90106,158.52525 -2.01562,0.12891 -0.0879,-0.082 0,-0.53906 -0.0469,-0.0117 c -0.20313,0.22656 -0.45508,0.41211 -0.75586,0.55664 -0.29688,0.14453 -0.60352,0.21679 -0.91992,0.21679 -0.32813,0 -0.64649,-0.0723 -0.95508,-0.21679 -0.30469,-0.14844 -0.57031,-0.35547 -0.79687,-0.6211 -0.23047,-0.26953 -0.41407,-0.59374 -0.55078,-0.97265 -0.13282,-0.37891 -0.19922,-0.79687 -0.19922,-1.25391 0,-0.41796 0.0723,-0.81445 0.21679,-1.18945 0.14453,-0.375 0.34375,-0.70312 0.59766,-0.984 [...]
+       id="path3769" />
+    <path
+       d="m 306.2702,158.63072 -2.79492,0 0,-0.38672 c 0.0898,-0.008 0.18164,-0.0156 0.27539,-0.0234 0.0977,-0.008 0.18164,-0.0234 0.25195,-0.0469 0.10938,-0.0351 0.18946,-0.0957 0.24024,-0.18164 0.0547,-0.0898 0.082,-0.20508 0.082,-0.3457 l 0,-3.56836 c 0,-0.125 -0.0293,-0.23828 -0.0879,-0.33985 -0.0547,-0.10546 -0.13281,-0.19335 -0.23438,-0.26367 -0.0742,-0.0469 -0.18164,-0.0859 -0.32226,-0.11719 -0.14063,-0.0352 -0.26953,-0.0566 -0.38672,-0.0644 l 0,-0.38086 2.03906,-0.1289 0.082,0.08 [...]
+       id="path3771" />
+    <path
+       d="m 310.52411,158.37877 c -0.25391,0.10547 -0.49415,0.19336 -0.7207,0.26367 -0.22657,0.0742 -0.50391,0.11133 -0.83204,0.11133 -0.48437,0 -0.82617,-0.12109 -1.02539,-0.36328 -0.19531,-0.2461 -0.29297,-0.5918 -0.29296,-1.03711 l 0,-3.91406 -1.04297,0 0,-0.5625 1.0664,0 0,-1.79883 1.06641,0 0,1.79883 1.6582,0 0,0.5625 -1.64648,0 0,3.22851 c 0,0.24219 0.008,0.44532 0.0234,0.60938 0.0195,0.16015 0.0625,0.30078 0.1289,0.42187 0.0625,0.11328 0.15625,0.19922 0.28125,0.25781 0.125,0.0586  [...]
+       id="path3773" />
+    <path
+       d="m 313.91083,158.63072 -2.79492,0 0,-0.38672 c 0.0898,-0.008 0.18164,-0.0156 0.27539,-0.0234 0.0976,-0.008 0.18164,-0.0234 0.25195,-0.0469 0.10937,-0.0351 0.18945,-0.0957 0.24023,-0.18164 0.0547,-0.0898 0.082,-0.20508 0.082,-0.3457 l 0,-3.56836 c -1e-5,-0.125 -0.0293,-0.23828 -0.0879,-0.33985 -0.0547,-0.10546 -0.13281,-0.19335 -0.23437,-0.26367 -0.0742,-0.0469 -0.18164,-0.0859 -0.32227,-0.11719 -0.14062,-0.0352 -0.26953,-0.0566 -0.38671,-0.0644 l 0,-0.38086 2.03906,-0.1289 0.082 [...]
+       id="path3775" />
+    <path
+       d="m 320.22723,155.68346 c 0,0.40625 -0.0645,0.80664 -0.19336,1.20117 -0.12891,0.39062 -0.3125,0.72266 -0.55078,0.99609 -0.26953,0.3125 -0.58203,0.54492 -0.9375,0.69727 -0.35547,0.15234 -0.75391,0.22851 -1.19531,0.22851 -0.36719,0 -0.7168,-0.0684 -1.04883,-0.20507 -0.33203,-0.14063 -0.62695,-0.34375 -0.88476,-0.60938 -0.25391,-0.26172 -0.45704,-0.58008 -0.60938,-0.95508 -0.14844,-0.3789 -0.22265,-0.80273 -0.22265,-1.27148 0,-0.90234 0.26171,-1.64062 0.78515,-2.21485 0.52734,-0.574 [...]
+       id="path3777" />
+    <path
+       d="m 327.44598,158.63072 -2.83007,0 0,-0.38672 c 0.0898,-0.008 0.18749,-0.0156 0.29296,-0.0234 0.10938,-0.008 0.19922,-0.0234 0.26954,-0.0469 0.10937,-0.0351 0.18944,-0.0957 0.24023,-0.18164 0.0547,-0.0898 0.082,-0.20508 0.082,-0.3457 l 0,-2.97071 c 0,-0.41015 -0.0977,-0.72655 -0.29297,-0.94921 -0.19141,-0.22266 -0.42578,-0.33398 -0.70312,-0.33399 -0.20704,1e-5 -0.39649,0.0332 -0.56836,0.0996 -0.17188,0.0625 -0.32422,0.14063 -0.45703,0.23438 -0.12891,0.0898 -0.23243,0.1875 -0.3105 [...]
+       id="path3779" />
+    <path
+       d="m 333.61591,158.52525 c -0.1836,0.0664 -0.34571,0.11914 -0.48633,0.15821 -0.13673,0.043 -0.29298,0.0644 -0.46875,0.0644 -0.30469,0 -0.54883,-0.0703 -0.73242,-0.21094 -0.1797,-0.14453 -0.29493,-0.35351 -0.34571,-0.62695 l -0.0351,0 c -0.25391,0.28125 -0.52735,0.49609 -0.82032,0.64453 -0.28906,0.14844 -0.63867,0.22266 -1.04882,0.22266 -0.4336,0 -0.79102,-0.13282 -1.07227,-0.39844 -0.27734,-0.26563 -0.41602,-0.61328 -0.41602,-1.04297 0,-0.22265 0.0312,-0.42187 0.0937,-0.59766 0.06 [...]
+       id="path3781" />
+    <path
+       d="m 336.89716,158.63072 -2.81836,0 0,-0.38672 c 0.0898,-0.008 0.18554,-0.0156 0.28711,-0.0234 0.10156,-0.0117 0.18554,-0.0274 0.25195,-0.0469 0.10937,-0.0351 0.1914,-0.0957 0.24609,-0.18164 0.0547,-0.0898 0.082,-0.20508 0.082,-0.3457 l 0,-6.69141 c 0,-0.14062 -0.0312,-0.27148 -0.0937,-0.39258 -0.0586,-0.12499 -0.13672,-0.22265 -0.23437,-0.29297 -0.0703,-0.0469 -0.19922,-0.0898 -0.38672,-0.1289 -0.1875,-0.0391 -0.33789,-0.0625 -0.45117,-0.0703 l 0,-0.375 2.17383,-0.13477 0.082,0.0 [...]
+       id="path3783" />
+    <path
+       d="m 345.99091,150.73228 c -0.10939,0.004 -0.2461,0.0195 -0.41016,0.0469 -0.16016,0.0234 -0.29688,0.0547 -0.41016,0.0937 -0.13281,0.0469 -0.22266,0.12501 -0.26953,0.23437 -0.0469,0.10939 -0.0703,0.22853 -0.0703,0.35743 l 0,4.92773 c -10e-6,0.25782 -0.0527,0.53125 -0.1582,0.82031 -0.10157,0.28907 -0.25196,0.54688 -0.45118,0.77344 -0.23047,0.26563 -0.50586,0.47266 -0.82617,0.62109 -0.31641,0.14844 -0.67969,0.22266 -1.08984,0.22266 -0.63672,0 -1.1543,-0.17773 -1.55274,-0.5332 -0.3945 [...]
+       id="path3785" />
+    <path
+       d="m 352.22528,158.52525 c -0.1836,0.0664 -0.34571,0.11914 -0.48633,0.15821 -0.13672,0.043 -0.29297,0.0644 -0.46875,0.0644 -0.30469,0 -0.54883,-0.0703 -0.73242,-0.21094 -0.17969,-0.14453 -0.29493,-0.35351 -0.3457,-0.62695 l -0.0352,0 c -0.25391,0.28125 -0.52735,0.49609 -0.82031,0.64453 -0.28907,0.14844 -0.63868,0.22266 -1.04883,0.22266 -0.43359,0 -0.79102,-0.13282 -1.07226,-0.39844 -0.27735,-0.26563 -0.41602,-0.61328 -0.41602,-1.04297 0,-0.22265 0.0312,-0.42187 0.0937,-0.59766 0.0 [...]
+       id="path3787" />
+    <path
+       d="m 358.0788,153.53893 c 0.23046,0.27344 0.40819,0.5918 0.5332,0.95507 0.1289,0.35938 0.19335,0.77149 0.19336,1.23633 -1e-5,0.45704 -0.0762,0.875 -0.22852,1.25391 -0.15235,0.375 -0.35352,0.69531 -0.60351,0.96094 -0.26173,0.26953 -0.55274,0.47656 -0.87305,0.62109 -0.32032,0.14453 -0.66016,0.2168 -1.01953,0.2168 -0.34766,0 -0.63282,-0.0391 -0.85547,-0.11719 -0.22266,-0.0781 -0.4043,-0.16992 -0.54492,-0.27539 l -0.0469,0 0,1.73437 c 0,0.14063 0.0273,0.25781 0.082,0.35157 0.0547,0.09 [...]
+       id="path3789" />
+    <path
+       d="m 365.11591,158.52525 c -0.1836,0.0664 -0.34571,0.11914 -0.48633,0.15821 -0.13673,0.043 -0.29298,0.0644 -0.46875,0.0644 -0.30469,0 -0.54883,-0.0703 -0.73242,-0.21094 -0.1797,-0.14453 -0.29493,-0.35351 -0.34571,-0.62695 l -0.0351,0 c -0.25391,0.28125 -0.52735,0.49609 -0.82032,0.64453 -0.28906,0.14844 -0.63867,0.22266 -1.04882,0.22266 -0.4336,0 -0.79102,-0.13282 -1.07227,-0.39844 -0.27734,-0.26563 -0.41602,-0.61328 -0.41602,-1.04297 0,-0.22265 0.0312,-0.42187 0.0937,-0.59766 0.06 [...]
+       id="path3791" />
+    <path
+       d="m 372.07098,158.63072 -2.83007,0 0,-0.38672 c 0.0898,-0.008 0.18749,-0.0156 0.29296,-0.0234 0.10938,-0.008 0.19922,-0.0234 0.26954,-0.0469 0.10937,-0.0351 0.18944,-0.0957 0.24023,-0.18164 0.0547,-0.0898 0.082,-0.20508 0.082,-0.3457 l 0,-2.97071 c 0,-0.41015 -0.0977,-0.72655 -0.29297,-0.94921 -0.19141,-0.22266 -0.42578,-0.33398 -0.70312,-0.33399 -0.20704,1e-5 -0.39649,0.0332 -0.56836,0.0996 -0.17188,0.0625 -0.32422,0.14063 -0.45703,0.23438 -0.12891,0.0898 -0.23243,0.1875 -0.3105 [...]
+       id="path3793" />
+    <path
+       d="m 377.90106,157.27135 c -0.24219,0.46094 -0.56641,0.82812 -0.97265,1.10156 -0.40626,0.27344 -0.87305,0.41016 -1.40039,0.41016 -0.46485,0 -0.87305,-0.082 -1.22461,-0.2461 -0.34766,-0.16406 -0.63477,-0.38672 -0.86133,-0.66797 -0.22657,-0.28125 -0.39649,-0.60937 -0.50977,-0.98437 -0.10937,-0.375 -0.16406,-0.77148 -0.16406,-1.18945 0,-0.375 0.0586,-0.74219 0.17578,-1.10157 0.12109,-0.36327 0.29687,-0.68945 0.52734,-0.97851 0.22266,-0.27734 0.49805,-0.5 0.82618,-0.66797 0.33203,-0.1 [...]
+       id="path3795" />
+    <path
+       d="m 382.3952,155.80064 c 0.16015,0.14063 0.2832,0.30274 0.36914,0.48633 0.0859,0.1836 0.1289,0.40821 0.12891,0.67383 -1e-5,0.53516 -0.20118,0.97266 -0.60352,1.3125 -0.39844,0.33984 -0.91601,0.50977 -1.55273,0.50977 -0.33594,0 -0.64649,-0.0606 -0.93164,-0.18164 -0.28125,-0.1211 -0.48242,-0.23243 -0.60352,-0.33399 l -0.11718,0.38086 -0.43946,0 -0.0586,-2.00977 0.4043,0 c 0.0312,0.15235 0.0976,0.33008 0.19921,0.53321 0.10157,0.20312 0.22461,0.38672 0.36915,0.55078 0.15234,0.17187 0. [...]
+       id="path3797" />
+    <path
+       d="m 388.86981,157.27135 c -0.24219,0.46094 -0.56641,0.82812 -0.97265,1.10156 -0.40626,0.27344 -0.87305,0.41016 -1.40039,0.41016 -0.46485,0 -0.87305,-0.082 -1.22461,-0.2461 -0.34766,-0.16406 -0.63477,-0.38672 -0.86133,-0.66797 -0.22657,-0.28125 -0.39649,-0.60937 -0.50977,-0.98437 -0.10937,-0.375 -0.16406,-0.77148 -0.16406,-1.18945 0,-0.375 0.0586,-0.74219 0.17578,-1.10157 0.12109,-0.36327 0.29687,-0.68945 0.52734,-0.97851 0.22266,-0.27734 0.49805,-0.5 0.82618,-0.66797 0.33203,-0.1 [...]
+       id="path3799" />
+    <path
+       d="m 402.61591,158.63072 -3.67383,0 0,-0.41601 c 0.1328,-0.004 0.30272,-0.0176 0.50976,-0.041 0.21093,-0.0234 0.35546,-0.0566 0.4336,-0.0996 0.12108,-0.0742 0.20897,-0.1582 0.26367,-0.25195 0.0586,-0.0977 0.0879,-0.21875 0.0879,-0.36328 l 0,-6.04688 -0.0879,0 -2.83594,7.08399 -0.29297,0 -2.70117,-7.23047 -0.0762,0 0,4.96289 c 0,0.48047 0.0293,0.8457 0.0879,1.0957 0.0625,0.25 0.15625,0.42969 0.28125,0.53906 0.0859,0.082 0.26367,0.16016 0.5332,0.23438 0.26953,0.0742 0.44531,0.11328  [...]
+       id="path3801" />
+    <path
+       d="m 409.21942,155.68346 c 0,0.40625 -0.0645,0.80664 -0.19336,1.20117 -0.12891,0.39062 -0.3125,0.72266 -0.55078,0.99609 -0.26954,0.3125 -0.58204,0.54492 -0.9375,0.69727 -0.35547,0.15234 -0.75391,0.22851 -1.19531,0.22851 -0.36719,0 -0.7168,-0.0684 -1.04883,-0.20507 -0.33203,-0.14063 -0.62695,-0.34375 -0.88477,-0.60938 -0.2539,-0.26172 -0.45703,-0.58008 -0.60937,-0.95508 -0.14844,-0.3789 -0.22266,-0.80273 -0.22266,-1.27148 0,-0.90234 0.26172,-1.64062 0.78516,-2.21485 0.52734,-0.5742 [...]
+       id="path3803" />
+    <path
+       d="m 416.38544,158.52525 -2.01563,0.12891 -0.0879,-0.082 0,-0.53906 -0.0469,-0.0117 c -0.20313,0.22656 -0.45509,0.41211 -0.75586,0.55664 -0.29688,0.14453 -0.60352,0.21679 -0.91992,0.21679 -0.32813,0 -0.64649,-0.0723 -0.95508,-0.21679 -0.30469,-0.14844 -0.57032,-0.35547 -0.79688,-0.6211 -0.23047,-0.26953 -0.41406,-0.59374 -0.55078,-0.97265 -0.13281,-0.37891 -0.19922,-0.79687 -0.19922,-1.25391 0,-0.41796 0.0723,-0.81445 0.2168,-1.18945 0.14453,-0.375 0.34375,-0.70312 0.59766,-0.9843 [...]
+       id="path3805" />
+    <path
+       d="m 422.08075,157.27135 c -0.24219,0.46094 -0.56641,0.82812 -0.97266,1.10156 -0.40625,0.27344 -0.87305,0.41016 -1.40039,0.41016 -0.46484,0 -0.87305,-0.082 -1.22461,-0.2461 -0.34765,-0.16406 -0.63476,-0.38672 -0.86132,-0.66797 -0.22657,-0.28125 -0.39649,-0.60937 -0.50977,-0.98437 -0.10938,-0.375 -0.16406,-0.77148 -0.16406,-1.18945 0,-0.375 0.0586,-0.74219 0.17578,-1.10157 0.12109,-0.36327 0.29687,-0.68945 0.52734,-0.97851 0.22266,-0.27734 0.49805,-0.5 0.82617,-0.66797 0.33203,-0.1 [...]
+       id="path3807" />
+    <path
+       d="m 425.46747,158.63072 -2.81836,0 0,-0.38672 c 0.0898,-0.008 0.18555,-0.0156 0.28711,-0.0234 0.10156,-0.0117 0.18554,-0.0274 0.25195,-0.0469 0.10938,-0.0351 0.19141,-0.0957 0.2461,-0.18164 0.0547,-0.0898 0.082,-0.20508 0.082,-0.3457 l 0,-6.69141 c 0,-0.14062 -0.0312,-0.27148 -0.0937,-0.39258 -0.0586,-0.12499 -0.13672,-0.22265 -0.23438,-0.29297 -0.0703,-0.0469 -0.19922,-0.0898 -0.38672,-0.1289 -0.1875,-0.0391 -0.33789,-0.0625 -0.45117,-0.0703 l 0,-0.375 2.17383,-0.13477 0.082,0.0 [...]
+       id="path3809" />
+    <path
+       d="m 282.98505,169.5233 c -10e-6,0.70703 -0.13282,1.32032 -0.39844,1.83984 -0.26563,0.51954 -0.61134,0.94532 -1.03711,1.27735 -0.42969,0.33203 -0.91212,0.58008 -1.44727,0.74414 -0.53516,0.16406 -1.08789,0.24609 -1.6582,0.24609 l -3.44531,0 0,-0.41601 c 0.11328,0 0.25976,-0.01 0.43945,-0.0293 0.18359,-0.0234 0.30469,-0.0488 0.36328,-0.0762 0.11719,-0.0508 0.20117,-0.125 0.25196,-0.22266 0.0547,-0.10156 0.082,-0.22265 0.082,-0.36328 l 0,-6 c 0,-0.13281 -0.0234,-0.25195 -0.0703,-0.35 [...]
+       id="path3811" />
+    <path
+       d="m 286.65302,173.63072 -2.79493,0 0,-0.38672 c 0.0899,-0.008 0.18164,-0.0156 0.27539,-0.0234 0.0977,-0.008 0.18164,-0.0234 0.25196,-0.0469 0.10937,-0.0351 0.18945,-0.0957 0.24023,-0.18164 0.0547,-0.0898 0.082,-0.20508 0.082,-0.3457 l 0,-3.56836 c 0,-0.125 -0.0293,-0.23828 -0.0879,-0.33985 -0.0547,-0.10546 -0.13281,-0.19335 -0.23437,-0.26367 -0.0742,-0.0469 -0.18164,-0.0859 -0.32227,-0.11719 -0.14062,-0.0352 -0.26953,-0.0566 -0.38672,-0.0644 l 0,-0.38086 2.03907,-0.1289 0.082,0.0 [...]
+       id="path3813" />
+    <path
+       d="m 292.81122,173.52525 c -0.1836,0.0664 -0.34571,0.11914 -0.48633,0.15821 -0.13672,0.043 -0.29297,0.0644 -0.46875,0.0644 -0.30469,0 -0.54883,-0.0703 -0.73242,-0.21094 -0.17969,-0.14453 -0.29493,-0.35351 -0.3457,-0.62695 l -0.0352,0 c -0.25391,0.28125 -0.52735,0.49609 -0.82031,0.64453 -0.28907,0.14844 -0.63868,0.22266 -1.04883,0.22266 -0.4336,0 -0.79102,-0.13282 -1.07227,-0.39844 -0.27734,-0.26563 -0.41601,-0.61328 -0.41601,-1.04297 0,-0.22265 0.0312,-0.42187 0.0937,-0.59766 0.06 [...]
+       id="path3815" />
+    <path
+       d="m 298.33661,173.03307 c 0.15624,0.14843 0.27929,0.3164 0.36914,0.5039 0.0898,0.1875 0.13476,0.41992 0.13477,0.69727 -1e-5,0.27734 -0.0606,0.53711 -0.18165,0.77929 -0.12109,0.2461 -0.30469,0.45899 -0.55078,0.63868 -0.26172,0.18359 -0.57422,0.32617 -0.9375,0.42773 -0.36328,0.10156 -0.8125,0.15234 -1.34765,0.15234 -0.875,0 -1.5293,-0.1289 -1.96289,-0.38671 -0.4336,-0.25391 -0.65039,-0.62696 -0.65039,-1.11914 0,-0.39844 0.15625,-0.7129 0.46875,-0.94336 0.31249,-0.23047 0.71093,-0.3 [...]
+       id="path3817" />
+    <path
+       d="m 303.90302,168.59752 c -1e-5,0.19922 -0.0488,0.37696 -0.14649,0.5332 -0.0977,0.15235 -0.24805,0.22852 -0.45117,0.22852 -0.21876,0 -0.38672,-0.0566 -0.50391,-0.16992 -0.11328,-0.11328 -0.16992,-0.23828 -0.16992,-0.375 0,-0.0859 0.006,-0.16406 0.0176,-0.23438 0.0156,-0.0703 0.0293,-0.14062 0.041,-0.21094 -0.18359,1e-5 -0.39844,0.0742 -0.64453,0.22266 -0.24609,0.14844 -0.45508,0.35938 -0.62695,0.63281 l 0,3.36328 c 0,0.13672 0.0254,0.24805 0.0762,0.33399 0.0547,0.0859 0.13867,0.1 [...]
+       id="path3819" />
+    <path
+       d="m 309.85028,173.52525 c -0.1836,0.0664 -0.34571,0.11914 -0.48633,0.15821 -0.13672,0.043 -0.29297,0.0644 -0.46875,0.0644 -0.30469,0 -0.54883,-0.0703 -0.73242,-0.21094 -0.17969,-0.14453 -0.29493,-0.35351 -0.3457,-0.62695 l -0.0352,0 c -0.25391,0.28125 -0.52735,0.49609 -0.82031,0.64453 -0.28907,0.14844 -0.63868,0.22266 -1.04883,0.22266 -0.43359,0 -0.79102,-0.13282 -1.07226,-0.39844 -0.27735,-0.26563 -0.41602,-0.61328 -0.41602,-1.04297 0,-0.22265 0.0312,-0.42187 0.0937,-0.59766 0.0 [...]
+       id="path3821" />
+    <path
+       d="m 320.32098,173.63072 -2.81836,0 0,-0.38672 c 0.0898,-0.008 0.17968,-0.0156 0.26954,-0.0234 0.0937,-0.008 0.17577,-0.0234 0.24609,-0.0469 0.10937,-0.0351 0.18944,-0.0957 0.24023,-0.18164 0.0547,-0.0898 0.082,-0.20508 0.082,-0.3457 l 0,-2.98242 c -1e-5,-0.40625 -0.0938,-0.71875 -0.28125,-0.9375 -0.18361,-0.22266 -0.41408,-0.33398 -0.69141,-0.33399 -0.19141,1e-5 -0.3711,0.0293 -0.53906,0.0879 -0.16798,0.0586 -0.32228,0.14063 -0.46289,0.2461 -0.11329,0.0859 -0.20899,0.17969 -0.287 [...]
+       id="path3823" />
+    <path
+       d="m 329.7663,170.73619 c -10e-6,0.86719 -0.27345,1.59571 -0.82032,2.18555 -0.54688,0.58984 -1.18164,0.88476 -1.90429,0.88476 -0.31641,0 -0.62891,-0.0488 -0.9375,-0.14648 -0.30469,-0.0977 -0.5918,-0.22852 -0.86133,-0.39258 l -0.43359,0.67383 -0.36329,-0.082 c 0.0195,-0.28906 0.0332,-0.63672 0.041,-1.04297 0.008,-0.40625 0.0117,-0.79883 0.0117,-1.17774 l 0,-5.71875 c 0,-0.1328 -0.0312,-0.26561 -0.0937,-0.39843 -0.0586,-0.13281 -0.13477,-0.22851 -0.22852,-0.28711 -0.0742,-0.0508 -0. [...]
+       id="path3825" />
+    <path
+       d="m 330.16473,175.51744 c 0,-0.19531 0.0527,-0.35547 0.15821,-0.48047 0.10937,-0.12109 0.24414,-0.18164 0.40429,-0.18164 0.125,0 0.23242,0.0234 0.32227,0.0703 0.0898,0.0469 0.16992,0.10742 0.24023,0.18164 0.0586,0.0586 0.1211,0.13867 0.1875,0.24024 0.0664,0.10156 0.11914,0.18554 0.15821,0.25195 0.19531,-0.10547 0.42773,-0.38086 0.69726,-0.82617 0.27344,-0.44531 0.4707,-0.83594 0.5918,-1.17187 -0.3711,-0.92579 -0.70703,-1.75391 -1.00781,-2.48438 -0.30079,-0.73047 -0.61524,-1.48632 [...]
+       id="path3827" />
+    <path
+       d="m 347.32098,173.63072 -3.46289,0 0,-0.41601 c 0.30469,-0.0195 0.55664,-0.0586 0.75586,-0.11719 0.20312,-0.0586 0.30468,-0.13086 0.30469,-0.2168 -10e-6,-0.0351 -0.004,-0.0781 -0.0117,-0.1289 -0.008,-0.0508 -0.0195,-0.0957 -0.0351,-0.13477 l -0.69141,-1.86328 -2.91211,0 c -0.10938,0.27344 -0.19922,0.51172 -0.26953,0.71484 -0.0664,0.20313 -0.12696,0.39063 -0.18164,0.5625 -0.0508,0.16797 -0.0859,0.30469 -0.10547,0.41016 -0.0195,0.10547 -0.0293,0.19141 -0.0293,0.25781 0,0.15625 0.12 [...]
+       id="path3829" />
+    <path
+       d="m 353.86005,173.63072 -2.83008,0 0,-0.38672 c 0.0898,-0.008 0.18749,-0.0156 0.29297,-0.0234 0.10937,-0.008 0.19921,-0.0234 0.26953,-0.0469 0.10937,-0.0351 0.18945,-0.0957 0.24023,-0.18164 0.0547,-0.0898 0.082,-0.20508 0.082,-0.3457 l 0,-2.97071 c 0,-0.41015 -0.0977,-0.72655 -0.29296,-0.94921 -0.19142,-0.22266 -0.42579,-0.33398 -0.70313,-0.33399 -0.20703,1e-5 -0.39649,0.0332 -0.56836,0.0996 -0.17188,0.0625 -0.32422,0.14063 -0.45703,0.23438 -0.12891,0.0898 -0.23242,0.1875 -0.3105 [...]
+       id="path3831" />
+    <path
+       d="m 360.88544,173.52525 -2.01563,0.12891 -0.0879,-0.082 0,-0.53906 -0.0469,-0.0117 c -0.20313,0.22656 -0.45509,0.41211 -0.75586,0.55664 -0.29688,0.14453 -0.60352,0.21679 -0.91992,0.21679 -0.32813,0 -0.64649,-0.0723 -0.95508,-0.21679 -0.30469,-0.14844 -0.57032,-0.35547 -0.79688,-0.6211 -0.23047,-0.26953 -0.41406,-0.59374 -0.55078,-0.97265 -0.13281,-0.37891 -0.19922,-0.79687 -0.19922,-1.25391 0,-0.41796 0.0723,-0.81445 0.2168,-1.18945 0.14453,-0.375 0.34375,-0.70312 0.59766,-0.9843 [...]
+       id="path3833" />
+    <path
+       d="m 365.87177,168.59752 c -1e-5,0.19922 -0.0488,0.37696 -0.14649,0.5332 -0.0977,0.15235 -0.24805,0.22852 -0.45117,0.22852 -0.21876,0 -0.38672,-0.0566 -0.50391,-0.16992 -0.11328,-0.11328 -0.16992,-0.23828 -0.16992,-0.375 0,-0.0859 0.006,-0.16406 0.0176,-0.23438 0.0156,-0.0703 0.0293,-0.14062 0.041,-0.21094 -0.18359,1e-5 -0.39844,0.0742 -0.64453,0.22266 -0.24609,0.14844 -0.45508,0.35938 -0.62695,0.63281 l 0,3.36328 c 0,0.13672 0.0254,0.24805 0.0762,0.33399 0.0547,0.0859 0.13867,0.1 [...]
+       id="path3835" />
+    <path
+       d="m 371.47919,172.27135 c -0.2422,0.46094 -0.56641,0.82812 -0.97266,1.10156 -0.40625,0.27344 -0.87305,0.41016 -1.40039,0.41016 -0.46485,0 -0.87305,-0.082 -1.22461,-0.2461 -0.34766,-0.16406 -0.63477,-0.38672 -0.86133,-0.66797 -0.22656,-0.28125 -0.39648,-0.60937 -0.50976,-0.98437 -0.10938,-0.375 -0.16407,-0.77148 -0.16407,-1.18945 0,-0.375 0.0586,-0.74219 0.17579,-1.10157 0.12109,-0.36327 0.29687,-0.68945 0.52734,-0.97851 0.22265,-0.27734 0.49804,-0.5 0.82617,-0.66797 0.33203,-0.17 [...]
+       id="path3837" />
+    <path
+       d="m 380.7663,168.22838 c -0.16407,0.0156 -0.34181,0.084 -0.53321,0.20508 -0.18751,0.1211 -0.32422,0.30274 -0.41015,0.54492 -0.19532,0.57422 -0.38087,1.11914 -0.55664,1.63476 -0.17189,0.51173 -0.36525,1.0879 -0.58008,1.72852 -0.0703,0.20313 -0.14259,0.42188 -0.2168,0.65625 -0.0703,0.23437 -0.13477,0.45898 -0.19336,0.67383 l -0.5039,0 -1.55274,-4.25391 -1.56445,4.25391 -0.48047,0 c -0.29297,-0.86719 -0.58008,-1.72656 -0.86133,-2.57813 -0.27734,-0.85546 -0.52344,-1.5996 -0.73828,-2. [...]
+       id="path3839" />
+    <path
+       d="m 392.68427,173.63072 -3.45118,0 0,-0.41601 c 0.0937,-0.008 0.22851,-0.0195 0.4043,-0.0352 0.17968,-0.0156 0.30273,-0.0391 0.36914,-0.0703 0.11718,-0.0469 0.20312,-0.11719 0.25781,-0.21094 0.0547,-0.0977 0.082,-0.22266 0.082,-0.375 l 0,-2.95898 -3.9082,0 0,2.89453 c 0,0.13672 0.0215,0.25195 0.0644,0.3457 0.0469,0.0937 0.13672,0.17578 0.26954,0.24609 0.0664,0.0352 0.18359,0.0703 0.35156,0.10547 0.17187,0.0352 0.30663,0.0547 0.4043,0.0586 l 0,0.41601 -3.45118,0 0,-0.41601 c 0.093 [...]
+       id="path3842" />
+    <path
+       d="m 399.8913,173.52525 -1.88086,0.12891 -0.0879,-0.082 0,-0.73242 -0.0352,0 c -0.0937,0.0977 -0.19922,0.20312 -0.31641,0.3164 -0.11719,0.10938 -0.25195,0.20899 -0.40429,0.29883 -0.17579,0.10547 -0.34571,0.18555 -0.50977,0.24024 -0.16406,0.0547 -0.39649,0.082 -0.69726,0.082 -0.51173,0 -0.90235,-0.16602 -1.17188,-0.49805 -0.26563,-0.33594 -0.39844,-0.82226 -0.39844,-1.45898 l 0,-2.76563 c 0,-0.14062 -0.0273,-0.25781 -0.082,-0.35156 -0.0508,-0.0976 -0.12695,-0.18164 -0.22851,-0.2519 [...]
+       id="path3844" />
+    <path
+       d="m 406.91669,173.52525 -2.01563,0.12891 -0.0879,-0.082 0,-0.53906 -0.0469,-0.0117 c -0.20313,0.22656 -0.45509,0.41211 -0.75586,0.55664 -0.29688,0.14453 -0.60352,0.21679 -0.91992,0.21679 -0.32813,0 -0.64649,-0.0723 -0.95508,-0.21679 -0.30469,-0.14844 -0.57032,-0.35547 -0.79688,-0.6211 -0.23047,-0.26953 -0.41406,-0.59374 -0.55078,-0.97265 -0.13281,-0.37891 -0.19922,-0.79687 -0.19922,-1.25391 0,-0.41796 0.0723,-0.81445 0.2168,-1.18945 0.14453,-0.375 0.34375,-0.70312 0.59766,-0.9843 [...]
+       id="path3846" />
+    <path
+       d="m 411.29364,170.80064 c 0.16015,0.14063 0.2832,0.30274 0.36914,0.48633 0.0859,0.1836 0.1289,0.40821 0.12891,0.67383 -1e-5,0.53516 -0.20118,0.97266 -0.60352,1.3125 -0.39844,0.33984 -0.91602,0.50977 -1.55273,0.50977 -0.33594,0 -0.64649,-0.0606 -0.93164,-0.18164 -0.28125,-0.1211 -0.48243,-0.23243 -0.60352,-0.33399 l -0.11719,0.38086 -0.43945,0 -0.0586,-2.00977 0.40429,0 c 0.0312,0.15235 0.0977,0.33008 0.19922,0.53321 0.10156,0.20312 0.22461,0.38672 0.36914,0.55078 0.15234,0.17187  [...]
+       id="path3848" />
+    <path
+       d="m 418.2663,170.68346 c -10e-6,0.40625 -0.0645,0.80664 -0.19336,1.20117 -0.12891,0.39062 -0.31251,0.72266 -0.55078,0.99609 -0.26954,0.3125 -0.58204,0.54492 -0.9375,0.69727 -0.35548,0.15234 -0.75391,0.22851 -1.19532,0.22851 -0.36719,0 -0.7168,-0.0684 -1.04882,-0.20507 -0.33204,-0.14063 -0.62696,-0.34375 -0.88477,-0.60938 -0.25391,-0.26172 -0.45703,-0.58008 -0.60938,-0.95508 -0.14843,-0.3789 -0.22265,-0.80273 -0.22265,-1.27148 0,-0.90234 0.26172,-1.64062 0.78515,-2.21485 0.52735,- [...]
+       id="path3850" />
+    <path
+       d="m 425.48505,173.63072 -2.83008,0 0,-0.38672 c 0.0898,-0.008 0.18749,-0.0156 0.29297,-0.0234 0.10937,-0.008 0.19921,-0.0234 0.26953,-0.0469 0.10937,-0.0351 0.18945,-0.0957 0.24023,-0.18164 0.0547,-0.0898 0.082,-0.20508 0.082,-0.3457 l 0,-2.97071 c 0,-0.41015 -0.0977,-0.72655 -0.29296,-0.94921 -0.19142,-0.22266 -0.42579,-0.33398 -0.70313,-0.33399 -0.20703,1e-5 -0.39649,0.0332 -0.56836,0.0996 -0.17188,0.0625 -0.32422,0.14063 -0.45703,0.23438 -0.12891,0.0898 -0.23242,0.1875 -0.3105 [...]
+       id="path3852" />
+  </g>
+  <path
+     d="m 660.71514,334.96793 0,-222.99998"
+     id="path8380"
+     style="fill:none;stroke:url(#linearGradient3284);stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     d="m 534.13737,914.72889 -79.64978,15.9099 -11.96763,6.06092 -2.64104,-4.54569 -4.54569,0 -14.86307,-21.71828 -15.1754,-14.14213 -24.71583,-68.1853 34.10226,16.92006 -4.02907,7.07106 23.27785,5.05077 -2.23429,1.51523 11.36421,0 -0.25832,-3.53554 14.45446,-7.57614 1.53262,-22.4759 25.7916,31.06219 -16.57308,13.63706 17.71428,11.36422 -6.38674,10.35406 21.02427,5.80838 -5.07776,5.55584 38.85615,11.86929 z"
+     transform="matrix(1.3460718,0,0,0.881892,203.47784,-532.29389)"
+     id="path14286"
+     style="fill:#cccccc;fill-opacity:0.8872549;fill-rule:evenodd;stroke:none;filter:url(#filter17414)" />
+  <path
+     d="m 758.5909,134.23603 0,90.63126 15.29706,20.36656 40.79216,-19.0088 -18.01652,-69.5858 -38.0727,-22.40322 z"
+     id="path14288"
+     style="fill:#ffaaaa;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 796.83356,156.80897 -9.77312,8.82552 3.14438,11.37134 10.0281,-7.89204 -3.39936,-12.30482 z"
+     id="path14290"
+     style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 804.14214,230.63783 -16.65678,-64.49418 29.51422,6.30884 2.43962,73.79968 -8.49836,3.73388 -6.7987,-19.34822 z"
+     id="path14292"
+     style="fill:#ffaaaa;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 812.74612,180.89487 4.65346,2.3058 -0.43096,-11.11 -4.37788,2.74744 0.1554,6.05676 z"
+     id="path14294"
+     style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:bevel;stroke-opacity:1" />
+  <path
+     d="m 812.64052,175.30861 -0.67988,74.67744 9.51816,-2.3761 16.31686,-72.98022 -25.15514,0.67888 z"
+     id="path14296"
+     style="fill:#ffaaaa;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 829.97716,170.55641 -14.95712,71.62248 c 0,0 10.53798,3.3944 10.53798,0.67886 0,-2.71554 44.87134,-91.98904 44.87134,-91.98904 l -40.4522,19.6877 z"
+     id="path14298"
+     style="fill:#ff9696;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 866.01022,132.19937 -49.63044,113.03448 17.33666,2.03666 51.67006,-75.01688 -19.37628,-40.05426 z"
+     id="path14300"
+     style="fill:#ff8f8f;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 855.58074,191.91155 29.92608,-19.92188 -32.08938,47.28444 2.1633,-27.36256 z"
+     id="path14302"
+     style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <g
+     transform="matrix(2.237464,0,0,2.2332798,845.5245,141.21851)"
+     id="g14304">
+    <circle
+       cx="37.785"
+       cy="28.500999"
+       r="28.836"
+       id="circle14306"
+       style="fill:#ffffff" />
+    <path
+       d="m 37.441,-3.5 c 8.951,0 16.572,3.125 22.857,9.372 3.008,3.009 5.295,6.448 6.857,10.314 1.561,3.867 2.344,7.971 2.344,12.314 0,4.381 -0.773,8.486 -2.314,12.313 -1.543,3.828 -3.82,7.21 -6.828,10.143 -3.123,3.085 -6.666,5.448 -10.629,7.086 -3.961,1.638 -8.057,2.457 -12.285,2.457 -4.228,0 -8.276,-0.808 -12.143,-2.429 C 21.434,56.452 17.967,54.109 14.9,51.043 11.833,47.977 9.5,44.519 7.9,40.671 6.3,36.823 5.5,32.767 5.5,28.5 5.5,24.271 6.309,20.205 7.928,16.3 9.547,12.395 11.9,8.9 1 [...]
+       id="path14308" />
+  </g>
+  <path
+     d="m 855.47228,191.94133 21.07592,13.23826 -56.0892,48.2009 -3.73928,-3.055 38.75256,-58.38416 z"
+     id="path14310"
+     style="fill:#ff8282;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 876.29324,205.26447 -16.31686,13.57772 -4.5891,12.64424 20.90596,-26.22196 z"
+     id="path14312"
+     style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 888.16784,226.68451 -28.3614,-7.75746 -42.7468,33.09566 1.77316,3.57326 69.33504,-28.91146 z"
+     id="path14314"
+     style="fill:#ff8080;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 826.36806,259.50107 96.0713,-10.53332 -47.93076,-15.27494 -50.81206,17.08704 2.67152,8.72122 z"
+     id="path14316"
+     style="fill:#ff6b6b;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 875.86832,234.03223 12.15264,-7.34044 -61.10318,23.29426 -2.03964,4.75222 50.99018,-20.70604 z"
+     id="path14318"
+     style="fill:#ffaaaa;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 774.90778,244.89441 7.13864,27.49488 31.95382,-15.6144 7.43438,-34.20842 -15.59282,-2.2149 -30.93402,24.54284 z"
+     id="path14320"
+     style="fill:#ff6b6b;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 784.08602,208.23457 -1.35974,64.15472 22.77562,-11.8805 -9.8581,-65.51248 -11.21786,-4.41276 -0.33992,17.65102 z"
+     id="path14322"
+     style="fill:#ff6b6b;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 750.43248,232.33505 33.39254,-42.03268 13.3399,5.13278 -6.60662,1.95432 -40.12582,34.94558 z"
+     id="path14324"
+     style="fill:#ffaaaa;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:bevel;stroke-opacity:1" />
+  <path
+     d="m 751.01982,231.39521 39.54084,-34.20318 6.73038,-1.92018 -46.15108,36.84344"
+     id="path14326"
+     style="fill:#ff8080;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 790.9601,197.10825 -2.79488,82.74878 24.13536,-11.54108 -15.29706,-72.64074 -6.04342,1.43304 z"
+     id="path14328"
+     style="fill:#ffaaaa;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 794.1456,265.71841 -5.86844,13.8013 -0.28192,0.33732 35.18324,-15.61438 3.39934,-10.18328 -32.43222,11.65904 z"
+     id="path14330"
+     style="fill:#ff6b6b;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 794.38362,265.88165 17.91696,-41.01436 c -0.40468,-3.19866 -5.02008,-3.95338 -9.3809,-2.77378 l 7.5143,-6.62304 6.05332,-0.25518 6.69118,4.8998 6.90862,35.6953 -35.70348,10.07126 z"
+     id="path14332"
+     style="fill:#ffaaaa;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:bevel;stroke-opacity:1" />
+  <path
+     d="m 794.28402,265.60043 15.63702,7.1283 114.21798,-23.0821 -85.78766,2.03996 -44.06734,13.91384 z"
+     id="path14334"
+     style="fill:#ffaaaa;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:bevel;stroke-opacity:1" />
+
+</svg>
diff --git a/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/Tsuru_wiki-2b.svg b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/Tsuru_wiki-2b.svg
new file mode 100755
index 0000000..272a752
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/Tsuru_wiki-2b.svg
@@ -0,0 +1,1014 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   version="1.1"
+   width="100%"
+   height="100%"
+   viewBox="0 0 1571 2068"
+   id="svg2958">
+  <defs
+     id="defs2960">
+    <linearGradient
+       id="linearGradient5670">
+      <stop
+         id="stop5672"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop5676"
+         style="stop-color:#525252;stop-opacity:1"
+         offset="0.5" />
+      <stop
+         id="stop5674"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="Arrow2Mend"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path7228"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker2989"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path2991"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker2993"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path2995"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <linearGradient
+       id="linearGradient9100">
+      <stop
+         id="stop9102"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop9104"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3002">
+      <stop
+         id="stop3004"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3006"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker3008"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path3010"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker3012"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path3014"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker3016"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path3018"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <linearGradient
+       id="linearGradient3021">
+      <stop
+         id="stop3023"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3025"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker3027"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path3029"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker3031"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path3033"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <linearGradient
+       id="linearGradient3036">
+      <stop
+         id="stop3038"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3040"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3043">
+      <stop
+         id="stop3045"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3047"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3050">
+      <stop
+         id="stop3052"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3054"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3057">
+      <stop
+         id="stop3059"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3061"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker3063"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path3065"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <linearGradient
+       id="linearGradient9100-7">
+      <stop
+         id="stop9102-9"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop9104-3"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3967">
+      <stop
+         id="stop3969"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3971"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3974">
+      <stop
+         id="stop3976"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3978"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="Arrow2Mend-8"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path7228-0"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker3982"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path3984"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <linearGradient
+       id="linearGradient3987">
+      <stop
+         id="stop3989"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3991"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3994">
+      <stop
+         id="stop3996"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3998"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker4000"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path4002"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker4004"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path4006"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <linearGradient
+       id="linearGradient4009">
+      <stop
+         id="stop4011"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop4013"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4016">
+      <stop
+         id="stop4018"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop4020"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4023">
+      <stop
+         id="stop4025"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop4027"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4030">
+      <stop
+         id="stop4032"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop4034"
+         style="stop-color:#c1c1c1;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker4036"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path4038"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker4040"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path4042"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <marker
+       refX="0"
+       refY="0"
+       orient="auto"
+       id="marker4044"
+       style="overflow:visible">
+      <path
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         id="path4046"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" />
+    </marker>
+    <linearGradient
+       x1="903.54272"
+       y1="856.09998"
+       x2="902.7262"
+       y2="732.52856"
+       id="linearGradient4127"
+       xlink:href="#linearGradient9100-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.907208,-0.00696602,-0.00685224,1.90705,2947.6283,-1873.6146)" />
+    <linearGradient
+       x1="519.73395"
+       y1="872.08545"
+       x2="434.95486"
+       y2="875.06519"
+       id="linearGradient4129"
+       xlink:href="#linearGradient9100-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9609696,0.6369706,-0.6372732,1.9607496,422.40136,-2236.3557)" />
+    <linearGradient
+       x1="517.60529"
+       y1="826.21625"
+       x2="461.5741"
+       y2="807.81812"
+       id="linearGradient4131"
+       xlink:href="#linearGradient9100-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9609696,0.6369706,-0.6372732,1.9607496,422.40136,-2236.3557)" />
+    <linearGradient
+       x1="553.70715"
+       y1="893.52917"
+       x2="486.02695"
+       y2="747.05707"
+       id="linearGradient4133"
+       xlink:href="#linearGradient9100-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9609696,0.6369706,-0.6372732,1.9607496,422.40136,-2236.3557)" />
+    <linearGradient
+       x1="903.54272"
+       y1="856.09998"
+       x2="902.7262"
+       y2="732.52856"
+       id="linearGradient4135"
+       xlink:href="#linearGradient9100-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.907208,-0.00696602,-0.00685224,1.90705,2121.7919,-1217.1762)" />
+    <linearGradient
+       x1="903.54272"
+       y1="856.09998"
+       x2="902.7262"
+       y2="732.52856"
+       id="linearGradient4137"
+       xlink:href="#linearGradient9100-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.907208,-0.00696602,-0.00685224,1.90705,2543.2205,-1219.7477)" />
+    <linearGradient
+       x1="903.54272"
+       y1="856.09998"
+       x2="902.7262"
+       y2="732.52856"
+       id="linearGradient4139"
+       xlink:href="#linearGradient9100-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.907208,-0.00696602,-0.00685224,1.90705,2900.3633,-1214.8905)" />
+    <linearGradient
+       x1="903.54272"
+       y1="856.09998"
+       x2="902.7262"
+       y2="732.52856"
+       id="linearGradient4141"
+       xlink:href="#linearGradient9100-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.907208,-0.00696602,-0.00685224,1.90705,2139.2227,-550.4944)" />
+    <linearGradient
+       x1="903.54272"
+       y1="856.09998"
+       x2="902.7262"
+       y2="732.52856"
+       id="linearGradient4143"
+       xlink:href="#linearGradient9100-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.907208,-0.00696602,-0.00685224,1.90705,2544.9369,-554.78012)" />
+    <linearGradient
+       x1="903.54272"
+       y1="856.09998"
+       x2="902.7262"
+       y2="732.52856"
+       id="linearGradient4947"
+       xlink:href="#linearGradient9100-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.907208,-0.00696602,-0.00685224,1.90705,2544.9369,133.21988)" />
+    <linearGradient
+       x1="903.54272"
+       y1="856.09998"
+       x2="902.7262"
+       y2="732.52856"
+       id="linearGradient4960"
+       xlink:href="#linearGradient9100-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.907208,-0.00696602,-0.00685224,1.90705,2139.2227,137.5056)" />
+    <linearGradient
+       x1="903.54272"
+       y1="856.09998"
+       x2="902.7262"
+       y2="732.52856"
+       id="linearGradient4972"
+       xlink:href="#linearGradient9100-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.907208,-0.00696602,-0.00685224,1.90705,2900.3633,-526.8905)" />
+    <linearGradient
+       x1="903.54272"
+       y1="856.09998"
+       x2="902.7262"
+       y2="732.52856"
+       id="linearGradient4986"
+       xlink:href="#linearGradient9100-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.907208,-0.00696602,-0.00685224,1.90705,2543.2205,-531.7477)" />
+    <linearGradient
+       x1="903.54272"
+       y1="856.09998"
+       x2="902.7262"
+       y2="732.52856"
+       id="linearGradient4997"
+       xlink:href="#linearGradient9100-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.907208,-0.00696602,-0.00685224,1.90705,2121.7919,-529.1762)" />
+    <linearGradient
+       x1="553.70715"
+       y1="893.52917"
+       x2="486.02695"
+       y2="747.05707"
+       id="linearGradient5011"
+       xlink:href="#linearGradient9100-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9609696,0.6369706,-0.6372732,1.9607496,422.40136,-1548.3557)" />
+    <linearGradient
+       x1="517.60529"
+       y1="826.21625"
+       x2="461.5741"
+       y2="807.81812"
+       id="linearGradient5015"
+       xlink:href="#linearGradient9100-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9609696,0.6369706,-0.6372732,1.9607496,422.40136,-1548.3557)" />
+    <linearGradient
+       x1="519.73395"
+       y1="872.08545"
+       x2="434.95486"
+       y2="875.06519"
+       id="linearGradient5018"
+       xlink:href="#linearGradient9100-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9609696,0.6369706,-0.6372732,1.9607496,422.40136,-1548.3557)" />
+    <linearGradient
+       x1="903.54272"
+       y1="856.09998"
+       x2="902.7262"
+       y2="732.52856"
+       id="linearGradient5025"
+       xlink:href="#linearGradient9100-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.907208,-0.00696602,-0.00685224,1.90705,2947.6283,-1185.6146)" />
+  </defs>
+   <!--
+  <metadata
+     id="metadata2963">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>    
+  </metadata>
+   -->
+  <path
+     d="m 922.0403,1607.0536 15.1786,0.178 23.5714,56.4287 -38.75,-56.6073 z"
+     id="path6569"
+     style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:bevel;stroke-opacity:1" />
+  <path
+     d="m 546.0705,1570.4324 c 20.203,37.8808 -44.9518,28.7892 -5.5558,67.1752"
+     id="path6014"
+     style="fill:none;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
+  <path
+     d="m 555.5047,1553.4772 -88.6344,212.1289 -48.381,-10.0494 137.0154,-202.0795 z"
+     id="path5483"
+     style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1246.6748,1097.4158 -56.4286,-7.8571"
+     id="path5451"
+     style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:6, 6;stroke-dashoffset:0;marker-end:none" />
+  <path
+     d="m 1189.5318,1304.5585 c 158.5714,-37.1428 -43.5714,-202.1427 72.1428,-269.9998"
+     id="path5453"
+     style="fill:none;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
+  <path
+     d="m 816.89104,1325.9451 -1.3422,-400.5282 30.6902,-5.719 -29.1854,-73.545 -1.7676,0.13 -67.9942,157.12 69.5992,322.5424 z"
+     id="path2528"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 755.82644,1098.273 56.4286,-7.8572"
+     id="path4896"
+     style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:6, 6;stroke-dashoffset:0;marker-end:none" />
+  <path
+     d="m 812.96924,1305.4157 c -158.57146,-37.1428 43.5714,-202.1427 -72.1428,-269.9998"
+     id="path3838"
+     style="fill:none;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
+  <path
+     d="m 843.11244,674.6875 1.1286,-479.33712 -99.8402,241.49982 98.7116,237.8373 z"
+     id="path3348"
+     style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 858.66504,674.3763 -13.0402,-479.03372 102.537,240.35562 -89.4968,238.6781 z"
+     id="path3350"
+     style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 838.25724,676.8029 10.1814,-235.0829 100.15,-6.0564 -103.8178,-242.47122 -105.1988,246.20662 98.6852,237.4039 z"
+     id="path3346"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 739.56624,439.2422 101.4366,-99.2952 86.4036,94.4712"
+     id="path3356"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1326.5712,434.5476 -197.4768,0.242 98.157,-240.44642 99.3198,240.20442 z"
+     id="path3304"
+     style="fill:url(#linearGradient5025);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1230.3126,672.1109 -2.0908,-479.69052 100.399,241.47902 -98.3082,238.2115 z"
+     id="path3306"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1221.299,672.0781 5.5378,-479.66272 -102.1316,240.73922 96.5938,238.9235 z"
+     id="path3308"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1321.7568,434.0482 -84.2876,-0.3076"
+     id="path3310"
+     style="fill:none;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     d="M 1216.8056,433.7036 1132.518,433.396"
+     id="path3312"
+     style="fill:none;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     d="m 763.40044,435.398 78.3484,244.7533 13.6466,-282.4213 0.2114,282.2007 89.6252,-242.4777 -181.8316,-2.055 z"
+     id="path3324"
+     style="fill:url(#linearGradient5018);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 751.92764,445.8832 185.334,2.3272 -12.0282,-187.9204 -173.3058,185.5932 z"
+     id="path3326"
+     style="fill:url(#linearGradient5015);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 838.76144,677.8987 -91.5798,-236.5173 178.557,-183.1978 -107.8352,207.5418 20.858,212.1733 z"
+     id="path3328"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 857.31164,677.8977 112.4734,-220.2963 -44.6262,-198.2584 11.0044,186.6662 -78.8516,231.8885 z"
+     id="path3330"
+     style="fill:url(#linearGradient5011);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 752.97844,443.7 57.9688,19.707"
+     id="path3332"
+     style="fill:none;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 940.80064,448.3278 20.8686,8.1148"
+     id="path3334"
+     style="fill:none;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 778.29904,468.5129 c 45.795,25.5046 89.2746,-18.5557 91.2746,-20.5557"
+     id="path3336"
+     style="fill:none;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
+  <path
+     d="m 961.48424,463.2856 c -17.9716,16.2329 -70.143,-13.3296 -70.143,-13.3296"
+     id="path3338"
+     style="fill:none;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
+  <path
+     d="M 448.45166,670.7003 611.06564,488.6491 436.5665,318.0224 448.45166,670.7003 z"
+     id="path3431"
+     style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999976px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="M 428.72048,671.3751 262.69456,490.8041 434.9971,319.7758 428.72048,671.3751 z"
+     id="path3433"
+     style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999964px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="M 536.85738,416.697 339.3906,418.7202 435.37442,177.39838 536.85738,416.697 z"
+     id="path3435"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999964px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="M 436.19178,313.8036 261.45976,490.4181 438.11994,668.9607 612.83144,488.5321 436.19178,313.8036 z"
+     id="path3429"
+     style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000048px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="M 437.14872,657.3997 435.74358,325.025"
+     id="path2640"
+     style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     d="m 1231.0232,670.8933 61.6194,-323.2489"
+     id="path2491"
+     style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:6, 6;stroke-dashoffset:0" />
+  <path
+     d="M 1219.9116,666.8527 1162.3328,346.6342"
+     id="path2493"
+     style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:6, 6;stroke-dashoffset:0" />
+  <path
+     d="m 500.73458,1090.9862 -197.47672,0.242 98.15694,-240.4463 99.31978,240.2043 z"
+     id="path3291"
+     style="fill:url(#linearGradient4997);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 404.47594,1328.5493 -2.09084,-479.6902 100.39904,241.4789 -98.3082,238.2113 z"
+     id="path3294"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 395.46234,1328.5165 5.53786,-479.6624 -102.13154,240.7392 96.59368,238.9232 z"
+     id="path3297"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 495.92008,1090.4868 -84.28744,-0.3075"
+     id="path3299"
+     style="fill:none;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     d="m 390.96904,1090.1423 -84.28758,-0.3076"
+     id="path3301"
+     style="fill:none;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  <path
+     d="m 404.0628,1325.6575 63.11904,-317.0954 -63.18816,61.216 0.0692,255.8794 z"
+     id="path3305"
+     style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 395.33742,1326.3705 -60.98974,-317.5118 62.77592,61.6386 -1.78618,255.8732 z"
+     id="path2502"
+     style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="M 396.55854,1070.9757 341.7284,1048.2643"
+     id="path2504"
+     style="fill:none;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 404.13466,1070.4705 54.04318,-15.6574"
+     id="path2506"
+     style="fill:none;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 870.82704,1088.4779 -94.9542,0.6282 46.9706,-240.8956 47.9836,240.2674 z"
+     id="path2508"
+     style="fill:url(#linearGradient4986);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 825.90464,1325.9779 -2.0908,-479.6902 64.5282,157.8372 -62.4374,321.853 z"
+     id="path2510"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 816.89104,1325.9451 5.2852,-479.4098 -67.099,158.5052 61.8138,320.9046 z"
+     id="path2512"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 825.49144,1323.0861 63.119,-317.0954 0,0 -63.1882,61.216 0.07,255.8794 z"
+     id="path2518"
+     style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 816.76604,1323.7991 -60.9898,-317.5118 62.776,61.6386 -1.7862,255.8732 z"
+     id="path2520"
+     style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 817.98724,1068.4043 -54.8302,-22.7114"
+     id="path2522"
+     style="fill:none;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 825.56324,1067.8991 54.0432,-15.6574"
+     id="path2524"
+     style="fill:none;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1146.6754,473.9137 c 32.325,-22.2235 67.6804,-15.1525 67.6804,-15.1525"
+     id="path2513"
+     style="fill:none;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
+  <path
+     d="m 1308.3858,473.4087 c -32.325,-22.2235 -67.6802,-15.1525 -72.6802,-15.1525"
+     id="path3836"
+     style="fill:none;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
+  <path
+     d="m 775.11224,1099.7016 43.5714,-8.5714"
+     id="path4367"
+     style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:8, 4, 2, 4;stroke-dashoffset:0;marker-end:none" />
+  <path
+     d="m 1173.2408,1094.1778 -0.5492,-163.9037 30.6904,-5.719 -29.1856,-73.545 -1.7676,0.13 -67.9942,157.12 20.0598,92.9625 48.7464,-7.0446 z"
+     id="path5425"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1076.542,877.3259 53.011,227.6481 47.5802,-15.1399 -100.5912,-212.5082 z"
+     id="path5449"
+     style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1227.9698,1093.335 -94.9542,0.6282 46.9706,-240.8955 47.9836,240.2673 z"
+     id="path5431"
+     style="fill:url(#linearGradient4972);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1183.0474,1330.8351 -2.0908,-479.6902 64.5282,157.8372 -62.4374,321.853 z"
+     id="path5433"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1176.634,1094.9404 2.6852,-243.5479 -67.0992,158.5052 18.1722,94.3407 46.2418,-9.298 z"
+     id="path5435"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1182.6342,1327.9433 63.119,-317.0954 0,0 -63.188,61.216 0.07,255.8794 z"
+     id="path5437"
+     style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1130.8892,1104.6966 -17.97,-93.5521 62.7758,61.6386 -0.16,22.9105 -44.6458,9.003 z"
+     id="path5439"
+     style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1175.13,1073.2615 -54.8302,-22.7114"
+     id="path5441"
+     style="fill:none;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1182.7062,1072.7563 54.043,-15.6574"
+     id="path5443"
+     style="fill:none;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 1227.389,1098.8444 -43.5714,-8.5714"
+     id="path5455"
+     style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:8, 4, 2, 4;stroke-dashoffset:0;marker-end:none" />
+  <path
+     d="m 412.1003,1758.5741 -0.5492,-163.9039 30.6902,-5.719 -29.1854,-73.545 -1.7676,0.13 -67.99422,157.1201 20.0597,92.9626 48.74652,-7.0446 z"
+     id="path5461"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 315.40146,1541.722 53.01088,224.0769 47.58036,-11.5686 -100.59124,-212.5083 z"
+     id="path5463"
+     style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 466.8293,1757.7313 -94.95422,0.6282 46.97062,-240.8957 47.9836,240.2675 z"
+     id="path5465"
+     style="fill:url(#linearGradient4960);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 420.8647,1756.1249 -1.0486,-240.5839 64.5282,157.8373 -17.069,87.9868 -46.4106,-5.2402 z"
+     id="path5467"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 415.4935,1759.3367 2.685,-243.5481 -67.09908,158.5053 17.99366,92.0194 46.42042,-6.9766 z"
+     id="path5469"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 466.7053,1765.7213 17.9074,-90.4772 0,0 -63.1882,61.216 0.184,22.3478 45.097,6.9134 z"
+     id="path5471"
+     style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 369.03436,1766.7715 -17.25584,-91.2308 62.77598,61.6386 -0.16,22.9106 -45.3602,6.6816 z"
+     id="path5473"
+     style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 413.9895,1737.6577 -54.83026,-22.7114"
+     id="path5475"
+     style="fill:none;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 421.5655,1737.1525 54.0432,-15.6574"
+     id="path5477"
+     style="fill:none;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 516.2431,1611.8444 15.5358,-0.5356"
+     id="path5485"
+     style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 2, 1, 2;stroke-dashoffset:0;marker-end:none" />
+  <path
+     d="m 936.9239,1607.3368 -64.3394,153.9835 -48.381,-10.0494 97.6758,-144.0587 15.0446,0.124 z"
+     id="path6545"
+     style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 817.8145,1754.2883 -0.5492,-163.9039 30.6904,-5.719 -29.1856,-73.545 -1.7676,0.13 -67.994,157.1201 20.0596,92.9626 48.7464,-7.0446 z"
+     id="path6547"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 721.1157,1537.4362 53.011,224.0769 47.5802,-11.5686 -100.5912,-212.5083 z"
+     id="path6549"
+     style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 872.5435,1753.4455 -94.954,0.6282 46.9704,-240.8957 47.9836,240.2675 z"
+     id="path6551"
+     style="fill:url(#linearGradient4947);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 826.5789,1751.8391 -1.0486,-240.5839 64.5282,157.8373 -17.0688,87.9868 -46.4108,-5.2402 z"
+     id="path6553"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 821.2079,1755.0509 2.685,-243.5481 -67.0992,158.5053 17.9938,92.0194 46.4204,-6.9766 z"
+     id="path6555"
+     style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 872.4197,1761.4355 17.9074,-90.4772 0,0 -63.1882,61.216 0.184,22.3478 45.0968,6.9134 z"
+     id="path6557"
+     style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 774.7487,1762.4857 -17.2558,-91.2308 62.7758,61.6386 -0.16,22.9106 -45.36,6.6816 z"
+     id="path6559"
+     style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 819.7037,1733.3719 -54.8302,-22.7114"
+     id="path6561"
+     style="fill:none;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     d="m 827.2799,1732.8667 54.0432,-15.6574"
+     id="path6563"
+     style="fill:none;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <g
+     transform="matrix(2,0,0,2,-1446.4836,-865.819)"
+     id="text3025"
+     style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans">
+    <path
+       d="m 861.93445,780.49188 1.93359,0 0,-6.67383 -2.10351,0.42188 0,-1.07813 2.09179,-0.42187 1.1836,0 0,7.75195 1.93359,0 0,0.9961 -5.03906,0 0,-0.9961"
+       id="path3915" />
+    <path
+       d="m 871.87781,773.51923 c -0.60938,0 -1.06836,0.30078 -1.37696,0.90234 -0.30469,0.59766 -0.45703,1.49805 -0.45703,2.70117 0,1.19922 0.15234,2.09961 0.45703,2.70117 0.3086,0.59766 0.76758,0.89649 1.37696,0.89649 0.61327,0 1.07226,-0.29883 1.37695,-0.89649 0.30859,-0.60156 0.46289,-1.50195 0.46289,-2.70117 0,-1.20312 -0.1543,-2.10351 -0.46289,-2.70117 -0.30469,-0.60156 -0.76368,-0.90234 -1.37695,-0.90234 m 0,-0.9375 c 0.98046,0 1.72851,0.38868 2.24414,1.16601 0.51952,0.77345 0.7792 [...]
+       id="path3917" />
+    <path
+       d="m 876.98718,779.99969 1.23633,0 0,1.48829 -1.23633,0 0,-1.48829"
+       id="path3919" />
+  </g>
+  <g
+     transform="matrix(2,0,0,2,-1446.4836,-865.819)"
+     id="text3029"
+     style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans">
+    <path
+       d="m 1084.6731,779.05792 1.9336,0 0,-6.67383 -2.1035,0.42188 0,-1.07813 2.0918,-0.42187 1.1836,0 0,7.75195 1.9336,0 0,0.9961 -5.0391,0 0,-0.9961"
+       id="path3908" />
+    <path
+       d="m 1092.2903,779.05792 1.9336,0 0,-6.67383 -2.1035,0.42188 0,-1.07813 2.0918,-0.42187 1.1836,0 0,7.75195 1.9335,0 0,0.9961 -5.039,0 0,-0.9961"
+       id="path3910" />
+    <path
+       d="m 1099.7024,778.56573 1.2363,0 0,1.48829 -1.2363,0 0,-1.48829"
+       id="path3912" />
+  </g>
+  <g
+     transform="matrix(2,0,0,2,-1446.4836,-865.819)"
+     id="text3033"
+     style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans">
+    <path
+       d="m 1282.663,778.47162 1.9336,0 0,-6.67383 -2.1036,0.42188 0,-1.07813 2.0918,-0.42187 1.1836,0 0,7.75195 1.9336,0 0,0.99609 -5.039,0 0,-0.99609"
+       id="path3901" />
+    <path
+       d="m 1291.0946,778.47162 4.1309,0 0,0.99609 -5.5547,0 0,-0.99609 c 0.4492,-0.46484 1.0605,-1.08789 1.834,-1.86914 0.7773,-0.78515 1.2656,-1.29101 1.4648,-1.51758 0.3789,-0.42578 0.6426,-0.78515 0.791,-1.07813 0.1524,-0.29686 0.2285,-0.58788 0.2285,-0.87304 0,-0.46484 -0.164,-0.84374 -0.4922,-1.13672 -0.3242,-0.29296 -0.748,-0.43945 -1.2714,-0.43945 -0.3711,0 -0.7637,0.0645 -1.1778,0.19336 -0.4101,0.12891 -0.8496,0.32422 -1.3183,0.58593 l 0,-1.19531 c 0.4765,-0.1914 0.9218,-0.33593 [...]
+       id="path3903" />
+    <path
+       d="m 1297.6923,777.97943 1.2363,0 0,1.48828 -1.2363,0 0,-1.48828"
+       id="path3905" />
+  </g>
+  <g
+     transform="matrix(2,0,0,2,-379.8169,-839.1523)"
+     id="text3037"
+     style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans">
+    <path
+       d="m 343.46155,1088.1251 1.93359,0 0,-6.6738 -2.10351,0.4219 0,-1.0782 2.09179,-0.4218 1.1836,0 0,7.7519 1.93359,0 0,0.9961 -5.03906,0 0,-0.9961"
+       id="path3965" />
+    <path
+       d="m 354.45959,1084.4044 c 0.56641,0.1211 1.00781,0.3731 1.32422,0.7559 0.32031,0.3828 0.48047,0.8555 0.48047,1.4179 0,0.8633 -0.29688,1.5313 -0.89062,2.004 -0.59376,0.4726 -1.43751,0.7089 -2.53125,0.7089 -0.36719,0 -0.7461,-0.037 -1.13672,-0.1113 -0.38672,-0.07 -0.78711,-0.1777 -1.20117,-0.3223 l 0,-1.1425 c 0.32812,0.1914 0.6875,0.3359 1.07812,0.4336 0.39062,0.098 0.79883,0.1464 1.22461,0.1464 0.74218,0 1.30664,-0.1464 1.69336,-0.4394 0.39062,-0.293 0.58593,-0.7188 0.58594,-1.27 [...]
+       id="path3967" />
+    <path
+       d="m 358.49084,1087.6329 1.23633,0 0,1.4883 -1.23633,0 0,-1.4883"
+       id="path3969" />
+  </g>
+  <g
+     transform="matrix(2,0,0,2,-379.8169,-839.1523)"
+     id="text3041"
+     style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans">
+    <path
+       d="m 536.40063,1088.1453 1.9336,0 0,-6.6739 -2.10352,0.4219 0,-1.0781 2.0918,-0.4219 1.18359,0 0,7.752 1.9336,0 0,0.9961 -5.03907,0 0,-0.9961"
+       id="path3958" />
+    <path
+       d="m 547.0647,1081.4246 -2.98828,4.6699 2.98828,0 0,-4.6699 m -0.31055,-1.0313 1.48828,0 0,5.7012 1.24805,0 0,0.9844 -1.24805,0 0,2.0625 -1.17773,0 0,-2.0625 -3.94922,0 0,-1.1426 3.63867,-5.543"
+       id="path3960" />
+    <path
+       d="m 551.42993,1087.6531 1.23633,0 0,1.4883 -1.23633,0 0,-1.4883"
+       id="path3962" />
+  </g>
+  <g
+     transform="matrix(2,0,0,2,-379.8169,-839.1523)"
+     id="text3045"
+     style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans">
+    <path
+       d="m 736.91595,1088.5287 1.9336,0 0,-6.6738 -2.10352,0.4218 0,-1.0781 2.0918,-0.4219 1.18359,0 0,7.752 1.9336,0 0,0.9961 -5.03907,0 0,-0.9961"
+       id="path3951" />
+    <path
+       d="m 744.33978,1080.7767 4.64649,0 0,0.9961 -3.5625,0 0,2.1446 c 0.17187,-0.059 0.34374,-0.1016 0.51562,-0.1289 0.17187,-0.031 0.34375,-0.047 0.51563,-0.047 0.97656,0 1.74999,0.2676 2.32031,0.8027 0.57031,0.5352 0.85546,1.2598 0.85547,2.1738 -10e-6,0.9414 -0.29298,1.6739 -0.87891,2.1973 -0.58594,0.5195 -1.41211,0.7793 -2.47851,0.7793 -0.36719,0 -0.74219,-0.031 -1.125,-0.094 -0.37891,-0.062 -0.77149,-0.1563 -1.17774,-0.2813 l 0,-1.1895 c 0.35156,0.1915 0.71484,0.334 1.08985,0.4278  [...]
+       id="path3953" />
+    <path
+       d="m 751.96869,1088.0365 1.23633,0 0,1.4883 -1.23633,0 0,-1.4883"
+       id="path3955" />
+  </g>
+  <g
+     transform="matrix(2,0,0,2,-1609.8169,-272.48563)"
+     id="text3049"
+     style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans">
+    <path
+       d="m 948.11218,1043.4491 1.9336,0 0,-6.6738 -2.10352,0.4218 0,-1.0781 2.0918,-0.4219 1.18359,0 0,7.752 1.9336,0 0,0.9961 -5.03907,0 0,-0.9961"
+       id="path3944" />
+    <path
+       d="m 958.20203,1039.5995 c -0.53126,0 -0.95313,0.1816 -1.26563,0.5449 -0.30859,0.3633 -0.46289,0.8613 -0.46289,1.4941 0,0.629 0.1543,1.127 0.46289,1.4942 0.3125,0.3633 0.73437,0.5449 1.26563,0.5449 0.53124,0 0.95116,-0.1816 1.25976,-0.5449 0.3125,-0.3672 0.46875,-0.8652 0.46875,-1.4942 0,-0.6328 -0.15625,-1.1308 -0.46875,-1.4941 -0.3086,-0.3633 -0.72852,-0.5449 -1.25976,-0.5449 m 2.34961,-3.709 0,1.0781 c -0.29689,-0.1406 -0.59767,-0.248 -0.90235,-0.3222 -0.30078,-0.074 -0.59961,- [...]
+       id="path3946" />
+    <path
+       d="m 963.16492,1042.9569 1.23633,0 0,1.4883 -1.23633,0 0,-1.4883"
+       id="path3948" />
+  </g>
+  <g
+     transform="matrix(2,0,0,2,-1609.8169,-272.48563)"
+     id="text3053"
+     style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans">
+    <path
+       d="m 1161.2543,1042.439 1.9336,0 0,-6.6739 -2.1035,0.4219 0,-1.0781 2.0917,-0.4219 1.1836,0 0,7.752 1.9336,0 0,0.9961 -5.039,0 0,-0.9961"
+       id="path3937" />
+    <path
+       d="m 1168.3676,1034.687 5.625,0 0,0.5039 -3.1758,8.2442 -1.2364,0 2.9883,-7.752 -4.2011,0 0,-0.9961"
+       id="path3939" />
+    <path
+       d="m 1176.307,1041.9468 1.2363,0 0,1.4883 -1.2363,0 0,-1.4883"
+       id="path3941" />
+  </g>
+</svg>
diff --git a/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/cover.svg b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/cover.svg
new file mode 100755
index 0000000..6635944
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/cover.svg
@@ -0,0 +1,262 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg version="1.1" baseProfile="basic"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+	 width="100%" height="100%" viewBox="0 0 1571 2068"
+	 xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#AAB2AB;}
+	.st1{fill:url(#path2455_2_);stroke:#000000;stroke-width:3;}
+	.st2{fill:url(#path3337_3_);stroke:#000000;stroke-width:3;}
+	.st3{fill:url(#path2429_2_);stroke:#000000;stroke-width:3;}
+	.st4{fill:url(#path3262_2_);stroke:#000000;stroke-width:3;}
+	.st5{opacity:0.6089;}
+	.st6{fill:url(#path3292_2_);stroke:#000000;stroke-width:3;}
+	.st7{fill:url(#path3385_2_);stroke:#000000;stroke-width:4;}
+	.st8{fill:url(#path2440_2_);stroke:#000000;stroke-width:3;}
+	.st9{fill:url(#path2455_3_);stroke:#000000;stroke-width:3;}
+	.st10{fill:url(#path2414_2_);stroke:#000000;stroke-width:3;}
+	.st11{fill:url(#path2429_3_);stroke:#000000;stroke-width:3;}
+	.st13{fill:url(#path3262_3_);stroke:#000000;stroke-width:3;}
+	.st14{fill:url(#path2382_2_);stroke:#000000;stroke-width:3;}
+	.st15{fill:url(#path3292_3_);stroke:#000000;stroke-width:3;}
+	.st16{fill:url(#path3279_2_);}
+	.st17{fill:url(#path3279_3_);}
+	.st18{fill:url(#path3385_3_);stroke:#000000;stroke-width:4;}
+	.st19{fill:url(#path3316_2_);stroke:#000000;stroke-width:4;}
+	.st20{fill:url(#path2440_3_);stroke:#000000;stroke-width:3;}
+	.st21{fill:url(#path2414_3_);stroke:#000000;stroke-width:3;}
+	.st22{fill:url(#path3373_2_);stroke:#000000;stroke-width:3;}
+	.st23{opacity:0.5;}
+	.st24{fill:#FFFFFF;}
+	.st25{fill:url(#path2460_2_);stroke:#000000;stroke-width:3;}
+	.st26{fill:url(#path2382_3_);stroke:#000000;stroke-width:3;}
+	.st27{fill:url(#path3316_3_);stroke:#000000;stroke-width:4;}
+	.st28{fill:none;stroke:#000000;stroke-width:3;}
+	.st29{fill:url(#path3350_2_);}
+	.st30{fill:url(#path3350_3_);}
+	.st31{fill:url(#path3303_2_);stroke:#000000;stroke-width:3;}
+	.st32{fill:url(#path3373_3_);stroke:#000000;stroke-width:3;}
+	.st33{fill:url(#path2477_2_);}
+	.st34{fill:url(#path2477_3_);}
+	.st35{fill:url(#path3337_2_);stroke:#000000;stroke-width:3;}
+	.st36{fill:url(#path2460_3_);stroke:#000000;stroke-width:3;}
+	.st37{fill:url(#path3303_3_);stroke:#000000;stroke-width:3;}
+</style>
+<defs>
+</defs>
+<path d="M830.432,1371.498c24.959-0.574,28.99,21.695,28.99,37.438l-20.351,1.921c0-9.406-1.345-20.351-8.255-20.351
+	c-5.376,0.191-7.104,5.951-7.104,14.015c0,9.6,8.255,20.352,16.318,32.062c9.6,14.398,19.391,28.414,19.391,43.58
+	c0,18.816-6.145,35.518-28.798,35.518c-26.688,0-30.143-20.157-30.143-41.084l20.352-1.92c0,11.711,1.151,23.998,9.791,23.998
+	c6.144,0,8.447-6.719,8.447-15.551c0-9.408-8.831-20.734-16.703-32.639c-9.791-14.398-19.006-28.797-19.006-43.965
+	C803.362,1389.162,810.85,1371.883,830.432,1371.498z"/>
+<path d="M908.188,1373.035h20.16l-21.504,141.109H886.11l-21.503-141.109h20.158l10.367,77.562l0.771,5.951h1.151l0.767-5.951
+	L908.188,1373.035z"/>
+<path d="M970.971,1423.719v-21.692c0,0,0.386-10.367-6.912-10.367c-7.293,0-6.909,10.367-6.909,10.367v84.856
+	c0,0-0.384,10.367,6.909,10.367c7.298,0,6.912-10.367,6.912-10.367v-25.535h-8.256v-17.471h28.992v70.268h-12.289l-2.496-6.719
+	c-3.84,4.799-9.598,8.254-16.125,8.254c-26.303,0-24.383-30.524-24.383-30.524v-83.129c0,0-0.191-30.527,27.645-30.527
+	c27.841,0,27.648,30.527,27.648,30.527v21.692H970.971z"/>
+<path d="M1036.441,1373.035h19.391v19.391h-19.391V1373.035z M1036.441,1514.145v-105.016h19.391v105.016H1036.441z"/>
+<path d="M1090.584,1431.398c0,59.516,0,60.858,0,82.745h-19.391v-105.016h19.391v8.83c1.535-0.959,9.023-10.367,15.742-10.367
+	c10.367,0,14.592,11.904,14.592,20.543v86.01h-19.391v-83.131c0-4.03-2.306-4.606-4.609-4.606
+	C1093.078,1426.406,1090.584,1431.398,1090.584,1431.398z"/>
+<path d="M1191.188,1371.498c24.959-0.574,28.99,21.695,28.99,37.438l-20.35,1.921c0-9.406-1.344-20.351-8.256-20.351
+	c-5.377,0.191-7.104,5.951-7.104,14.015c0,9.6,8.254,20.352,16.318,32.062c9.6,14.398,19.391,28.414,19.391,43.58
+	c0,18.816-6.143,35.518-28.799,35.518c-26.686,0-30.141-20.157-30.141-41.084l20.352-1.92c0,11.711,1.15,23.998,9.789,23.998
+	c6.146,0,8.449-6.719,8.449-15.551c0-9.408-8.832-20.734-16.703-32.639c-9.793-14.398-19.008-28.797-19.008-43.965
+	C1164.117,1389.162,1171.605,1371.883,1191.188,1371.498z"/>
+<path d="M1231.316,1409.129h19.391v6.91c0,0,8.254-8.447,15.357-8.447c10.561,0,14.975,11.904,14.975,20.543v67.004
+	c0,8.64-4.414,20.541-14.975,20.541c-7.104,0-15.357-8.446-15.357-8.446v43.006h-19.391V1409.129z M1250.707,1491.105
+	c0,3.071,2.879,6.336,5.758,6.336s5.185-2.688,5.185-6.336v-58.939c0-3.646-2.306-6.336-5.185-6.336
+	c-2.688,0-5.758,2.688-5.758,6.336C1250.707,1455.973,1250.707,1470.947,1250.707,1491.105z"/>
+<path d="M1295.633,1373.035h19.392v19.391h-19.392V1373.035z M1295.633,1514.145v-105.016h19.392v105.016H1295.633z"/>
+<path d="M1349.777,1431.398c0,59.516,0,60.858,0,82.745h-19.392v-105.016h19.392v8.83c1.535-0.959,9.022-10.367,15.741-10.367
+	c10.367,0,14.591,11.904,14.591,20.543v86.01h-19.392v-83.131c0-4.03-2.305-4.606-4.606-4.606
+	C1352.271,1426.406,1349.777,1431.398,1349.777,1431.398z"/>
+<path d="M1443.66,1476.516v12.097c0,0,0,27.067-25.15,27.067c-24.959,0-24.959-27.645-24.959-27.645v-52.797
+	c0,0,0.193-27.646,25.15-27.646c25.15,0,24.959,27.07,24.959,27.07v30.524h-32.062v22.849c0,0,0,10.559,7.104,10.559
+	c7.297,0,6.912-10.559,6.912-10.559v-11.521L1443.66,1476.516L1443.66,1476.516z M1411.598,1450.021h14.017v-14.783
+	c0,0,0.385-10.752-6.912-10.752c-7.104,0-7.104,10.752-7.104,10.752V1450.021z"/>
+<linearGradient id="path3337_2_" gradientUnits="userSpaceOnUse" x1="932.6846" y1="-3838.2734" x2="600.4062" y2="-3149.8252" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#EAEAEA"/>
+	<stop  offset="0.8138" style="stop-color:#DDDDDD"/>
+	<stop  offset="0.9069" style="stop-color:#B1B1B1"/>
+	<stop  offset="0.9534" style="stop-color:#9B9B9B"/>
+	<stop  offset="1" style="stop-color:#858585"/>
+</linearGradient>
+<path id="path3337_1_" class="st35" d="M1353.061,229.191l-634.88,296.985l-71.595,154.932l263.803,255.067l187.937-113.549
+	L1353.061,229.191z"/>
+<linearGradient id="path3350_2_" gradientUnits="userSpaceOnUse" x1="1157.3047" y1="-3609.6172" x2="428.555" y2="-3364.7397" gradientTransform="matrix(1 0 0 1 224.6709 4002.4297)">
+	<stop  offset="0" style="stop-color:#E7E7E7"/>
+	<stop  offset="0.8711" style="stop-color:#D0D0D0"/>
+	<stop  offset="0.9071" style="stop-color:#FBFBFB"/>
+	<stop  offset="1" style="stop-color:#FDFDFD"/>
+</linearGradient>
+<path id="path3350_1_" class="st29" d="M1350.137,232.287L719.857,527.295l-72.401,154.417l18.715,17.433l96.462,8.794
+	l114.44,25.759l473.062-501.411H1350.137z"/>
+<path id="path3259_1_" class="st28" d="M1350.885,231.45L822.578,792.6"/>
+<linearGradient id="path3385_2_" gradientUnits="userSpaceOnUse" x1="510.9668" y1="-3334.5342" x2="428.7348" y2="-3310.9626" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#FBFBFB"/>
+	<stop  offset="1" style="stop-color:#EEEEEE"/>
+</linearGradient>
+<path id="path3385_1_" class="st7" d="M646.722,682.15l-1.54,18.817l114.366-42.635L646.722,682.15z"/>
+<linearGradient id="path3373_2_" gradientUnits="userSpaceOnUse" x1="621.335" y1="-3225.8447" x2="598.6064" y2="-3215.897" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#ACACAC"/>
+	<stop  offset="1" style="stop-color:#877D7C"/>
+</linearGradient>
+<path id="path3373_1_" class="st22" d="M759.1,657.046l158.331,241.119l-118.187,43.941L759.1,657.046z"/>
+<linearGradient id="path3292_2_" gradientUnits="userSpaceOnUse" x1="634.895" y1="-2900.3848" x2="898.5454" y2="-3227.6746" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#7D7D7D"/>
+	<stop  offset="1" style="stop-color:#818181"/>
+</linearGradient>
+<path id="path3292_1_" class="st6" d="M865.494,1117.352l272.563-321.498l-33.495-41.825l-270.847,332.403L865.494,1117.352z"/>
+<linearGradient id="path3316_2_" gradientUnits="userSpaceOnUse" x1="975.0586" y1="-3153.8574" x2="1027.5601" y2="-3209.0376" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#848484"/>
+	<stop  offset="0.2936" style="stop-color:#D2D2D2"/>
+	<stop  offset="1" style="stop-color:#ECECEC"/>
+</linearGradient>
+<path id="path3316_1_" class="st19" d="M1303.627,952.146l-129.742-196.791l-83.994-11.476l-6.504,21.499L1303.627,952.146z"/>
+<linearGradient id="path3303_2_" gradientUnits="userSpaceOnUse" x1="897.3359" y1="-3130.7104" x2="1090.8107" y2="-3164.666" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#808080"/>
+	<stop  offset="0.0979" style="stop-color:#D1D1D1"/>
+	<stop  offset="1" style="stop-color:#ECE4D7"/>
+</linearGradient>
+<path id="path3303_1_" class="st31" d="M1303.41,952.342l-211.633-175.228l18.205-19.354l5.36,3.226L1303.41,952.342
+	L1303.41,952.342z"/>
+<linearGradient id="path2429_2_" gradientUnits="userSpaceOnUse" x1="7.7139" y1="-3795.7832" x2="275.9096" y2="-3300.3032" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#E6E5E0"/>
+	<stop  offset="1" style="stop-color:#F2EEEF"/>
+</linearGradient>
+<path id="path2429_1_" class="st3" d="M205.652,143.872l290.951,660.35l119.131,6.258L205.652,143.872z"/>
+<linearGradient id="path2460_2_" gradientUnits="userSpaceOnUse" x1="900.4668" y1="-3090.0889" x2="648.6813" y2="-3042.946" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#FFFFFF"/>
+	<stop  offset="0.9135" style="stop-color:#E6E6E6"/>
+	<stop  offset="1" style="stop-color:#858585"/>
+</linearGradient>
+<path id="path2460_1_" class="st25" d="M823.172,1140.922l291.43-380.356l-25.713-17.142L756.745,955.566L823.172,1140.922
+	L823.172,1140.922z"/>
+<linearGradient id="path2477_2_" gradientUnits="userSpaceOnUse" x1="755.0024" y1="-3051.8447" x2="680.5519" y2="-3074.7996" gradientTransform="matrix(1 0 0 1 222.5278 4001)">
+	<stop  offset="0" style="stop-color:#F6F6F6"/>
+	<stop  offset="0.8583" style="stop-color:#E8E8E8"/>
+	<stop  offset="1" style="stop-color:#848484"/>
+</linearGradient>
+<path id="path2477_1_" class="st33" d="M822.51,1139.691l290.197-378.936l-23.914-15.628L877.934,1006.93L822.51,1139.691z"/>
+<linearGradient id="path3262_2_" gradientUnits="userSpaceOnUse" x1="511.0596" y1="-2954.0752" x2="619.0073" y2="-2929.4319" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#F3F3F3"/>
+	<stop  offset="0.9221" style="stop-color:#F6F6F6"/>
+	<stop  offset="1" style="stop-color:#919191"/>
+</linearGradient>
+<path id="path3262_1_" class="st4" d="M822.258,1140.506L708.331,986.807l132.806,11.332l12.996,11.256L822.258,1140.506
+	L822.258,1140.506z"/>
+<linearGradient id="path3279_2_" gradientUnits="userSpaceOnUse" x1="513.9253" y1="-2870.145" x2="570.7205" y2="-3041.8015" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#F3F3F3"/>
+	<stop  offset="0.6192" style="stop-color:#F6F6F6"/>
+	<stop  offset="1" style="stop-color:#919191"/>
+</linearGradient>
+<path id="path3279_1_" class="st16" d="M837.387,1050.443l-129.056-63.637l132.806,11.332l11.859,9.521L837.387,1050.443
+	L837.387,1050.443z"/>
+<linearGradient id="path2440_2_" gradientUnits="userSpaceOnUse" x1="589.332" y1="-3269.6738" x2="473.4179" y2="-3132.5469" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#FFFFFF"/>
+	<stop  offset="0.9007" style="stop-color:#DEDEDE"/>
+	<stop  offset="1" style="stop-color:#9E9E9E"/>
+</linearGradient>
+<path id="path2440_1_" class="st8" d="M530.292,738.309l229.001-80.127l94.618,349.51l-33.463-1.871L530.292,738.309z"/>
+<linearGradient id="path2455_2_" gradientUnits="userSpaceOnUse" x1="638.0103" y1="-3227.4702" x2="516.0342" y2="-3094.1296" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#FFFFFF"/>
+	<stop  offset="0.9007" style="stop-color:#DEDEDE"/>
+	<stop  offset="1" style="stop-color:#9E9E9E"/>
+</linearGradient>
+<path id="path2455_1_" class="st1" d="M718.029,947.681l41.062-290.169l94.819,350.18l-33.463-1.871L718.029,947.681
+	L718.029,947.681z"/>
+<linearGradient id="path2382_2_" gradientUnits="userSpaceOnUse" x1="-248.8364" y1="-3229.5376" x2="482.8853" y2="-3121.2249" gradientTransform="matrix(1 0 0 1 222.5283 4001)">
+	<stop  offset="0" style="stop-color:#A1A1A1"/>
+	<stop  offset="0.6384" style="stop-color:#ABABAB"/>
+	<stop  offset="0.8293" style="stop-color:#C7C7C7"/>
+	<stop  offset="1" style="stop-color:#E3E3E3"/>
+</linearGradient>
+<path id="path2382_1_" class="st14" d="M547.716,732.152l-132.961-37.69L42.198,878.373l731.477,153.795l79.407-23.627
+	L705.49,893.335L547.716,732.152L547.716,732.152z"/>
+<linearGradient id="path2414_2_" gradientUnits="userSpaceOnUse" x1="131.9819" y1="-2957.0391" x2="215.4882" y2="-3202.2952" gradientTransform="matrix(1 0 0 1 272.0254 4028.2734)">
+	<stop  offset="0" style="stop-color:#A6A6A6"/>
+	<stop  offset="0.6456" style="stop-color:#B5B5B5"/>
+	<stop  offset="0.8757" style="stop-color:#D4D4D4"/>
+	<stop  offset="1" style="stop-color:#E1E1E1"/>
+</linearGradient>
+<path id="path2414_1_" class="st10" d="M42.198,878.373l731.477,153.795l79.17-23.676L705.489,893.335L42.198,878.373
+	L42.198,878.373z"/>
+<path id="path3817_1_" class="st0" d="M67.316,1935.454l226.709,0.404c3.166,0,5.999-0.471,5.999,6.318l-0.277,74.659H61.594V1941.9
+	C61.594,1938.551,61.918,1935.454,67.316,1935.454z"/>
+<path id="path5906_1_" class="st24" d="M129.544,1973.651c0.009,15.059-12.193,27.273-27.254,27.282
+	c-15.061,0.01-27.277-12.19-27.287-27.25c0-0.011,0-0.021,0-0.032c-0.008-15.062,12.195-27.274,27.254-27.283
+	c15.062-0.01,27.277,12.192,27.287,27.25C129.544,1973.628,129.544,1973.64,129.544,1973.651z"/>
+<path id="path5708_1_" d="M124.441,1951.442c6.047,6.047,9.072,13.452,9.072,22.209c0,8.76-2.971,16.084-8.917,21.977
+	c-6.305,6.202-13.762,9.304-22.363,9.304c-8.496,0-15.82-3.073-21.973-9.228c-6.152-6.151-9.227-13.502-9.227-22.053
+	c0-8.549,3.074-15.953,9.227-22.209c5.996-6.049,13.32-9.072,21.973-9.072C110.994,1942.37,118.395,1945.394,124.441,1951.442z
+	 M84.332,1955.509c-5.111,5.165-7.668,11.213-7.668,18.15s2.531,12.934,7.59,17.992c5.061,5.059,11.085,7.588,18.074,7.588
+	c6.988,0,13.064-2.555,18.229-7.666c4.904-4.746,7.355-10.715,7.355-17.914c0-7.144-2.492-13.207-7.475-18.188
+	c-4.98-4.98-11.015-7.473-18.109-7.473S89.234,1950.503,84.332,1955.509z M97.787,1970.608c-0.782-1.704-1.951-2.555-3.51-2.555
+	c-2.758,0-4.137,1.855-4.137,5.566s1.379,5.565,4.137,5.565c1.82,0,3.121-0.903,3.9-2.715l3.822,2.035
+	c-1.82,3.236-4.554,4.855-8.199,4.855c-2.809,0-5.063-0.861-6.752-2.584c-1.693-1.723-2.538-4.1-2.538-7.127
+	c0-2.975,0.871-5.338,2.613-7.088c1.746-1.747,3.917-2.623,6.521-2.623c3.852,0,6.609,1.519,8.275,4.552L97.787,1970.608z
+	 M115.767,1970.608c-0.783-1.704-1.928-2.555-3.439-2.555c-2.812,0-4.219,1.855-4.219,5.566s1.406,5.565,4.219,5.565
+	c1.824,0,3.101-0.903,3.828-2.715l3.908,2.035c-1.818,3.236-4.549,4.855-8.186,4.855c-2.804,0-5.053-0.861-6.742-2.584
+	c-1.688-1.723-2.532-4.1-2.532-7.127c0-2.975,0.857-5.338,2.572-7.088c1.712-1.747,3.897-2.623,6.547-2.623
+	c3.846,0,6.6,1.519,8.26,4.552L115.767,1970.608z"/>
+<path id="path294_1_" d="M296.008,1934.501H64.992c-2.477,0-4.492,2.015-4.492,4.494v78.49c0,0.561,0.453,1.016,1.014,1.016h237.971
+	c0.561,0,1.016-0.455,1.016-1.016v-78.49C300.5,1936.516,298.484,1934.501,296.008,1934.501z M64.992,1936.53h231.015
+	c1.357,0,2.461,1.104,2.461,2.464c0,0,0,31.637,0,54.49H133.356c-6.051,10.939-17.711,18.369-31.094,18.369
+	c-13.387,0-25.043-7.422-31.089-18.369h-8.645c0-22.854,0-54.49,0-54.49C62.527,1937.636,63.634,1936.53,64.992,1936.53z"/>
+<path id="path298_1_" class="st24" d="M233.027,2009.966c0.16,0.31,0.373,0.559,0.639,0.753c0.266,0.191,0.577,0.333,0.933,0.425
+	c0.36,0.094,0.73,0.142,1.111,0.142c0.259,0,0.537-0.022,0.833-0.066c0.295-0.043,0.573-0.128,0.832-0.25
+	c0.259-0.123,0.477-0.293,0.647-0.51c0.176-0.216,0.261-0.491,0.261-0.825c0-0.358-0.115-0.649-0.344-0.872
+	c-0.229-0.225-0.53-0.408-0.898-0.556c-0.371-0.148-0.791-0.277-1.258-0.391c-0.471-0.111-0.945-0.235-1.428-0.371
+	c-0.494-0.123-0.977-0.273-1.447-0.453c-0.467-0.18-0.886-0.412-1.258-0.697c-0.371-0.283-0.67-0.64-0.898-1.066
+	c-0.229-0.425-0.344-0.943-0.344-1.549c0-0.68,0.146-1.271,0.435-1.772c0.291-0.499,0.672-0.918,1.143-1.252
+	c0.467-0.334,1-0.582,1.594-0.742c0.59-0.16,1.184-0.242,1.777-0.242c0.692,0,1.355,0.078,1.993,0.234
+	c0.637,0.154,1.204,0.404,1.695,0.753c0.496,0.346,0.886,0.788,1.178,1.325c0.289,0.538,0.435,1.191,0.435,1.958h-2.826
+	c-0.026-0.396-0.109-0.724-0.249-0.982c-0.142-0.26-0.332-0.465-0.562-0.613c-0.236-0.147-0.504-0.254-0.805-0.314
+	c-0.303-0.062-0.631-0.094-0.988-0.094c-0.233,0-0.469,0.026-0.7,0.074c-0.237,0.051-0.447,0.138-0.637,0.26
+	c-0.194,0.125-0.352,0.279-0.473,0.463c-0.121,0.188-0.184,0.423-0.184,0.707c0,0.259,0.046,0.471,0.146,0.631
+	c0.1,0.159,0.295,0.309,0.584,0.445c0.289,0.135,0.691,0.271,1.203,0.408c0.514,0.135,1.184,0.309,2.012,0.52
+	c0.247,0.049,0.588,0.138,1.027,0.27c0.438,0.129,0.874,0.335,1.305,0.621c0.433,0.285,0.807,0.665,1.123,1.141
+	c0.314,0.476,0.471,1.086,0.471,1.828c0,0.607-0.117,1.17-0.352,1.689c-0.237,0.52-0.586,0.967-1.049,1.343
+	c-0.463,0.379-1.039,0.672-1.724,0.884c-0.688,0.21-1.482,0.313-2.383,0.313c-0.73,0-1.438-0.09-2.125-0.269
+	c-0.686-0.181-1.293-0.462-1.82-0.846c-0.524-0.385-0.941-0.876-1.25-1.469c-0.309-0.594-0.457-1.299-0.445-2.116h2.826
+	C232.787,2009.28,232.867,2009.657,233.027,2009.966z"/>
+<path id="path300_1_" class="st24" d="M249.438,1999.995l4.957,13.244h-3.027l-1-2.949h-4.957l-1.038,2.949h-2.932l5.01-13.244
+	H249.438z M249.605,2008.116l-1.668-4.855h-0.039l-1.726,4.855H249.605z"/>
+<path id="path304_1_" class="st24" d="M180.492,1999.995c0.633,0,1.208,0.057,1.729,0.168c0.521,0.111,0.967,0.293,1.337,0.546
+	c0.371,0.254,0.66,0.591,0.866,1.01c0.203,0.421,0.307,0.94,0.307,1.56c0,0.668-0.152,1.222-0.457,1.668
+	c-0.301,0.445-0.752,0.809-1.346,1.094c0.818,0.235,1.43,0.647,1.833,1.234c0.402,0.589,0.605,1.295,0.605,2.126
+	c0,0.667-0.129,1.245-0.391,1.733c-0.259,0.488-0.611,0.887-1.05,1.197c-0.439,0.31-0.941,0.538-1.503,0.686
+	c-0.566,0.148-1.145,0.223-1.74,0.223h-6.432v-13.244H180.492L180.492,1999.995z M180.121,2005.353c0.52,0,0.945-0.123,1.281-0.369
+	c0.336-0.248,0.501-0.648,0.501-1.203c0-0.309-0.057-0.562-0.166-0.76c-0.113-0.197-0.262-0.35-0.447-0.461
+	c-0.186-0.111-0.401-0.19-0.641-0.232c-0.243-0.043-0.494-0.064-0.752-0.064h-2.731v3.089L180.121,2005.353L180.121,2005.353z
+	 M180.291,2010.974c0.285,0,0.557-0.027,0.818-0.083c0.257-0.057,0.49-0.148,0.688-0.277c0.2-0.132,0.355-0.308,0.475-0.528
+	c0.12-0.223,0.176-0.506,0.176-0.854c0-0.678-0.192-1.164-0.577-1.455c-0.382-0.289-0.892-0.436-1.523-0.436h-3.18v3.635h3.124
+	V2010.974z"/>
+<path id="path306_1_" class="st24" d="M185.881,1999.995h3.267l3.102,5.23l3.082-5.23h3.246l-4.914,8.162v5.082h-2.922v-5.156
+	L185.881,1999.995z"/>
+<path id="path6318_2_" class="st24" d="M265.307,1964.461c0.008,11.692-9.463,21.176-21.154,21.185
+	c-11.691,0.01-21.176-9.461-21.188-21.153c0-0.01,0-0.021,0-0.031c-0.008-11.691,9.465-21.173,21.156-21.184
+	c11.691-0.008,21.178,9.463,21.186,21.153C265.307,1964.442,265.307,1964.452,265.307,1964.461z"/>
+<path id="path6322_2_" d="M243.984,1941.271c-6.426,0-11.861,2.242-16.313,6.725c-4.566,4.639-6.85,10.127-6.85,16.466
+	s2.283,11.789,6.85,16.349c4.566,4.562,10.004,6.843,16.313,6.843c6.387,0,11.919-2.302,16.605-6.9
+	c4.41-4.367,6.617-9.797,6.617-16.291c0-6.493-2.246-11.982-6.737-16.466C255.98,1943.514,250.486,1941.271,243.984,1941.271z
+	 M244.043,1945.446c5.264,0,9.734,1.855,13.412,5.566c3.713,3.672,5.57,8.154,5.57,13.449c0,5.334-1.816,9.76-5.456,13.276
+	c-3.832,3.787-8.341,5.68-13.527,5.68c-5.188,0-9.656-1.873-13.411-5.621c-3.754-3.75-5.631-8.193-5.631-13.336
+	c0-5.139,1.896-9.623,5.689-13.449C234.328,1947.302,238.779,1945.446,244.043,1945.446z"/>
+<path id="path6324_2_" d="M233.705,1961.188c0.924-5.834,5.034-8.953,10.182-8.953c7.403,0,11.915,5.373,11.915,12.535
+	c0,6.99-4.801,12.42-12.032,12.42c-4.976,0-9.428-3.061-10.238-9.068h5.841c0.174,3.119,2.2,4.217,5.092,4.217
+	c3.295,0,5.438-3.061,5.438-7.742c0-4.908-1.852-7.508-5.324-7.508c-2.542,0-4.742,0.924-5.205,4.1l1.701-0.008l-4.602,4.598
+	l-4.597-4.598L233.705,1961.188z"/>
+<circle id="circle315_1_" class="st24" cx="187.219" cy="1964.935" r="21.473"/>
+<path id="path319_1_" d="M193.436,1958.72c0-0.826-0.672-1.497-1.498-1.497h-9.486c-0.826,0-1.498,0.67-1.498,1.497v9.486h2.645
+	v11.232h7.191v-11.232h2.646V1958.72L193.436,1958.72z"/>
+<circle id="circle321_1_" cx="187.195" cy="1952.729" r="3.243"/>
+<path id="path323_1_" d="M187.164,1941.271c-6.422,0-11.864,2.242-16.313,6.725c-4.566,4.637-6.849,10.127-6.849,16.465
+	s2.283,11.789,6.849,16.351c4.566,4.561,10.005,6.839,16.313,6.839c6.387,0,11.921-2.298,16.603-6.897
+	c4.415-4.367,6.62-9.797,6.62-16.292c0-6.494-2.244-11.982-6.735-16.465C199.164,1943.515,193.667,1941.271,187.164,1941.271z
+	 M187.223,1945.446c5.264,0,9.734,1.855,13.41,5.566c3.717,3.67,5.574,8.154,5.574,13.449c0,5.332-1.819,9.76-5.457,13.277
+	c-3.832,3.787-8.34,5.681-13.527,5.681s-9.656-1.874-13.41-5.624c-3.753-3.748-5.63-8.193-5.63-13.334
+	c0-5.14,1.896-9.622,5.689-13.449C177.507,1947.302,181.96,1945.446,187.223,1945.446z"/>
+</svg>
diff --git a/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/crane1.jpg b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/crane1.jpg
new file mode 100755
index 0000000..65cd5ad
Binary files /dev/null and b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/crane1.jpg differ
diff --git a/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/crane2.jpg b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/crane2.jpg
new file mode 100755
index 0000000..030f028
Binary files /dev/null and b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/crane2.jpg differ
diff --git a/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/flyer.jpg b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/flyer.jpg
new file mode 100755
index 0000000..8286854
Binary files /dev/null and b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/flyer.jpg differ
diff --git a/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/p002.svg b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/p002.svg
new file mode 100755
index 0000000..f009131
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/p002.svg
@@ -0,0 +1,4 @@
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+  width="100%" height="100%" viewBox="0 0 1100 1700">
+  <image width="1100" height="1700" xlink:href="flyer.jpg" />
+</svg>
diff --git a/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/p005.svg b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/p005.svg
new file mode 100755
index 0000000..e4b84b8
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/p005.svg
@@ -0,0 +1,4 @@
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+  width="100%" height="100%" viewBox="0 0 1240 1612">
+  <image width="1240" height="1612" xlink:href="crane1.jpg" />
+</svg>
diff --git a/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/p006.svg b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/p006.svg
new file mode 100755
index 0000000..7c6655f
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/p006.svg
@@ -0,0 +1,4 @@
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+  width="100%" height="100%" viewBox="0 0 1240 1612">
+  <image width="1240" height="1612" xlink:href="crane2.jpg" />
+</svg>
diff --git a/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/p007.svg b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/p007.svg
new file mode 100644
index 0000000..ad90306
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/Images/p007.svg
@@ -0,0 +1,4 @@
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+  width="100%" height="100%" viewBox="0 0 1100 1700">
+  <image width="1024px" height="768px" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEAYABgAAD/7gAOQWRvYmUAZAAAAAAB/+EN/kV4aWYAAE1NACoAAAAIAAgBMgACAAAAFAAAAG4BOwACAAAACwAAAIJHRgADAAAAAQAFAABHSQADAAAAAQBYAACCmAACAAAAFgAAAI2cnQABAAAAFgAAAADqHAAHAAAHogAAAACHaQAEAAAAAQAAAKMAAAENMjAwOTowMzoxMiAxMzo0ODozMgBUb20gQWxwaGluAE1pY3Jvc29mdCBDb3Jwb3JhdGlvbgAABZADAAIAAAAUAAAA5ZAEAAIAAAAUAAAA+ZKRAAIAAAADNzcAAJKSAAIAAAADNzcAAOocAAcAAAe0AAAAAAAAAAAyMDA4OjAyOjExIDExOjMyOjUxADIwMDg6MDI6MTEgMTE6MzI6NT [...]
+</svg>
diff --git a/src/test/resources/30/expanded/valid/svg-in-spine/OPS/content.opf b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/content.opf
new file mode 100755
index 0000000..5d396ac
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/content.opf
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" xml:lang="en" unique-identifier="uid" prefix="cc: http://creativecommons.org/ns#">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title id="title">SVG in Spine</dc:title>
+    <dc:creator>ePub Sample project</dc:creator>
+    <dc:identifier id="uid">code.google.com.epub-samples.svg-in-spine</dc:identifier>
+    <dc:language>en-US</dc:language>
+    <meta property="dcterms:modified">2012-04-12T12:00:00Z</meta>
+    <dc:publisher>ePub Sample</dc:publisher>  
+    <dc:contributor>Takeshi Kanai</dc:contributor>
+    <dc:description>SVG files are directly called from spine. A page needs to be skipped to display when it is in landscape.</dc:description>
+    <dc:rights>This work is licensed under a Creative Commons Attribution (CC BY SA) license.</dc:rights>
+    <link rel="cc:license" href="http://creativecommons.org/licenses/by-sa/3.0/"/>
+    <link refines="#page001" rel="cc:license" href="http://creativecommons.org/licenses/by-sa/3.0/"/>
+    <link refines="#img002" rel="cc:license" href="http://creativecommons.org/licenses/by/3.0/"/>
+    <link refines="#page003" rel="cc:license" href="http://creativecommons.org/licenses/by/3.0/"/>
+    <link refines="#page004" rel="cc:license" href="http://creativecommons.org/licenses/by/3.0/"/>
+    <meta property="rendition:layout">pre-paginated</meta>
+  </metadata>
+  <manifest>
+	<item id="page001" properties="cover-image" href="Images/cover.svg" media-type="image/svg+xml" />
+	<item id="page002" href="Images/p002.svg" media-type="image/svg+xml" />
+	<item id="page003" href="Images/Tsuru_wiki-1b.svg" media-type="image/svg+xml" />
+	<item id="page004" href="Images/Tsuru_wiki-2b.svg" media-type="image/svg+xml" />
+	<item id="page005" href="Images/p005.svg" media-type="image/svg+xml" />
+	<item id="page006" href="Images/p006.svg" media-type="image/svg+xml" />
+	<item id="page007" href="Images/p007.svg" media-type="image/svg+xml" />
+	<item id="img005" href="Images/crane1.jpg" media-type="image/jpeg" />
+	<item id="img006" href="Images/crane2.jpg" media-type="image/jpeg" />
+	<item id="img002" href="Images/flyer.jpg" media-type="image/jpeg" />
+	<item properties="nav" id="nav.xhtml" href="nav.xhtml" media-type="application/xhtml+xml"/>
+	<item id="nav001" href="tocimages/bg.png" media-type="image/png" />
+	<item id="nav002" href="tocimages/divider.png" media-type="image/png" />
+	<item id="nav003" href="tocimages/dividerBig.png" media-type="image/png" />
+    <item id="style" href="tocstyle.css" media-type="text/css"/>
+  </manifest>
+  <spine>
+	<itemref idref="page001" properties="page-spread-right"/>
+	<itemref idref="page002" properties="page-spread-right"/>
+	<itemref idref="page003" properties="page-spread-left"/>
+	<itemref idref="page004" properties="page-spread-right"/>
+	<itemref idref="page005" properties="page-spread-left"/>
+	<itemref idref="page006" properties="page-spread-right"/>
+	<itemref idref="page007" properties="page-spread-right"/>
+  </spine>
+</package>
diff --git a/src/test/resources/30/expanded/valid/svg-in-spine/OPS/nav.xhtml b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/nav.xhtml
new file mode 100755
index 0000000..6eec428
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/nav.xhtml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" lang="en" xml:lang="en">
+<head> 
+  <title>Table of Contents</title>
+  <link href="tocstyle.css" rel="stylesheet" type="text/css" />
+</head> 
+
+<body>
+  <nav epub:type="toc" id="toc">
+    <h1>Table of Contents</h1>
+    <ol>
+	<li><a href="Images/cover.svg">Cover</a></li>
+	<li><a href="Images/p002.svg">Creative Commons Licenses</a></li>
+	<li><a href="Images/Tsuru_wiki-1b.svg">Origami : Crane</a></li>
+    </ol>
+  </nav>
+</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/svg-in-spine/OPS/tocimages/bg.png b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/tocimages/bg.png
new file mode 100755
index 0000000..be67a4e
Binary files /dev/null and b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/tocimages/bg.png differ
diff --git a/src/test/resources/30/expanded/valid/svg-in-spine/OPS/tocimages/divider.png b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/tocimages/divider.png
new file mode 100755
index 0000000..d093e12
Binary files /dev/null and b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/tocimages/divider.png differ
diff --git a/src/test/resources/30/expanded/valid/svg-in-spine/OPS/tocimages/dividerBig.png b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/tocimages/dividerBig.png
new file mode 100755
index 0000000..033e792
Binary files /dev/null and b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/tocimages/dividerBig.png differ
diff --git a/src/test/resources/30/expanded/valid/svg-in-spine/OPS/tocstyle.css b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/tocstyle.css
new file mode 100755
index 0000000..986d32b
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/svg-in-spine/OPS/tocstyle.css
@@ -0,0 +1,80 @@
+h1,h2,h3,h4,h5,h6 {
+	font-family: sans-serif;
+	font-size: 30px;
+	color: #FFF;
+	height: 74px;
+	padding-left: 20px;
+	padding-top: 30px;
+	background-image:url(tocimages/dividerBig.png);
+	background-repeat: repeat-x;
+	background-position: left bottom;
+	margin:0;
+	
+}
+
+ol {
+	margin:0;
+	padding:0;
+}
+
+
+nav li{
+	font-size: 1.4em;
+	color: #FFF;
+	font-family: sans-serif;
+	clear: both;
+	background-image: url(tocimages/divider.png);
+	background-repeat: repeat-x;
+	background-position:left bottom;
+	padding-bottom:14px;
+	padding-top:12px;
+	list-style-type:none;
+	list-style-position:inside;
+	padding-left:20px;
+}
+
+li a:link {
+	color: white; 
+	text-decoration:none;
+}
+
+
+li a:hover {
+	color: white; 
+	text-decoration:none;
+}
+	
+
+li a:visited {
+	color: white; 
+	text-decoration:none;
+}
+	
+.li a:active {
+	color: white; 
+	text-decoration:none;
+}
+
+
+.page{
+	float: right;
+	height: 43px;
+	padding-top: 13px;
+	padding-right: 20px;
+}
+.divider{
+	clear: both;
+	height: 4px;
+	background-image: url(tocimages/divider.png);
+	background-repeat: repeat-x;
+}
+
+
+html, body {
+	background-image: url(tocimages/bg.png);
+	background-repeat: repeat-x;
+	background-color: #404040;
+	margin: 0px;
+	padding: 0px;
+	background-attachment: fixed;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/svg-in-spine/mimetype b/src/test/resources/30/expanded/valid/svg-in-spine/mimetype
new file mode 100755
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/svg-in-spine/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/wasteland-basic.txt b/src/test/resources/30/expanded/valid/wasteland-basic.txt
new file mode 100644
index 0000000..d7b1b0a
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/wasteland-basic.txt
@@ -0,0 +1,14 @@
+# creation date is not stable between different runs
+[format version] 3.0
+[format name] application/epub+zip
+[title] The Waste Land
+[creator] T.S. Eliot
+[language] en-US
+[date] 2011-09-01
+[unique identifier] urn:uuid:550e8400-e29b-41d4-a716-446655440000
+[items count] 4
+[declared mimetype] application/xhtml+xml
+[declared mimetype] text/css
+[declared mimetype] image/jpeg
+[reference] http://creativecommons.org/licenses/by-sa/3.0/
+[reference] http://en.wikipedia.org/wiki/Simon_Fieldhouse
diff --git a/src/test/resources/30/expanded/valid/wasteland-basic/EPUB/wasteland-content.xhtml b/src/test/resources/30/expanded/valid/wasteland-basic/EPUB/wasteland-content.xhtml
new file mode 100644
index 0000000..f46dbe3
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/wasteland-basic/EPUB/wasteland-content.xhtml
@@ -0,0 +1,1067 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>The Waste Land</title>
+		<link type="text/css" rel="stylesheet" href="wasteland.css"/>
+	</head>
+	<body>
+		<section epub:type="frontmatter" id="frontmatter">
+			<section epub:type="titlepage" id="titlepage">
+				<h1>The Waste Land</h1>
+				<div class="aut">T.S. Eliot</div>
+				<div epub:type="epigraph">					
+					<p>
+						<span xml:lang="la">"Nam Sibyllam quidem Cumis ego ipse oculis
+							meis<br />vidi in ampulla pendere, et cum illi pueri dicerent</span>: <br />
+						<span xml:lang="grc"
+							>&#x03A3;&#x03AF;&#x03B2;&#x03C5;&#x03BB;&#x03BB;&#x03B1;
+							&#x03C4;&#x03AF;
+							&#x03F4;&#x03AD;&#x03BB;&#x03B5;&#x03B9;&#x03C2;<!--Sibylla ti theleis-->
+						</span>; <span xml:lang="la">respondebat illa</span>: <span xml:lang="grc"
+							>&#x03AC;&#x03C0;&#x03BF;&#x03F4;&#x03B1;&#x03B3;&#x03B5;&#x1FD6;&#x03B3;
+							&#x03F4;&#x03AD;&#x03BB;&#x03E3;<!--apothanein thelo-->
+						</span>."</p>
+				</div>
+				<p epub:type="dedication">For Ezra Pound: <span xml:lang="it">il miglior
+						fabbro</span></p>
+			</section>
+		</section>
+		<section epub:type="bodymatter" id="bodymatter">
+
+			<section id="ch1">
+				<h2>I. THE BURIAL OF THE DEAD</h2>
+				<div class="linegroup">
+					<span class="ln">April is the cruellest month, breeding</span>
+					<span class="ln">Lilacs out of the dead land, mixing</span>
+					<span class="ln">Memory and desire, stirring</span>
+					<span class="ln">Dull roots with spring rain.</span>
+					<span class="ln">Winter kept us warm, covering</span>
+					<span class="ln">Earth in forgetful snow, feeding</span>
+					<span class="ln">A little life with dried tubers.</span>
+					<span class="ln">Summer surprised us, coming over the Starnbergersee</span>
+					<span class="ln">With a shower of rain; we stopped in the colonnade,</span>
+					<span class="ln">And went on in sunlight, into the Hofgarten,<span class="lnum"
+							>10</span>
+					</span>
+					<span class="ln">And drank coffee, and talked for an hour.</span>
+					<span class="ln" xml:lang="de">Bin gar keine Russin, stamm' aus Litauen, echt
+						deutsch.</span>
+					<span class="ln">And when we were children, staying at the archduke's,</span>
+					<span class="ln">My cousin's, he took me out on a sled,</span>
+					<span class="ln">And I was frightened. He said, Marie,</span>
+					<span class="ln">Marie, hold on tight. And down we went.</span>
+					<span class="ln">In the mountains, there you feel free.</span>
+					<span class="ln">I read, much of the night, and go south in the winter.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">What are the roots that clutch, what branches grow</span>
+					<span class="ln">Out of this stony rubbish? Son of man<a epub:type="noteref" class="noteref"
+							href="#note-1">*</a>,<span class="lnum">20</span>
+					</span>
+					<span class="ln">You cannot say, or guess, for you know only</span>
+					<span class="ln">A heap of broken images, where the sun beats,</span>
+					<span class="ln">And the dead tree gives no shelter, the cricket no relief<a
+							epub:type="noteref" class="noteref" href="#note-2">*</a>,</span>
+					<span class="ln">And the dry stone no sound of water. Only</span>
+					<span class="ln">There is shadow under this red rock,</span>
+					<span class="ln">(Come in under the shadow of this red rock),</span>
+					<span class="ln">And I will show you something different from either</span>
+					<span class="ln">Your shadow at morning striding behind you</span>
+					<span class="ln">Or your shadow at evening rising to meet you;</span>
+					<span class="ln">I will show you fear in a handful of dust.<span class="lnum"
+							>30</span>
+					</span>
+					<blockquote xml:lang="de">
+						<div>
+							<span class="ln">Frisch weht der Wind<a epub:type="noteref" class="noteref"
+									href="#note-3">*</a>
+							</span>
+							<span class="ln">Der Heimat zu</span>
+							<span class="ln">Mein Irisch Kind,</span>
+							<span class="ln">Wo weilest du?</span>
+						</div>
+					</blockquote>
+					<span class="ln">"You gave me hyacinths first a year ago;</span>
+					<span class="ln">"They called me the hyacinth girl."</span>
+					<span class="ln">&#x2015;Yet when we came back, late, from the Hyacinth
+						garden,</span>
+					<span class="ln">Your arms full, and your hair wet, I could not</span>
+					<span class="ln">Speak, and my eyes failed, I was neither</span>
+					<span class="ln">Living nor dead, and I knew nothing,<span class="lnum"
+							>40</span>
+					</span>
+					<span class="ln">Looking into the heart of light, the silence.</span>
+					<span class="ln" xml:lang="de">
+						<em>Od' und leer das Meer</em>.<a epub:type="noteref" class="noteref" href="#note-4">*</a>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Madame Sosostris, famous clairvoyante,</span>
+					<span class="ln">Had a bad cold, nevertheless</span>
+					<span class="ln">Is known to be the wisest woman in Europe,</span>
+					<span class="ln">With a wicked pack of cards. Here, said she<a
+							epub:type="noteref" class="noteref" href="#note-5">*</a>,</span>
+					<span class="ln">Is your card, the drowned Phoenician Sailor,</span>
+					<span class="ln">(Those are pearls that were his eyes. Look!)</span>
+					<span class="ln">Here is Belladonna, the Lady of the Rocks,</span>
+					<span class="ln">The lady of situations.<span class="lnum">50</span>
+					</span>
+					<span class="ln">Here is the man with three staves, and here the Wheel,</span>
+					<span class="ln">And here is the one-eyed merchant, and this card,</span>
+					<span class="ln">Which is blank, is something he carries on his back,</span>
+					<span class="ln">Which I am forbidden to see. I do not find</span>
+					<span class="ln">The Hanged Man. Fear death by water.</span>
+					<span class="ln">I see crowds of people, walking round in a ring.</span>
+					<span class="ln">Thank you. If you see dear Mrs. Equitone,</span>
+					<span class="ln">Tell her I bring the horoscope myself:</span>
+					<span class="ln">One must be so careful these days.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Unreal City<a epub:type="noteref" class="noteref" href="#note-6">*</a>,<span
+							class="lnum">60</span>
+					</span>
+					<span class="ln">Under the brown fog of a winter dawn,</span>
+					<span class="ln">A crowd flowed over London Bridge, so many,</span>
+					<span class="ln">I had not thought death had undone so many.<a
+							epub:type="noteref" class="noteref" href="#note-7">*</a>
+					</span>
+					<span class="ln">Sighs, short and infrequent, were exhaled<a epub:type="noteref" class="noteref"
+							href="#note-8">*</a>,</span>
+					<span class="ln">And each man fixed his eyes before his feet.</span>
+					<span class="ln">Flowed up the hill and down King William Street,</span>
+					<span class="ln">To where Saint Mary Woolnoth kept the hours</span>
+					<span class="ln">With a dead sound on the final stroke of nine.<a
+							epub:type="noteref" class="noteref" href="#note-9">*</a>
+					</span>
+					<span class="ln">There I saw one I knew, and stopped him, crying
+						"Stetson!</span>
+					<span class="ln">"You who were with me in the ships at Mylae!<span class="lnum"
+							>70</span>
+					</span>
+					<span class="ln">"That corpse you planted last year in your garden,</span>
+					<span class="ln">"Has it begun to sprout? Will it bloom this year?</span>
+					<span class="ln">"Or has the sudden frost disturbed its bed?</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"Oh keep the Dog far hence, that's friend to men,<a
+							epub:type="noteref" class="noteref" href="#note-10">*</a>
+					</span>
+					<span class="ln">"Or with his nails he'll dig it up again!</span>
+					<span class="ln">"You! <span xml:lang="fr">hypocrite lecteur! - mon semblable, -
+							mon frere</span> !"<a epub:type="noteref" class="noteref" href="#note-11">*</a>
+					</span>
+				</div>
+			</section>
+			<section id="ch2">
+				<h2>II. A GAME OF CHESS</h2>
+				<div class="linegroup">
+					<span class="ln">The Chair she sat in, like a burnished throne<a
+							epub:type="noteref" class="noteref" href="#note-12">*</a>,</span>
+					<span class="ln">Glowed on the marble, where the glass</span>
+					<span class="ln">Held up by standards wrought with fruited vines</span>
+					<span class="ln">From which a golden Cupidon peeped out<span class="lnum"
+							>80</span>
+					</span>
+					<span class="ln">(Another hid his eyes behind his wing)</span>
+					<span class="ln">Doubled the flames of sevenbranched candelabra</span>
+					<span class="ln">Reflecting light upon the table as</span>
+					<span class="ln">The glitter of her jewels rose to meet it,</span>
+					<span class="ln">From satin cases poured in rich profusion;</span>
+					<span class="ln">In vials of ivory and coloured glass</span>
+					<span class="ln">Unstoppered, lurked her strange synthetic perfumes,</span>
+					<span class="ln">Unguent, powdered, or liquid - troubled, confused</span>
+					<span class="ln">And drowned the sense in odours; stirred by the air</span>
+					<span class="ln">That freshened from the window, these ascended<span
+							class="lnum">90</span>
+					</span>
+					<span class="ln">In fattening the prolonged candle-flames,</span>
+					<span class="ln">Flung their smoke into the laquearia<a epub:type="noteref" class="noteref"
+							href="#note-13">*</a>,</span>
+					<span class="ln">Stirring the pattern on the coffered ceiling.</span>
+					<span class="ln">Huge sea-wood fed with copper</span>
+					<span class="ln">Burned green and orange, framed by the coloured stone,</span>
+					<span class="ln">In which sad light a carved dolphin swam.</span>
+					<span class="ln">Above the antique mantel was displayed</span>
+					<span class="ln">As though a window gave upon the sylvan scene<a
+							epub:type="noteref" class="noteref" href="#note-14">*</a>
+					</span>
+					<span class="ln">The change of Philomel, by the barbarous king<a
+							epub:type="noteref" class="noteref" href="#note-15">*</a>
+					</span>
+					<span class="ln">So rudely forced; yet there the nightingale<a
+							epub:type="noteref" class="noteref" href="#note-16">*</a>
+						<span class="lnum">100</span>
+					</span>
+					<span class="ln">Filled all the desert with inviolable voice</span>
+					<span class="ln">And still she cried, and still the world pursues,</span>
+					<span class="ln">"Jug Jug" to dirty ears.</span>
+					<span class="ln">And other withered stumps of time</span>
+					<span class="ln">Were told upon the walls; staring forms</span>
+					<span class="ln">Leaned out, leaning, hushing the room enclosed.</span>
+					<span class="ln">Footsteps shuffled on the stair.</span>
+					<span class="ln">Under the firelight, under the brush, her hair</span>
+					<span class="ln">Spread out in fiery points</span>
+					<span class="ln">Glowed into words, then would be savagely still.<span
+							class="lnum">110</span>
+					</span>
+				</div>
+				<div class="linegroup">
+					<div class="linegroup">
+						<span class="ln">"My nerves are bad to-night. Yes, bad. Stay with me.</span>
+						<span class="ln">"Speak to me. Why do you never speak. Speak.</span>
+						<span class="ln">"What are you thinking of? What thinking? What?</span>
+						<span class="ln">"I never know what you are thinking. Think."</span>
+					</div>
+					<div class="linegroup">
+						<span class="ln">I think we are in rats' alley<a epub:type="noteref" class="noteref"
+								href="#note-17">*</a>
+						</span>
+						<span class="ln">Where the dead men lost their bones.</span>
+					</div>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"What is that noise?"</span>
+					<span class="ln">The wind under the door.<a epub:type="noteref" class="noteref" href="#note-18"
+							>*</a>
+					</span>
+					<span class="ln">"What is that noise now? What is the wind doing?"</span>
+					<span class="ln">Nothing again nothing.<span class="lnum">120</span>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"Do</span>
+					<span class="ln">"You know nothing? Do you see nothing? Do you remember</span>
+					<span class="ln">"Nothing?"</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">I remember</span>
+					<span class="ln">Those are pearls that were his eyes.</span>
+					<span class="ln">"Are you alive, or not? Is there nothing in your head?"<a
+							epub:type="noteref" class="noteref" href="#note-19">*</a>
+					</span>
+					<span class="ln">But</span>
+					<span class="ln">O O O O that Shakespeherian Rag&#x2015;</span>
+					<span class="ln">It's so elegant</span>
+					<span class="ln">So intelligent<span class="lnum">130</span>
+					</span>
+					<span class="ln">"What shall I do now? What shall I do?"</span>
+					<span class="ln">I shall rush out as I am, and walk the street</span>
+					<span class="ln">"With my hair down, so. What shall we do to-morrow?</span>
+					<span class="ln">"What shall we ever do?"</span>
+					<span class="ln">The hot water at ten.</span>
+					<span class="ln">And if it rains, a closed car at four.</span>
+					<span class="ln">And we shall play a game of chess,</span>
+					<span class="ln">Pressing lidless eyes and waiting for a knock upon the door.<a
+							epub:type="noteref" class="noteref" href="#note-20">*</a>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">When Lil's husband got demobbed, I said -</span>
+					<span class="ln">I didn't mince my words, I said to her myself,<span
+							class="lnum">140</span>
+					</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">Now Albert's coming back, make yourself a bit smart.</span>
+					<span class="ln">He'll want to know what you done with that money he gave
+						you</span>
+					<span class="ln">To get yourself some teeth. He did, I was there.</span>
+					<span class="ln">You have them all out, Lil, and get a nice set,</span>
+					<span class="ln">He said, I swear, I can't bear to look at you.</span>
+					<span class="ln">And no more can't I, I said, and think of poor Albert,</span>
+					<span class="ln">He's been in the army four years, he wants a good time,</span>
+					<span class="ln">And if you don't give it him, there's others will, I
+						said.</span>
+					<span class="ln">Oh is there, she said. Something o' that, I said.<span
+							class="lnum">150</span>
+					</span>
+					<span class="ln">Then I'll know who to thank, she said, and give me a straight
+						look.</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">If you don't like it you can get on with it, I said.</span>
+					<span class="ln">Others can pick and choose if you can't.</span>
+					<span class="ln">But if Albert makes off, it won't be for lack of
+						telling.</span>
+					<span class="ln">You ought to be ashamed, I said, to look so antique.</span>
+					<span class="ln">(And her only thirty-one.)</span>
+					<span class="ln">I can't help it, she said, pulling a long face,</span>
+					<span class="ln">It's them pills I took, to bring it off, she said.</span>
+					<span class="ln">(She's had five already, and nearly died of young George.)<span
+							class="lnum">160</span>
+					</span>
+					<span class="ln">The chemist said it would be all right, but I've never been the
+						same.</span>
+					<span class="ln">You <em>are</em> a proper fool, I said.</span>
+					<span class="ln">Well, if Albert won't leave you alone, there it is, I
+						said,</span>
+					<span class="ln">What you get married for if you don't want children?</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">Well, that Sunday Albert was home, they had a hot
+						gammon,</span>
+					<span class="ln">And they asked me in to dinner, to get the beauty of it
+						hot&#x2015;</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">HURRY UP PLEASE ITS TIME</span>
+					<span class="ln">Goonight Bill. Goonight Lou. Goonight May. Goonight.<span
+							class="lnum">170</span>
+					</span>
+					<span class="ln">Ta ta. Goonight. Goonight.</span>
+					<span class="ln">Good night, ladies, good night, sweet ladies, good night, good
+						night.</span>
+				</div>
+			</section>
+			<section id="ch3">
+				<h2>III. THE FIRE SERMON</h2>
+				<div class="linegroup">
+					<span class="ln">The river's tent is broken: the last fingers of leaf</span>
+					<span class="ln">Clutch and sink into the wet bank. The wind</span>
+					<span class="ln">Crosses the brown land, unheard. The nymphs are
+						departed.</span>
+					<span class="ln">Sweet Thames, run softly, till I end my song.<a
+							epub:type="noteref" class="noteref" href="#note-21">*</a>
+					</span>
+					<span class="ln">The river bears no empty bottles, sandwich papers,</span>
+					<span class="ln">Silk handkerchiefs, cardboard boxes, cigarette ends</span>
+					<span class="ln">Or other testimony of summer nights. The nymphs are
+						departed.</span>
+					<span class="ln">And their friends, the loitering heirs of city directors;<span
+							class="lnum">180</span>
+					</span>
+					<span class="ln">Departed, have left no addresses.</span>
+					<span class="ln">By the waters of Leman I sat down and wept . . .</span>
+					<span class="ln">Sweet Thames, run softly till I end my song,</span>
+					<span class="ln">Sweet Thames, run softly, for I speak not loud or long.</span>
+					<span class="ln">But at my back in a cold blast I hear</span>
+					<span class="ln">The rattle of the bones, and chuckle spread from ear to
+						ear.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">A rat crept softly through the vegetation</span>
+					<span class="ln">Dragging its slimy belly on the bank</span>
+					<span class="ln">While I was fishing in the dull canal</span>
+					<span class="ln">On a winter evening round behind the gashouse<span class="lnum"
+							>190</span>
+					</span>
+					<span class="ln">Musing upon the king my brother's wreck</span>
+					<span class="ln">And on the king my father's death before him.<a
+							epub:type="noteref" class="noteref" href="#note-22">*</a>
+					</span>
+					<span class="ln">White bodies naked on the low damp ground</span>
+					<span class="ln">And bones cast in a little low dry garret,</span>
+					<span class="ln">Rattled by the rat's foot only, year to year.</span>
+					<span class="ln">But at my back from time to time I hear<a epub:type="noteref" class="noteref"
+							href="#note-23">*</a>
+					</span>
+					<span class="ln">The sound of horns and motors, which shall bring<a
+							epub:type="noteref" class="noteref" href="#note-24">*</a>
+					</span>
+					<span class="ln">Sweeney to Mrs. Porter in the spring.</span>
+					<span class="ln">O the moon shone bright on Mrs. Porter<a epub:type="noteref" class="noteref"
+							href="#note-25">*</a>
+					</span>
+					<span class="ln">And on her daughter<span class="lnum">200</span>
+					</span>
+					<span class="ln">They wash their feet in soda water</span>
+					<span class="ln" xml:lang="fr">
+						<em>Et O ces voix d'enfants, chantant dans la coupole<a epub:type="noteref" class="noteref"
+								href="#note-26">*</a>
+						</em>!</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Twit twit twit</span>
+					<span class="ln">Jug jug jug jug jug jug</span>
+					<span class="ln">So rudely forc'd.</span>
+					<span class="ln">Tereu</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Unreal City</span>
+					<span class="ln">Under the brown fog of a winter noon</span>
+					<span class="ln">Mr. Eugenides, the Smyrna merchant</span>
+					<span class="ln">Unshaven, with a pocket full of currants<a epub:type="noteref" class="noteref"
+							href="#note-27">*</a>
+						<span class="lnum">210</span>
+					</span>
+					<span class="ln">C.i.f. London: documents at sight,</span>
+					<span class="ln">Asked me in demotic French</span>
+					<span class="ln">To luncheon at the Cannon Street Hotel</span>
+					<span class="ln">Followed by a weekend at the Metropole.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">At the violet hour, when the eyes and back</span>
+					<span class="ln">Turn upward from the desk, when the human engine waits</span>
+					<span class="ln">Like a taxi throbbing waiting,</span>
+					<span class="ln">I Tiresias, though blind, throbbing between two lives<a
+							epub:type="noteref" class="noteref" href="#note-28">*</a>,</span>
+					<span class="ln">Old man with wrinkled female breasts, can see</span>
+					<span class="ln">At the violet hour, the evening hour that strives<span
+							class="lnum">220</span>
+					</span>
+					<span class="ln">Homeward, and brings the sailor home from sea<a
+							epub:type="noteref" class="noteref" href="#note-29">*</a>,</span>
+					<span class="ln">The typist home at teatime, clears her breakfast, lights</span>
+					<span class="ln">Her stove, and lays out food in tins.</span>
+					<span class="ln">Out of the window perilously spread</span>
+					<span class="ln">Her drying combinations touched by the sun's last rays,</span>
+					<span class="ln">On the divan are piled (at night her bed)</span>
+					<span class="ln">Stockings, slippers, camisoles, and stays.</span>
+					<span class="ln">I Tiresias, old man with wrinkled dugs</span>
+					<span class="ln">Perceived the scene, and foretold the rest -</span>
+					<span class="ln">I too awaited the expected guest.<span class="lnum">230</span>
+					</span>
+					<span class="ln">He, the young man carbuncular, arrives,</span>
+					<span class="ln">A small house agent's clerk, with one bold stare,</span>
+					<span class="ln">One of the low on whom assurance sits</span>
+					<span class="ln">As a silk hat on a Bradford millionaire.</span>
+					<span class="ln">The time is now propitious, as he guesses,</span>
+					<span class="ln">The meal is ended, she is bored and tired,</span>
+					<span class="ln">Endeavours to engage her in caresses</span>
+					<span class="ln">Which still are unreproved, if undesired.</span>
+					<span class="ln">Flushed and decided, he assaults at once;</span>
+					<span class="ln">Exploring hands encounter no defence;<span class="lnum"
+							>240</span>
+					</span>
+					<span class="ln">His vanity requires no response,</span>
+					<span class="ln">And makes a welcome of indifference.</span>
+					<span class="ln">(And I Tiresias have foresuffered all</span>
+					<span class="ln">Enacted on this same divan or bed;</span>
+					<span class="ln">I who have sat by Thebes below the wall</span>
+					<span class="ln">And walked among the lowest of the dead.)</span>
+					<span class="ln">Bestows one final patronising kiss,</span>
+					<span class="ln">And gropes his way, finding the stairs unlit . . .</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">She turns and looks a moment in the glass,</span>
+					<span class="ln">Hardly aware of her departed lover;<span class="lnum"
+							>250</span>
+					</span>
+					<span class="ln">Her brain allows one half-formed thought to pass:</span>
+					<span class="ln">"Well now that's done: and I'm glad it's over."</span>
+					<span class="ln">When lovely woman stoops to folly and<a epub:type="noteref" class="noteref"
+							href="#note-30">*</a>
+					</span>
+					<span class="ln">Paces about her room again, alone,</span>
+					<span class="ln">She smoothes her hair with automatic hand,</span>
+					<span class="ln">And puts a record on the gramophone.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"This music crept by me upon the waters"<a epub:type="noteref" class="noteref"
+							href="#note-31">*</a>
+					</span>
+					<span class="ln">And along the Strand, up Queen Victoria Street.</span>
+					<span class="ln">O City city, I can sometimes hear</span>
+					<span class="ln">Beside a public bar in Lower Thames Street,<span class="lnum"
+							>260</span>
+					</span>
+					<span class="ln">The pleasant whining of a mandoline</span>
+					<span class="ln">And a clatter and a chatter from within</span>
+					<span class="ln">Where fishmen lounge at noon: where the walls</span>
+					<span class="ln">Of Magnus Martyr hold<a epub:type="noteref" class="noteref" href="#note-32"
+							>*</a>
+					</span>
+					<span class="ln">Inexplicable splendour of Ionian white and gold.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">The river sweats<a epub:type="noteref" class="noteref" href="#note-33">*</a>
+					</span>
+					<span class="ln">Oil and tar</span>
+					<span class="ln">The barges drift</span>
+					<span class="ln">With the turning tide</span>
+					<span class="ln">Red sails<span class="lnum">270</span>
+					</span>
+					<span class="ln">Wide</span>
+					<span class="ln">To leeward, swing on the heavy spar.</span>
+					<span class="ln">The barges wash</span>
+					<span class="ln">Drifting logs</span>
+					<span class="ln">Down Greenwich reach</span>
+					<span class="ln">Past the Isle of Dogs.</span>
+					<span class="ln">Weialala leia</span>
+					<span class="ln">Wallala leialala</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Elizabeth and Leicester<a epub:type="noteref" class="noteref" href="#note-34"
+							>*</a>
+					</span>
+					<span class="ln">Beating oars<span class="lnum">280</span>
+					</span>
+					<span class="ln">The stern was formed</span>
+					<span class="ln">A gilded shell</span>
+					<span class="ln">Red and gold</span>
+					<span class="ln">The brisk swell</span>
+					<span class="ln">Rippled both shores</span>
+					<span class="ln">Southwest wind</span>
+					<span class="ln">Carried down stream</span>
+					<span class="ln">The peal of bells</span>
+					<span class="ln">White towers</span>
+					<span class="ln">Weialala leia<span class="lnum">290</span>
+					</span>
+					<span class="ln">Wallala leialala</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"Trams and dusty trees.</span>
+					<span class="ln">Highbury bore me. Richmond and Kew<a epub:type="noteref" class="noteref"
+							href="#note-35">*</a>
+					</span>
+					<span class="ln">Undid me. By Richmond I raised my knees</span>
+					<span class="ln">Supine on the floor of a narrow canoe."</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">"My feet are at Moorgate, and my heart</span>
+					<span class="ln">Under my feet. After the event</span>
+					<span class="ln">He wept. He promised 'a new start'.</span>
+					<span class="ln">I made no comment. What should I resent?"</span>
+					<span class="ln">"On Margate Sands.<span class="lnum">300</span>
+					</span>
+					<span class="ln">I can connect</span>
+					<span class="ln">Nothing with nothing.</span>
+					<span class="ln">The broken fingernails of dirty hands.</span>
+					<span class="ln">My people humble people who expect</span>
+					<span class="ln">Nothing."</span>
+					<span class="ln">la la</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">To Carthage then I came<a epub:type="noteref" class="noteref" href="#note-36"
+							>*</a>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Burning burning burning burning<a epub:type="noteref" class="noteref"
+							href="#note-37">*</a>
+					</span>
+					<span class="ln">O Lord Thou pluckest me out<a epub:type="noteref" class="noteref"
+							href="#note-38">*</a>
+					</span>
+					<span class="ln">O Lord Thou pluckest<span class="lnum">310</span>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">burning</span>
+				</div>
+			</section>
+			<section id="ch4">
+				<h2>IV. DEATH BY WATER</h2>
+				<div class="linegroup">
+					<span class="ln">Phlebas the Phoenician, a fortnight dead,</span>
+					<span class="ln">Forgot the cry of gulls, and the deep sea swell</span>
+					<span class="ln">And the profit and loss.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">A current under sea</span>
+					<span class="ln">Picked his bones in whispers. As he rose and fell</span>
+					<span class="ln">He passed the stages of his age and youth</span>
+					<span class="ln">Entering the whirlpool.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Gentile or Jew</span>
+					<span class="ln">O you who turn the wheel and look to windward,<span
+							class="lnum">320</span>
+					</span>
+					<span class="ln">Consider Phlebas, who was once handsome and tall as you.</span>
+				</div>
+			</section>
+			<section id="ch5">
+				<h2>V. WHAT THE THUNDER SAID</h2>
+				<div class="linegroup">
+					<span class="ln">After the torchlight red on sweaty faces</span>
+					<span class="ln">After the frosty silence in the gardens</span>
+					<span class="ln">After the agony in stony places</span>
+					<span class="ln">The shouting and the crying</span>
+					<span class="ln">Prison and palace and reverberation</span>
+					<span class="ln">Of thunder of spring over distant mountains</span>
+					<span class="ln">He who was living is now dead</span>
+					<span class="ln">We who were living are now dying</span>
+					<span class="ln">With a little patience<span class="lnum">330</span>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Here is no water but only rock</span>
+					<span class="ln">Rock and no water and the sandy road</span>
+					<span class="ln">The road winding above among the mountains</span>
+					<span class="ln">Which are mountains of rock without water</span>
+					<span class="ln">If there were water we should stop and drink</span>
+					<span class="ln">Amongst the rock one cannot stop or think</span>
+					<span class="ln">Sweat is dry and feet are in the sand</span>
+					<span class="ln">If there were only water amongst the rock</span>
+					<span class="ln">Dead mountain mouth of carious teeth that cannot spit</span>
+					<span class="ln">Here one can neither stand nor lie nor sit<span class="lnum"
+							>340</span>
+					</span>
+					<span class="ln">There is not even silence in the mountains</span>
+					<span class="ln">But dry sterile thunder without rain</span>
+					<span class="ln">There is not even solitude in the mountains</span>
+					<span class="ln">But red sullen faces sneer and snarl</span>
+					<span class="ln">From doors of mudcracked houses</span>
+					<div class="linegroup">
+						<span class="ln">If there were water</span>
+						<span class="ln">And no rock</span>
+						<span class="ln">If there were rock</span>
+						<span class="ln">And also water</span>
+						<span class="ln">And water<span class="lnum">350</span>
+						</span>
+						<span class="ln">A spring</span>
+						<span class="ln">A pool among the rock</span>
+						<span class="ln">If there were the sound of water only</span>
+						<span class="ln">Not the cicada</span>
+						<span class="ln">And dry grass singing</span>
+						<span class="ln">But sound of water over a rock</span>
+						<span class="ln">Where the hermit-thrush sings in the pine trees<a
+								epub:type="noteref" class="noteref" href="#note-39">*</a>
+						</span>
+						<span class="ln">Drip drop drip drop drop drop drop</span>
+						<span class="ln">But there is no water</span>
+					</div>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Who is the third who walks always beside you?<a
+							epub:type="noteref" class="noteref" href="#note-40">*</a>
+						<span class="lnum">360</span>
+					</span>
+					<span class="ln">When I count, there are only you and I together</span>
+					<span class="ln">But when I look ahead up the white road</span>
+					<span class="ln">There is always another one walking beside you</span>
+					<span class="ln">Gliding wrapt in a brown mantle, hooded</span>
+					<span class="ln">I do not know whether a man or a woman</span>
+					<span class="ln">&#x2015;But who is that on the other side of you?<a
+							epub:type="noteref" class="noteref" href="#note-41">*</a>
+					</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">What is that sound high in the air</span>
+					<span class="ln">Murmur of maternal lamentation</span>
+					<span class="ln">Who are those hooded hordes swarming</span>
+					<span class="ln">Over endless plains, stumbling in cracked earth<span
+							class="lnum">370</span>
+					</span>
+					<span class="ln">Ringed by the flat horizon only</span>
+					<span class="ln">What is the city over the mountains</span>
+					<span class="ln">Cracks and reforms and bursts in the violet air</span>
+					<span class="ln">Falling towers</span>
+					<span class="ln">Jerusalem Athens Alexandria</span>
+					<span class="ln">Vienna London</span>
+					<span class="ln">Unreal</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">A woman drew her long black hair out tight</span>
+					<span class="ln">And fiddled whisper music on those strings</span>
+					<span class="ln">And bats with baby faces in the violet light<span class="lnum"
+							>380</span>
+					</span>
+					<span class="ln">Whistled, and beat their wings</span>
+					<span class="ln">And crawled head downward down a blackened wall</span>
+					<span class="ln">And upside down in air were towers</span>
+					<span class="ln">Tolling reminiscent bells, that kept the hours</span>
+					<span class="ln">And voices singing out of empty cisterns and exhausted
+						wells.</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">In this decayed hole among the mountains</span>
+					<span class="ln">In the faint moonlight, the grass is singing</span>
+					<span class="ln">Over the tumbled graves, about the chapel</span>
+					<span class="ln">There is the empty chapel, only the wind's home.</span>
+					<span class="ln">It has no windows, and the door swings,<span class="lnum"
+							>390</span>
+					</span>
+					<span class="ln">Dry bones can harm no one.</span>
+					<span class="ln">Only a cock stood on the rooftree</span>
+					<span class="ln">Co co rico co co rico</span>
+					<span class="ln">In a flash of lightning. Then a damp gust</span>
+					<span class="ln">Bringing rain</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">Ganga was sunken, and the limp leaves</span>
+					<span class="ln">Waited for rain, while the black clouds</span>
+					<span class="ln">Gathered far distant, over Himavant.</span>
+					<span class="ln">The jungle crouched, humped in silence.</span>
+					<span class="ln">Then spoke the thunder<span class="lnum">400</span>
+					</span>
+					<span class="ln">DA</span>
+					<span class="ln">
+						<span xml:lang="sa">Datta</span>: what have we given?<a epub:type="noteref" class="noteref"
+							href="#note-42">*</a>
+					</span>
+					<span class="ln">My friend, blood shaking my heart</span>
+					<span class="ln">The awful daring of a moment's surrender</span>
+					<span class="ln">Which an age of prudence can never retract</span>
+					<span class="ln">By this, and this only, we have existed</span>
+					<span class="ln">Which is not to be found in our obituaries </span>
+					<span class="ln">Or in memories draped by the beneficent spider<a
+							epub:type="noteref" class="noteref" href="#note-43">*</a>
+					</span>
+					<span class="ln">Or under seals broken by the lean solicitor</span>
+					<span class="ln">In our empty rooms<span class="lnum">410</span>
+					</span>
+					<span class="ln">DA</span>
+					<span class="ln">
+						<span xml:lang="sa">Dayadhvam</span>: I have heard the key<a
+							epub:type="noteref" class="noteref" href="#note-44">*</a>
+					</span>
+					<span class="ln">Turn in the door once and turn once only</span>
+					<span class="ln">We think of the key, each in his prison</span>
+					<span class="ln">Thinking of the key, each confirms a prison</span>
+					<span class="ln">Only at nightfall, aetherial rumours</span>
+					<span class="ln">Revive for a moment a broken Coriolanus</span>
+					<span class="ln">DA</span>
+					<span class="ln">
+						<span xml:lang="sa">Damyata</span>: The boat responded</span>
+					<span class="ln">Gaily, to the hand expert with sail and oar<span class="lnum"
+							>420</span>
+					</span>
+					<span class="ln">The sea was calm, your heart would have responded</span>
+					<span class="ln">Gaily, when invited, beating obedient</span>
+					<span class="ln">To controlling hands</span>
+				</div>
+				<div class="linegroup">
+					<span class="ln">I sat upon the shore</span>
+					<span class="ln">Fishing, with the arid plain behind me<a epub:type="noteref" class="noteref"
+							href="#note-45">*</a>
+					</span>
+					<span class="ln">Shall I at least set my lands in order?</span>
+					<span class="ln">London Bridge is falling down falling down falling down</span>
+					<span class="ln" xml:lang="it">
+						<em>Poi s'ascose nel foco che gli affina</em>
+						<a epub:type="noteref" class="noteref" href="#note-46">*</a>
+					</span>
+					<span class="ln">
+						<span xml:lang="it">
+							<em>Quando fiam ceu chelidon</em>
+						</span> - O swallow swallow<a epub:type="noteref" class="noteref" href="#note-47">*</a>
+					</span>
+					<span class="ln" xml:lang="fr">
+						<em>Le Prince d'Aquitaine a la tour abolie</em>
+						<a epub:type="noteref" class="noteref" href="#note-48">*</a>
+						<span class="lnum">430</span>
+					</span>
+					<span class="ln">These fragments I have shored against my ruins</span>
+					<span class="ln">Why then Ile fit you. Hieronymo's mad againe.<a
+							epub:type="noteref" class="noteref" href="#note-49">*</a>
+					</span>
+					<span class="ln" xml:lang="sa">Datta. Dayadhvam. Damyata.</span>
+					<div class="linegroup">
+						<span class="ln" xml:lang="sa">Shantih shantih shantih<a epub:type="noteref" class="noteref"
+								href="#note-50">*</a>
+						</span>
+					</div>
+				</div>
+			</section>
+		</section>
+		<section epub:type="backmatter" id="backmatter">
+			<section epub:type="rearnotes">
+				<h2>NOTES ON "THE WASTE LAND"</h2>
+				<p>Not only the title, but the plan and a good deal of the incidental symbolism of
+					the poem were suggested by Miss Jessie L. Weston's book on the Grail legend:
+					From Ritual to Romance</p>
+				<p>Indeed, so deeply am I indebted, Miss Weston's book will elucidate the
+					difficulties of the poem much better than my notes can do; and I recommend it
+					(apart from the great interest of the book itself) to any who think such
+					elucidation of the poem worth the trouble. To another work of anthropology I am
+					indebted in general, one which has influenced our generation profoundly; I mean
+					The Golden Bough; I have used especially the two volumes Adonis, Attis, Osiris.
+					Anyone who is acquainted with these works will immediately recognise in the poem
+					certain references to vegetation ceremonies.</p>
+				<section>
+					<h3>I. THE BURIAL OF THE DEAD</h3>
+					<div epub:type="rearnote" id="note-1">
+						<p>Line 20. Cf. Ezekiel 2:1.</p>
+					</div>
+					<div epub:type="rearnote" id="note-2">
+						<p>23. Cf. Ecclesiastes 12:5.</p>
+					</div>
+					<div epub:type="rearnote" id="note-3">
+						<p>31. V. Tristan und Isolde, i, verses 5-8.</p>
+					</div>
+					<div epub:type="rearnote" id="note-4">
+						<p>42. Id. iii, verse 24.</p>
+					</div>
+					<div epub:type="rearnote" id="note-5">
+						<p>46. I am not familiar with the exact constitution of the Tarot pack of
+							cards, from which I have obviously departed to suit my own convenience.
+							The Hanged Man, a member of the traditional pack, fits my purpose in two
+							ways: because he is associated in my mind with the Hanged God of Frazer,
+							and because I associate him with the hooded figure in the passage of the
+							disciples to Emmaus in Part V. The Phoenician Sailor and the Merchant
+							appear later; also the "crowds of people," and Death by Water is
+							executed in Part IV. The Man with Three Staves (an authentic member of
+							the Tarot pack) I associate, quite arbitrarily, with the Fisher King
+							himself.</p>
+					</div>
+					<div epub:type="rearnote" id="note-6">
+						<p>60. Cf. Baudelaire:</p>
+						<blockquote xml:lang="fr">
+							<p>"Fourmillante cite;, cite; pleine de reves,<br />Ou le spectre en
+								plein jour raccroche le passant."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-7">
+						<p>63. Cf. Inferno, iii. 55-7.</p>
+						<blockquote xml:lang="it">
+							<p>"si lunga tratta<br />di gente, ch'io non avrei mai creduto<br />che
+								morte tanta n'avesse disfatta."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-8">
+						<p>64. Cf. Inferno, iv. 25-7:</p>
+						<blockquote xml:lang="it">
+							<p>"Quivi, secondo che per ascoltahre,<br />"non avea pianto, ma' che di
+								sospiri,<br />"che l'aura eterna facevan tremare."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-9">
+						<p>68. A phenomenon which I have often noticed.</p>
+					</div>
+					<div epub:type="rearnote" id="note-10">
+						<p>74. Cf. the Dirge in Webster's White Devil .</p>
+					</div>
+					<div epub:type="rearnote" id="note-11">
+						<p>76. V. Baudelaire, Preface to Fleurs du Mal.</p>
+					</div>
+				</section>
+				<section>
+					<h3>II. A GAME OF CHESS</h3>
+					<div epub:type="rearnote" id="note-12">
+						<p>77. Cf. Antony and Cleopatra, II. ii., l. 190.</p>
+					</div>
+					<div epub:type="rearnote" id="note-13">
+						<p>92. Laquearia. V. Aeneid, I. 726:</p>
+						<blockquote xml:lang="la">
+							<p>dependent lychni laquearibus aureis incensi, et noctem
+								flammis<br />funalia vincunt.</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-14">
+						<p>98. Sylvan scene. V. Milton, Paradise Lost, iv. 140.</p>
+					</div>
+					<div epub:type="rearnote" id="note-15">
+						<p>99. V. Ovid, Metamorphoses, vi, Philomela.</p>
+					</div>
+					<div epub:type="rearnote" id="note-16">
+						<p>100. Cf. Part III, l. 204.</p>
+					</div>
+					<div epub:type="rearnote" id="note-17">
+						<p>115. Cf. Part III, l. 195.</p>
+					</div>
+					<div epub:type="rearnote" id="note-18">
+						<p>118. Cf. Webster:</p>
+						<blockquote>
+							<p>"Is the wind in that door still?"</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-19">
+						<p>126. Cf. Part I, l. 37, 48.</p>
+					</div>
+					<div epub:type="rearnote" id="note-20">
+						<p>138. Cf. the game of chess in Middleton's Women beware Women.</p>
+					</div>
+				</section>
+				<section>
+					<h3>III. THE FIRE SERMON</h3>
+					<div epub:type="rearnote" id="note-21">
+						<p>176. V. Spenser, Prothalamion.</p>
+					</div>
+					<div epub:type="rearnote" id="note-22">
+						<p>192. Cf. The Tempest, I. ii.</p>
+					</div>
+					<div epub:type="rearnote" id="note-23">
+						<p>196. Cf. Marvell, To His Coy Mistress.</p>
+					</div>
+					<div epub:type="rearnote" id="note-24">
+						<p>197. Cf. Day, Parliament of Bees:</p>
+						<blockquote>
+							<div>
+								<span class="ln">"When of the sudden, listening, you shall
+									hear,</span>
+								<span class="ln">"A noise of horns and hunting, which shall
+									bring</span>
+								<span class="ln">"Actaeon to Diana in the spring,</span>
+								<span class="ln">"Where all shall see her naked skin . . ."</span>
+							</div>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-25">
+						<p>199. I do not know the origin of the ballad from which these lines are
+							taken: it was reported to me from Sydney, Australia.</p>
+					</div>
+					<div epub:type="rearnote" id="note-26">
+						<p>202. V. Verlaine, Parsifal.</p>
+					</div>
+					<div epub:type="rearnote" id="note-27">
+						<p>210. The currants were quoted at a price "cost insurance and freight to
+							London"; and the Bill of Lading etc. were to be handed to the buyer upon
+							payment of the sight draft.</p>
+					</div>
+					<div epub:type="rearnote" id="note-28">
+						<p>218. Tiresias, although a mere spectator and not indeed a "character," is
+							yet the most important personage in the poem, uniting all the rest. Just
+							as the one-eyed merchant, seller of currants, melts into the Phoenician
+							Sailor, and the latter is not wholly distinct from Ferdinand Prince of
+							Naples, so all the women are one woman, and the two sexes meet in
+							Tiresias. What Tiresias sees, in fact, is the substance of the poem. The
+							whole passage from Ovid is of great anthropological interest:</p>
+						<blockquote xml:lang="la">
+							<p>'. . . Cum Iunone iocos et maior vestra profecto est<br /> Quam, quae
+								contingit maribus,' dixisse, 'voluptas.'<br /> Illa negat; placuit
+								quae sit sententia docti<br /> Quaerere Tiresiae: venus huic erat
+								utraque nota.<br /> Nam duo magnorum viridi coeuntia silva<br />
+								Corpora serpentum baculi violaverat ictu<br /> Deque viro factus,
+								mirabile, femina septem<br /> Egerat autumnos; octavo rursus
+								eosdem<br /> Vidit et 'est vestrae si tanta potentia plagae,'<br />
+								Dixit 'ut auctoris sortem in contraria mutet,<br /> Nunc quoque vos
+								feriam!' percussis anguibus isdem<br /> Forma prior rediit
+								genetivaque venit imago.<br /> Arbiter hic igitur sumptus de lite
+								iocosa<br /> Dicta Iovis firmat; gravius Saturnia iusto<br /> Nec
+								pro materia fertur doluisse suique<br /> Iudicis aeterna damnavit
+								lumina nocte,<br /> At pater omnipotens (neque enim licet inrita
+								cuiquam<br /> Facta dei fecisse deo) pro lumine adempto<br /> Scire
+								futura dedit poenamque levavit honore.<br />
+							</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-29">
+						<p>221. This may not appear as exact as Sappho's lines, but I had in mind
+							the "longshore" or "dory" fisherman, who returns at nightfall.</p>
+					</div>
+					<div epub:type="rearnote" id="note-30">
+						<p>253. V. Goldsmith, the song in The Vicar of Wakefield.</p>
+					</div>
+					<div epub:type="rearnote" id="note-31">
+						<p>257. V. The Tempest, as above.</p>
+					</div>
+					<div epub:type="rearnote" id="note-32">
+						<p>264. The interior of St. Magnus Martyr is to my mind one of the finest
+							among Wren's interiors. See The Proposed Demolition of Nineteen City
+							Churches (P. S. King & Son, Ltd.).</p>
+					</div>
+					<div epub:type="rearnote" id="note-33">
+						<p>266. The Song of the (three) Thames-daughters begins here. From line 292
+							to 306 inclusive they speak in turn. V. Gutterdsammerung, III. i: the
+							Rhine-daughters.</p>
+					</div>
+					<div epub:type="rearnote" id="note-34">
+						<p>279. V. Froude, Elizabeth, Vol. I, ch. iv, letter of De Quadra to Philip
+							of Spain:</p>
+						<blockquote>
+							<div>
+								<span class="ln">"In the afternoon we were in a barge, watching the
+									games on the river.</span>
+								<span class="ln">(The queen) was alone with Lord Robert and myself
+									on the poop,</span>
+								<span class="ln">when they began to talk nonsense, and went so far
+									that Lord Robert</span>
+								<span class="ln">at last said, as I was on the spot there was no
+									reason why they</span>
+								<span class="ln">should not be married if the queen pleased."</span>
+							</div>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-35">
+						<p>293. Cf. Purgatorio, v. 133:</p>
+						<blockquote>
+							<p>"Ricorditi di me, che son la Pia;<br />Siena mi fe', disfecemi
+								Maremma."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-36">
+						<p>307. V. St. Augustine's Confessions: "to Carthage then I came, where a
+							cauldron of unholy loves sang all about mine ears."</p>
+					</div>
+					<div epub:type="rearnote" id="note-37">
+						<p>308. The complete text of the Buddha's Fire Sermon (which corresponds in
+							importance to the Sermon on the Mount) from which these words are taken,
+							will be found translated in the late Henry Clarke Warren's Buddhism in
+							Translation (Harvard Oriental Series). Mr. Warren was one of the great
+							pioneers of Buddhist studies in the Occident.</p>
+					</div>
+					<div epub:type="rearnote" id="note-38">
+						<p>309. From St. Augustine's Confessions again. The collocation of these two
+							representatives of eastern and western asceticism, as the culmination of
+							this part of the poem, is not an accident.</p>
+					</div>
+				</section>
+				<section>
+					<h3>V. WHAT THE THUNDER SAID</h3>
+					<p>In the first part of Part V three themes are employed: the journey to Emmaus,
+						the approach to the Chapel Perilous (see Miss Weston's book) and the present
+						decay of eastern Europe.</p>
+					<div epub:type="rearnote" id="note-39">
+						<p>357. This is Turdus aonalaschkae pallasii, the hermit-thrush which I have
+							heard in Quebec County. Chapman says (Handbook of Birds of Eastern North
+							America) "it is most at home in secluded woodland and thickety retreats.
+							. . . Its notes are not remarkable for variety or volume, but in purity
+							and sweetness of tone and exquisite modulation they are unequalled." Its
+							"water-dripping song" is justly celebrated.</p>
+					</div>
+					<div epub:type="rearnote" id="note-40">
+						<p>360. The following lines were stimulated by the account of one of the
+							Antarctic expeditions (I forget which, but I think one of Shackleton's):
+							it was related that the party of explorers, at the extremity of their
+							strength, had the constant delusion that there was one more member than
+							could actually be counted.</p>
+					</div>
+					<div epub:type="rearnote" id="note-41">
+						<p>367-77. Cf. Hermann Hesse, Blick ins Chaos:</p>
+						<blockquote xml:lang="de">
+							<p>"Schon ist halb Europa, schon ist zumindest der halbe Osten Europas
+								auf dem<br /> Wege zum Chaos, fhrt betrunken im heiligem Wahn am
+								Abgrund entlang<br /> und singt dazu, singt betrunken und hymnisch
+								wie Dmitri Karamasoff sang.<br /> Ueber diese Lieder lacht der
+								Bsrger beleidigt, der Heilige<br /> und Seher hrt sie mit
+								Trvnen."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-42">
+						<p>402. <q xml:lang="sa">"Datta, dayadhvam, damyata"</q> (Give, sympathize,
+							control). The fable of the meaning of the Thunder is found in the
+							Brihadaranyaka-Upanishad, 5, 1. A translation is found in Deussen's
+							Sechzig Upanishads des Veda, p. 489.</p>
+					</div>
+					<div epub:type="rearnote" id="note-43">
+						<p>408. Cf. Webster, The White Devil, v. vi:</p>
+						<blockquote>
+							<p>". . . they'll remarry<br /> Ere the worm pierce your winding-sheet,
+								ere the spider<br /> Make a thin curtain for your epitaphs."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-44">
+						<p>412. Cf. Inferno, xxxiii. 46:</p>
+						<blockquote xml:lang="it">
+							<p>"ed io sentii chiavar l'uscio di sotto<br /> all'orribile torre."</p>
+						</blockquote>
+						<p>Also F. H. Bradley, Appearance and Reality, p. 346:</p>
+						<blockquote>
+							<p>"My external sensations are no less private to myself than are my
+								thoughts or my feelings. In either case my experience falls within
+								my own circle, a circle closed on the outside; and, with all its
+								elements alike, every sphere is opaque to the others which surround
+								it. . . . In brief, regarded as an existence which appears in a
+								soul, the whole world for each is peculiar and private to that
+								soul."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-45">
+						<p>425. V. Weston, From Ritual to Romance; chapter on the Fisher King.</p>
+					</div>
+					<div epub:type="rearnote" id="note-46">
+						<p>428. V. Purgatorio, xxvi. 148.</p>
+						<blockquote xml:lang="it">
+							<p>"'Ara vos prec per aquella valor<br /> 'que vos guida al som de
+								l'escalina,<br /> 'sovegna vos a temps de ma dolor.'<br /> Poi
+								s'ascose nel foco che gli affina."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-47">
+						<p>429. V. Pervigilium Veneris. Cf. Philomela in Parts II and III.</p>
+					</div>
+					<div epub:type="rearnote" id="note-48">
+						<p>430. V. Gerard de Nerval, Sonnet El Desdichado.</p>
+					</div>
+					<div epub:type="rearnote" id="note-49">
+						<p>432. V. Kyd's Spanish Tragedy.</p>
+					</div>
+					<div epub:type="rearnote" id="note-50">
+						<p>434. Shantih. Repeated as here, a formal ending to an Upanishad. 'The
+							Peace which passeth understanding' is a feeble translation of the
+							content of this word.</p>
+					</div>
+				</section>
+			</section>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/wasteland-basic/EPUB/wasteland-cover.jpg b/src/test/resources/30/expanded/valid/wasteland-basic/EPUB/wasteland-cover.jpg
new file mode 100644
index 0000000..8308ed4
Binary files /dev/null and b/src/test/resources/30/expanded/valid/wasteland-basic/EPUB/wasteland-cover.jpg differ
diff --git a/src/test/resources/30/expanded/valid/wasteland-basic/EPUB/wasteland-nav.xhtml b/src/test/resources/30/expanded/valid/wasteland-basic/EPUB/wasteland-nav.xhtml
new file mode 100644
index 0000000..6fd9693
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/wasteland-basic/EPUB/wasteland-nav.xhtml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<link type="text/css" rel="stylesheet" href="wasteland.css" />
+	</head>
+	<body>
+		<nav epub:type="toc" id="toc">
+			<h1>Table of contents</h1>
+			<ol>
+				<li><a href="wasteland-content.xhtml#ch1">I. THE BURIAL OF THE DEAD</a></li>
+				<li><a href="wasteland-content.xhtml#ch2">II. A GAME OF CHESS</a></li>
+				<li><a href="wasteland-content.xhtml#ch3">III. THE FIRE SERMON</a></li>
+				<li><a href="wasteland-content.xhtml#ch4">IV. DEATH BY WATER</a></li>
+				<li><a href="wasteland-content.xhtml#ch5">V. WHAT THE THUNDER SAID</a></li>
+				<li><a href="wasteland-content.xhtml#backmatter">NOTES ON "THE WASTE LAND"</a></li>
+			</ol>
+		</nav>
+		<nav epub:type="landmarks">
+			<ol>
+				<li><a epub:type="frontmatter" href="wasteland-content.xhtml#frontmatter"
+						>frontmatter</a></li>
+				<li><a epub:type="bodymatter" href="wasteland-content.xhtml#bodymatter"
+						>bodymatter</a></li>
+				<li><a epub:type="backmatter" href="wasteland-content.xhtml#bodymatter"
+						>rearmatter</a></li>
+			</ol>
+		</nav>
+
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/wasteland-basic/EPUB/wasteland.css b/src/test/resources/30/expanded/valid/wasteland-basic/EPUB/wasteland.css
new file mode 100644
index 0000000..8b4aeec
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/wasteland-basic/EPUB/wasteland.css
@@ -0,0 +1,32 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
+
+h2 {
+    margin-top: 5em;
+}
+
+h3 {
+    margin-top: 3em;
+}
+
+span.ln { 
+    display: block;
+    margin-bottom: 0.5em;
+}
+
+span.lnum {
+    float : right;
+    color : gray;
+    font-size : 90%;
+}
+
+a.noteref {
+    color : gray;
+    text-decoration : none;
+    margin-left: 0.5em;
+    margin-right: 0.5em;
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/wasteland-basic/EPUB/wasteland.opf b/src/test/resources/30/expanded/valid/wasteland-basic/EPUB/wasteland.opf
new file mode 100644
index 0000000..b2f5a41
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/wasteland-basic/EPUB/wasteland.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xml:lang="en-US" prefix="cc: http://creativecommons.org/ns#">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:title>The Waste Land</dc:title>
+        <dc:creator>T.S. Eliot</dc:creator>
+        <dc:language>en-US</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T13:44:00Z</meta>          
+        <link rel="cc:license" refines="#cover" href="http://creativecommons.org/licenses/by-sa/3.0/" />
+        <link rel="cc:attributionURL" refines="#cover" href="http://en.wikipedia.org/wiki/Simon_Fieldhouse" />
+    </metadata> 
+    <manifest>
+        <item id="t1" href="wasteland-content.xhtml" media-type="application/xhtml+xml" />
+        <item id="nav" href="wasteland-nav.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="cover" href="wasteland-cover.jpg" media-type="image/jpeg" properties="cover-image" />
+        <item id="css" href="wasteland.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/wasteland-basic/META-INF/container.xml b/src/test/resources/30/expanded/valid/wasteland-basic/META-INF/container.xml
new file mode 100644
index 0000000..8bd2e5e
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/wasteland-basic/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/wasteland.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/wasteland-basic/mimetype b/src/test/resources/30/expanded/valid/wasteland-basic/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/wasteland-basic/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/wasteland-otf.txt b/src/test/resources/30/expanded/valid/wasteland-otf.txt
new file mode 100644
index 0000000..9cc5341
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/wasteland-otf.txt
@@ -0,0 +1,22 @@
+# creation date is not stable between different runs
+[format version] 3.0
+[format name] application/epub+zip
+[title] The Waste Land
+[creator] T.S. Eliot
+[language] en-US
+[date] 2011-09-01
+[rights] This work is shared with the public using the Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) license.
+[unique identifier] code.google.com.epub-samples.wasteland-otf
+[items count] 10
+[declared mimetype] application/xhtml+xml
+[declared mimetype] application/x-dtbncx+xml
+[declared mimetype] text/css
+[declared mimetype] image/jpeg
+[declared mimetype] application/vnd.ms-opentype
+
+[font embedded] OldStandard
+[font embedded] OldStandard,bold
+[font embedded] OldStandard,italic
+
+[reference] http://creativecommons.org/licenses/by-sa/3.0/
+[reference] http://en.wikipedia.org/wiki/Simon_Fieldhouse
diff --git a/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/OldStandard-Bold.otf b/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/OldStandard-Bold.otf
new file mode 100644
index 0000000..b7498ce
Binary files /dev/null and b/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/OldStandard-Bold.otf differ
diff --git a/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/OldStandard-Italic.otf b/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/OldStandard-Italic.otf
new file mode 100644
index 0000000..003a3ff
Binary files /dev/null and b/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/OldStandard-Italic.otf differ
diff --git a/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/OldStandard-Regular.otf b/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/OldStandard-Regular.otf
new file mode 100644
index 0000000..1e0688f
Binary files /dev/null and b/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/OldStandard-Regular.otf differ
diff --git a/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/fonts.css b/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/fonts.css
new file mode 100644
index 0000000..7f8c47d
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/fonts.css
@@ -0,0 +1,20 @@
+ at font-face {
+    font-family: 'OldStandard';
+    font-weight: normal;
+    font-style: normal;
+    src:url(OldStandard-Regular.otf) format('opentype');
+}
+
+ at font-face {
+    font-family: 'OldStandard';
+    font-weight: bold;
+    font-style: normal;
+    src:url(OldStandard-Bold.otf) format('opentype');
+}
+
+ at font-face {
+    font-family:'OldStandard';
+    font-weight: normal;
+    font-style: italic;
+    src:url(OldStandard-Italic.otf) format('opentype');
+}
diff --git a/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/wasteland-content.xhtml b/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/wasteland-content.xhtml
new file mode 100644
index 0000000..5413e82
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/wasteland-content.xhtml
@@ -0,0 +1,1069 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<meta charset="utf-8"></meta>
+		<title>The Waste Land</title>
+		<link rel="stylesheet" type="text/css" href="wasteland.css" class="day" title="day"/> 
+		<link rel="alternate stylesheet" type="text/css" href="wasteland-night.css" class="night" title="night"/>
+		<!-- <link rel="stylesheet" type="text/css" href="wasteland-night.css" class="night" title="night"/> -->		
+	</head>
+	<body>
+		<section epub:type="frontmatter" id="frontmatter">
+			<section epub:type="titlepage" id="titlepage">
+				<h1>The Waste Land</h1>
+				<div class="aut">T.S. Eliot</div>
+				<div epub:type="epigraph">					
+					<p>
+						<span xml:lang="la">"Nam Sibyllam quidem Cumis ego ipse oculis
+							meis<br />vidi in ampulla pendere, et cum illi pueri dicerent</span>: <br />
+						<span xml:lang="grc"
+							>&#x03A3;&#x03AF;&#x03B2;&#x03C5;&#x03BB;&#x03BB;&#x03B1;
+							&#x03C4;&#x03AF;
+							&#x03F4;&#x03AD;&#x03BB;&#x03B5;&#x03B9;&#x03C2;<!--Sibylla ti theleis-->
+						</span>; <span xml:lang="la">respondebat illa</span>: <span xml:lang="grc"
+							>&#x03AC;&#x03C0;&#x03BF;&#x03F4;&#x03B1;&#x03B3;&#x03B5;&#x1FD6;&#x03B3;
+							&#x03F4;&#x03AD;&#x03BB;&#x03E3;<!--apothanein thelo-->
+						</span>."</p>
+				</div>
+				<p epub:type="dedication">For Ezra Pound: <span xml:lang="it">il miglior
+						fabbro</span></p>
+			</section>
+		</section>
+		<section epub:type="bodymatter" id="bodymatter">
+
+			<section id="ch1">
+				<h2>I. THE BURIAL OF THE DEAD</h2>
+				<div class="linegroup">
+					<div>April is the cruellest month, breeding</div>
+					<div>Lilacs out of the dead land, mixing</div>
+					<div>Memory and desire, stirring</div>
+					<div>Dull roots with spring rain.</div>
+					<div>Winter kept us warm, covering</div>
+					<div>Earth in forgetful snow, feeding</div>
+					<div>A little life with dried tubers.</div>
+					<div>Summer surprised us, coming over the Starnbergersee</div>
+					<div>With a shower of rain; we stopped in the colonnade,</div>
+					<div>And went on in sunlight, into the Hofgarten,<span class="lnum"
+							>10</span>
+					</div>
+					<div>And drank coffee, and talked for an hour.</div>
+					<div  xml:lang="de">Bin gar keine Russin, stamm' aus Litauen, echt
+						deutsch.</div>
+					<div>And when we were children, staying at the archduke's,</div>
+					<div>My cousin's, he took me out on a sled,</div>
+					<div>And I was frightened. He said, Marie,</div>
+					<div>Marie, hold on tight. And down we went.</div>
+					<div>In the mountains, there you feel free.</div>
+					<div>I read, much of the night, and go south in the winter.</div>
+				</div>
+				<div class="linegroup">
+					<div>What are the roots that clutch, what branches grow</div>
+					<div id="ln20">Out of this stony rubbish? Son of man,<a epub:type="noteref" class="noteref"
+						href="#note-1">*</a><span class="lnum">20</span>
+					</div>
+					<div>You cannot say, or guess, for you know only</div>
+					<div>A heap of broken images, where the sun beats,</div>
+					<div id="ln23">And the dead tree gives no shelter, the cricket no relief,<a
+						epub:type="noteref" class="noteref" href="#note-2">*</a></div>
+					<div>And the dry stone no sound of water. Only</div>
+					<div>There is shadow under this red rock,</div>
+					<div>(Come in under the shadow of this red rock),</div>
+					<div>And I will show you something different from either</div>
+					<div>Your shadow at morning striding behind you</div>
+					<div>Or your shadow at evening rising to meet you;</div>
+					<div>I will show you fear in a handful of dust.<span class="lnum"
+							>30</span>
+					</div>
+					<blockquote xml:lang="de">
+						<div>
+							<div id="ln31">Frisch weht der Wind<a epub:type="noteref" class="noteref"
+									href="#note-3">*</a>
+							</div>
+							<div>Der Heimat zu</div>
+							<div>Mein Irisch Kind,</div>
+							<div>Wo weilest du?</div>
+						</div>
+					</blockquote>
+					<div>"You gave me hyacinths first a year ago;</div>
+					<div>"They called me the hyacinth girl."</div>
+					<div>&#x2015;Yet when we came back, late, from the Hyacinth
+						garden,</div>
+					<div>Your arms full, and your hair wet, I could not</div>
+					<div>Speak, and my eyes failed, I was neither</div>
+					<div>Living nor dead, and I knew nothing,<span class="lnum"
+							>40</span>
+					</div>
+					<div>Looking into the heart of light, the silence.</div>
+					<div xml:lang="de" id="ln42">
+						<em>Od' und leer das Meer</em>.<a epub:type="noteref" class="noteref" href="#note-4">*</a>
+					</div>
+				</div>
+				<div class="linegroup">
+					<div>Madame Sosostris, famous clairvoyante,</div>
+					<div>Had a bad cold, nevertheless</div>
+					<div>Is known to be the wisest woman in Europe,</div>
+					<div id="ln46">With a wicked pack of cards. Here, said she,<a
+						epub:type="noteref" class="noteref" href="#note-5">*</a></div>
+					<div>Is your card, the drowned Phoenician Sailor,</div>
+					<div>(Those are pearls that were his eyes. Look!)</div>
+					<div>Here is Belladonna, the Lady of the Rocks,</div>
+					<div>The lady of situations.<span class="lnum">50</span>
+					</div>
+					<div>Here is the man with three staves, and here the Wheel,</div>
+					<div>And here is the one-eyed merchant, and this card,</div>
+					<div>Which is blank, is something he carries on his back,</div>
+					<div>Which I am forbidden to see. I do not find</div>
+					<div>The Hanged Man. Fear death by water.</div>
+					<div>I see crowds of people, walking round in a ring.</div>
+					<div>Thank you. If you see dear Mrs. Equitone,</div>
+					<div>Tell her I bring the horoscope myself:</div>
+					<div>One must be so careful these days.</div>
+				</div>
+				<div class="linegroup">
+					<div id="ln60">Unreal City,<a epub:type="noteref" class="noteref" href="#note-6">*</a><span
+							class="lnum">60</span>
+					</div>
+					<div>Under the brown fog of a winter dawn,</div>
+					<div>A crowd flowed over London Bridge, so many,</div>
+					<div id="ln63">I had not thought death had undone so many.<a
+							epub:type="noteref" class="noteref" href="#note-7">*</a>
+					</div>
+					<div id="ln64">Sighs, short and infrequent, were exhaled,<a epub:type="noteref" class="noteref"
+						href="#note-8">*</a></div>
+					<div>And each man fixed his eyes before his feet.</div>
+					<div>Flowed up the hill and down King William Street,</div>
+					<div>To where Saint Mary Woolnoth kept the hours</div>
+					<div id="ln68">With a dead sound on the final stroke of nine.<a
+							epub:type="noteref" class="noteref" href="#note-9">*</a>
+					</div>
+					<div>There I saw one I knew, and stopped him, crying
+						"Stetson!</div>
+					<div>"You who were with me in the ships at Mylae!<span class="lnum"
+							>70</span>
+					</div>
+					<div>"That corpse you planted last year in your garden,</div>
+					<div>"Has it begun to sprout? Will it bloom this year?</div>
+					<div>"Or has the sudden frost disturbed its bed?</div>
+				</div>
+				<div class="linegroup">
+					<div id="ln74">"Oh keep the Dog far hence, that's friend to men,<a
+							epub:type="noteref" class="noteref" href="#note-10">*</a>
+					</div>
+					<div>"Or with his nails he'll dig it up again!</div>
+					<div id="ln76">"You! <span xml:lang="fr">hypocrite lecteur! - mon semblable, -
+							mon frere</span> !"<a epub:type="noteref" class="noteref" href="#note-11">*</a>
+					</div>
+				</div>
+			</section>
+			<section id="ch2">
+				<h2>II. A GAME OF CHESS</h2>
+				<div class="linegroup">
+					<div id="ln77">The Chair she sat in, like a burnished throne,<a
+						epub:type="noteref" class="noteref" href="#note-12">*</a></div>
+					<div>Glowed on the marble, where the glass</div>
+					<div>Held up by standards wrought with fruited vines</div>
+					<div>From which a golden Cupidon peeped out<span class="lnum"
+							>80</span>
+					</div>
+					<div>(Another hid his eyes behind his wing)</div>
+					<div>Doubled the flames of sevenbranched candelabra</div>
+					<div>Reflecting light upon the table as</div>
+					<div>The glitter of her jewels rose to meet it,</div>
+					<div>From satin cases poured in rich profusion;</div>
+					<div>In vials of ivory and coloured glass</div>
+					<div>Unstoppered, lurked her strange synthetic perfumes,</div>
+					<div>Unguent, powdered, or liquid - troubled, confused</div>
+					<div>And drowned the sense in odours; stirred by the air</div>
+					<div>That freshened from the window, these ascended<span
+							class="lnum">90</span>
+					</div>
+					<div>In fattening the prolonged candle-flames,</div>
+					<div id="ln92">Flung their smoke into the laquearia,<a epub:type="noteref" class="noteref"
+						href="#note-13">*</a></div>
+					<div>Stirring the pattern on the coffered ceiling.</div>
+					<div>Huge sea-wood fed with copper</div>
+					<div>Burned green and orange, framed by the coloured stone,</div>
+					<div>In which sad light a carved dolphin swam.</div>
+					<div>Above the antique mantel was displayed</div>
+					<div id="ln98">As though a window gave upon the sylvan scene<a
+							epub:type="noteref" class="noteref" href="#note-14">*</a>
+					</div>
+					<div id="ln99">The change of Philomel, by the barbarous king<a
+							epub:type="noteref" class="noteref" href="#note-15">*</a>
+					</div>
+					<div id="ln100">So rudely forced; yet there the nightingale<a
+							epub:type="noteref" class="noteref" href="#note-16">*</a>
+						<span class="lnum">100</span>
+					</div>
+					<div>Filled all the desert with inviolable voice</div>
+					<div>And still she cried, and still the world pursues,</div>
+					<div>"Jug Jug" to dirty ears.</div>
+					<div>And other withered stumps of time</div>
+					<div>Were told upon the walls; staring forms</div>
+					<div>Leaned out, leaning, hushing the room enclosed.</div>
+					<div>Footsteps shuffled on the stair.</div>
+					<div>Under the firelight, under the brush, her hair</div>
+					<div>Spread out in fiery points</div>
+					<div>Glowed into words, then would be savagely still.<span
+							class="lnum">110</span>
+					</div>
+				</div>
+				<div class="linegroup">
+					<div class="linegroup">
+						<div>"My nerves are bad to-night. Yes, bad. Stay with me.</div>
+						<div>"Speak to me. Why do you never speak. Speak.</div>
+						<div>"What are you thinking of? What thinking? What?</div>
+						<div>"I never know what you are thinking. Think."</div>
+					</div>
+					<div class="linegroup">
+						<div id="ln115">I think we are in rats' alley<a epub:type="noteref" class="noteref"
+								href="#note-17">*</a>
+						</div>
+						<div>Where the dead men lost their bones.</div>
+					</div>
+				</div>
+				<div class="linegroup">
+					<div>"What is that noise?"</div>
+					<div class="indent" id="ln118">The wind under the door.<a epub:type="noteref" class="noteref" href="#note-18"
+							>*</a>
+					</div>
+					<div>"What is that noise now? What is the wind doing?"</div>
+					<div class="indent">Nothing again nothing.<span class="lnum">120</span>
+					</div>
+				</div>
+				<div class="linegroup">
+					<div>"Do</div>
+					<div>"You know nothing? Do you see nothing? Do you remember</div>
+					<div>"Nothing?"</div>
+				</div>
+				<div class="linegroup">
+					<div>I remember</div>
+					<div>Those are pearls that were his eyes.</div>
+					<div id="ln126">"Are you alive, or not? Is there nothing in your head?"<a
+							epub:type="noteref" class="noteref" href="#note-19">*</a>
+					</div>
+					<div>But</div>
+					<div>O O O O that Shakespeherian Rag&#x2015;</div>
+					<div>It's so elegant</div>
+					<div>So intelligent<span class="lnum">130</span>
+					</div>
+					<div>"What shall I do now? What shall I do?"</div>
+					<div>I shall rush out as I am, and walk the street</div>
+					<div>"With my hair down, so. What shall we do to-morrow?</div>
+					<div>"What shall we ever do?"</div>
+					<div>The hot water at ten.</div>
+					<div>And if it rains, a closed car at four.</div>
+					<div>And we shall play a game of chess,</div>
+					<div id="ln138">Pressing lidless eyes and waiting for a knock upon the door.<a
+							epub:type="noteref" class="noteref" href="#note-20">*</a>
+					</div>
+				</div>
+				<div class="linegroup">
+					<div>When Lil's husband got demobbed, I said -</div>
+					<div>I didn't mince my words, I said to her myself,<span
+							class="lnum">140</span>
+					</div>
+					<div>HURRY UP PLEASE ITS TIME</div>
+					<div>Now Albert's coming back, make yourself a bit smart.</div>
+					<div>He'll want to know what you done with that money he gave
+						you</div>
+					<div>To get yourself some teeth. He did, I was there.</div>
+					<div>You have them all out, Lil, and get a nice set,</div>
+					<div>He said, I swear, I can't bear to look at you.</div>
+					<div>And no more can't I, I said, and think of poor Albert,</div>
+					<div>He's been in the army four years, he wants a good time,</div>
+					<div>And if you don't give it him, there's others will, I
+						said.</div>
+					<div>Oh is there, she said. Something o' that, I said.<span
+							class="lnum">150</span>
+					</div>
+					<div>Then I'll know who to thank, she said, and give me a straight
+						look.</div>
+					<div>HURRY UP PLEASE ITS TIME</div>
+					<div>If you don't like it you can get on with it, I said.</div>
+					<div>Others can pick and choose if you can't.</div>
+					<div>But if Albert makes off, it won't be for lack of
+						telling.</div>
+					<div>You ought to be ashamed, I said, to look so antique.</div>
+					<div>(And her only thirty-one.)</div>
+					<div>I can't help it, she said, pulling a long face,</div>
+					<div>It's them pills I took, to bring it off, she said.</div>
+					<div>(She's had five already, and nearly died of young George.)<span
+							class="lnum">160</span>
+					</div>
+					<div>The chemist said it would be all right, but I've never been the
+						same.</div>
+					<div>You <em>are</em> a proper fool, I said.</div>
+					<div>Well, if Albert won't leave you alone, there it is, I
+						said,</div>
+					<div>What you get married for if you don't want children?</div>
+					<div>HURRY UP PLEASE ITS TIME</div>
+					<div>Well, that Sunday Albert was home, they had a hot
+						gammon,</div>
+					<div>And they asked me in to dinner, to get the beauty of it
+						hot&#x2015;</div>
+					<div>HURRY UP PLEASE ITS TIME</div>
+					<div>HURRY UP PLEASE ITS TIME</div>
+					<div>Goonight Bill. Goonight Lou. Goonight May. Goonight.<span
+							class="lnum">170</span>
+					</div>
+					<div>Ta ta. Goonight. Goonight.</div>
+					<div>Good night, ladies, good night, sweet ladies, good night, good
+						night.</div>
+				</div>
+			</section>
+			<section id="ch3">
+				<h2>III. THE FIRE SERMON</h2>
+				<div class="linegroup">
+					<div>The river's tent is broken: the last fingers of leaf</div>
+					<div>Clutch and sink into the wet bank. The wind</div>
+					<div>Crosses the brown land, unheard. The nymphs are
+						departed.</div>
+					<div id="ln176">Sweet Thames, run softly, till I end my song.<a
+							epub:type="noteref" class="noteref" href="#note-21">*</a>
+					</div>
+					<div>The river bears no empty bottles, sandwich papers,</div>
+					<div>Silk handkerchiefs, cardboard boxes, cigarette ends</div>
+					<div>Or other testimony of summer nights. The nymphs are
+						departed.</div>
+					<div>And their friends, the loitering heirs of city directors;<span
+							class="lnum">180</span>
+					</div>
+					<div>Departed, have left no addresses.</div>
+					<div>By the waters of Leman I sat down and wept . . .</div>
+					<div>Sweet Thames, run softly till I end my song,</div>
+					<div>Sweet Thames, run softly, for I speak not loud or long.</div>
+					<div>But at my back in a cold blast I hear</div>
+					<div>The rattle of the bones, and chuckle spread from ear to
+						ear.</div>
+				</div>
+				<div class="linegroup">
+					<div>A rat crept softly through the vegetation</div>
+					<div>Dragging its slimy belly on the bank</div>
+					<div>While I was fishing in the dull canal</div>
+					<div>On a winter evening round behind the gashouse<span class="lnum"
+							>190</span>
+					</div>
+					<div>Musing upon the king my brother's wreck</div>
+					<div id="ln192">And on the king my father's death before him.<a
+							epub:type="noteref" class="noteref" href="#note-22">*</a>
+					</div>
+					<div>White bodies naked on the low damp ground</div>
+					<div>And bones cast in a little low dry garret,</div>
+					<div>Rattled by the rat's foot only, year to year.</div>
+					<div id="ln196">But at my back from time to time I hear<a epub:type="noteref" class="noteref"
+							href="#note-23">*</a>
+					</div>
+					<div id="ln197">The sound of horns and motors, which shall bring<a
+							epub:type="noteref" class="noteref" href="#note-24">*</a>
+					</div>
+					<div>Sweeney to Mrs. Porter in the spring.</div>
+					<div id="ln199">O the moon shone bright on Mrs. Porter<a epub:type="noteref" class="noteref"
+							href="#note-25">*</a>
+					</div>
+					<div>And on her daughter<span class="lnum">200</span>
+					</div>
+					<div>They wash their feet in soda water</div>
+					<div id="ln202" xml:lang="fr">
+						<em>Et O ces voix d'enfants, chantant dans la coupole</em>!<a epub:type="noteref" class="noteref"
+							href="#note-26">*</a></div>
+				</div>
+				<div class="linegroup">
+					<div>Twit twit twit</div>
+					<div>Jug jug jug jug jug jug</div>
+					<div>So rudely forc'd.</div>
+					<div>Tereu</div>
+				</div>
+				<div class="linegroup">
+					<div>Unreal City</div>
+					<div>Under the brown fog of a winter noon</div>
+					<div>Mr. Eugenides, the Smyrna merchant</div>
+					<div id="ln210">Unshaven, with a pocket full of currants<a epub:type="noteref" class="noteref"
+							href="#note-27">*</a>
+						<span class="lnum">210</span>
+					</div>
+					<div>C.i.f. London: documents at sight,</div>
+					<div>Asked me in demotic French</div>
+					<div>To luncheon at the Cannon Street Hotel</div>
+					<div>Followed by a weekend at the Metropole.</div>
+				</div>
+				<div class="linegroup">
+					<div>At the violet hour, when the eyes and back</div>
+					<div>Turn upward from the desk, when the human engine waits</div>
+					<div>Like a taxi throbbing waiting,</div>
+					<div id="ln218">I Tiresias, though blind, throbbing between two lives,<a
+						epub:type="noteref" class="noteref" href="#note-28">*</a></div>
+					<div>Old man with wrinkled female breasts, can see</div>
+					<div>At the violet hour, the evening hour that strives<span
+							class="lnum">220</span>
+					</div>
+					<div id="ln221">Homeward, and brings the sailor home from sea,<a
+						epub:type="noteref" class="noteref" href="#note-29">*</a></div>
+					<div>The typist home at teatime, clears her breakfast, lights</div>
+					<div>Her stove, and lays out food in tins.</div>
+					<div>Out of the window perilously spread</div>
+					<div>Her drying combinations touched by the sun's last rays,</div>
+					<div>On the divan are piled (at night her bed)</div>
+					<div>Stockings, slippers, camisoles, and stays.</div>
+					<div>I Tiresias, old man with wrinkled dugs</div>
+					<div>Perceived the scene, and foretold the rest -</div>
+					<div>I too awaited the expected guest.<span class="lnum">230</span>
+					</div>
+					<div>He, the young man carbuncular, arrives,</div>
+					<div>A small house agent's clerk, with one bold stare,</div>
+					<div>One of the low on whom assurance sits</div>
+					<div>As a silk hat on a Bradford millionaire.</div>
+					<div>The time is now propitious, as he guesses,</div>
+					<div>The meal is ended, she is bored and tired,</div>
+					<div>Endeavours to engage her in caresses</div>
+					<div>Which still are unreproved, if undesired.</div>
+					<div>Flushed and decided, he assaults at once;</div>
+					<div>Exploring hands encounter no defence;<span class="lnum"
+							>240</span>
+					</div>
+					<div>His vanity requires no response,</div>
+					<div>And makes a welcome of indifference.</div>
+					<div>(And I Tiresias have foresuffered all</div>
+					<div>Enacted on this same divan or bed;</div>
+					<div>I who have sat by Thebes below the wall</div>
+					<div>And walked among the lowest of the dead.)</div>
+					<div>Bestows one final patronising kiss,</div>
+					<div>And gropes his way, finding the stairs unlit . . .</div>
+				</div>
+				<div class="linegroup">
+					<div>She turns and looks a moment in the glass,</div>
+					<div>Hardly aware of her departed lover;<span class="lnum"
+							>250</span>
+					</div>
+					<div>Her brain allows one half-formed thought to pass:</div>
+					<div>"Well now that's done: and I'm glad it's over."</div>
+					<div id="ln253">When lovely woman stoops to folly and<a epub:type="noteref" class="noteref"
+							href="#note-30">*</a>
+					</div>
+					<div>Paces about her room again, alone,</div>
+					<div>She smoothes her hair with automatic hand,</div>
+					<div>And puts a record on the gramophone.</div>
+				</div>
+				<div class="linegroup">
+					<div id="ln257">"This music crept by me upon the waters"<a epub:type="noteref" class="noteref"
+							href="#note-31">*</a>
+					</div>
+					<div>And along the Strand, up Queen Victoria Street.</div>
+					<div>O City city, I can sometimes hear</div>
+					<div>Beside a public bar in Lower Thames Street,<span class="lnum"
+							>260</span>
+					</div>
+					<div>The pleasant whining of a mandoline</div>
+					<div>And a clatter and a chatter from within</div>
+					<div>Where fishmen lounge at noon: where the walls</div>
+					<div id="ln264">Of Magnus Martyr hold<a epub:type="noteref" class="noteref" href="#note-32"
+							>*</a>
+					</div>
+					<div>Inexplicable splendour of Ionian white and gold.</div>
+				</div>
+				<div class="linegroup indent">
+					<div id="ln266">The river sweats<a epub:type="noteref" class="noteref" href="#note-33">*</a>
+					</div>
+					<div>Oil and tar</div>
+					<div>The barges drift</div>
+					<div>With the turning tide</div>
+					<div>Red sails<span class="lnum">270</span>
+					</div>
+					<div>Wide</div>
+					<div>To leeward, swing on the heavy spar.</div>
+					<div>The barges wash</div>
+					<div>Drifting logs</div>
+					<div>Down Greenwich reach</div>
+					<div>Past the Isle of Dogs.</div>
+					<div class="indent">Weialala leia</div>
+					<div class="indent">Wallala leialala</div>
+				</div>
+				<div class="linegroup indent">
+					<div id="ln279">Elizabeth and Leicester<a epub:type="noteref" class="noteref" href="#note-34"
+							>*</a>
+					</div>
+					<div>Beating oars<span class="lnum">280</span>
+					</div>
+					<div>The stern was formed</div>
+					<div>A gilded shell</div>
+					<div>Red and gold</div>
+					<div>The brisk swell</div>
+					<div>Rippled both shores</div>
+					<div>Southwest wind</div>
+					<div>Carried down stream</div>
+					<div>The peal of bells</div>
+					<div>White towers</div>
+					<div class="indent">Weialala leia<span class="lnum">290</span>
+					</div>
+					<div class="indent">Wallala leialala</div>
+				</div>
+				<div class="linegroup">
+					<div>"Trams and dusty trees.</div>
+					<div id="ln293">Highbury bore me. Richmond and Kew<a epub:type="noteref" class="noteref"
+							href="#note-35">*</a>
+					</div>
+					<div>Undid me. By Richmond I raised my knees</div>
+					<div>Supine on the floor of a narrow canoe."</div>
+				</div>
+				<div class="linegroup">
+					<div>"My feet are at Moorgate, and my heart</div>
+					<div>Under my feet. After the event</div>
+					<div>He wept. He promised 'a new start'.</div>
+					<div>I made no comment. What should I resent?"</div>
+					<div>"On Margate Sands.<span class="lnum">300</span>
+					</div>
+					<div>I can connect</div>
+					<div>Nothing with nothing.</div>
+					<div>The broken fingernails of dirty hands.</div>
+					<div>My people humble people who expect</div>
+					<div>Nothing."</div>
+					<div class="indent">la la</div>
+				</div>
+				<div class="linegroup">
+					<div id="ln307">To Carthage then I came<a epub:type="noteref" class="noteref" href="#note-36"
+							>*</a>
+					</div>
+				</div>
+				<div class="linegroup">
+					<div  id="ln308">Burning burning burning burning<a epub:type="noteref" class="noteref"
+							href="#note-37">*</a>
+					</div>
+					<div  id="ln309">O Lord Thou pluckest me out<a epub:type="noteref" class="noteref"
+							href="#note-38">*</a>
+					</div>
+					<div>O Lord Thou pluckest<span class="lnum">310</span>
+					</div>
+				</div>
+				<div class="linegroup">
+					<div>burning</div>
+				</div>
+			</section>
+			<section id="ch4">
+				<h2>IV. DEATH BY WATER</h2>
+				<div class="linegroup">
+					<div>Phlebas the Phoenician, a fortnight dead,</div>
+					<div>Forgot the cry of gulls, and the deep sea swell</div>
+					<div>And the profit and loss.</div>
+				</div>
+				<div class="linegroup">
+					<div class="indent2">A current under sea</div>
+					<div>Picked his bones in whispers. As he rose and fell</div>
+					<div>He passed the stages of his age and youth</div>
+					<div>Entering the whirlpool.</div>
+				</div>
+				<div class="linegroup">
+					<div class="indent2">Gentile or Jew</div>
+					<div>O you who turn the wheel and look to windward,<span
+							class="lnum">320</span>
+					</div>
+					<div>Consider Phlebas, who was once handsome and tall as you.</div>
+				</div>
+			</section>
+			<section id="ch5">
+				<h2>V. WHAT THE THUNDER SAID</h2>
+				<div class="linegroup">
+					<div>After the torchlight red on sweaty faces</div>
+					<div>After the frosty silence in the gardens</div>
+					<div>After the agony in stony places</div>
+					<div>The shouting and the crying</div>
+					<div>Prison and palace and reverberation</div>
+					<div>Of thunder of spring over distant mountains</div>
+					<div>He who was living is now dead</div>
+					<div>We who were living are now dying</div>
+					<div>With a little patience<span class="lnum">330</span>
+					</div>
+				</div>
+				<div class="linegroup">
+					<div>Here is no water but only rock</div>
+					<div>Rock and no water and the sandy road</div>
+					<div>The road winding above among the mountains</div>
+					<div>Which are mountains of rock without water</div>
+					<div>If there were water we should stop and drink</div>
+					<div>Amongst the rock one cannot stop or think</div>
+					<div>Sweat is dry and feet are in the sand</div>
+					<div>If there were only water amongst the rock</div>
+					<div>Dead mountain mouth of carious teeth that cannot spit</div>
+					<div>Here one can neither stand nor lie nor sit<span class="lnum"
+							>340</span>
+					</div>
+					<div>There is not even silence in the mountains</div>
+					<div>But dry sterile thunder without rain</div>
+					<div>There is not even solitude in the mountains</div>
+					<div>But red sullen faces sneer and snarl</div>
+					<div>From doors of mudcracked houses</div>
+					<div class="linegroup">
+						<div class="indent2">If there were water</div>
+						<div>And no rock</div>
+						<div>If there were rock</div>
+						<div>And also water</div>
+						<div>And water<span class="lnum">350</span>
+						</div>
+						<div>A spring</div>
+						<div>A pool among the rock</div>
+						<div>If there were the sound of water only</div>
+						<div>Not the cicada</div>
+						<div>And dry grass singing</div>
+						<div>But sound of water over a rock</div>
+						<div id="ln357">Where the hermit-thrush sings in the pine trees<a
+								epub:type="noteref" class="noteref" href="#note-39">*</a>
+						</div>
+						<div>Drip drop drip drop drop drop drop</div>
+						<div>But there is no water</div>
+					</div>
+				</div>
+				<div class="linegroup">
+					<div  id="ln360">Who is the third who walks always beside you?<a
+							epub:type="noteref" class="noteref" href="#note-40">*</a>
+						<span class="lnum">360</span>
+					</div>
+					<div>When I count, there are only you and I together</div>
+					<div>But when I look ahead up the white road</div>
+					<div>There is always another one walking beside you</div>
+					<div>Gliding wrapt in a brown mantle, hooded</div>
+					<div>I do not know whether a man or a woman</div>
+					<div id="ln367">&#x2015;But who is that on the other side of you?<a
+							epub:type="noteref" class="noteref" href="#note-41">*</a>
+					</div>
+				</div>
+				<div class="linegroup">
+					<div>What is that sound high in the air</div>
+					<div>Murmur of maternal lamentation</div>
+					<div>Who are those hooded hordes swarming</div>
+					<div>Over endless plains, stumbling in cracked earth<span
+							class="lnum">370</span>
+					</div>
+					<div>Ringed by the flat horizon only</div>
+					<div>What is the city over the mountains</div>
+					<div>Cracks and reforms and bursts in the violet air</div>
+					<div>Falling towers</div>
+					<div>Jerusalem Athens Alexandria</div>
+					<div>Vienna London</div>
+					<div>Unreal</div>
+				</div>
+				<div class="linegroup">
+					<div>A woman drew her long black hair out tight</div>
+					<div>And fiddled whisper music on those strings</div>
+					<div>And bats with baby faces in the violet light<span class="lnum"
+							>380</span>
+					</div>
+					<div>Whistled, and beat their wings</div>
+					<div>And crawled head downward down a blackened wall</div>
+					<div>And upside down in air were towers</div>
+					<div>Tolling reminiscent bells, that kept the hours</div>
+					<div>And voices singing out of empty cisterns and exhausted
+						wells.</div>
+				</div>
+				<div class="linegroup">
+					<div>In this decayed hole among the mountains</div>
+					<div>In the faint moonlight, the grass is singing</div>
+					<div>Over the tumbled graves, about the chapel</div>
+					<div>There is the empty chapel, only the wind's home.</div>
+					<div>It has no windows, and the door swings,<span class="lnum"
+							>390</span>
+					</div>
+					<div>Dry bones can harm no one.</div>
+					<div>Only a cock stood on the rooftree</div>
+					<div>Co co rico co co rico</div>
+					<div>In a flash of lightning. Then a damp gust</div>
+					<div>Bringing rain</div>
+				</div>
+				<div class="linegroup">
+					<div>Ganga was sunken, and the limp leaves</div>
+					<div>Waited for rain, while the black clouds</div>
+					<div>Gathered far distant, over Himavant.</div>
+					<div>The jungle crouched, humped in silence.</div>
+					<div>Then spoke the thunder<span class="lnum">400</span>
+					</div>
+					<div>DA</div>
+					<div id="ln402">
+						<span xml:lang="sa">Datta</span>: what have we given?<a epub:type="noteref" class="noteref"
+							href="#note-42">*</a>
+					</div>
+					<div>My friend, blood shaking my heart</div>
+					<div>The awful daring of a moment's surrender</div>
+					<div>Which an age of prudence can never retract</div>
+					<div>By this, and this only, we have existed</div>
+					<div>Which is not to be found in our obituaries </div>
+					<div id="ln408">Or in memories draped by the beneficent spider<a
+							epub:type="noteref" class="noteref" href="#note-43">*</a>
+					</div>
+					<div>Or under seals broken by the lean solicitor</div>
+					<div>In our empty rooms<span class="lnum">410</span>
+					</div>
+					<div>DA</div>
+					<div  id="ln412">
+						<span xml:lang="sa">Dayadhvam</span>: I have heard the key<a
+							epub:type="noteref" class="noteref" href="#note-44">*</a>
+					</div>
+					<div>Turn in the door once and turn once only</div>
+					<div>We think of the key, each in his prison</div>
+					<div>Thinking of the key, each confirms a prison</div>
+					<div>Only at nightfall, aetherial rumours</div>
+					<div>Revive for a moment a broken Coriolanus</div>
+					<div>DA</div>
+					<div>
+						<span xml:lang="sa">Damyata</span>: The boat responded</div>
+					<div>Gaily, to the hand expert with sail and oar<span class="lnum"
+							>420</span>
+					</div>
+					<div>The sea was calm, your heart would have responded</div>
+					<div>Gaily, when invited, beating obedient</div>
+					<div>To controlling hands</div>
+				</div>
+				<div class="linegroup">
+					<div class="indent">I sat upon the shore</div>
+					<div id="ln425">Fishing, with the arid plain behind me<a epub:type="noteref" class="noteref"
+							href="#note-45">*</a>
+					</div>
+					<div>Shall I at least set my lands in order?</div>
+					<div>London Bridge is falling down falling down falling down</div>
+					<div  id="ln428" xml:lang="it">
+						<em>Poi s'ascose nel foco che gli affina</em>
+						<a epub:type="noteref" class="noteref" href="#note-46">*</a>
+					</div>
+					<div id="ln429">
+						<span xml:lang="it">
+							<em>Quando fiam ceu chelidon</em>
+						</span> - O swallow swallow<a epub:type="noteref" class="noteref" href="#note-47">*</a>
+					</div>
+					<div  id="ln430" xml:lang="fr">
+						<em>Le Prince d'Aquitaine a la tour abolie</em>
+						<a epub:type="noteref" class="noteref" href="#note-48">*</a>
+						<span class="lnum">430</span>
+					</div>
+					<div>These fragments I have shored against my ruins</div>
+					<div id="ln432">Why then Ile fit you. Hieronymo's mad againe.<a
+							epub:type="noteref" class="noteref" href="#note-49">*</a>
+					</div>
+					<div  xml:lang="sa">Datta. Dayadhvam. Damyata.</div>
+					<div id="ln434" class="linegroup indent">
+						<span  xml:lang="sa">Shantih shantih shantih<a epub:type="noteref" class="noteref"
+								href="#note-50">*</a>
+						</span>
+					</div>
+				</div>
+			</section>
+		</section>
+		<section epub:type="backmatter" id="backmatter">
+			<section epub:type="rearnotes" id="rearnotes">
+				<h2>NOTES ON "THE WASTE LAND"</h2>
+				<p>Not only the title, but the plan and a good deal of the incidental symbolism of
+					the poem were suggested by Miss Jessie L. Weston's book on the Grail legend:
+					From Ritual to Romance</p>
+				<p>Indeed, so deeply am I indebted, Miss Weston's book will elucidate the
+					difficulties of the poem much better than my notes can do; and I recommend it
+					(apart from the great interest of the book itself) to any who think such
+					elucidation of the poem worth the trouble. To another work of anthropology I am
+					indebted in general, one which has influenced our generation profoundly; I mean
+					The Golden Bough; I have used especially the two volumes Adonis, Attis, Osiris.
+					Anyone who is acquainted with these works will immediately recognise in the poem
+					certain references to vegetation ceremonies.</p>
+				<section>
+					<h3>I. THE BURIAL OF THE DEAD</h3>
+					<div epub:type="rearnote" id="note-1">
+						<p><a href="#ln20">Line 20.</a> Cf. Ezekiel 2:1.</p>
+					</div>
+					<div epub:type="rearnote" id="note-2">
+						<p><a href="#ln23">23.</a> Cf. Ecclesiastes 12:5.</p>
+					</div>
+					<div epub:type="rearnote" id="note-3">
+						<p><a href="#ln31">31.</a> V. Tristan und Isolde, i, verses 5-8.</p>
+					</div>
+					<div epub:type="rearnote" id="note-4">
+						<p><a href="#ln42">42.</a> Id. iii, verse 24.</p>
+					</div>
+					<div epub:type="rearnote" id="note-5">
+						<p><a href="#ln46">46.</a> I am not familiar with the exact constitution of the Tarot pack of
+							cards, from which I have obviously departed to suit my own convenience.
+							The Hanged Man, a member of the traditional pack, fits my purpose in two
+							ways: because he is associated in my mind with the Hanged God of Frazer,
+							and because I associate him with the hooded figure in the passage of the
+							disciples to Emmaus in Part V. The Phoenician Sailor and the Merchant
+							appear later; also the "crowds of people," and Death by Water is
+							executed in Part IV. The Man with Three Staves (an authentic member of
+							the Tarot pack) I associate, quite arbitrarily, with the Fisher King
+							himself.</p>
+					</div>
+					<div epub:type="rearnote" id="note-6">
+						<p><a href="#ln60">60.</a> Cf. Baudelaire:</p>
+						<blockquote xml:lang="fr">
+							<p>"Fourmillante cite;, cite; pleine de reves,<br />Ou le spectre en
+								plein jour raccroche le passant."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-7">
+						<p><a href="#ln63">63.</a> Cf. Inferno, iii. 55-7.</p>
+						<blockquote xml:lang="it">
+							<p>"si lunga tratta<br />di gente, ch'io non avrei mai creduto<br />che
+								morte tanta n'avesse disfatta."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-8">
+						<p><a href="#ln64">64.</a> Cf. Inferno, iv. 25-7:</p>
+						<blockquote xml:lang="it">
+							<p>"Quivi, secondo che per ascoltahre,<br />"non avea pianto, ma' che di
+								sospiri,<br />"che l'aura eterna facevan tremare."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-9">
+						<p><a href="#ln68">68.</a> A phenomenon which I have often noticed.</p>
+					</div>
+					<div epub:type="rearnote" id="note-10">
+						<p><a href="#ln74">74.</a> Cf. the Dirge in Webster's White Devil .</p>
+					</div>
+					<div epub:type="rearnote" id="note-11">
+						<p><a href="#ln76">76.</a> V. Baudelaire, Preface to Fleurs du Mal.</p>
+					</div>
+				</section>
+				<section>
+					<h3>II. A GAME OF CHESS</h3>
+					<div epub:type="rearnote" id="note-12">
+						<p><a href="#ln77">77.</a> Cf. Antony and Cleopatra, II. ii., l. 190.</p>
+					</div>
+					<div epub:type="rearnote" id="note-13">
+						<p><a href="#ln92">92.</a> Laquearia. V. Aeneid, I. 726:</p>
+						<blockquote xml:lang="la">
+							<p>dependent lychni laquearibus aureis incensi, et noctem
+								flammis<br />funalia vincunt.</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-14">
+						<p><a href="#ln98">98.</a> Sylvan scene. V. Milton, Paradise Lost, iv. 140.</p>
+					</div>
+					<div epub:type="rearnote" id="note-15">
+						<p><a href="#ln99">99.</a> V. Ovid, Metamorphoses, vi, Philomela.</p>
+					</div>
+					<div epub:type="rearnote" id="note-16">
+						<p><a href="#ln100">100.</a> Cf. Part III, l. 204.</p>
+					</div>
+					<div epub:type="rearnote" id="note-17">
+						<p><a href="#ln115">115.</a> Cf. Part III, l. 195.</p>
+					</div>
+					<div epub:type="rearnote" id="note-18">
+						<p><a href="#ln118">118.</a> Cf. Webster:</p>
+						<blockquote>
+							<p>"Is the wind in that door still?"</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-19">
+						<p><a href="#ln126">126.</a> Cf. Part I, l. 37, 48.</p>
+					</div>
+					<div epub:type="rearnote" id="note-20">
+						<p><a href="#ln138">138.</a> Cf. the game of chess in Middleton's Women beware Women.</p>
+					</div>
+				</section>
+				<section>
+					<h3>III. THE FIRE SERMON</h3>
+					<div epub:type="rearnote" id="note-21">
+						<p><a href="#ln176">176.</a> V. Spenser, Prothalamion.</p>
+					</div>
+					<div epub:type="rearnote" id="note-22">
+						<p><a href="#ln192">192.</a> Cf. The Tempest, I. ii.</p>
+					</div>
+					<div epub:type="rearnote" id="note-23">
+						<p><a href="#ln196">196.</a> Cf. Marvell, To His Coy Mistress.</p>
+					</div>
+					<div epub:type="rearnote" id="note-24">
+						<p><a href="#ln197">197.</a> Cf. Day, Parliament of Bees:</p>
+						<blockquote>
+							<div>
+								<div>"When of the sudden, listening, you shall
+									hear,</div>
+								<div>"A noise of horns and hunting, which shall
+									bring</div>
+								<div>"Actaeon to Diana in the spring,</div>
+								<div>"Where all shall see her naked skin . . ."</div>
+							</div>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-25">
+						<p><a href="#ln199">199.</a> I do not know the origin of the ballad from which these lines are
+							taken: it was reported to me from Sydney, Australia.</p>
+					</div>
+					<div epub:type="rearnote" id="note-26">
+						<p><a href="#ln202">202.</a> V. Verlaine, Parsifal.</p>
+					</div>
+					<div epub:type="rearnote" id="note-27">
+						<p><a href="#ln210">210.</a> The currants were quoted at a price "cost insurance and freight to
+							London"; and the Bill of Lading etc. were to be handed to the buyer upon
+							payment of the sight draft.</p>
+					</div>
+					<div epub:type="rearnote" id="note-28">
+						<p><a href="#ln218">218.</a> Tiresias, although a mere spectator and not indeed a "character," is
+							yet the most important personage in the poem, uniting all the rest. Just
+							as the one-eyed merchant, seller of currants, melts into the Phoenician
+							Sailor, and the latter is not wholly distinct from Ferdinand Prince of
+							Naples, so all the women are one woman, and the two sexes meet in
+							Tiresias. What Tiresias sees, in fact, is the substance of the poem. The
+							whole passage from Ovid is of great anthropological interest:</p>
+						<blockquote xml:lang="la">
+							<p>'. . . Cum Iunone iocos et maior vestra profecto est<br /> Quam, quae
+								contingit maribus,' dixisse, 'voluptas.'<br /> Illa negat; placuit
+								quae sit sententia docti<br /> Quaerere Tiresiae: venus huic erat
+								utraque nota.<br /> Nam duo magnorum viridi coeuntia silva<br />
+								Corpora serpentum baculi violaverat ictu<br /> Deque viro factus,
+								mirabile, femina septem<br /> Egerat autumnos; octavo rursus
+								eosdem<br /> Vidit et 'est vestrae si tanta potentia plagae,'<br />
+								Dixit 'ut auctoris sortem in contraria mutet,<br /> Nunc quoque vos
+								feriam!' percussis anguibus isdem<br /> Forma prior rediit
+								genetivaque venit imago.<br /> Arbiter hic igitur sumptus de lite
+								iocosa<br /> Dicta Iovis firmat; gravius Saturnia iusto<br /> Nec
+								pro materia fertur doluisse suique<br /> Iudicis aeterna damnavit
+								lumina nocte,<br /> At pater omnipotens (neque enim licet inrita
+								cuiquam<br /> Facta dei fecisse deo) pro lumine adempto<br /> Scire
+								futura dedit poenamque levavit honore.<br />
+							</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-29">
+						<p><a href="#ln221">221.</a> This may not appear as exact as Sappho's lines, but I had in mind
+							the "longshore" or "dory" fisherman, who returns at nightfall.</p>
+					</div>
+					<div epub:type="rearnote" id="note-30">
+						<p><a href="#ln253">253.</a> V. Goldsmith, the song in The Vicar of Wakefield.</p>
+					</div>
+					<div epub:type="rearnote" id="note-31">
+						<p><a href="#ln257">257.</a> V. The Tempest, as above.</p>
+					</div>
+					<div epub:type="rearnote" id="note-32">
+						<p><a href="#ln264">264.</a> The interior of St. Magnus Martyr is to my mind one of the finest
+							among Wren's interiors. See The Proposed Demolition of Nineteen City
+							Churches (P. S. King & Son, Ltd.).</p>
+					</div>
+					<div epub:type="rearnote" id="note-33">
+						<p><a href="#ln266">266.</a> The Song of the (three) Thames-daughters begins here. From line 292
+							to 306 inclusive they speak in turn. V. Gutterdsammerung, III. i: the
+							Rhine-daughters.</p>
+					</div>
+					<div epub:type="rearnote" id="note-34">
+						<p><a href="#ln279">279.</a> V. Froude, Elizabeth, Vol. I, ch. iv, letter of De Quadra to Philip
+							of Spain:</p>
+						<blockquote>
+							<div>
+								<div>"In the afternoon we were in a barge, watching the
+									games on the river.</div>
+								<div>(The queen) was alone with Lord Robert and myself
+									on the poop,</div>
+								<div>when they began to talk nonsense, and went so far
+									that Lord Robert</div>
+								<div>at last said, as I was on the spot there was no
+									reason why they</div>
+								<div>should not be married if the queen pleased."</div>
+							</div>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-35">
+						<p><a href="#ln293">293.</a> Cf. Purgatorio, v. 133:</p>
+						<blockquote>
+							<p>"Ricorditi di me, che son la Pia;<br />Siena mi fe', disfecemi
+								Maremma."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-36">
+						<p><a href="#ln307">307.</a> V. St. Augustine's Confessions: "to Carthage then I came, where a
+							cauldron of unholy loves sang all about mine ears."</p>
+					</div>
+					<div epub:type="rearnote" id="note-37">
+						<p><a href="#ln308">308.</a> The complete text of the Buddha's Fire Sermon (which corresponds in
+							importance to the Sermon on the Mount) from which these words are taken,
+							will be found translated in the late Henry Clarke Warren's Buddhism in
+							Translation (Harvard Oriental Series). Mr. Warren was one of the great
+							pioneers of Buddhist studies in the Occident.</p>
+					</div>
+					<div epub:type="rearnote" id="note-38">
+						<p><a href="#ln309">309.</a> From St. Augustine's Confessions again. The collocation of these two
+							representatives of eastern and western asceticism, as the culmination of
+							this part of the poem, is not an accident.</p>
+					</div>
+				</section>
+				<section>
+					<h3>V. WHAT THE THUNDER SAID</h3>
+					<p>In the first part of Part V three themes are employed: the journey to Emmaus,
+						the approach to the Chapel Perilous (see Miss Weston's book) and the present
+						decay of eastern Europe.</p>
+					<div epub:type="rearnote" id="note-39">
+						<p><a href="#ln357">357.</a> This is Turdus aonalaschkae pallasii, the hermit-thrush which I have
+							heard in Quebec County. Chapman says (Handbook of Birds of Eastern North
+							America) "it is most at home in secluded woodland and thickety retreats.
+							. . . Its notes are not remarkable for variety or volume, but in purity
+							and sweetness of tone and exquisite modulation they are unequalled." Its
+							"water-dripping song" is justly celebrated.</p>
+					</div>
+					<div epub:type="rearnote" id="note-40">
+						<p><a href="#ln360">360.</a> The following lines were stimulated by the account of one of the
+							Antarctic expeditions (I forget which, but I think one of Shackleton's):
+							it was related that the party of explorers, at the extremity of their
+							strength, had the constant delusion that there was one more member than
+							could actually be counted.</p>
+					</div>
+					<div epub:type="rearnote" id="note-41">
+						<p><a href="#ln367">367-77.</a> Cf. Hermann Hesse, Blick ins Chaos:</p>
+						<blockquote xml:lang="de">
+							<p>"Schon ist halb Europa, schon ist zumindest der halbe Osten Europas
+								auf dem<br /> Wege zum Chaos, fhrt betrunken im heiligem Wahn am
+								Abgrund entlang<br /> und singt dazu, singt betrunken und hymnisch
+								wie Dmitri Karamasoff sang.<br /> Ueber diese Lieder lacht der
+								Bsrger beleidigt, der Heilige<br /> und Seher hrt sie mit
+								Trvnen."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-42">
+						<p><a href="#ln402">402.</a> <q xml:lang="sa">"Datta, dayadhvam, damyata"</q> (Give, sympathize,
+							control). The fable of the meaning of the Thunder is found in the
+							Brihadaranyaka-Upanishad, 5, 1. A translation is found in Deussen's
+							Sechzig Upanishads des Veda, p. 489.</p>
+					</div>
+					<div epub:type="rearnote" id="note-43">
+						<p><a href="#ln408">408.</a> Cf. Webster, The White Devil, v. vi:</p>
+						<blockquote>
+							<p>". . . they'll remarry<br /> Ere the worm pierce your winding-sheet,
+								ere the spider<br /> Make a thin curtain for your epitaphs."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-44">
+						<p><a href="#ln412">412.</a> Cf. Inferno, xxxiii. 46:</p>
+						<blockquote xml:lang="it">
+							<p>"ed io sentii chiavar l'uscio di sotto<br /> all'orribile torre."</p>
+						</blockquote>
+						<p>Also F. H. Bradley, Appearance and Reality, p. 346:</p>
+						<blockquote>
+							<p>"My external sensations are no less private to myself than are my
+								thoughts or my feelings. In either case my experience falls within
+								my own circle, a circle closed on the outside; and, with all its
+								elements alike, every sphere is opaque to the others which surround
+								it. . . . In brief, regarded as an existence which appears in a
+								soul, the whole world for each is peculiar and private to that
+								soul."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-45">
+						<p><a href="#ln425">425.</a> V. Weston, From Ritual to Romance; chapter on the Fisher King.</p>
+					</div>
+					<div epub:type="rearnote" id="note-46">
+						<p><a href="#ln428">428.</a> V. Purgatorio, xxvi. 148.</p>
+						<blockquote xml:lang="it">
+							<p>"'Ara vos prec per aquella valor<br /> 'que vos guida al som de
+								l'escalina,<br /> 'sovegna vos a temps de ma dolor.'<br /> Poi
+								s'ascose nel foco che gli affina."</p>
+						</blockquote>
+					</div>
+					<div epub:type="rearnote" id="note-47">
+						<p><a href="#ln429">429.</a> V. Pervigilium Veneris. Cf. Philomela in Parts II and III.</p>
+					</div>
+					<div epub:type="rearnote" id="note-48">
+						<p><a href="#ln430">430.</a> V. Gerard de Nerval, Sonnet El Desdichado.</p>
+					</div>
+					<div epub:type="rearnote" id="note-49">
+						<p><a href="#ln432">432.</a> V. Kyd's Spanish Tragedy.</p>
+					</div>
+					<div epub:type="rearnote" id="note-50">
+						<p><a href="#ln434">434.</a> Shantih. Repeated as here, a formal ending to an Upanishad. 'The
+							Peace which passeth understanding' is a feeble translation of the
+							content of this word.</p>
+					</div>
+				</section>
+			</section>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/wasteland-cover.jpg b/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/wasteland-cover.jpg
new file mode 100644
index 0000000..8308ed4
Binary files /dev/null and b/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/wasteland-cover.jpg differ
diff --git a/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/wasteland-nav.xhtml b/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/wasteland-nav.xhtml
new file mode 100644
index 0000000..0997eb1
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/wasteland-nav.xhtml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<meta charset="utf-8"></meta>		
+		<link rel="stylesheet" type="text/css" href="wasteland.css" class="day" title="day"/> 
+		<link rel="alternate stylesheet" type="text/css" href="wasteland-night.css" class="night" title="night"/>		
+	</head>
+	<body>
+		<nav epub:type="toc" id="toc">			
+			<ol>
+				<li><a href="wasteland-content.xhtml#ch1">I. THE BURIAL OF THE DEAD</a></li>
+				<li><a href="wasteland-content.xhtml#ch2">II. A GAME OF CHESS</a></li>
+				<li><a href="wasteland-content.xhtml#ch3">III. THE FIRE SERMON</a></li>
+				<li><a href="wasteland-content.xhtml#ch4">IV. DEATH BY WATER</a></li>
+				<li><a href="wasteland-content.xhtml#ch5">V. WHAT THE THUNDER SAID</a></li>
+				<li><a href="wasteland-content.xhtml#rearnotes">NOTES ON "THE WASTE LAND"</a></li>
+			</ol>			
+		</nav>
+		<nav epub:type="landmarks">
+			<ol>
+				<li><a epub:type="frontmatter" href="wasteland-content.xhtml#frontmatter"
+						>frontmatter</a></li>
+				<li><a epub:type="bodymatter" href="wasteland-content.xhtml#bodymatter"
+						>bodymatter</a></li>
+				<li><a epub:type="backmatter" href="wasteland-content.xhtml#backmatter"
+						>backmatter</a></li>
+			</ol>
+		</nav>
+
+	</body>
+</html>
diff --git a/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/wasteland-night.css b/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/wasteland-night.css
new file mode 100644
index 0000000..f63448c
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/wasteland-night.css
@@ -0,0 +1,19 @@
+ at charset "UTF-8";
+ at import "wasteland.css";
+
+body {
+    color: rgb(255,250,205);
+    background-color: rgb(20,20,20);
+}
+
+span.lnum {
+    color: rgb(175,170,125);
+}
+
+a.noteref {
+    color: rgb(120,120,120);
+}
+
+section#rearnotes a {
+    color: rgb(255,250,205);
+}
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/wasteland.css b/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/wasteland.css
new file mode 100644
index 0000000..1e4f240
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/wasteland.css
@@ -0,0 +1,59 @@
+ at charset "UTF-8";
+ at import "fonts.css";
+ at namespace "http://www.w3.org/1999/xhtml";
+ at namespace epub "http://www.idpf.org/2007/ops";
+
+body {
+    margin-left: 6em;
+    margin-right: 16em;
+    color: black;
+    /* use sans-serif as fallback to make the difference obvious */    
+    font-family: 'OldStandard', sans-serif;    
+    background-color: rgb(255,255,245);
+    line-height: 1.5em;
+}
+
+h2 {
+    margin-top: 5em;
+    margin-bottom: 2em;
+}
+
+h3 {
+    margin-top: 3em;
+}
+
+.linegroup { 
+    margin-top: 1.6em; 
+}
+
+span.lnum {
+    float: right;
+    color: gray;
+    font-size : 90%;
+}
+
+a.noteref {    
+    color: rgb(215,215,195);
+    text-decoration: none;
+    margin-left: 0.5em;
+    margin-right: 0.5em;
+}
+
+section#rearnotes a {
+    color: black;
+    text-decoration: none;    
+    border-bottom : 1px dotted gray;
+    margin-right: 0.8em;
+}
+
+.indent {
+    padding-left: 3em;
+}
+
+.indent2 {
+    padding-left: 5em;
+}
+
+*[epub|type~='dedication'] {
+    padding-left: 2em;
+}
diff --git a/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/wasteland.ncx b/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/wasteland.ncx
new file mode 100644
index 0000000..0f1da8b
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/wasteland.ncx
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/" xmlns="http://www.daisy.org/z3986/2005/ncx/"
+    version="2005-1" xml:lang="en">
+    <head>
+        <meta name="dtb:uid" content="code.google.com.epub-samples.wasteland-otf"/>
+    </head>
+    <docTitle>
+        <text>The Waste Land</text>
+    </docTitle>
+    <navMap>
+        <!-- 2.01 NCX: playOrder is optional -->
+        <navPoint id="ch1">
+            <navLabel>
+                <text>I. THE BURIAL OF THE DEAD</text>
+            </navLabel>
+            <content src="wasteland-content.xhtml#ch1"/>
+        </navPoint>
+        <navPoint id="ch2">
+            <navLabel>
+                <text>II. A GAME OF CHESS</text>
+            </navLabel>
+            <content src="wasteland-content.xhtml#ch2"/>
+        </navPoint>
+        <navPoint id="ch3">
+            <navLabel>
+                <text>III. THE FIRE SERMON</text>
+            </navLabel>
+            <content src="wasteland-content.xhtml#ch3"/>
+        </navPoint>
+        <navPoint id="ch4">
+            <navLabel>
+                <text>IV. DEATH BY WATER</text>
+            </navLabel>
+            <content src="wasteland-content.xhtml#ch4"/>
+        </navPoint>
+        <navPoint id="ch5">
+            <navLabel>
+                <text>V. WHAT THE THUNDER SAID</text>
+            </navLabel>
+            <content src="wasteland-content.xhtml#ch5"/>
+        </navPoint>
+        <navPoint id="rearnotes">
+            <navLabel>
+                <text>NOTES ON "THE WASTE LAND"</text>
+            </navLabel>
+            <content src="wasteland-content.xhtml#rearnotes"/>
+        </navPoint>
+    </navMap>
+</ncx>
diff --git a/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/wasteland.opf b/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/wasteland.opf
new file mode 100644
index 0000000..9dc11d9
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/wasteland-otf/EPUB/wasteland.opf
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xml:lang="en-US" prefix="cc: http://creativecommons.org/ns#">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">code.google.com.epub-samples.wasteland-otf</dc:identifier>
+        <dc:title>The Waste Land</dc:title>
+        <dc:creator>T.S. Eliot</dc:creator>
+        <dc:language>en-US</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <dc:description>Using OTF fonts, fallback to sans-serif system font</dc:description>
+        <meta property="dcterms:modified">2012-01-18T12:47:00Z</meta>
+        <!-- rights expressions for the work as a whole -->
+        <dc:rights>This work is shared with the public using the Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) license.</dc:rights>        
+        <link rel="cc:license" href="http://creativecommons.org/licenses/by-sa/3.0/"/>
+        <meta property="cc:attributionURL">http://code.google.com/p/epub-samples/</meta>
+        <!-- rights expression for the cover image -->       
+        <link rel="cc:license" refines="#cover" href="http://creativecommons.org/licenses/by-sa/3.0/" />
+        <link rel="cc:attributionURL" refines="#cover" href="http://en.wikipedia.org/wiki/Simon_Fieldhouse" />        
+        <!-- cover meta element included for 2.0 reading system compatibility: -->
+        <meta name="cover" content="cover"/>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="wasteland-content.xhtml" media-type="application/xhtml+xml" />
+        <item id="nav" href="wasteland-nav.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="cover" href="wasteland-cover.jpg" media-type="image/jpeg" properties="cover-image" />
+        <item id="css" href="wasteland.css" media-type="text/css" />
+        <item id="css-fonts" href="fonts.css" media-type="text/css" />
+        <item id="css-night" href="wasteland-night.css" media-type="text/css" />
+        <item id="font.OldStandard.regular" href="OldStandard-Regular.otf" media-type="application/vnd.ms-opentype"/>
+        <item id="font.OldStandard.italic" href="OldStandard-Italic.otf" media-type="application/vnd.ms-opentype"/>
+        <item id="font.OldStandard.bold" href="OldStandard-Bold.otf" media-type="application/vnd.ms-opentype"/>        
+        <!-- ncx included for 2.0 reading system compatibility: -->
+        <item id="ncx" href="wasteland.ncx" media-type="application/x-dtbncx+xml" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/30/expanded/valid/wasteland-otf/META-INF/container.xml b/src/test/resources/30/expanded/valid/wasteland-otf/META-INF/container.xml
new file mode 100644
index 0000000..8bd2e5e
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/wasteland-otf/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/wasteland.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/30/expanded/valid/wasteland-otf/mimetype b/src/test/resources/30/expanded/valid/wasteland-otf/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/30/expanded/valid/wasteland-otf/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/30/single/nav/invalid/h-text.xhtml b/src/test/resources/30/single/nav/invalid/h-text.xhtml
new file mode 100644
index 0000000..2772eeb
--- /dev/null
+++ b/src/test/resources/30/single/nav/invalid/h-text.xhtml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-nav-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<?oxygen SCHSchema="../../../src/schema/epub-nav-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
+    <head>
+        
+    </head>
+    <body>
+        
+        <nav epub:type="toc" id="toc">
+            <h1></h1>
+            <ol>
+                <li><a href="chap1.xhtml">Chapter 1</a>
+                    <ol>
+                        <li><a href="chap1.xhtml#sec-1.1">Chapter 1.1</a>
+                            <ol style="display:none">
+                                <li><a href="chap1.xhtml#sec-1.1.1">Section 1.1.1</a></li>
+                                <li><a href="chap1.xhtml#sec-1.1.2">Section 1.1.2</a></li>
+                            </ol>
+                        </li>
+                        <li><a href="chap1.xhtml#sec-1.2">Chapter 1.2</a></li>
+                    </ol>
+                </li>
+                <li><a href="chap2.xhtml">Chapter 2</a></li>
+            </ol>
+        </nav>
+        
+        <nav epub:type="page-list" style="display:none">
+            <!-- the pageList -->
+            <h2><span> </span></h2>
+            <ol>
+                <li><a href="chap1.xhtml#p1">arbitrary XHTML Phrasing content</a></li>
+                <li><a href="chap1.xhtml#p2">arbitrary XHTML Phrasing content</a></li>
+            </ol>
+        </nav>
+        
+        <nav epub:type="landmarks">
+            <!-- the guide -->
+            <h2> </h2>
+            <ol>
+                <li><a epub:type="toc" href="#toc">Table of Contents</a></li>
+                <li><a epub:type="loi" href="content.html#loi">List of Illustrations</a></li>
+                <li><a epub:type="bodymatter" href="content.html#bodymatter">Start of
+                    Content</a></li>
+            </ol>
+        </nav>
+        <!-- lists grouped by sections -->
+        <nav epub:type="lot">
+            <h2>List of Tables, grouped by chapter</h2>
+            <!-- wrong value for "hidden" (needs to be empty string "") -->
+            <ol hidden="">
+                <li>
+                    <!-- link points to chapter instead of table -->
+                    <a href="chap1.xhtml#chapter-1">Chapter 1</a>
+                    <ol>
+                        <li><a href="chap1.xhtml#table-1.1">Table 1.1</a>
+                        </li>
+                        <li><a href="chap1.xhtml#table-1.2">Table 1.2</a></li>
+                    </ol>
+                </li>
+                <li>
+                    <!-- "heading" can only be a 'span' or 'a' -->
+                    <p>Tables in Chapter 2</p>
+                    
+                    <!-- wrong value for "hidden" (the correct form is to remove the attribute completely) -->
+                    <ol hidden="false">
+                        <li>
+                            <!-- link points to illustration instead of table -->
+                            <a href="chap2.xhtml#illustration-2.1">Illustration 2.1</a>
+                        </li>
+                        <li><a href="chap2.xhtml#table-2.2">Table 2.2</a></li>
+                        <li><a href="chap2.xhtml#table-2.3">Table 2.3</a></li>
+                    </ol>
+                </li>
+                
+                <li>
+                    <!-- "span" must contain phrasing text -->
+                    <span></span>
+                    <ol>
+                        <li>
+                            <!-- 'span' only allowed for 'li' with 'ol' descendant(s) -->
+                            <span>Table a.1</span>
+                        </li>
+                        <li><a href="appendix.xhtml#table-a.2">Table a.2</a></li>
+                    </ol>
+                </li>
+            </ol>
+        </nav>
+    </body>
+</html>
diff --git a/src/test/resources/30/single/nav/invalid/nav-labels-001.xhtml b/src/test/resources/30/single/nav/invalid/nav-labels-001.xhtml
new file mode 100644
index 0000000..4d2ad97
--- /dev/null
+++ b/src/test/resources/30/single/nav/invalid/nav-labels-001.xhtml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-nav-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<?oxygen SCHSchema="../../../src/schema/epub-nav-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
+    <!-- no label for anhor -->
+    <head></head>
+    <body>
+        
+        <nav epub:type="toc" id="toc">
+            <!-- the navMap -->
+            <h1>Table of contents</h1>
+            <ol>
+                <li><a href="chap1.xhtml">Chapter 1</a>
+                    <ol>
+                        <li><a href="chap1.1.xhtml"></a></li>
+                        <li><a href="chap1.1.xhtml">arbitrary XHTML Phrasing content</a></li>
+                    </ol>
+                </li>
+                <li><a href="chap1.xhtml">Chapter 2</a></li>
+            </ol>
+        </nav>
+      
+        <nav epub:type="page-list">
+            <!-- the pageList -->
+            <h2>Pagebreaks of the print version, third edition</h2>
+            <ol>
+                <li><a href="chap1.xhtml#p1">arbitrary XHTML Phrasing content</a></li>
+                <li><a href="chap1.xhtml#p2">arbitrary XHTML Phrasing content</a></li>
+            </ol>
+        </nav>
+
+        <!-- arbitrary XHTML Flow content -->
+
+        <nav epub:type="landmarks">
+            <!-- the guide -->
+            <h2>Guide</h2>
+            <ol>
+                <li><a epub:type="toc" href="#toc">Table of Contents</a></li>
+                <li><a epub:type="loi" href="content.html#loi">List of Illustrations</a></li>
+                <li><a epub:type="bodymatter" href="content.html#bodymatter">Start of
+                    Content</a></li>
+            </ol>
+        </nav>
+
+    </body>
+</html>
diff --git a/src/test/resources/30/single/nav/invalid/nav-labels-002.xhtml b/src/test/resources/30/single/nav/invalid/nav-labels-002.xhtml
new file mode 100644
index 0000000..2502146
--- /dev/null
+++ b/src/test/resources/30/single/nav/invalid/nav-labels-002.xhtml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-nav-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<?oxygen SCHSchema="../../../src/schema/epub-nav-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
+    <!-- no label for anhor -->
+    <head></head>
+    <body>
+        
+        <nav epub:type="toc" id="toc">
+            <!-- the navMap -->
+            <h1>Table of contents</h1>
+            <ol>
+                <li><a href="chap1.xhtml">Chapter 1</a>
+                    <ol>
+                        <li><a href="chap1.1.xhtml"><span></span></a></li>
+                        <li><a href="chap1.1.xhtml"><span>OK</span></a></li>
+                        <li><a href="chap1.1.xhtml">arbitrary XHTML Phrasing content</a></li>
+                    </ol>
+                </li>
+                <li><a href="chap1.xhtml">Chapter 2</a></li>
+            </ol>
+        </nav>
+«       
+        <nav epub:type="page-list">
+            <!-- the pageList -->
+            <h2>Pagebreaks of the print version, third edition</h2>
+            <ol>
+                <li><a href="chap1.xhtml#p1">arbitrary XHTML Phrasing content</a></li>
+                <li><a href="chap1.xhtml#p2">arbitrary XHTML Phrasing content</a></li>
+            </ol>
+        </nav>
+
+        <!-- arbitrary XHTML Flow content -->
+
+        <nav epub:type="landmarks">
+            <!-- the guide -->
+            <h2>Guide</h2>
+            <ol>
+                <li><a epub:type="toc" href="#toc">Table of Contents</a></li>
+                <li><a epub:type="loi" href="content.html#loi">List of Illustrations</a></li>
+                <li><a epub:type="bodymatter" href="content.html#bodymatter">Start of
+                    Content</a></li>
+            </ol>
+        </nav>
+
+    </body>
+</html>
diff --git a/src/test/resources/30/single/nav/invalid/nav-landmarks-001.xhtml b/src/test/resources/30/single/nav/invalid/nav-landmarks-001.xhtml
new file mode 100644
index 0000000..82d3713
--- /dev/null
+++ b/src/test/resources/30/single/nav/invalid/nav-landmarks-001.xhtml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-nav-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<?oxygen SCHSchema="../../../src/schema/epub-nav-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
+    <!-- all targets within landmarks must have epub:type -->
+    <head></head>
+    <body>
+        
+        <nav epub:type="toc" id="toc">
+            <!-- the navMap -->
+            <h1>Table of contents</h1>
+            <ol>
+                <li><a href="chap1.xhtml">Chapter 1</a>
+                    <ol>
+                        <li><a href="chap1.1.xhtml">arbitrary XHTML Phrasing content</a></li>
+                        <li><a href="chap1.1.xhtml">arbitrary XHTML Phrasing content</a></li>
+                    </ol>
+                </li>
+                <li><a href="chap1.xhtml">Chapter 2</a></li>
+            </ol>
+        </nav>
+
+        <nav epub:type="page-list">
+            <!-- the pageList -->
+            <h2>Pagebreaks of the print version, third edition</h2>
+            <ol>
+                <li><a href="chap1.xhtml#p1">arbitrary XHTML Phrasing content</a></li>
+                <li><a href="chap1.xhtml#p2">arbitrary XHTML Phrasing content</a></li>
+            </ol>
+        </nav>
+
+        <!-- arbitrary XHTML Flow content -->
+
+        <nav epub:type="landmarks">
+            <!-- the guide -->
+            <h2>Guide</h2>
+            <ol>
+                <li><a epub:type="toc" href="#toc">Table of Contents</a></li>
+                <li><a epub:type="loi" href="content.html#loi">List of Illustrations</a></li>
+                <li><a href="content.html#bodymatter">Start of
+                    Content</a></li>
+            </ol>
+        </nav>
+
+    </body>
+</html>
diff --git a/src/test/resources/30/single/nav/invalid/nav-landmarks-002.xhtml b/src/test/resources/30/single/nav/invalid/nav-landmarks-002.xhtml
new file mode 100644
index 0000000..09a681c
--- /dev/null
+++ b/src/test/resources/30/single/nav/invalid/nav-landmarks-002.xhtml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-nav-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<?oxygen SCHSchema="../../../src/schema/epub-nav-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
+    <!-- dupe landmarks elements --> 
+    <head></head>
+    <body>
+        
+        <nav epub:type="toc" id="toc">
+            <!-- the navMap -->
+            <h1>Table of contents</h1>
+            <ol>
+                <li><a href="chap1.xhtml">Chapter 1</a>
+                    <ol>
+                        <li><a href="chap1.1.xhtml">arbitrary XHTML Phrasing content</a></li>
+                        <li><a href="chap1.1.xhtml">arbitrary XHTML Phrasing content</a></li>
+                    </ol>
+                </li>
+                <li><a href="chap1.xhtml">Chapter 2</a></li>
+            </ol>
+        </nav>
+      
+        <nav epub:type="page-list">
+            <!-- the pageList -->
+            <h2>Pagebreaks of the print version, third edition</h2>
+            <ol>
+                <li><a href="chap1.xhtml#p1">arbitrary XHTML Phrasing content</a></li>
+                <li><a href="chap1.xhtml#p2">arbitrary XHTML Phrasing content</a></li>
+            </ol>
+        </nav>
+       
+        <nav epub:type="landmarks">
+            <!-- the guide -->
+            <h2>Guide</h2>
+            <ol>
+                <li><a epub:type="toc" href="#toc">Table of Contents</a></li>
+                <li><a epub:type="loi" href="content.html#loi">List of Illustrations</a></li>
+                <li><a epub:type="bodymatter" href="content.html#bodymatter">Start of
+                    Content</a></li>
+            </ol>
+        </nav>
+        
+        <nav epub:type="landmarks">
+            <!-- the guide -->
+            <h2>Guide</h2>
+            <ol>
+                <li><a epub:type="toc" href="#toc">Table of Contents</a></li>
+                <li><a epub:type="loi" href="content.html#loi">List of Illustrations</a></li>
+                <li><a epub:type="bodymatter" href="content.html#bodymatter">Start of
+                    Content</a></li>
+            </ol>
+        </nav>
+
+    </body>
+</html>
diff --git a/src/test/resources/30/single/nav/invalid/nav-no-toc.xhtml b/src/test/resources/30/single/nav/invalid/nav-no-toc.xhtml
new file mode 100644
index 0000000..e398567
--- /dev/null
+++ b/src/test/resources/30/single/nav/invalid/nav-no-toc.xhtml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-nav-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<?oxygen SCHSchema="../../../src/schema/epub-nav-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
+    <!-- no toc -->
+    <head></head>
+    <body>
+        
+        <nav epub:type="page-list">
+            <!-- the pageList -->
+            <h2>Pagebreaks of the print version, third edition</h2>
+            <ol>
+                <li><a href="chap1.xhtml#p1">arbitrary XHTML Phrasing content</a></li>
+                <li><a href="chap1.xhtml#p2">arbitrary XHTML Phrasing content</a></li>
+            </ol>
+        </nav>
+
+        <nav epub:type="landmarks">
+            <!-- the guide -->
+            <h2>Guide</h2>
+            <ol>
+                <li><a epub:type="toc" href="#toc">Table of Contents</a></li>
+                <li><a epub:type="loi" href="content.html#loi">List of Illustrations</a></li>
+                <li><a epub:type="bodymatter" href="content.html#bodymatter">Start of
+                    Content</a></li>
+            </ol>
+        </nav>
+
+    </body>
+</html>
diff --git a/src/test/resources/30/single/nav/invalid/nav-pagelist-001.xhtml b/src/test/resources/30/single/nav/invalid/nav-pagelist-001.xhtml
new file mode 100644
index 0000000..3367023
--- /dev/null
+++ b/src/test/resources/30/single/nav/invalid/nav-pagelist-001.xhtml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-nav-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<?oxygen SCHSchema="../../../src/schema/epub-nav-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
+    <!-- multiple page-list elements -->
+    <head></head>
+    <body>
+        
+        <nav epub:type="toc" id="toc">
+            <!-- the navMap -->
+            <h1>Table of contents</h1>
+            <ol>
+                <li><a href="chap1.xhtml">Chapter 1</a>
+                    <ol>
+                        <li><a href="chap1.1.xhtml">arbitrary XHTML Phrasing content</a></li>
+                        <li><a href="chap1.1.xhtml">arbitrary XHTML Phrasing content</a></li>
+                    </ol>
+                </li>
+                <li><a href="chap1.xhtml">Chapter 2</a></li>
+            </ol>
+        </nav>
+
+        
+
+        <nav epub:type="page-list">
+            <ol>
+                <li><a href="chap1.xhtml#p1">arbitrary XHTML Phrasing content</a></li>
+                <li><a href="chap1.xhtml#p2">arbitrary XHTML Phrasing content</a></li>
+            </ol>
+        </nav>
+        
+        <nav epub:type="page-list">
+            <ol>
+                <li><a href="chap1.xhtml#p3">arbitrary XHTML Phrasing content</a></li>
+                <li><a href="chap1.xhtml#p4">arbitrary XHTML Phrasing content</a></li>
+            </ol>
+        </nav>
+
+
+
+    </body>
+</html>
diff --git a/src/test/resources/30/single/nav/invalid/noTocNav.xhtml b/src/test/resources/30/single/nav/invalid/noTocNav.xhtml
new file mode 100644
index 0000000..f816a24
--- /dev/null
+++ b/src/test/resources/30/single/nav/invalid/noTocNav.xhtml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" profile="http://www.idpf.org/epub/30/profile/content/">
+   <head>
+      <title>Moby-Dick</title>
+      <link rel="stylesheet" href="css/stylesheet.css" type="text/css"/>
+      <meta name="charset" content="utf-8"/>
+   </head>
+   <body>
+      <section class="frontmatter TableOfContents">
+         <header>
+            <h1>Contents</h1>
+         </header>
+         <nav xmlns:epub="http://www.idpf.org/2007/ops" id="toc">
+            <ol>
+               <li class="toc-BookTitlePage-rw" id="toc-titlepage">
+                  <a href="titlepage.xhtml">Moby-Dick</a>
+               </li>
+               <li class="toc-Preface-rw" id="toc-preface_001">
+                  <a href="preface_001.xhtml">Original Transcriber’s Notes:</a>
+               </li>
+               <li class="toc-Introduction-rw" id="toc-introduction_001">
+                  <a href="introduction_001.xhtml">ETYMOLOGY.</a>
+               </li>
+               <li class="toc-Epigraph-rw" id="toc-epigraph_001">
+                  <a href="epigraph_001.xhtml">EXTRACTS (Supplied by a Sub-Sub-Librarian).</a>
+               </li>
+               <li class="toc-Chapter-rw" id="toc-chapter_001">
+                  <a href="chapter_001.xhtml">Chapter 1. Loomings.</a>
+               </li>
+               <li class="toc-Chapter-rw" id="toc-chapter_002">
+                  <a href="chapter_002.xhtml">Chapter 2. The Carpet-Bag.</a>
+               </li>
+               <li class="toc-Chapter-rw" id="toc-chapter_136">
+                  <a href="chapter_136.xhtml">Epilogue</a>
+               </li>
+               <li>
+                  <a href="copyright.xhtml">Copyright Page</a>
+               </li>
+            </ol>
+         </nav>
+
+         <nav xmlns:epub="http://www.idpf.org/2007/ops" epub:type="landmarks" id="guide">
+            <h2>Guide</h2>
+            <ol>
+               <li>
+                  <a epub:type="toc" href="#toc">Table of Contents</a>
+               </li>
+               <li>
+                  <a epub:type="bodymatter" href="chapter_001.xhtml">Begin Reading</a>
+               </li>
+               <li>
+                  <a epub:type="copyright-page" href="copyright.xhtml">Copyright Page</a>
+               </li>
+            </ol>
+         </nav>
+
+      </section>
+   </body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/30/single/nav/invalid/req-heading.xhtml b/src/test/resources/30/single/nav/invalid/req-heading.xhtml
new file mode 100644
index 0000000..9952eb8
--- /dev/null
+++ b/src/test/resources/30/single/nav/invalid/req-heading.xhtml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-nav-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<?oxygen SCHSchema="../../../src/schema/epub-nav-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
+    <!-- any nav other than toc, page-list and landmarks must have a heading -->
+    <head></head>
+    <body>        
+        <nav epub:type="toc" id="toc">            
+            <ol>
+                <li><a href="chap1.xhtml">Chapter 1</a>
+                    <ol>
+                        <li><a href="chap1.xhtml#sec-1.1">Chapter 1.1</a>
+                            <ol style="display:none">
+                                <li><a href="chap1.xhtml#sec-1.1.1">Section 1.1.1</a></li>
+                                <li><a href="chap1.xhtml#sec-1.1.2">Section 1.1.2</a></li>
+                            </ol>
+                        </li>
+                        <li><a href="chap1.xhtml#sec-1.2">Chapter 1.2</a></li>
+                    </ol>
+                </li>
+                <li><a href="chap2.xhtml">Chapter 2</a></li>
+            </ol>
+        </nav>        
+        <nav epub:type="page-list">
+            <ol>
+                <li><a href="chap1.xhtml#p1">arbitrary XHTML Phrasing content</a></li>
+                <li><a href="chap1.xhtml#p2">arbitrary XHTML Phrasing content</a></li>
+            </ol>
+        </nav>
+        
+        <nav epub:type="landmarks">
+            <ol>
+                <li><a epub:type="toc" href="#toc">Table of Contents</a></li>
+                <li><a epub:type="loi" href="content.html#loi">List of Illustrations</a></li>
+                <li><a epub:type="bodymatter" href="content.html#bodymatter">Start of
+                    Content</a></li>
+            </ol>
+        </nav>
+
+        <nav>            
+            <ol>
+                <li><a epub:type="toc" href="#toc">Table of Contents</a></li>
+                <li><a epub:type="loi" href="content.html#loi">List of Illustrations</a></li>
+                <li><a epub:type="bodymatter" href="content.html#bodymatter">Start of
+                    Content</a></li>
+            </ol>
+        </nav>
+
+    </body>
+</html>
diff --git a/src/test/resources/30/single/nav/valid/issue156.xhtml b/src/test/resources/30/single/nav/valid/issue156.xhtml
new file mode 100644
index 0000000..a5f0ad7
--- /dev/null
+++ b/src/test/resources/30/single/nav/valid/issue156.xhtml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-nav-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<?oxygen SCHSchema="../../../src/schema/epub-nav-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
+    <head>
+        <!-- any head content -->
+    </head>
+    <body>
+        <!-- arbitrary XHTML Flow content -->
+        <nav epub:type="toc" id="toc">
+            <h1>Table of contents</h1>
+            <ol>
+                <li><a href="chap1.xhtml">Chapter 1</a>
+                    <ol>
+                        <li><a href="chap1.xhtml#sec-1.1">Chapter 1.1</a>
+                            <ol hidden="">
+                            	<!-- trailing whitespace in link href -->
+                                <li><a href="chap1.xhtml#sec-1.1.1 ">Section 1.1.1</a></li>
+                            	
+                            	<!-- leading whitespace in link href -->
+                                <li><a href=" chap1.xhtml#sec-1.1.2">Section 1.1.2</a></li>
+                            </ol>
+                        </li>
+                        <li><a href="chap1.xhtml#sec-1.2">Chapter 1.2</a></li>
+                    </ol>
+                </li>
+                <li><a href="chap2.xhtml">Chapter 2</a></li>
+            </ol>
+        </nav>
+        <!-- arbitrary XHTML Flow content -->
+        <nav epub:type="page-list" hidden="">
+            <!-- the pageList -->
+            <h2>Pagebreaks of the print version, third edition</h2>
+            <ol>
+                <li><a href="chap1.xhtml#p1">arbitrary XHTML Phrasing content</a></li>
+                <li><a href="chap1.xhtml#p2">arbitrary XHTML Phrasing content</a></li>
+            </ol>
+        </nav>
+        <!-- arbitrary XHTML Flow content -->
+        <nav epub:type="landmarks">
+            <!-- the guide -->
+            <h2>Guide</h2>
+            <ol>
+                <li><a epub:type="toc" href="#toc">Table of Contents</a></li>
+                <li><a epub:type="loi" href="content.html#loi">List of Illustrations</a></li>
+                <li><a epub:type="bodymatter" href="content.html#bodymatter">Start of
+                    Content</a></li>
+            </ol>
+        </nav>
+        <!-- lists grouped by sections -->
+        <nav epub:type="lot">
+            <h2>List of Tables, grouped by chapter</h2>
+            <ol>
+                <li><span>Tables in Chapter 1</span>
+                    <ol>
+                        <li><a href="chap1.xhtml#table-1.1">Table 1.1</a>
+                        </li>
+                        <li><a href="chap1.xhtml#table-1.2">Table 1.2</a></li>
+                    </ol>
+                </li>
+
+                <li><span>Tables in Chapter 2</span>
+                    <ol>
+                        <li><a href="chap2.xhtml#table-2.1">Table 2.1</a>
+                        </li>
+                        <li><a href="chap2.xhtml#table-2.2">Table 2.2</a></li>
+                        <li><a href="chap2.xhtml#table-2.3">Table 2.3</a></li>
+                    </ol>
+                </li>
+                <li><span>Tables in Appendix</span>
+                    <ol>
+                        <li><a href="appendix.xhtml#table-a.1">Table a.1</a>
+                        </li>
+                        <li><a href="appendix.xhtml#table-a.2">Table a.2</a></li>
+                    </ol>
+                </li>
+            </ol>
+        </nav>
+    </body>
+</html>
diff --git a/src/test/resources/30/single/nav/valid/minimal.xhtml b/src/test/resources/30/single/nav/valid/minimal.xhtml
new file mode 100644
index 0000000..cd0973d
--- /dev/null
+++ b/src/test/resources/30/single/nav/valid/minimal.xhtml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-nav-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<?oxygen SCHSchema="../../../src/schema/epub-nav-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
+    <head>
+        
+    </head>
+    <body>        
+        <nav epub:type="toc">
+            <h1>Table of contents</h1>
+            <ol>
+                <li><a href="chap1.xhtml">Chapter 1</a>
+                    <ol>
+                        <li><a href="chap1.1.xhtml">Chapter 1.1</a></li>
+                        <li><a href="chap1.2.xhtml">Chapter 1.2</a></li>
+                    </ol>
+                </li>
+                <li><a href="chap2.xhtml">Chapter 2</a></li>
+            </ol>
+        </nav>
+    </body>
+</html>
diff --git a/src/test/resources/30/single/nav/valid/nav001.xhtml b/src/test/resources/30/single/nav/valid/nav001.xhtml
new file mode 100644
index 0000000..8d27418
--- /dev/null
+++ b/src/test/resources/30/single/nav/valid/nav001.xhtml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-nav-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<?oxygen SCHSchema="../../../src/schema/epub-nav-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
+    <head>
+        <!-- any head content -->
+    </head>
+    <body>
+        <!-- arbitrary XHTML Flow content -->
+        <nav epub:type="toc" id="toc">
+            <h1>Table of contents</h1>
+            <ol>
+                <li><a href="chap1.xhtml">Chapter 1</a>
+                    <ol>
+                        <li><a href="chap1.xhtml#sec-1.1">Chapter 1.1</a>
+                            <ol hidden="">
+                                <li><a href="chap1.xhtml#sec-1.1.1">Section 1.1.1</a></li>
+                                <li><a href="chap1.xhtml#sec-1.1.2">Section 1.1.2</a></li>
+                            </ol>
+                        </li>
+                        <li><a href="chap1.xhtml#sec-1.2">Chapter 1.2</a></li>
+                    </ol>
+                </li>
+                <li><a href="chap2.xhtml">Chapter 2</a></li>
+            </ol>
+        </nav>
+        <!-- arbitrary XHTML Flow content -->
+        <nav epub:type="page-list" hidden="">
+            <!-- the pageList -->
+            <h2>Pagebreaks of the print version, third edition</h2>
+            <ol>
+                <li><a href="chap1.xhtml#p1">arbitrary XHTML Phrasing content</a></li>
+                <li><a href="chap1.xhtml#p2">arbitrary XHTML Phrasing content</a></li>
+            </ol>
+        </nav>
+        <!-- arbitrary XHTML Flow content -->
+        <nav epub:type="landmarks">
+            <!-- the guide -->
+            <h2>Guide</h2>
+            <ol>
+                <li><a epub:type="toc" href="#toc">Table of Contents</a></li>
+                <li><a epub:type="loi" href="content.html#loi">List of Illustrations</a></li>
+                <li><a epub:type="bodymatter" href="content.html#bodymatter">Start of
+                    Content</a></li>
+            </ol>
+        </nav>
+        <!-- lists grouped by sections -->
+        <nav epub:type="lot">
+            <h2>List of Tables, grouped by chapter</h2>
+            <ol>
+                <li><span>Tables in Chapter 1</span>
+                    <ol>
+                        <li><a href="chap1.xhtml#table-1.1">Table 1.1</a>
+                        </li>
+                        <li><a href="chap1.xhtml#table-1.2">Table 1.2</a></li>
+                    </ol>
+                </li>
+
+                <li><span>Tables in Chapter 2</span>
+                    <ol>
+                        <li><a href="chap2.xhtml#table-2.1">Table 2.1</a>
+                        </li>
+                        <li><a href="chap2.xhtml#table-2.2">Table 2.2</a></li>
+                        <li><a href="chap2.xhtml#table-2.3">Table 2.3</a></li>
+                    </ol>
+                </li>
+                <li><span>Tables in Appendix</span>
+                    <ol>
+                        <li><a href="appendix.xhtml#table-a.1">Table a.1</a>
+                        </li>
+                        <li><a href="appendix.xhtml#table-a.2">Table a.2</a></li>
+                    </ol>
+                </li>
+            </ol>
+        </nav>
+    </body>
+</html>
diff --git a/src/test/resources/30/single/opf/invalid/bindings-001.opf b/src/test/resources/30/single/opf/invalid/bindings-001.opf
new file mode 100644
index 0000000..74eb783
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/bindings-001.opf
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" 
+    unique-identifier="uid"  xmlns:dc="http://purl.org/dc/elements/1.1/" >
+    <!-- handler not xhtml -->
+    <metadata>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:language>en</dc:language>        
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="text001" href="text001.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="text002" href="text002.xhtml" media-type="application/xhtml+xml" />
+        <item id="img001" fallback="img002" href="image.png" media-type="image/png" />
+        <item id="img002" href="image.jpg" media-type="image/jpg" />
+        <item id="ncx" href="ncx.ncx" media-type="application/x-dtbncx+xml" />
+        <item id="impl" href="impl.xhtml" media-type="application/xhtml+xml"/>
+        <item id="slideshow" href="slideshow.xml" media-type="application/x-demo-slideshow"/>
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="text001" />
+        <itemref idref="text002" />
+    </spine>
+    <guide>
+        <reference href="text001.xhtml" type="cover" title="Cover"/>
+    </guide>
+    <bindings>
+        <mediaType media-type="application/x-demo-slideshow" handler="ncx"/>
+    </bindings>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/collection-invalid-do-sch-001.opf b/src/test/resources/30/single/opf/invalid/collection-invalid-do-sch-001.opf
new file mode 100644
index 0000000..d0f3b6f
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/collection-invalid-do-sch-001.opf
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <!-- collection DO lacks req identifier --> 
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
+        <dc:identifier id="uid">978-1-00000-000-0</dc:identifier>
+        <meta refines="#uid" property="identifier-type" scheme="onix:codelist5">15</meta>
+        <dc:title>Recombinant DNA Technology</dc:title>
+        <dc:language>en</dc:language>
+        <dc:type>edupub</dc:type>
+        <dc:creator>Jane Author</dc:creator>
+        <dc:publisher>Acme Publishing</dc:publisher>
+        <meta property="dcterms:modified">2014-08-28T01:30:20Z</meta>
+        <meta property="schema:audience" id="aud01">schema:audience</meta>
+        <meta id="ea02" property="schema:educationalAlignment">schema:educationalAlignment</meta>
+        <meta refines="#ea02" property="schema:alignmentType">teaches</meta>
+        <meta property="schema:interactivityType">Mixed</meta>
+        <meta property="schema:typicalAgeRange">18+</meta>
+    </metadata>
+    <manifest>
+        <!--NCX & CSS -->
+        <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/>
+        <item id="css1" href="css/epub.css" media-type="text/css"/>
+        <item id="css2" href="css/stylesheet.css" media-type="text/css"/>
+        <item id="css4" href="css/mainStyle.css" media-type="text/css"/>
+        
+        
+        <!--NCX & CSS -->
+        <item id="js" href="scripts/jquery-1.8.3.js" media-type="text/javascript" />
+        <item id="js1" href="scripts/jquery-just-touch.js" media-type="text/javascript" />
+        <item id="js2" href="scripts/jquery-ui-touch-punch.js" media-type="text/javascript" />
+        <item id="js3" href="scripts/main.js" media-type="text/javascript" />
+        <item id="js4" href="scripts/ui/jquery-ui.js" media-type="text/javascript" />
+        <item id="js5" href="scripts/ui/jquery.ui.core.js" media-type="text/javascript" />
+        <item id="js6" href="scripts/ui/jquery.ui.draggable.js" media-type="text/javascript" />
+        <item id="js7" href="scripts/ui/jquery.ui.droppable.js" media-type="text/javascript" />
+        <item id="js8" href="scripts/ui/jquery.ui.mouse.js" media-type="text/javascript" />
+        <item id="js9" href="scripts/ui/jquery.ui.widget.js" media-type="text/javascript" />
+        <item id="js10" href="scripts/T2_P3.js" media-type="text/javascript" />
+        
+        
+        <!--font -->
+        <item id="font001" href="fonts/MinionPro-Regular.otf" media-type="application/x-font-opentype"/>
+        <!--video -->
+        <item id="video1" href="video/DNA-Fingerprinting.mp4" media-type="video/mpeg4"/>
+        <item id="video2" href="video/DNA-Profiling.mp4" media-type="video/mpeg4"/>
+        
+        <!--contents -->
+        <item id="Cover" href="text/Cover.xhtml" media-type="application/xhtml+xml"/>
+        <item id="nav" href="text/nav.xhtml" media-type="application/xhtml+xml" properties="nav"/>
+        <item id="Part01" href="text/Part01.xhtml" media-type="application/xhtml+xml"/>
+        <item id="Contents" href="text/Contents.xhtml" media-type="application/xhtml+xml"/>
+        <item id="Part01chapter01" href="text/Part01chapter01.xhtml" media-type="application/xhtml+xml"/>
+        <item id="Part01chapter02" href="text/Part01chapter02.xhtml" media-type="application/xhtml+xml"/>
+        <item id="Part01chapter03" href="text/Part01chapter03.xhtml" media-type="application/xhtml+xml"/>
+        <item id="Part01chapter04" href="text/Part01chapter04.xhtml" media-type="application/xhtml+xml"/>
+        <item id="Part01chapter05" href="text/Part01chapter05.xhtml" media-type="application/xhtml+xml"/>
+        <item id="Part01chapter06" href="text/Part01chapter06.xhtml" media-type="application/xhtml+xml"/>
+        <item id="Frontmatter" href="text/Frontmatter.xhtml" media-type="application/xhtml+xml"/>
+        <item id="Frontmatter1" href="text/Frontmatter1.xhtml" media-type="application/xhtml+xml"/>
+        <item id="Frontmatter2" href="text/Frontmatter2.xhtml" media-type="application/xhtml+xml"/>
+        <item id="Backmatter" href="text/Backmatter.xhtml" media-type="application/xhtml+xml"/>
+        <item id="activity" href="text/activity.xhtml" media-type="application/xhtml+xml" properties="scripted"/>
+        <item id="Question" href="text/Question.xhtml" media-type="application/xhtml+xml" properties="scripted"/>
+        
+        <!--images -->
+        
+        <item id="image1" href="images/1.jpg" media-type="image/jpeg" />
+        <item id="image2" href="images/1a.jpg" media-type="image/jpeg" />
+        <item id="image3" href="images/2.jpg" media-type="image/jpeg" />
+        <item id="image4" href="images/2a.jpg" media-type="image/jpeg" />
+        <item id="image5" href="images/3.jpg" media-type="image/jpeg" />
+        <item id="image6" href="images/3a.jpg" media-type="image/jpeg" />
+        <item id="image7" href="images/4.jpg" media-type="image/jpeg" />
+        <item id="image8" href="images/4a.jpg" media-type="image/jpeg" />
+        <item id="image9" href="images/5.jpg" media-type="image/jpeg" />
+        <item id="image10" href="images/5a.jpg" media-type="image/jpeg" />
+        <item id="image11" href="images/6.jpg" media-type="image/jpeg" />
+        <item id="image12" href="images/7.jpg" media-type="image/jpeg" />
+        <item id="image13" href="images/8.jpg" media-type="image/jpeg" />
+        <item id="image14" href="images/check.jpg" media-type="image/jpeg" />
+        <item id="image15" href="images/Cover.jpg" media-type="image/jpeg" />
+        <item id="image16" href="images/f219-1.jpg" media-type="image/jpeg" />
+        <item id="image17" href="images/f220-1.jpg" media-type="image/jpeg" />
+        <item id="image18" href="images/f220-2.jpg" media-type="image/jpeg" />
+        <item id="image19" href="images/f221-1.jpg" media-type="image/jpeg" />
+        <item id="image20" href="images/f221-2.jpg" media-type="image/jpeg" />
+        <item id="image21" href="images/f222-1.jpg" media-type="image/jpeg" />
+        <item id="image22" href="images/f222-2.jpg" media-type="image/jpeg" />
+        <item id="image23" href="images/f222-3.jpg" media-type="image/jpeg" />
+        <item id="image24" href="images/f223-1.jpg" media-type="image/jpeg" />
+        <item id="image25" href="images/f224-1.jpg" media-type="image/jpeg" />
+        <item id="image26" href="images/f225-1.jpg" media-type="image/jpeg" />
+        <item id="image27" href="images/f225-2.jpg" media-type="image/jpeg" />
+        <item id="image28" href="images/f225-3.jpg" media-type="image/jpeg" />
+        <item id="image29" href="images/f226-1.jpg" media-type="image/jpeg" />
+        <item id="image30" href="images/f227-1.jpg" media-type="image/jpeg" />
+        <item id="image31" href="images/f227-2.jpg" media-type="image/jpeg" />
+        <item id="image32" href="images/f228-1.jpg" media-type="image/jpeg" />
+        <item id="image33" href="images/f228-2.jpg" media-type="image/jpeg" />
+        <item id="image34" href="images/f229-1.jpg" media-type="image/jpeg" />
+        <item id="image35" href="images/f229-2.jpg" media-type="image/jpeg" />
+        <item id="image36" href="images/f230-1.jpg" media-type="image/jpeg" />
+        <item id="image37" href="images/f230-2.jpg" media-type="image/jpeg" />
+        <item id="image38" href="images/f230-3.jpg" media-type="image/jpeg" />
+        <item id="image39" href="images/f230-4.jpg" media-type="image/jpeg" />
+        <item id="image40" href="images/f230-5.jpg" media-type="image/jpeg" />
+        <item id="image41" href="images/f231-1.jpg" media-type="image/jpeg" />
+        <item id="image42" href="images/f231-2.jpg" media-type="image/jpeg" />
+        <item id="image43" href="images/f232-1.jpg" media-type="image/jpeg" />
+        <item id="image44" href="images/f233-1.jpg" media-type="image/jpeg" />
+        <item id="image45" href="images/f234-1.jpg" media-type="image/jpeg" />
+        <item id="image46" href="images/f235-1.jpg" media-type="image/jpeg" />
+        <item id="image47" href="images/f235-2.jpg" media-type="image/jpeg" />
+        <item id="image48" href="images/f236-1.jpg" media-type="image/jpeg" />
+        <item id="image49" href="images/f237-1.jpg" media-type="image/jpeg" />
+        <item id="image50" href="images/f238-1.jpg" media-type="image/jpeg" />
+        <item id="image51" href="images/f238-2.jpg" media-type="image/jpeg" />
+        <item id="image52" href="images/f239-1.jpg" media-type="image/jpeg" />
+        <item id="image53" href="images/Title-1.jpg" media-type="image/jpeg" />
+        <item id="image54" href="images/tmb.jpg" media-type="image/jpeg" />
+        <item id="image55" href="images/box.jpg" media-type="image/jpeg" />
+        <item id="image56" href="images/box-1.jpg" media-type="image/jpeg" />
+        <item id="image57" href="images/box-2.jpg" media-type="image/jpeg" />
+        <item id="image66" href="images/poster1.png" media-type="image/png" />
+        <item id="image67" href="images/poster2.png" media-type="image/png" />
+        <item id="image68" href="images/01.png" media-type="image/png" />
+        <item id="image69" href="images/02.png" media-type="image/png" />
+        <item id="image70" href="images/03.png" media-type="image/png" />
+        <item id="image71" href="images/04.png" media-type="image/png" />
+        <item id="image72" href="images/bgs.png" media-type="image/png" />
+        <item id="image73" href="images/close.png" media-type="image/png" />
+        <item id="image74" href="images/feedbackBg.png" media-type="image/png" />
+        <item id="image75" href="images/logo.png" media-type="image/png" />
+        <item id="image76" href="images/correct.png" media-type="image/png" />
+        <item id="image77" href="images/incorrect.png" media-type="image/png" />
+        <item id="image78" href="images/Activity.png" media-type="image/png" />
+        <item id="image79" href="images/Question.png" media-type="image/png" />
+        
+    </manifest>    
+    <spine toc="ncx">
+        <itemref idref="Cover"/>
+        <itemref idref="Part01"/>
+        <itemref idref="Contents"/>
+        <itemref idref="Frontmatter"/>
+        <itemref idref="Part01chapter01"/>
+        <itemref idref="Part01chapter02"/>
+        <itemref idref="Part01chapter03"/>
+        <itemref idref="Frontmatter1"/>
+        <itemref idref="Part01chapter04"/>
+        <itemref idref="Part01chapter05"/>
+        <itemref idref="Frontmatter2"/>
+        <itemref idref="Part01chapter06"/>
+        <itemref idref="Backmatter"/>
+        <itemref idref="activity" linear="no"/>
+        <itemref idref="Question" linear="no"/>
+        <itemref idref="nav" linear="no"/>
+    </spine>
+    <collection role="distributable-object">
+        <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+            <dc:type>edupub</dc:type>
+            <dc:title>Product production through recombinant DNA technology</dc:title>
+            <!-- <dc:identifier>urn:uuid:bc6abc10-2c68-11e4-8c21-0800200c9a66</dc:identifier> -->
+            <dc:creator>Rick Reusi</dc:creator>
+            <dc:language>en</dc:language>
+            <dc:description>Explanation of the steps taken to produce useful products through the combining or indeed the recombining of DNA from a bacterial cell and a cell with a particular gene of interest.</dc:description>
+            <dc:source>978-1-00000-000-0 at 2014-08-28T01:30:20Z</dc:source>
+            <dc:rights>All rights reserved</dc:rights>			
+            <dc:date>2014-08-28T01:30:20Z</dc:date>
+            <meta property="dcterms:modified">2014-08-27T01:00:00Z</meta>
+            <meta property="schema:typicalAgeRange">18+</meta>
+            <meta property="schema:accessibilityFeature">longDescription</meta>
+            <meta property="schema:accessibilityHazard">noFlashingHazard</meta>
+            <meta property="schema:accessibilityHazard">noMotionSimulationHazard</meta>
+        </metadata>
+        <collection role="manifest">
+            <link href="css/epub.css" />
+            <link href="images/f223-1.jpg"/>
+            <link href="images/1.jpg"/>
+            <link href="images/2.jpg" />
+            <link href="images/3.jpg" />
+            <link href="images/4.jpg" />
+            <link href="images/5.jpg" />
+            <link href="images/6.jpg" />
+            <link href="images/7.jpg" />
+            <link href="images/8.jpg" />
+            <link href="images/check.jpg" />
+            <link href="text/Part01chapter01.xhtml#annot3" />
+            <!-- notice that the following "Checkpoint" aside is linked here as a dependant resource, but not a spine level item as are the items below -->
+        </collection>
+        <link href="text/Part01chapter01.xhtml#do01entity01"/>
+        <link href="text/Part01chapter01.xhtml#do01entity02"/>
+    </collection>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/collection-invalid-manifest-001.opf b/src/test/resources/30/single/opf/invalid/collection-invalid-manifest-001.opf
new file mode 100644
index 0000000..755cb82
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/collection-invalid-manifest-001.opf
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <!-- a collection with the manifest role must be the child of another collection -->
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Previews</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2014-07-29</dc:date>
+        <meta property="dcterms:modified">2014-07-29T15:47:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="EPUB/xhtml/lorem1.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="t2" href="EPUB/xhtml/lorem2.xhtml" media-type="application/xhtml+xml" />
+        <item id="css" href="stylesheet.css" media-type="text/css" />
+        <item id="img" href="image1.jpg" media-type="image/jpeg" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />        
+    </spine>        
+    <collection role="manifest">
+        <link href="EPUB/xhtml/lorem1.xhtml"        
+            media-type="application/xhtml+xml" />
+        <link href="EPUB/xhtml/lorem2.xhtml"        
+            media-type="application/xhtml+xml" />
+        <link href="stylesheet.css"        
+            media-type="text/css" />
+        <link href="image1.jpg"        
+            media-type="image/jpeg" />
+    </collection>
+</package>
diff --git a/src/test/resources/30/single/opf/invalid/cover-image.opf b/src/test/resources/30/single/opf/invalid/cover-image.opf
new file mode 100644
index 0000000..a23bea4
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/cover-image.opf
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" 
+    unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <!-- multiple cover images -->
+    <metadata >
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>        
+    </metadata> 
+    <manifest>
+        <item id="text001" href="text001.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="text002" href="text002.xhtml" media-type="application/xhtml+xml" />
+        <item id="img001" href="image.png" media-type="image/png" properties="cover-image" />
+        <item id="img002" href="image.jpg" media-type="image/jpg" properties="cover-image" />
+        <item id="ncx" href="ncx.ncx" media-type="application/x-dtbncx+xml" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="text001" />
+        <itemref idref="text002" />
+    </spine>
+    <guide>
+        <reference href="text001.xhtml" type="cover" title="Cover"/>
+    </guide>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/date-1.opf b/src/test/resources/30/single/opf/invalid/date-1.opf
new file mode 100644
index 0000000..23ffc6d
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/date-1.opf
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <dc:date>Anno Domini Twenty</dc:date>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/date-2.opf b/src/test/resources/30/single/opf/invalid/date-2.opf
new file mode 100644
index 0000000..d96edaf
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/date-2.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <!-- http://code.google.com/p/epubcheck/issues/detail?id=91 -->
+        <dc:date>20010-11-08</dc:date>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/fallback-001.opf b/src/test/resources/30/single/opf/invalid/fallback-001.opf
new file mode 100644
index 0000000..549faca
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/fallback-001.opf
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" 
+    xml:lang="en-GB" unique-identifier="uid">
+    <!-- @fallback not referencing a manifest item -->
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">        
+        <dc:title>Norwegian Wood</dc:title>
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:language>en</dc:language>        
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>               
+    </metadata> 
+    <manifest>
+        <item id="text001" href="text001.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="text002" href="text002.xhtml" media-type="application/xhtml+xml" />
+        <item id="img001" fallback="contrib1" href="image.png" media-type="image/png" />
+        <item id="img002" href="image.jpg" media-type="image/jpg" />
+        <item id="ncx" href="ncx.ncx" media-type="application/x-dtbncx+xml" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="text001" />
+        <itemref idref="text002" />
+    </spine>
+    <guide>
+        <reference href="text001.xhtml" type="cover" title="Preface"/>
+    </guide>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/fallback-002.opf b/src/test/resources/30/single/opf/invalid/fallback-002.opf
new file mode 100644
index 0000000..a3e44b6
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/fallback-002.opf
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" 
+    unique-identifier="uid"  xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <!-- fallback self-reference -->
+    <metadata>
+        <dc:title>Norwegian Wood</dc:title>
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:language>en</dc:language>        
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>               
+    </metadata> 
+    <manifest>
+        <item id="text001" href="text001.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="text002" href="text002.xhtml" media-type="application/xhtml+xml" />
+        <item id="img001" fallback="img001" href="image.png" media-type="image/png" />
+        <item id="img002" href="image.jpg" media-type="image/jpg" />
+        <item id="ncx" href="ncx.ncx" media-type="application/x-dtbncx+xml" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="text001" />
+        <itemref idref="text002" />
+    </spine>
+    <guide>
+        <reference href="text001.xhtml" type="cover" title="Preface"/>
+    </guide>
+    
+    
+    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/filename_contains_spaces_issue239.opf b/src/test/resources/30/single/opf/invalid/filename_contains_spaces_issue239.opf
new file mode 100644
index 0000000..fa86671
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/filename_contains_spaces_issue239.opf
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" 
+    xml:lang="en-GB" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>
+        <dc:creator>Haruki Murakami</dc:creator>
+        <dc:language>en</dc:language>
+        <dc:date>2010-02-01</dc:date>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>                                
+        <link href="http://example.org/#foo" rel="onix-record"/>        
+    </metadata> 
+    <manifest>
+        <item id="text001" href="text001.xhtml" properties="nav scripted" media-type="application/xhtml+xml" />
+        <item id="text002" href="text002.xhtml" media-type="application/xhtml+xml" />
+        <item id="img001" href="image 1.png" media-type="image/png" properties="cover-image" />
+        <item id="img002" href="image2.jpg" media-type="image/jpg" />
+        <item id="ncx" href="ncx.ncx" media-type="application/x-dtbncx+xml" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="text001" />
+        <itemref idref="text002" />
+    </spine>
+    <guide>
+        <reference href="text001.xhtml" type="cover" title="Cover"/>
+    </guide>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/foreign.opf b/src/test/resources/30/single/opf/invalid/foreign.opf
new file mode 100644
index 0000000..60f1e29
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/foreign.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+		<item id="t002" href="http://test.com/contents.xhtml" 
+				media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/id-unique.opf b/src/test/resources/30/single/opf/invalid/id-unique.opf
new file mode 100644
index 0000000..3b17a89
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/id-unique.opf
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" 
+    unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <!-- dupe arbitrary IDs -->
+    <metadata>
+        <dc:title>Norwegian Wood</dc:title>
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:language>en</dc:language>        
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>               
+    </metadata> 
+    <manifest>
+        <item id="text001" href="text001.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="text002" href="text002.xhtml" media-type="application/xhtml+xml" />
+        <item id="img001" href="image.png" media-type="image/png" />
+        <item id="img001" href="image.jpg" media-type="image/jpg" />
+        <item id="ncx" href="ncx.ncx" media-type="application/x-dtbncx+xml" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="text001" />
+        <itemref idref="text002" />
+    </spine>
+    <guide>
+        <reference href="text001.xhtml" type="cover" title="Cover"/>
+    </guide>
+    
+    
+    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/invalidMetaAbout.opf b/src/test/resources/30/single/opf/invalid/invalidMetaAbout.opf
new file mode 100644
index 0000000..3b3bf85
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/invalidMetaAbout.opf
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0"
+      profile="http://www.idpf.org/epub/30/profile/package/" xml:lang="ja"
+      unique-identifier="ootuya-id">
+      <metadata xmlns:opf="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/"
+            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xmlns:dcterms="http://purl.org/dc/terms/">
+            
+            <dc:identifier id="ootuya-id">urn:uuid:ACA8C671-6C1F-1014-8433-7416564D7508</dc:identifier>
+            <dc:title>ハルコさんの彼氏</dc:title>
+            <dc:language>ja-jp</dc:language>
+            <meta property="dcterms:modified">2011-06-30T21:35:00Z</meta>
+		    <meta property="dcterms:creator" id="auth">TEST</meta>
+			<meta about="#auth7" property="file-as">TEST2</meta>
+
+      </metadata>
+      <manifest>
+            <item id="default-style" href="css/default.css" media-type="text/css"/>
+            
+            <item id="j01" href="images/01.jpg" fallback="toc" media-type="image/jpeg"/>
+            <item id="AboutThisDocument" href="images/AboutThisDocument.png" fallback="toc" media-type="image/png"/>
+            
+            <item id="toc" properties="nav" href="xhtml/toc.xhtml"
+                  media-type="application/xhtml+xml"/>
+            <item id="ncxtoc" href="xhtml/toc.ncx" media-type="application/x-dtbncx+xml"/>
+      </manifest>
+      <spine toc="ncxtoc">
+            <itemref idref="toc"  />
+            <itemref idref="j01" properties="page-spread-left" />
+            <itemref idref="AboutThisDocument"  />
+      </spine>
+</package>
diff --git a/src/test/resources/30/single/opf/invalid/item-properties.opf b/src/test/resources/30/single/opf/invalid/item-properties.opf
new file mode 100644
index 0000000..e0b170a
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/item-properties.opf
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" 
+    xml:lang="en-GB" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>
+        <dc:creator>Haruki Murakami</dc:creator>
+        <dc:language>en</dc:language>
+        <dc:date>2010-02-01</dc:date>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>                                
+        <link href="http://example.org/#foo" rel="onix-record"/>        
+    </metadata> 
+    <manifest>
+        <item id="text001" href="text001.xhtml" properties="nav scripted cover-image" media-type="application/xhtml+xml" />
+        <item id="text002" href="text002.xhtml" media-type="application/xhtml+xml" />
+        <item id="img002" href="image.jpg" media-type="image/jpg" />
+        <item id="ncx" href="ncx.ncx" media-type="application/x-dtbncx+xml" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="text001" />
+        <itemref idref="text002" />
+    </spine>
+    <guide>
+        <reference href="text001.xhtml" type="cover" title="Cover"/>
+    </guide>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/itemref-001.opf b/src/test/resources/30/single/opf/invalid/itemref-001.opf
new file mode 100644
index 0000000..c51ccbf
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/itemref-001.opf
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid"  xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <!-- spine/itemref at idref resolves to manifest/item (excluding type test) -->
+    <metadata>
+        <dc:title>Norwegian Wood</dc:title>    
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:language>en</dc:language>        
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>               
+    </metadata> 
+    <manifest>
+        <item id="text001" href="text001.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="text002" href="text002.xhtml" media-type="application/xhtml+xml" />
+        <item id="ncx" href="ncx.ncx" media-type="application/x-dtbncx+xml" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="text001" />
+        <itemref idref="uid" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/link-rel-record-no-mediatype.opf b/src/test/resources/30/single/opf/invalid/link-rel-record-no-mediatype.opf
new file mode 100644
index 0000000..a7c016d
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/link-rel-record-no-mediatype.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+        <link rel="record" href="http://www.example.org/book.atom"/>
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/link-rel-record-refines.opf b/src/test/resources/30/single/opf/invalid/link-rel-record-refines.opf
new file mode 100644
index 0000000..703b9a6
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/link-rel-record-refines.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+        <link rel="record" href="http://www.example.org/book.atom" media-type="application/atom+xml;type=entry;profile=opds-catalog" refines="#t001"/>
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/malformed.opf b/src/test/resources/30/single/opf/invalid/malformed.opf
new file mode 100644
index 0000000..d95365e
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/malformed.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" 
+    xmlns:dc="http://purl.org/dc/elements/1.1/" unique-identifier="uid">
+    <!-- malformed -->
+    <metadata></package>
+        <dc:title>Norwegian Wood</dc:title>
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:language>en</dc:language>        
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>               
+    </metadata> 
+    <manifest>
+        <item id="text001" href="text001.xhtml" media-type="application/xhtml+xml" />
+        <item id="text002" href="text002.xhtml" media-type="application/xhtml+xml" />
+        <item id="img001" href="image.png" media-type="image/png" properties="cover-image" />
+        <item id="img002" href="image.jpg" media-type="image/jpg" />
+        <item id="ncx" href="ncx.ncx" media-type="application/x-dtbncx+xml" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="text001" />
+        <itemref idref="text002" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/media-overlay-001.opf b/src/test/resources/30/single/opf/invalid/media-overlay-001.opf
new file mode 100644
index 0000000..7cf84ca
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/media-overlay-001.opf
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" 
+    unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <!-- @media-overlay not referencing smil types (and bogus duration report as result) -->
+    <metadata>
+        <dc:title>Norwegian Wood</dc:title>
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:language>en</dc:language>        
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>    
+        
+        <meta property="media:duration">0:32:00</meta>
+        <meta refines="#media001" property="media:duration">12min</meta>
+        <meta refines="#media002" property="media:duration">20min</meta>
+                
+    </metadata> 
+    <manifest>
+        <item id="text001" href="text001.xhtml" properties="nav" media-type="application/xhtml+xml" media-overlay="img001"/>
+        <item id="text002" href="text002.xhtml" media-type="application/xhtml+xml" media-overlay="img002"/>
+        <item id="media001" href="media001.smil" media-type="application/smil+xml" />
+        <item id="media002" href="media002.smil" media-type="application/smil+xml" />
+        <item id="img001" fallback="img002" href="image.png" media-type="image/png" />
+        <item id="img002" href="image.jpg" media-type="image/jpg" />
+        <item id="ncx" href="ncx.ncx" media-type="application/x-dtbncx+xml" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="text001" />
+        <itemref idref="text002" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/media-overlay-002.opf b/src/test/resources/30/single/opf/invalid/media-overlay-002.opf
new file mode 100644
index 0000000..21983a2
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/media-overlay-002.opf
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" 
+    unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <!-- missing duration for entire publication -->
+    <metadata>
+        <dc:title>Norwegian Wood</dc:title>
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:language>en</dc:language>        
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>                        
+        <meta refines="#media001" property="media:duration">12min</meta>
+        <meta refines="#media002" property="media:duration">20min</meta>        
+        <meta property="media:narrator" refines="#media001">Mary Jones</meta>
+        <meta property="media:narrator" refines="#media002">Sally Smith</meta>
+        <!-- error: narrators were already declared for all of the media overlays; cannot now specify a narrator for the whole book -->
+        <meta property="media:narrator">Susan J. Bookreader</meta>
+    </metadata> 
+    <manifest>
+        <item id="text001" href="text001.xhtml" properties="nav" media-type="application/xhtml+xml" media-overlay="media001"/>
+        <item id="text002" href="text002.xhtml" media-type="application/xhtml+xml" media-overlay="media002"/>
+        <item id="media001" href="media001.smil" media-type="application/smil+xml" />
+        <item id="media002" href="media002.smil" media-type="application/smil+xml" />
+        <item id="img001" fallback="img002" href="image.png" media-type="image/png" />
+        <item id="img002" href="image.jpg" media-type="image/jpg" />
+        <item id="ncx" href="ncx.ncx" media-type="application/x-dtbncx+xml" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="text001" />
+        <itemref idref="text002" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/media-overlay-meta-001.opf b/src/test/resources/30/single/opf/invalid/media-overlay-meta-001.opf
new file mode 100644
index 0000000..b2a9039
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/media-overlay-meta-001.opf
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" 
+    xmlns:dc="http://purl.org/dc/elements/1.1/" unique-identifier="uid">
+    <!-- missing global and one item duration -->
+    <metadata>
+        <dc:title>Norwegian Wood</dc:title>
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:language>en</dc:language>        
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>               
+        
+        <meta refines="#media001" property="media:duration">12min</meta>
+        <!-- <meta about="#media002" property="media:duration">20min</meta> -->
+        <!-- <meta property="media:duration">0:32:00</meta> -->
+        <meta property="media:narrator" refines="#media001">Mary Jones</meta>
+        <meta property="media:narrator" refines="#media002">Sally Smith</meta>
+    </metadata> 
+    <manifest>
+        <item id="text001" href="text001.xhtml" properties="nav" media-type="application/xhtml+xml" media-overlay="media001"/>
+        <item id="text002" href="text002.xhtml" media-type="application/xhtml+xml" media-overlay="media002"/>
+        <item id="media001" href="media001.smil" media-type="application/smil+xml" />
+        <item id="media002" href="media002.smil" media-type="application/smil+xml" />
+        <item id="img001" fallback="img002" href="image.png" media-type="image/png" />
+        <item id="img002" href="image.jpg" media-type="image/jpg" />
+        <item id="ncx" href="ncx.ncx" media-type="application/x-dtbncx+xml" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="text001" />
+        <itemref idref="text002" />
+    </spine>
+    <guide>
+        <reference href="text001.xhtml" type="cover" title="Cover"/>
+    </guide>
+    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/meta-collection-refine-noncollection.opf b/src/test/resources/30/single/opf/invalid/meta-collection-refine-noncollection.opf
new file mode 100644
index 0000000..b495edc
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/meta-collection-refine-noncollection.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+        <meta property="belongs-to-collection" id="c02" refines="#t001">Harry Potter</meta>
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/meta-collection-type-norefines.opf b/src/test/resources/30/single/opf/invalid/meta-collection-type-norefines.opf
new file mode 100644
index 0000000..3a80cea
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/meta-collection-type-norefines.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+        <meta property="belongs-to-collection" id="c02">Harry Potter</meta>
+        <meta property="collection-type">set</meta>
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/meta-collection-type-refines-noncollection.opf b/src/test/resources/30/single/opf/invalid/meta-collection-type-refines-noncollection.opf
new file mode 100644
index 0000000..66f925c
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/meta-collection-type-refines-noncollection.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+        <meta property="belongs-to-collection" id="c02">Harry Potter</meta>
+        <meta refines="#t001" property="collection-type">set</meta>
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/meta-source-of-norefines.opf b/src/test/resources/30/single/opf/invalid/meta-source-of-norefines.opf
new file mode 100644
index 0000000..ece6ea5
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/meta-source-of-norefines.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+        <dc:source id="src-id">urn:isbn:9780375704024</dc:source>
+        <meta property="source-of">pagination</meta><!--should have a 'refines' attribute-->
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/meta-source-of-wrongrefines.opf b/src/test/resources/30/single/opf/invalid/meta-source-of-wrongrefines.opf
new file mode 100644
index 0000000..9b2d483
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/meta-source-of-wrongrefines.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+        <meta refines="#uid" property="source-of">pagination</meta><!--refines attrbute should point to dc:source-->
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/meta-source-of-wrongvalue.opf b/src/test/resources/30/single/opf/invalid/meta-source-of-wrongvalue.opf
new file mode 100644
index 0000000..13ea5fb
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/meta-source-of-wrongvalue.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+        <dc:source id="src-id">urn:isbn:9780375704024</dc:source>
+        <meta refines="#src-id" property="source-of">foo</meta><!--only allowed value is 'pagination'-->
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/minlength.opf b/src/test/resources/30/single/opf/invalid/minlength.opf
new file mode 100644
index 0000000..f9dc895
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/minlength.opf
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <!-- minimum lengths of dc:*, meta nodes -->
+    <metadata>
+        <dc:identifier id="uid"></dc:identifier>
+        <dc:title> </dc:title>        
+        <dc:language>en</dc:language>
+        <meta property="dcterms:valid"></meta>
+        <meta property="">foo</meta>
+        <meta property=" ">foo</meta>
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/modified-syntax.opf b/src/test/resources/30/single/opf/invalid/modified-syntax.opf
new file mode 100644
index 0000000..910d89a
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/modified-syntax.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <!-- dcterms:modified missing -->
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-08-19</meta>
+        
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/modified.opf b/src/test/resources/30/single/opf/invalid/modified.opf
new file mode 100644
index 0000000..8d4200f
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/modified.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <!-- dcterms:modified missing -->
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <!-- <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta> -->
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/nav-001.opf b/src/test/resources/30/single/opf/invalid/nav-001.opf
new file mode 100644
index 0000000..ee5c5e7
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/nav-001.opf
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" 
+    xmlns:dc="http://purl.org/dc/elements/1.1/" unique-identifier="uid">
+    <!-- missing nav property on item -->
+    <metadata>
+        <dc:title>Norwegian Wood</dc:title>
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:language>en</dc:language>        
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>               
+    </metadata> 
+    <manifest>
+        <item id="text001" href="text001.xhtml" media-type="application/xhtml+xml" />
+        <item id="text002" href="text002.xhtml" media-type="application/xhtml+xml" />
+        <item id="img001" href="image.png" media-type="image/png" properties="cover-image" />
+        <item id="img002" href="image.jpg" media-type="image/jpg" />
+        <item id="ncx" href="ncx.ncx" media-type="application/x-dtbncx+xml" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="text001" />
+        <itemref idref="text002" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/nav-002.opf b/src/test/resources/30/single/opf/invalid/nav-002.opf
new file mode 100644
index 0000000..13aa089
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/nav-002.opf
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" 
+    xmlns:dc="http://purl.org/dc/elements/1.1/" unique-identifier="uid">
+    <!-- dupe nav properties on items -->
+    <metadata>
+        <dc:title>Norwegian Wood</dc:title>
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:language>en</dc:language>        
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="text001" href="text001.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="text002" href="text002.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="img001" href="image.png" media-type="image/png" properties="cover-image" />
+        <item id="img002" href="image.jpg" media-type="image/jpg" />
+        <item id="ncx" href="ncx.ncx" media-type="application/x-dtbncx+xml" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="text001" />
+        <itemref idref="text002" />
+    </spine>
+    <guide>
+        <reference href="text001.xhtml" type="cover" title="Cover"/>
+    </guide>
+
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/nav-003.opf b/src/test/resources/30/single/opf/invalid/nav-003.opf
new file mode 100644
index 0000000..15069c0
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/nav-003.opf
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" 
+    xmlns:dc="http://purl.org/dc/elements/1.1/" unique-identifier="uid">
+    <!-- nav is not xhtml -->
+    <metadata>
+        <dc:title>Norwegian Wood</dc:title>
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:language>en</dc:language>        
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>                       
+    </metadata> 
+    <manifest>
+        <item id="text001" href="text001.xhtml" media-type="application/xhtml+xml" />
+        <item id="text002" href="text002.xhtml" media-type="application/xhtml+xml" />
+        <item id="img001" href="image.png" media-type="image/png" properties="cover-image" />
+        <item id="img002" href="image.jpg" media-type="image/jpg" />
+        <item id="ncx" href="ncx.ncx" properties="nav" media-type="application/x-dtbncx+xml" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="text001" />
+        <itemref idref="text002" />
+    </spine>
+    <guide>
+        <reference href="text001.xhtml" type="cover" title="Cover"/>
+    </guide>
+
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/noDcNamespace.opf b/src/test/resources/30/single/opf/invalid/noDcNamespace.opf
new file mode 100644
index 0000000..f15efdf
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/noDcNamespace.opf
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0"
+      profile="http://www.idpf.org/epub/30/profile/package/" xml:lang="ja"
+      unique-identifier="ootuya-id">
+      <metadata xmlns:opf="http://www.idpf.org/2007/opf" 
+            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xmlns:dcterms="http://purl.org/dc/terms/">
+            
+            <dc:identifier id="ootuya-id">urn:uuid:ACA8C671-6C1F-1014-8433-7416564D7508</dc:identifier>
+            <dc:title>ハルコさんの彼氏</dc:title>
+            <dc:language>ja-jp</dc:language>
+            <meta property="dcterms:modified">2011-06-30T21:35:00Z</meta>
+      </metadata>
+      <manifest>
+            <item id="default-style" href="css/default.css" media-type="text/css"/>
+            
+            <item id="j01" href="images/01.jpg" fallback="toc" media-type="image/jpeg"/>
+            <item id="AboutThisDocument" href="images/AboutThisDocument.png" fallback="toc" media-type="image/png"/>
+            
+            <item id="toc" properties="nav" href="xhtml/toc.xhtml"
+                  media-type="application/xhtml+xml"/>
+            <item id="ncxtoc" href="xhtml/toc.ncx" media-type="application/x-dtbncx+xml"/>
+      </manifest>
+      <spine toc="ncxtoc">
+            <itemref idref="toc"  />
+            <itemref idref="j01" properties="page-spread-left" />
+            <itemref idref="AboutThisDocument"  />
+      </spine>
+</package>
diff --git a/src/test/resources/30/single/opf/invalid/noDcTitle.opf b/src/test/resources/30/single/opf/invalid/noDcTitle.opf
new file mode 100644
index 0000000..c0ee2d9
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/noDcTitle.opf
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0"
+      profile="http://www.idpf.org/epub/30/profile/package/" xml:lang="ja"
+      unique-identifier="ootuya-id">
+      <metadata xmlns:opf="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/"
+            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xmlns:dcterms="http://purl.org/dc/terms/">
+            
+            <dc:identifier id="ootuya-id">urn:uuid:ACA8C671-6C1F-1014-8433-7416564D7508</dc:identifier>
+            <dc:language>ja-jp</dc:language>
+            <meta property="dcterms:modified">2011-06-30T21:35:00Z</meta>
+      </metadata>
+      <manifest>
+            <item id="default-style" href="css/default.css" media-type="text/css"/>
+            
+            <item id="j01" href="images/01.jpg" fallback="toc" media-type="image/jpeg"/>
+            <item id="AboutThisDocument" href="images/AboutThisDocument.png" fallback="toc" media-type="image/png"/>
+            
+            <item id="toc" properties="nav" href="xhtml/toc.xhtml"
+                  media-type="application/xhtml+xml"/>
+            <item id="ncxtoc" href="xhtml/toc.ncx" media-type="application/x-dtbncx+xml"/>
+      </manifest>
+      <spine toc="ncxtoc">
+            <itemref idref="toc"  />
+            <itemref idref="j01" properties="page-spread-left" />
+            <itemref idref="AboutThisDocument"  />
+      </spine>
+</package>
diff --git a/src/test/resources/30/single/opf/invalid/noMetadataElement.opf b/src/test/resources/30/single/opf/invalid/noMetadataElement.opf
new file mode 100644
index 0000000..96bb71f
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/noMetadataElement.opf
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0"
+      profile="http://www.idpf.org/epub/30/profile/package/" xml:lang="ja"
+      unique-identifier="ootuya-id">
+            
+            <dc:identifier id="ootuya-id">urn:uuid:ACA8C671-6C1F-1014-8433-7416564D7508</dc:identifier>
+            <dc:title>ハルコさんの彼氏</dc:title>
+            <dc:language>ja-jp</dc:language>
+            <meta property="dcterms:modified">2011-06-30T21:35:00Z</meta>
+      <manifest>
+            <item id="default-style" href="css/default.css" media-type="text/css"/>
+            
+            <item id="j01" href="images/01.jpg" fallback="toc" media-type="image/jpeg"/>
+            <item id="AboutThisDocument" href="images/AboutThisDocument.png" fallback="toc" media-type="image/png"/>
+            
+            <item id="toc" properties="nav" href="xhtml/toc.xhtml"
+                  media-type="application/xhtml+xml"/>
+            <item id="ncxtoc" href="xhtml/toc.ncx" media-type="application/x-dtbncx+xml"/>
+      </manifest>
+      <spine toc="ncxtoc">
+            <itemref idref="toc"  />
+            <itemref idref="j01" properties="page-spread-left" />
+            <itemref idref="AboutThisDocument"  />
+      </spine>
+</package>
diff --git a/src/test/resources/30/single/opf/invalid/noNav.opf b/src/test/resources/30/single/opf/invalid/noNav.opf
new file mode 100644
index 0000000..034329a
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/noNav.opf
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0"
+      profile="http://www.idpf.org/epub/30/profile/package/" xml:lang="ja"
+      unique-identifier="ootuya-id">
+      <metadata xmlns:opf="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/"
+            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xmlns:dcterms="http://purl.org/dc/terms/">
+            
+            <dc:identifier id="ootuya-id">urn:uuid:ACA8C671-6C1F-1014-8433-7416564D7508</dc:identifier>
+            <dc:title>ハルコさんの彼氏</dc:title>
+            <dc:language>ja-jp</dc:language>
+            <meta property="dcterms:modified">2011-06-30T21:35:00Z</meta>
+      </metadata>
+      <manifest>
+            <item id="default-style" href="css/default.css" media-type="text/css"/>
+            
+            <item id="j01" href="images/01.jpg" fallback="toc" media-type="image/jpeg"/>
+            <item id="AboutThisDocument" href="images/AboutThisDocument.png" fallback="toc" media-type="image/png"/>
+            
+            <item id="toc" href="xhtml/toc.xhtml"
+                  media-type="application/xhtml+xml"/>
+            <item id="ncxtoc" href="xhtml/toc.ncx" media-type="application/x-dtbncx+xml"/>
+      </manifest>
+      <spine toc="ncxtoc">
+            <itemref idref="toc"  />
+            <itemref idref="j01" properties="page-spread-left" />
+            <itemref idref="AboutThisDocument"  />
+      </spine>
+</package>
diff --git a/src/test/resources/30/single/opf/invalid/order.opf b/src/test/resources/30/single/opf/invalid/order.opf
new file mode 100644
index 0000000..0de130e
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/order.opf
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" 
+    unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">    
+    <manifest>
+        <item id="text001" href="text001.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="text002" href="text002.xhtml" media-type="application/xhtml+xml" />
+        <item id="img001" fallback="img002" href="image.png" media-type="image/png" />
+        <item id="img002" href="image.jpg" media-type="image/jpg" />
+        <item id="ncx" href="ncx.ncx" media-type="application/x-dtbncx+xml" />
+        <item id="impl" href="impl.xhtml" media-type="application/xhtml+xml"/>
+        <item id="slideshow" href="slideshow.xml" media-type="application/x-demo-slideshow"/>
+    </manifest>
+    <metadata>
+        <dc:title>Norwegian Wood</dc:title>
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:language>en</dc:language>        
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>                               
+    </metadata> 
+    <spine toc="ncx">
+        <itemref idref="text001" />
+        <itemref idref="text002" />
+    </spine>
+    <guide>
+        <reference href="text001.xhtml" type="cover" title="Cover"/>
+    </guide>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/prefix-declaration.opf b/src/test/resources/30/single/opf/invalid/prefix-declaration.opf
new file mode 100644
index 0000000..23758a0
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/prefix-declaration.opf
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid"
+		prefix="foaf http://xmlns.com/foaf/spec/
+				dbp : http://dbpedia.org/ontology/">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+		<meta property="meta-auth">Auth</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" /> 
+		<item properties="scripted mathml" id="c2" href="c2.xhtml" media-type="application/xhtml+xml" />		
+		<item id="c3" href="c2.xhtml" media-type="application/xhtml+xml" />		
+		<item id="c5" href="c2.xhtml" media-type="application/xhtml+xml" />		
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        
+		<itemref idref="t1" properties="page-spread-left "/>       
+		<itemref idref="c2" properties="page-spread-left "/>
+		<itemref idref="c3" properties="page-spread-left "/>
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/prefixes-001.opf b/src/test/resources/30/single/opf/invalid/prefixes-001.opf
new file mode 100644
index 0000000..9b7b056
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/prefixes-001.opf
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid"
+		prefix="foaf: http://xmlns.com/foaf/spec/
+				dbp: http://dbpedia.org/ontology/">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+		<meta property="meta-auth">Auth</meta>
+		<meta property="media:test meta-auth">test</meta>
+		<meta property="foaf:test">test</meta>
+		<link rel="marc21xml-record foaf:ddd foaf:ddd" href="pub/meta/nor-wood-marc21.xml"/>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" /> 
+		<item properties="scripted mathml" id="c2" href="c2.xhtml" media-type="application/xhtml+xml" />		
+		<item properties="foaf:valid" id="c3" href="c2.xhtml" media-type="application/xhtml+xml" />			
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        
+		<itemref idref="t1" properties="page-spread-left foaf:valid"/>       
+		<itemref idref="c2" properties="page-spread-left foaf:valid "/>
+		<itemref idref="c3" properties="page-spread-left foaf:valid "/>
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/prefixes-002.opf b/src/test/resources/30/single/opf/invalid/prefixes-002.opf
new file mode 100644
index 0000000..f0aad5c
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/prefixes-002.opf
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid"
+		prefix="foaf: http://xmlns.com/foaf/spec/
+				dbp:    http://dbpedia.org/ontology/">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+		<meta property="meta-auth">Auth</meta>
+		<meta property="foaf:test">test</meta>
+		<link rel="marc21xml-record foaf:ddd" href="pub/meta/nor-wood-marc21.xml"/>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" /> 
+		<item properties="scripted mathml" id="c2" href="c2.xhtml" media-type="application/xhtml+xml" />		
+		<item properties="foaf:valid invalid" id="c3" href="c2.xhtml" media-type="application/xhtml+xml" />		
+		<item properties="foaf:invalid" id="c5" href="c2.xhtml" media-type="application/xhtml+xml" />		
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        
+		<itemref idref="t1" properties="page-spread-left foaf:valid"/>       
+		<itemref idref="c2" properties="page-spread-left foaf:valid"/>
+		<itemref idref="c3" properties="page-spread-left foaf:valid"/>
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/prefixes-003.opf b/src/test/resources/30/single/opf/invalid/prefixes-003.opf
new file mode 100644
index 0000000..201367d
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/prefixes-003.opf
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid"
+		prefix="foaf: http://xmlns.com/foaf/spec/
+				dbp:    http://dbpedia.org/ontology/">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+		<meta property="meta-auth">Auth</meta>
+		<meta property="invalid:test">test2</meta>
+		<meta property="foaf:test">test</meta>
+		<link rel="marc21xml-record foaf:ddd" href="pub/meta/nor-wood-marc21.xml"/>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" /> 
+		<item properties="scripted mathml" id="c2" href="c2.xhtml" media-type="application/xhtml+xml" />		
+		<item properties="foaf:valid" id="c3" href="c2.xhtml" media-type="application/xhtml+xml" />		
+		<item properties="foaf:invalid" id="c5" href="c2.xhtml" media-type="application/xhtml+xml" />		
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        
+		<itemref idref="t1" properties="page-spread-left foaf:valid"/>       
+		<itemref idref="c2" properties="page-spread-left foaf:valid"/>
+		<itemref idref="c3" properties="page-spread-left foaf:valid"/>
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/prefixes-004.opf b/src/test/resources/30/single/opf/invalid/prefixes-004.opf
new file mode 100644
index 0000000..cdaad75
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/prefixes-004.opf
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid"
+		prefix="foaf: http://xmlns.com/foaf/spec/
+				dbp:    http://dbpedia.org/ontology/">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+		<meta property="meta-auth">Auth</meta>
+		<meta property="foaf:test">test</meta>
+		<link rel="marc21xml-record foaf:ddd" href="pub/meta/nor-wood-marc21.xml"/>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" /> 
+		<item properties="scripted mathml" id="c2" href="c2.xhtml" media-type="application/xhtml+xml" />		
+		<item properties="foaf:valid" id="c3" href="c2.xhtml" media-type="application/xhtml+xml" />		
+		<item properties="foaf:invalid" id="c5" href="c2.xhtml" media-type="application/xhtml+xml" />		
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        
+		<itemref idref="t1" properties="page-spread-left foaf:valid page-spread-right"/>       
+		<itemref idref="c2" properties="page-spread-left foaf:valid"/>
+		<itemref idref="c3" properties="page-spread-left foaf:valid"/>
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/prefixes-redeclare.opf b/src/test/resources/30/single/opf/invalid/prefixes-redeclare.opf
new file mode 100644
index 0000000..84445ad
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/prefixes-redeclare.opf
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid"
+		prefix="media: http://should/not/redeclare
+		        rendition: http://should/not/redeclare/too
+		        foo: http://idpf.org/epub/vocab/package/#
+		        bar: http://idpf.org/epub/vocab/package/link/#">
+				
+	<!-- redeclaring 2 reserved prefixes -->			
+				
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" /> 
+		<item id="c2" href="c2.xhtml" media-type="application/xhtml+xml" />		
+		<item id="c3" href="c2.xhtml" media-type="application/xhtml+xml" />		
+		<item id="c5" href="c2.xhtml" media-type="application/xhtml+xml" />		
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>        
+		<itemref idref="t1"/>       
+		<itemref idref="c2"/>
+		<itemref idref="c3"/>
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/refines-relative.opf b/src/test/resources/30/single/opf/invalid/refines-relative.opf
new file mode 100644
index 0000000..11a776c
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/refines-relative.opf
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title id="title">Norwegian Wood</dc:title>
+        <dc:language>en</dc:language>
+        <dc:creator id="aut">Haruki Murakami</dc:creator>
+        <meta refines="#aut" property="alternate-script">foo</meta>
+        <meta refines="#err" property="file-as">foo</meta>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/rendition-globals-badvalues.opf b/src/test/resources/30/single/opf/invalid/rendition-globals-badvalues.opf
new file mode 100644
index 0000000..30bdb74
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/rendition-globals-badvalues.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../../../../main/resources/com/adobe/epubcheck/schema/30/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../../../../main/resources/com/adobe/epubcheck/schema/30/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+        <meta property="rendition:flow">foo</meta>
+        <meta property="rendition:layout">foo</meta>
+        <meta property="rendition:orientation">foo</meta>
+        <meta property="rendition:spread">foo</meta>
+        <meta property="rendition:viewport">height=1,width=100px</meta>
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/rendition-globals-duplicate.opf b/src/test/resources/30/single/opf/invalid/rendition-globals-duplicate.opf
new file mode 100644
index 0000000..9ae6111
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/rendition-globals-duplicate.opf
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../../../../main/resources/com/adobe/epubcheck/schema/30/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../../../../main/resources/com/adobe/epubcheck/schema/30/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+        <meta property="rendition:flow">auto</meta>
+        <meta property="rendition:layout">reflowable</meta>
+        <meta property="rendition:orientation">auto</meta>
+        <meta property="rendition:spread">auto</meta>
+        <meta property="rendition:flow">auto</meta>
+        <meta property="rendition:layout">reflowable</meta>
+        <meta property="rendition:orientation">auto</meta>
+        <meta property="rendition:spread">auto</meta>
+        <meta property="rendition:viewport">width=1200, height=800</meta>
+        <meta property="rendition:viewport">width=1200, height=800</meta>
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/rendition-globals-refines.opf b/src/test/resources/30/single/opf/invalid/rendition-globals-refines.opf
new file mode 100644
index 0000000..e635472
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/rendition-globals-refines.opf
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../../../../main/resources/com/adobe/epubcheck/schema/30/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../../../../main/resources/com/adobe/epubcheck/schema/30/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+        <meta property="rendition:flow" refines="#uid">auto</meta>
+        <meta property="rendition:layout" refines="#uid">reflowable</meta>
+        <meta property="rendition:orientation" refines="#uid">auto</meta>
+        <meta property="rendition:spread" refines="#uid">auto</meta>
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/rendition-overrides-conflicts.opf b/src/test/resources/30/single/opf/invalid/rendition-overrides-conflicts.opf
new file mode 100644
index 0000000..a9cc436
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/rendition-overrides-conflicts.opf
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../../../../main/resources/com/adobe/epubcheck/schema/30/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../../../../main/resources/com/adobe/epubcheck/schema/30/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+        <item id="t002" href="contents2.xhtml" media-type="application/xhtml+xml" />        
+        <item id="t003" href="contents3.xhtml" media-type="application/xhtml+xml" />        
+        <item id="t004" href="contents4.xhtml" media-type="application/xhtml+xml" />        
+        <item id="t005" href="contents5.xhtml" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" properties="rendition:flow-paginated rendition:flow-scrolled-continuous" />
+        <itemref idref="t002" properties="rendition:layout-reflowable rendition:layout-pre-paginated" />
+        <itemref idref="t003" properties="rendition:orientation-landscape rendition:orientation-portrait" />
+        <itemref idref="t004" properties="page-spread-right page-spread-left" />
+        <itemref idref="t005" properties="rendition:spread-portrait rendition:spread-landscape" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/scheme-001.opf b/src/test/resources/30/single/opf/invalid/scheme-001.opf
new file mode 100644
index 0000000..1fb3bce
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/scheme-001.opf
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid"
+		prefix="foaf: http://xmlns.com/foaf/spec/
+				dbp:    http://dbpedia.org/ontology/">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+		<meta property="identifier-type" scheme="codelist5">06</meta>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+		<meta property="meta-auth">Auth</meta>
+		<meta property="foaf:test">test</meta>
+		<link rel="marc21xml-record foaf:ddd" href="pub/meta/nor-wood-marc21.xml"/>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" /> 
+		<item properties="scripted mathml" id="c2" href="c2.xhtml" media-type="application/xhtml+xml" />		
+		<item properties="foaf:valid" id="c3" href="c2.xhtml" media-type="application/xhtml+xml" />		
+		<item properties="foaf:invalid" id="c5" href="c2.xhtml" media-type="application/xhtml+xml" />		
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        
+		<itemref idref="t1" properties="page-spread-left foaf:valid"/>       
+		<itemref idref="c2" properties="page-spread-left foaf:valid"/>
+		<itemref idref="c3" properties="page-spread-left foaf:valid"/>
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/scheme-002.opf b/src/test/resources/30/single/opf/invalid/scheme-002.opf
new file mode 100644
index 0000000..40dea37
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/scheme-002.opf
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid"
+		prefix="foaf: http://xmlns.com/foaf/spec/
+				dbp:    http://dbpedia.org/ontology/">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+		<meta property="identifier-type" scheme="onix:codelist5 invalid">06</meta>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+		<meta property="meta-auth">Auth</meta>
+		<meta property="foaf:test">test</meta>
+		<link rel="marc21xml-record foaf:ddd" href="pub/meta/nor-wood-marc21.xml"/>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" /> 
+		<item properties="scripted mathml" id="c2" href="c2.xhtml" media-type="application/xhtml+xml" />		
+		<item properties="foaf:valid" id="c3" href="c2.xhtml" media-type="application/xhtml+xml" />		
+		<item properties="foaf:invalid" id="c5" href="c2.xhtml" media-type="application/xhtml+xml" />		
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        
+		<itemref idref="t1" properties="page-spread-left foaf:valid"/>       
+		<itemref idref="c2" properties="page-spread-left foaf:valid"/>
+		<itemref idref="c3" properties="page-spread-left foaf:valid"/>
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/tocncx-001.opf b/src/test/resources/30/single/opf/invalid/tocncx-001.opf
new file mode 100644
index 0000000..cbec009
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/tocncx-001.opf
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" 
+    xmlns:dc="http://purl.org/dc/elements/1.1/" unique-identifier="uid">
+    <!-- missing @toc when ncx included -->
+    <metadata>
+        <dc:title>Norwegian Wood</dc:title>
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:language>en</dc:language>        
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>               
+    </metadata> 
+    <manifest>
+        <item id="text001" href="text001.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="text002" href="text002.xhtml" media-type="application/xhtml+xml" />
+        <item id="ncx" href="ncx.ncx" media-type="application/x-dtbncx+xml" />
+    </manifest>
+    <spine>
+        <itemref idref="text001" />
+        <itemref idref="text002" />
+    </spine>
+    <guide>
+        <reference href="text001.xhtml" type="cover" title="Preface"/>
+    </guide>            
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/tocncx-002.opf b/src/test/resources/30/single/opf/invalid/tocncx-002.opf
new file mode 100644
index 0000000..e128553
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/tocncx-002.opf
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" 
+    xmlns:dc="http://purl.org/dc/elements/1.1/" unique-identifier="uid">
+    <!-- @toc not referencing ncx -->
+    <metadata>
+        <dc:title>Norwegian Wood</dc:title>
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:language>en</dc:language>        
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>               
+    </metadata> 
+    <manifest>
+        <item id="text001" href="text001.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="text002" href="text002.xhtml" media-type="application/xhtml+xml" />
+        <item id="ncx" href="ncx.ncx" media-type="application/x-dtbncx+xml" />
+    </manifest>
+    <spine toc="text001">
+        <itemref idref="text001" />
+        <itemref idref="text002" />
+    </spine>
+    <guide>
+        <reference href="text001.xhtml" type="cover" title="Preface"/>
+    </guide>
+    
+    
+    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/uid-001.opf b/src/test/resources/30/single/opf/invalid/uid-001.opf
new file mode 100644
index 0000000..4235940
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/uid-001.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" 
+    xmlns:dc="http://purl.org/dc/elements/1.1/" unique-identifier="title">
+    <!-- uid not referencing correct meta -->
+    <metadata>
+        <dc:title id="title">Norwegian Wood</dc:title>
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:language>en</dc:language>        
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>               
+    </metadata> 
+    <manifest>
+        <item id="text001" href="text001.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="text002" href="text002.xhtml" media-type="application/xhtml+xml" />
+        <item id="img" href="img.png" media-type="image/png" />
+    </manifest>
+    <spine>
+        <itemref idref="text001" />
+        <itemref idref="text002" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/invalid/uid-002.opf b/src/test/resources/30/single/opf/invalid/uid-002.opf
new file mode 100644
index 0000000..ad409b4
--- /dev/null
+++ b/src/test/resources/30/single/opf/invalid/uid-002.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" 
+    xmlns:dc="http://purl.org/dc/elements/1.1/" unique-identifier="uid">
+    <!-- uid not resolving -->
+    <metadata>
+        <dc:title>Norwegian Wood</dc:title>
+        <dc:identifier>urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:language>en</dc:language>        
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>               
+    </metadata>  
+    <manifest>
+        <item id="text001" href="text001.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="text002" href="text002.xhtml" media-type="application/xhtml+xml" />
+        <item id="img" href="img.png" media-type="image/png" />
+    </manifest>
+    <spine>
+        <itemref idref="text001" />
+        <itemref idref="text002" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/peekData/collectionDCType.opf b/src/test/resources/30/single/opf/peekData/collectionDCType.opf
new file mode 100644
index 0000000..f4fc929
--- /dev/null
+++ b/src/test/resources/30/single/opf/peekData/collectionDCType.opf
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/"
+ version="3.0" profile="http://www.idpf.org/epub/30/profile/package/" xml:lang="en"
+ unique-identifier="pub-id">
+ <metadata>
+  <dc:type>foo</dc:type>
+ </metadata>
+ <collection>
+  <metadata>
+   <dc:type>bar</dc:type>
+  </metadata>
+ </collection>
+</package>
diff --git a/src/test/resources/30/single/opf/peekData/emptyId.opf b/src/test/resources/30/single/opf/peekData/emptyId.opf
new file mode 100644
index 0000000..2db640d
--- /dev/null
+++ b/src/test/resources/30/single/opf/peekData/emptyId.opf
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/" version="3.0" profile="http://www.idpf.org/epub/30/profile/package/" xml:lang="en" unique-identifier="pub-id">
+ <metadata>
+  <dc:identifier id="pub-id"></dc:identifier>
+ </metadata>
+</package>
diff --git a/src/test/resources/30/single/opf/peekData/idNotOnDCIdentifier.opf b/src/test/resources/30/single/opf/peekData/idNotOnDCIdentifier.opf
new file mode 100644
index 0000000..3d1d969
--- /dev/null
+++ b/src/test/resources/30/single/opf/peekData/idNotOnDCIdentifier.opf
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/" version="3.0" profile="http://www.idpf.org/epub/30/profile/package/" xml:lang="en" unique-identifier="pub-id">
+ <metadata>
+  <dc:identifier id="bar">bar</dc:identifier>
+  <dc:type id="pub-id">foo</dc:type>
+ </metadata>
+</package>
diff --git a/src/test/resources/30/single/opf/peekData/missingId.opf b/src/test/resources/30/single/opf/peekData/missingId.opf
new file mode 100644
index 0000000..cc68a47
--- /dev/null
+++ b/src/test/resources/30/single/opf/peekData/missingId.opf
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/" version="3.0" profile="http://www.idpf.org/epub/30/profile/package/" xml:lang="en" unique-identifier="pub-id">
+ <metadata>
+  <dc:identifier>foo</dc:identifier>
+ </metadata>
+</package>
diff --git a/src/test/resources/30/single/opf/peekData/multipleDCType.opf b/src/test/resources/30/single/opf/peekData/multipleDCType.opf
new file mode 100644
index 0000000..c9676c1
--- /dev/null
+++ b/src/test/resources/30/single/opf/peekData/multipleDCType.opf
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/" version="3.0" profile="http://www.idpf.org/epub/30/profile/package/" xml:lang="en" unique-identifier="pub-id">
+ <metadata>
+  <dc:type>foo</dc:type>
+  <dc:type>bar</dc:type>
+ </metadata>
+</package>
diff --git a/src/test/resources/30/single/opf/peekData/multipleIds.opf b/src/test/resources/30/single/opf/peekData/multipleIds.opf
new file mode 100644
index 0000000..565a931
--- /dev/null
+++ b/src/test/resources/30/single/opf/peekData/multipleIds.opf
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/" version="3.0" profile="http://www.idpf.org/epub/30/profile/package/" xml:lang="en" unique-identifier="pub-id">
+ <metadata>
+  <dc:identifier id="bar">bar</dc:identifier>
+  <dc:identifier id="pub-id">foo</dc:identifier>
+ </metadata>
+</package>
diff --git a/src/test/resources/30/single/opf/peekData/negativeVersion.opf b/src/test/resources/30/single/opf/peekData/negativeVersion.opf
new file mode 100644
index 0000000..cd34fad
--- /dev/null
+++ b/src/test/resources/30/single/opf/peekData/negativeVersion.opf
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="-3.0" profile="http://www.idpf.org/epub/30/profile/package/" xml:lang="en" unique-identifier="pub-id">
+</package>
diff --git a/src/test/resources/30/single/opf/peekData/noEqual.opf b/src/test/resources/30/single/opf/peekData/noEqual.opf
new file mode 100644
index 0000000..7b0a1cd
--- /dev/null
+++ b/src/test/resources/30/single/opf/peekData/noEqual.opf
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version "3.0" profile="http://www.idpf.org/epub/30/profile/package/" xml:lang="en" unique-identifier="pub-id">
+</package>
diff --git a/src/test/resources/30/single/opf/peekData/noPackageElement.opf b/src/test/resources/30/single/opf/peekData/noPackageElement.opf
new file mode 100644
index 0000000..28525a0
--- /dev/null
+++ b/src/test/resources/30/single/opf/peekData/noPackageElement.opf
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title prefer="dcterms-title">Moby-Dick</dc:title>
+    <meta property="dcterms:title" id="dcterms-title">Moby-Dick</meta>
+ <meta about="#dcterms-title" property="title-type" id="title-type">01</meta>
+    <meta about="#title-type" property="scheme" datatype="xsd:anyURI">http://www.editeur.org/ONIX/book/codelists/current.html#codelist15</meta>
+
+  </metadata>
diff --git a/src/test/resources/30/single/opf/peekData/noPointInValue.opf b/src/test/resources/30/single/opf/peekData/noPointInValue.opf
new file mode 100644
index 0000000..0920e2e
--- /dev/null
+++ b/src/test/resources/30/single/opf/peekData/noPointInValue.opf
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3" profile="http://www.idpf.org/epub/30/profile/package/" xml:lang="en" unique-identifier="pub-id">
+ </package>
diff --git a/src/test/resources/30/single/opf/peekData/noVersion.opf b/src/test/resources/30/single/opf/peekData/noVersion.opf
new file mode 100644
index 0000000..e396672
--- /dev/null
+++ b/src/test/resources/30/single/opf/peekData/noVersion.opf
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" profile="http://www.idpf.org/epub/30/profile/package/" xml:lang="en" unique-identifier="pub-id">
+</package>
diff --git a/src/test/resources/30/single/opf/peekData/singleDCType.opf b/src/test/resources/30/single/opf/peekData/singleDCType.opf
new file mode 100644
index 0000000..ee8398f
--- /dev/null
+++ b/src/test/resources/30/single/opf/peekData/singleDCType.opf
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/" version="3.0" profile="http://www.idpf.org/epub/30/profile/package/" xml:lang="en" unique-identifier="pub-id">
+ <metadata>
+  <dc:type>foo</dc:type>
+ </metadata>
+</package>
diff --git a/src/test/resources/30/single/opf/peekData/spacesBetweenQuotes.opf b/src/test/resources/30/single/opf/peekData/spacesBetweenQuotes.opf
new file mode 100644
index 0000000..d4b48bd
--- /dev/null
+++ b/src/test/resources/30/single/opf/peekData/spacesBetweenQuotes.opf
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version = " 3.0" profile="http://www.idpf.org/epub/30/profile/package/" xml:lang="en" unique-identifier="pub-id">
+</package>
diff --git a/src/test/resources/30/single/opf/peekData/spacesInValue.opf b/src/test/resources/30/single/opf/peekData/spacesInValue.opf
new file mode 100644
index 0000000..48ed845
--- /dev/null
+++ b/src/test/resources/30/single/opf/peekData/spacesInValue.opf
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3 .0" profile="http://www.idpf.org/epub/30/profile/package/" xml:lang="en" unique-identifier="pub-id">
+</package>
diff --git a/src/test/resources/30/single/opf/peekData/uniqueId.opf b/src/test/resources/30/single/opf/peekData/uniqueId.opf
new file mode 100644
index 0000000..8f4219f
--- /dev/null
+++ b/src/test/resources/30/single/opf/peekData/uniqueId.opf
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/" version="3.0" profile="http://www.idpf.org/epub/30/profile/package/" xml:lang="en" unique-identifier="pub-id">
+ <metadata>
+  <dc:identifier id="pub-id">foo</dc:identifier>
+ </metadata>
+</package>
diff --git a/src/test/resources/30/single/opf/peekData/validVersion.opf b/src/test/resources/30/single/opf/peekData/validVersion.opf
new file mode 100644
index 0000000..e03578d
--- /dev/null
+++ b/src/test/resources/30/single/opf/peekData/validVersion.opf
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" profile="http://www.idpf.org/epub/30/profile/package/" xml:lang="en" unique-identifier="pub-id">
+ </package>
diff --git a/src/test/resources/30/single/opf/peekData/valueWithoutQuotes.opf b/src/test/resources/30/single/opf/peekData/valueWithoutQuotes.opf
new file mode 100644
index 0000000..7ebbb09
--- /dev/null
+++ b/src/test/resources/30/single/opf/peekData/valueWithoutQuotes.opf
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version = 3.0 profile="http://www.idpf.org/epub/30/profile/package/" xml:lang="en" unique-identifier="pub-id">
+</package>
diff --git a/src/test/resources/30/single/opf/peekData/version123.323.opf b/src/test/resources/30/single/opf/peekData/version123.323.opf
new file mode 100644
index 0000000..6253abf
--- /dev/null
+++ b/src/test/resources/30/single/opf/peekData/version123.323.opf
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="123.323" profile="http://www.idpf.org/epub/30/profile/package/" xml:lang="en" unique-identifier="pub-id">
+</package>
diff --git a/src/test/resources/30/single/opf/peekData/whitespaceInDCIdentifier.opf b/src/test/resources/30/single/opf/peekData/whitespaceInDCIdentifier.opf
new file mode 100644
index 0000000..d63f14e
--- /dev/null
+++ b/src/test/resources/30/single/opf/peekData/whitespaceInDCIdentifier.opf
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/" version="3.0" profile="http://www.idpf.org/epub/30/profile/package/" xml:lang="en" unique-identifier="pub-id">
+ <metadata>
+  <dc:identifier id="pub-id">  foo   </dc:identifier>
+ </metadata>
+</package>
diff --git a/src/test/resources/30/single/opf/peekData/whitespaceInDCType.opf b/src/test/resources/30/single/opf/peekData/whitespaceInDCType.opf
new file mode 100644
index 0000000..4a6bc32
--- /dev/null
+++ b/src/test/resources/30/single/opf/peekData/whitespaceInDCType.opf
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/" version="3.0" profile="http://www.idpf.org/epub/30/profile/package/" xml:lang="en" unique-identifier="pub-id">
+ <metadata>
+  <dc:type>  foo bar  </dc:type>
+  <dc:type></dc:type>
+  <dc:type>    </dc:type>
+ </metadata>
+</package>
diff --git a/src/test/resources/30/single/opf/valid/base-001.opf b/src/test/resources/30/single/opf/valid/base-001.opf
new file mode 100644
index 0000000..365c50c
--- /dev/null
+++ b/src/test/resources/30/single/opf/valid/base-001.opf
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" 
+    xml:lang="en-GB" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>
+        <dc:creator>Haruki Murakami</dc:creator>
+        <dc:language>en</dc:language>
+        <dc:date>2010-02-01</dc:date>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>                                
+        <link href="http://example.org/#foo" rel="onix-record"/>        
+    </metadata> 
+    <manifest>
+        <item id="text001" href="text001.xhtml" properties="nav scripted" media-type="application/xhtml+xml" />
+        <item id="text002" href="text002.xhtml" media-type="application/xhtml+xml" />
+        <item id="img001" href="image.png" media-type="image/png" properties="cover-image" />
+        <item id="img002" href="image.jpg" media-type="image/jpg" />
+        <item id="ncx" href="ncx.ncx" media-type="application/x-dtbncx+xml" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="text001" />
+        <itemref idref="text002" />
+    </spine>
+    <guide>
+        <reference href="text001.xhtml" type="cover" title="Cover"/>
+    </guide>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/valid/bindings-001.opf b/src/test/resources/30/single/opf/valid/bindings-001.opf
new file mode 100644
index 0000000..7084e2c
--- /dev/null
+++ b/src/test/resources/30/single/opf/valid/bindings-001.opf
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" xml:lang="en-GB" 
+    unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>
+        <dc:language>en</dc:language>        
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="text001" href="text001.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="text002" href="text002.xhtml" media-type="application/xhtml+xml" />
+        <item id="img001" fallback="img002" href="image.png" media-type="image/png" />
+        <item id="img002" href="image.jpg" media-type="image/jpg" />
+        <item id="ncx" href="ncx.ncx" media-type="application/x-dtbncx+xml" />
+        <item id="impl" href="impl.xhtml" media-type="application/xhtml+xml"/>
+        <item id="slideshow" href="slideshow.xml" media-type="application/x-demo-slideshow"/>
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="text001" />
+        <itemref idref="text002" />
+    </spine>
+    <guide>
+        <reference href="text001.xhtml" type="cover" title="Cover"/>
+    </guide>
+    <bindings>
+        <mediaType media-type="application/x-demo-slideshow" handler="impl"/>
+    </bindings>
+   
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/valid/collection-valid-001.opf b/src/test/resources/30/single/opf/valid/collection-valid-001.opf
new file mode 100644
index 0000000..28b7347
--- /dev/null
+++ b/src/test/resources/30/single/opf/valid/collection-valid-001.opf
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>
+        <dc:language>la</dc:language>
+        <dc:date>2014-08-29</dc:date>
+        <meta property="dcterms:modified">2014-08-29T15:47:00Z</meta>
+    </metadata>
+    <manifest>
+        <item id="nav" href="nav.xhtml" media-type="application/xhtml+xml" properties="nav"/>
+        <item id="c1" href="chapter1.xhtml" media-type="application/xhtml+xml"/>
+        <item id="c2" href="chapter2.xhtml" media-type="application/xhtml+xml"/>
+        <item id="c3" href="chapter3.xhtml" media-type="application/xhtml+xml"/>
+        <item id="c4" href="chapter4.xhtml" media-type="application/xhtml+xml"/>
+        <item id="c5" href="EPUB/xhtml/lorem2.xhtml" media-type="application/xhtml+xml"/>
+        <item id="css" href="stylesheet.css" media-type="text/css"/>
+    </manifest>
+    <spine>
+        <itemref idref="c1"/>
+        <itemref idref="c2"/>
+        <itemref idref="c3"/>
+        <itemref idref="c4"/>
+        <itemref idref="c5"/>
+    </spine>
+    <collection role="preview">
+        <collection role="manifest">
+            <link href="chapter1.xhtml" media-type="application/xhtml+xml"/>
+            <link href="chapter2.xhtml" media-type="application/xhtml+xml"/>
+            <link href="stylesheet.css" media-type="text/css"/>
+        </collection>
+        <link href="chapter1.xhtml"/>
+        <link href="chapter2.xhtml"/>
+        <link href="chapter3.xhtml#preview"/>
+    </collection>
+</package>
diff --git a/src/test/resources/30/single/opf/valid/collection-valid-002.opf b/src/test/resources/30/single/opf/valid/collection-valid-002.opf
new file mode 100644
index 0000000..97dfff8
--- /dev/null
+++ b/src/test/resources/30/single/opf/valid/collection-valid-002.opf
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Previews</dc:title>
+        <dc:language>la</dc:language>
+        <dc:date>2014-07-29</dc:date>
+        <meta property="dcterms:modified">2014-07-29T15:47:00Z</meta>
+    </metadata>
+    <manifest>
+        <item id="t1" href="EPUB/xhtml/lorem1.xhtml" properties="nav"
+            media-type="application/xhtml+xml"/>
+        <item id="t2" href="EPUB/xhtml/lorem2.xhtml" media-type="application/xhtml+xml"/>
+        <item id="css" href="stylesheet.css" media-type="text/css"/>
+        <item id="img" href="image1.jpg" media-type="image/jpeg"/>
+    </manifest>
+    <spine>
+        <itemref idref="t1"/>
+    </spine>
+    <collection role="preview">
+        <collection role="manifest">
+            <link href="EPUB/xhtml/lorem1.xhtml" media-type="application/xhtml+xml"/>
+            <link href="EPUB/xhtml/lorem2.xhtml" media-type="application/xhtml+xml"/>
+            <link href="stylesheet.css" media-type="text/css"/>
+            <link href="image1.jpg" media-type="image/jpeg"/>
+        </collection>
+        <link href="EPUB/xhtml/lorem1.xhtml"/>
+        <link href="EPUB/xhtml/lorem2.xhtml#preview"/>
+    </collection>
+</package>
diff --git a/src/test/resources/30/single/opf/valid/collection-valid-do-001.opf b/src/test/resources/30/single/opf/valid/collection-valid-do-001.opf
new file mode 100644
index 0000000..f6096c0
--- /dev/null
+++ b/src/test/resources/30/single/opf/valid/collection-valid-do-001.opf
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
+        <dc:identifier id="uid">978-1-00000-000-0</dc:identifier>
+        <meta refines="#uid" property="identifier-type" scheme="onix:codelist5">15</meta>
+        <dc:title>Recombinant DNA Technology</dc:title>
+        <dc:language>en</dc:language>
+        <dc:type>edupub</dc:type>
+        <dc:creator>Jane Author</dc:creator>
+        <dc:publisher>Acme Publishing</dc:publisher>
+        <meta property="dcterms:modified">2014-08-28T01:30:20Z</meta>
+        <meta property="schema:audience" id="aud01">schema:audience</meta>
+        <meta id="ea02" property="schema:educationalAlignment">schema:educationalAlignment</meta>
+        <meta refines="#ea02" property="schema:alignmentType">teaches</meta>
+        <meta property="schema:interactivityType">Mixed</meta>
+        <meta property="schema:typicalAgeRange">18+</meta>
+    </metadata>
+    <manifest>
+        <!--NCX & CSS -->
+        <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/>
+        <item id="css1" href="css/epub.css" media-type="text/css"/>
+        <item id="css2" href="css/stylesheet.css" media-type="text/css"/>
+        <item id="css4" href="css/mainStyle.css" media-type="text/css"/>
+        
+        
+        <!--NCX & CSS -->
+        <item id="js" href="scripts/jquery-1.8.3.js" media-type="text/javascript" />
+        <item id="js1" href="scripts/jquery-just-touch.js" media-type="text/javascript" />
+        <item id="js2" href="scripts/jquery-ui-touch-punch.js" media-type="text/javascript" />
+        <item id="js3" href="scripts/main.js" media-type="text/javascript" />
+        <item id="js4" href="scripts/ui/jquery-ui.js" media-type="text/javascript" />
+        <item id="js5" href="scripts/ui/jquery.ui.core.js" media-type="text/javascript" />
+        <item id="js6" href="scripts/ui/jquery.ui.draggable.js" media-type="text/javascript" />
+        <item id="js7" href="scripts/ui/jquery.ui.droppable.js" media-type="text/javascript" />
+        <item id="js8" href="scripts/ui/jquery.ui.mouse.js" media-type="text/javascript" />
+        <item id="js9" href="scripts/ui/jquery.ui.widget.js" media-type="text/javascript" />
+        <item id="js10" href="scripts/T2_P3.js" media-type="text/javascript" />
+        
+        
+        <!--font -->
+        <item id="font001" href="fonts/MinionPro-Regular.otf" media-type="application/x-font-opentype"/>
+        <!--video -->
+        <item id="video1" href="video/DNA-Fingerprinting.mp4" media-type="video/mpeg4"/>
+        <item id="video2" href="video/DNA-Profiling.mp4" media-type="video/mpeg4"/>
+        
+        <!--contents -->
+        <item id="Cover" href="text/Cover.xhtml" media-type="application/xhtml+xml"/>
+        <item id="nav" href="text/nav.xhtml" media-type="application/xhtml+xml" properties="nav"/>
+        <item id="Part01" href="text/Part01.xhtml" media-type="application/xhtml+xml"/>
+        <item id="Contents" href="text/Contents.xhtml" media-type="application/xhtml+xml"/>
+        <item id="Part01chapter01" href="text/Part01chapter01.xhtml" media-type="application/xhtml+xml"/>
+        <item id="Part01chapter02" href="text/Part01chapter02.xhtml" media-type="application/xhtml+xml"/>
+        <item id="Part01chapter03" href="text/Part01chapter03.xhtml" media-type="application/xhtml+xml"/>
+        <item id="Part01chapter04" href="text/Part01chapter04.xhtml" media-type="application/xhtml+xml"/>
+        <item id="Part01chapter05" href="text/Part01chapter05.xhtml" media-type="application/xhtml+xml"/>
+        <item id="Part01chapter06" href="text/Part01chapter06.xhtml" media-type="application/xhtml+xml"/>
+        <item id="Frontmatter" href="text/Frontmatter.xhtml" media-type="application/xhtml+xml"/>
+        <item id="Frontmatter1" href="text/Frontmatter1.xhtml" media-type="application/xhtml+xml"/>
+        <item id="Frontmatter2" href="text/Frontmatter2.xhtml" media-type="application/xhtml+xml"/>
+        <item id="Backmatter" href="text/Backmatter.xhtml" media-type="application/xhtml+xml"/>
+        <item id="activity" href="text/activity.xhtml" media-type="application/xhtml+xml" properties="scripted"/>
+        <item id="Question" href="text/Question.xhtml" media-type="application/xhtml+xml" properties="scripted"/>
+        
+        <!--images -->
+        
+        <item id="image1" href="images/1.jpg" media-type="image/jpeg" />
+        <item id="image2" href="images/1a.jpg" media-type="image/jpeg" />
+        <item id="image3" href="images/2.jpg" media-type="image/jpeg" />
+        <item id="image4" href="images/2a.jpg" media-type="image/jpeg" />
+        <item id="image5" href="images/3.jpg" media-type="image/jpeg" />
+        <item id="image6" href="images/3a.jpg" media-type="image/jpeg" />
+        <item id="image7" href="images/4.jpg" media-type="image/jpeg" />
+        <item id="image8" href="images/4a.jpg" media-type="image/jpeg" />
+        <item id="image9" href="images/5.jpg" media-type="image/jpeg" />
+        <item id="image10" href="images/5a.jpg" media-type="image/jpeg" />
+        <item id="image11" href="images/6.jpg" media-type="image/jpeg" />
+        <item id="image12" href="images/7.jpg" media-type="image/jpeg" />
+        <item id="image13" href="images/8.jpg" media-type="image/jpeg" />
+        <item id="image14" href="images/check.jpg" media-type="image/jpeg" />
+        <item id="image15" href="images/Cover.jpg" media-type="image/jpeg" />
+        <item id="image16" href="images/f219-1.jpg" media-type="image/jpeg" />
+        <item id="image17" href="images/f220-1.jpg" media-type="image/jpeg" />
+        <item id="image18" href="images/f220-2.jpg" media-type="image/jpeg" />
+        <item id="image19" href="images/f221-1.jpg" media-type="image/jpeg" />
+        <item id="image20" href="images/f221-2.jpg" media-type="image/jpeg" />
+        <item id="image21" href="images/f222-1.jpg" media-type="image/jpeg" />
+        <item id="image22" href="images/f222-2.jpg" media-type="image/jpeg" />
+        <item id="image23" href="images/f222-3.jpg" media-type="image/jpeg" />
+        <item id="image24" href="images/f223-1.jpg" media-type="image/jpeg" />
+        <item id="image25" href="images/f224-1.jpg" media-type="image/jpeg" />
+        <item id="image26" href="images/f225-1.jpg" media-type="image/jpeg" />
+        <item id="image27" href="images/f225-2.jpg" media-type="image/jpeg" />
+        <item id="image28" href="images/f225-3.jpg" media-type="image/jpeg" />
+        <item id="image29" href="images/f226-1.jpg" media-type="image/jpeg" />
+        <item id="image30" href="images/f227-1.jpg" media-type="image/jpeg" />
+        <item id="image31" href="images/f227-2.jpg" media-type="image/jpeg" />
+        <item id="image32" href="images/f228-1.jpg" media-type="image/jpeg" />
+        <item id="image33" href="images/f228-2.jpg" media-type="image/jpeg" />
+        <item id="image34" href="images/f229-1.jpg" media-type="image/jpeg" />
+        <item id="image35" href="images/f229-2.jpg" media-type="image/jpeg" />
+        <item id="image36" href="images/f230-1.jpg" media-type="image/jpeg" />
+        <item id="image37" href="images/f230-2.jpg" media-type="image/jpeg" />
+        <item id="image38" href="images/f230-3.jpg" media-type="image/jpeg" />
+        <item id="image39" href="images/f230-4.jpg" media-type="image/jpeg" />
+        <item id="image40" href="images/f230-5.jpg" media-type="image/jpeg" />
+        <item id="image41" href="images/f231-1.jpg" media-type="image/jpeg" />
+        <item id="image42" href="images/f231-2.jpg" media-type="image/jpeg" />
+        <item id="image43" href="images/f232-1.jpg" media-type="image/jpeg" />
+        <item id="image44" href="images/f233-1.jpg" media-type="image/jpeg" />
+        <item id="image45" href="images/f234-1.jpg" media-type="image/jpeg" />
+        <item id="image46" href="images/f235-1.jpg" media-type="image/jpeg" />
+        <item id="image47" href="images/f235-2.jpg" media-type="image/jpeg" />
+        <item id="image48" href="images/f236-1.jpg" media-type="image/jpeg" />
+        <item id="image49" href="images/f237-1.jpg" media-type="image/jpeg" />
+        <item id="image50" href="images/f238-1.jpg" media-type="image/jpeg" />
+        <item id="image51" href="images/f238-2.jpg" media-type="image/jpeg" />
+        <item id="image52" href="images/f239-1.jpg" media-type="image/jpeg" />
+        <item id="image53" href="images/Title-1.jpg" media-type="image/jpeg" />
+        <item id="image54" href="images/tmb.jpg" media-type="image/jpeg" />
+        <item id="image55" href="images/box.jpg" media-type="image/jpeg" />
+        <item id="image56" href="images/box-1.jpg" media-type="image/jpeg" />
+        <item id="image57" href="images/box-2.jpg" media-type="image/jpeg" />
+        <item id="image66" href="images/poster1.png" media-type="image/png" />
+        <item id="image67" href="images/poster2.png" media-type="image/png" />
+        <item id="image68" href="images/01.png" media-type="image/png" />
+        <item id="image69" href="images/02.png" media-type="image/png" />
+        <item id="image70" href="images/03.png" media-type="image/png" />
+        <item id="image71" href="images/04.png" media-type="image/png" />
+        <item id="image72" href="images/bgs.png" media-type="image/png" />
+        <item id="image73" href="images/close.png" media-type="image/png" />
+        <item id="image74" href="images/feedbackBg.png" media-type="image/png" />
+        <item id="image75" href="images/logo.png" media-type="image/png" />
+        <item id="image76" href="images/correct.png" media-type="image/png" />
+        <item id="image77" href="images/incorrect.png" media-type="image/png" />
+        <item id="image78" href="images/Activity.png" media-type="image/png" />
+        <item id="image79" href="images/Question.png" media-type="image/png" />
+        
+    </manifest>    
+    <spine toc="ncx">
+        <itemref idref="Cover"/>
+        <itemref idref="Part01"/>
+        <itemref idref="Contents"/>
+        <itemref idref="Frontmatter"/>
+        <itemref idref="Part01chapter01"/>
+        <itemref idref="Part01chapter02"/>
+        <itemref idref="Part01chapter03"/>
+        <itemref idref="Frontmatter1"/>
+        <itemref idref="Part01chapter04"/>
+        <itemref idref="Part01chapter05"/>
+        <itemref idref="Frontmatter2"/>
+        <itemref idref="Part01chapter06"/>
+        <itemref idref="Backmatter"/>
+        <itemref idref="activity" linear="no"/>
+        <itemref idref="Question" linear="no"/>
+        <itemref idref="nav" linear="no"/>
+    </spine>
+    <collection role="distributable-object">
+        <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+            <dc:type>edupub</dc:type>
+            <dc:title>Product production through recombinant DNA technology</dc:title>
+            <dc:identifier>urn:uuid:bc6abc10-2c68-11e4-8c21-0800200c9a66</dc:identifier>
+            <dc:creator>Rick Reusi</dc:creator>
+            <dc:language>en</dc:language>
+            <dc:description>Explanation of the steps taken to produce useful products through the combining or indeed the recombining of DNA from a bacterial cell and a cell with a particular gene of interest.</dc:description>
+            <dc:source>978-1-00000-000-0 at 2014-08-28T01:30:20Z</dc:source>
+            <dc:rights>All rights reserved</dc:rights>			
+            <dc:date>2014-08-28T01:30:20Z</dc:date>
+            <meta property="dcterms:modified">2014-08-27T01:00:00Z</meta>
+            <meta property="schema:typicalAgeRange">18+</meta>
+            <meta property="schema:accessibilityFeature">longDescription</meta>
+            <meta property="schema:accessibilityHazard">noFlashingHazard</meta>
+            <meta property="schema:accessibilityHazard">noMotionSimulationHazard</meta>
+        </metadata>
+        <collection role="manifest">
+            <link href="css/epub.css" />
+            <link href="images/f223-1.jpg"/>
+            <link href="images/1.jpg"/>
+            <link href="images/2.jpg" />
+            <link href="images/3.jpg" />
+            <link href="images/4.jpg" />
+            <link href="images/5.jpg" />
+            <link href="images/6.jpg" />
+            <link href="images/7.jpg" />
+            <link href="images/8.jpg" />
+            <link href="images/check.jpg" />
+            <link href="text/Part01chapter01.xhtml#annot3" />
+            <!-- notice that the following "Checkpoint" aside is linked here as a dependant resource, but not a spine level item as are the items below -->
+        </collection>
+        <link href="text/Part01chapter01.xhtml#do01entity01"/>
+        <link href="text/Part01chapter01.xhtml#do01entity02"/>
+    </collection>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/valid/date-1.opf b/src/test/resources/30/single/opf/valid/date-1.opf
new file mode 100644
index 0000000..628edd0
--- /dev/null
+++ b/src/test/resources/30/single/opf/valid/date-1.opf
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <dc:date>2011</dc:date>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/valid/date-2.opf b/src/test/resources/30/single/opf/valid/date-2.opf
new file mode 100644
index 0000000..742c7d4
--- /dev/null
+++ b/src/test/resources/30/single/opf/valid/date-2.opf
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <dc:date>1997-07-16T19:20:30.45+01:00</dc:date>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/valid/date-3.opf b/src/test/resources/30/single/opf/valid/date-3.opf
new file mode 100644
index 0000000..7211428
--- /dev/null
+++ b/src/test/resources/30/single/opf/valid/date-3.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <dc:date>
+        	2011
+        </dc:date>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/valid/dc-source.opf b/src/test/resources/30/single/opf/valid/dc-source.opf
new file mode 100644
index 0000000..9ebdbaa
--- /dev/null
+++ b/src/test/resources/30/single/opf/valid/dc-source.opf
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+        <dc:source id="src-id">urn:isbn:9780375704024</dc:source>
+        <dc:source id="src-id2">http://example.com/barfoo</dc:source>
+        
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/valid/dc-type.opf b/src/test/resources/30/single/opf/valid/dc-type.opf
new file mode 100644
index 0000000..b724f4c
--- /dev/null
+++ b/src/test/resources/30/single/opf/valid/dc-type.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:type>foo</dc:type>
+        <dc:type>bar</dc:type>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/valid/link-rel-record.opf b/src/test/resources/30/single/opf/valid/link-rel-record.opf
new file mode 100644
index 0000000..544b9b1
--- /dev/null
+++ b/src/test/resources/30/single/opf/valid/link-rel-record.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+        <link rel="record" href="http://www.example.org/book.atom" media-type="application/atom+xml;type=entry;profile=opds-catalog"/>
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/valid/lorem-svg-fallback.opf b/src/test/resources/30/single/opf/valid/lorem-svg-fallback.opf
new file mode 100644
index 0000000..eeb385c
--- /dev/null
+++ b/src/test/resources/30/single/opf/valid/lorem-svg-fallback.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" fallback="svg" media-type="text/css" />
+		<item id="svg" href="rect.svg" media-type="image/svg+xml" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />      
+		<itemref idref="css" />    		
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/valid/lorem-svg.opf b/src/test/resources/30/single/opf/valid/lorem-svg.opf
new file mode 100644
index 0000000..61e6546
--- /dev/null
+++ b/src/test/resources/30/single/opf/valid/lorem-svg.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" />                
+        <item id="css" href="lorem.css" media-type="text/css" />
+		<item id="svg" href="rect.svg" media-type="image/svg+xml" />
+    </manifest>
+    <spine>
+        <itemref idref="t1" />      
+		<itemref idref="svg" />    		
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/valid/media-overlay-001.opf b/src/test/resources/30/single/opf/valid/media-overlay-001.opf
new file mode 100644
index 0000000..17015f4
--- /dev/null
+++ b/src/test/resources/30/single/opf/valid/media-overlay-001.opf
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" xml:lang="en-GB" 
+    unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>        
+        <meta refines="#media001" property="media:duration">0:30:00</meta>
+        <meta refines="#media002" property="media:duration">0:23:33.283</meta>
+        <meta property="media:duration">0:53:33.283</meta>
+        <meta property="media:narrator">Susan J. Bookreader</meta>
+        <meta property="media:playback-active-class">playback-active</meta>
+    </metadata> 
+    <manifest>
+        <item id="text001" href="text001.xhtml" properties="nav" media-type="application/xhtml+xml" media-overlay="media001"/>
+        <item id="text002" href="text002.xhtml" media-type="application/xhtml+xml" media-overlay="media002"/>
+        <item id="media001" href="media001.smil" media-type="application/smil+xml" />
+        <item id="media002" href="media002.smil" media-type="application/smil+xml" />
+        <item id="img001" fallback="img002" href="image.png" media-type="image/png" />
+        <item id="img002" href="image.jpg" media-type="image/jpg" />
+        <item id="ncx" href="ncx.ncx" media-type="application/x-dtbncx+xml" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="text001" />
+        <itemref idref="text002" />
+    </spine>
+    <guide>
+        <reference href="text001.xhtml" type="cover" title="Cover"/>
+    </guide>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/valid/media-overlay-002.opf b/src/test/resources/30/single/opf/valid/media-overlay-002.opf
new file mode 100644
index 0000000..4ab3289
--- /dev/null
+++ b/src/test/resources/30/single/opf/valid/media-overlay-002.opf
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" 
+    xml:lang="en-GB" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-446655440000</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>
+        <dc:creator>Haruki Murakami</dc:creator>
+        <dc:language>en</dc:language>        
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+        <meta refines="#media001" property="media:duration">12min</meta>
+        <meta refines="#media002" property="media:duration">20min</meta>
+        <meta property="media:duration">0:32:00</meta>
+        <meta property="media:narrator" refines="#media001">Mary Jones</meta>
+        <meta property="media:narrator" refines="#media002">Sally Smith</meta>
+    </metadata> 
+    <manifest>
+        <item id="text001" href="text001.xhtml" properties="nav" media-type="application/xhtml+xml" media-overlay="media001"/>
+        <item id="text002" href="text002.xhtml" media-type="application/xhtml+xml" media-overlay="media002"/>
+        <item id="media001" href="media001.smil" media-type="application/smil+xml" />
+        <item id="media002" href="media002.smil" media-type="application/smil+xml" />
+        <item id="img001" fallback="img002" href="image.png" media-type="image/png" />
+        <item id="img002" href="image.jpg" media-type="image/jpg" />
+        <item id="ncx" href="ncx.ncx" media-type="application/x-dtbncx+xml" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="text001" />
+        <itemref idref="text002" />
+    </spine>
+    <guide>
+        <reference href="text001.xhtml" type="cover" title="Cover"/>
+    </guide>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/valid/meta-collection.opf b/src/test/resources/30/single/opf/valid/meta-collection.opf
new file mode 100644
index 0000000..148f717
--- /dev/null
+++ b/src/test/resources/30/single/opf/valid/meta-collection.opf
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+        <meta property="belongs-to-collection" id="c02">Harry Potter</meta>
+        <meta property="belongs-to-collection" id="c03" refines="#c02">Wizardry</meta>
+        <meta refines="#c02" property="collection-type">set</meta>
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/valid/meta-schemaorg.opf b/src/test/resources/30/single/opf/valid/meta-schemaorg.opf
new file mode 100644
index 0000000..b964939
--- /dev/null
+++ b/src/test/resources/30/single/opf/valid/meta-schemaorg.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+        <meta property="schema:interactivityType">Mixed</meta>
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/valid/meta-source-of.opf b/src/test/resources/30/single/opf/valid/meta-source-of.opf
new file mode 100644
index 0000000..00ee825
--- /dev/null
+++ b/src/test/resources/30/single/opf/valid/meta-source-of.opf
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+        <dc:source id="src-id">urn:isbn:9780375704024</dc:source>
+        <meta refines="#src-id" property="identifier-type" scheme="onix:codelist5">15</meta>
+        <meta refines="#src-id" property="source-of">pagination</meta>
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/valid/minimal.opf b/src/test/resources/30/single/opf/valid/minimal.opf
new file mode 100644
index 0000000..115de82
--- /dev/null
+++ b/src/test/resources/30/single/opf/valid/minimal.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/valid/prefixes.opf b/src/test/resources/30/single/opf/valid/prefixes.opf
new file mode 100644
index 0000000..05b766c
--- /dev/null
+++ b/src/test/resources/30/single/opf/valid/prefixes.opf
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid"
+		prefix="foaf: http://xmlns.com/foaf/spec/
+				dbp:    http://dbpedia.org/ontology/">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+		<meta property="meta-auth">Auth</meta>
+		<meta property="media:narrator">test</meta>
+		<meta property="foaf:test">test</meta>
+		<link rel="marc21xml-record foaf:ddd" href="pub/meta/nor-wood-marc21.xml"/>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" /> 
+		<item properties="scripted mathml" id="c2" href="c2.xhtml" media-type="application/xhtml+xml" />		
+		<item properties="foaf:valid" id="c3" href="c2.xhtml" media-type="application/xhtml+xml" />		
+		<item properties="foaf:invalid" id="c5" href="c2.xhtml" media-type="application/xhtml+xml" />		
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        
+		<itemref idref="t1" properties="page-spread-left foaf:valid"/>       
+		<itemref idref="c2" properties="page-spread-left foaf:valid"/>
+		<itemref idref="c3" properties="page-spread-left foaf:valid"/>
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/valid/rendition-globals.opf b/src/test/resources/30/single/opf/valid/rendition-globals.opf
new file mode 100644
index 0000000..efc10c7
--- /dev/null
+++ b/src/test/resources/30/single/opf/valid/rendition-globals.opf
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../../../../main/resources/com/adobe/epubcheck/schema/30/package-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../../../../main/resources/com/adobe/epubcheck/schema/30/package-30.sch"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <metadata>
+        <dc:identifier id="uid">urn:uuid:550e8412-e29b-41d4-a716-446655441234</dc:identifier>
+        <dc:title>Norwegian Wood</dc:title>        
+        <dc:language>en</dc:language>
+        <meta property="dcterms:modified">2011-08-19T12:00:00Z</meta>
+        <meta property="rendition:flow">auto</meta>
+        <meta property="rendition:layout">reflowable</meta>
+        <meta property="rendition:orientation">auto</meta>
+        <meta property="rendition:spread">auto</meta>
+        <meta property="rendition:viewport">width=1200, height=800</meta>
+        <meta property="rendition:viewport" refines="contents.xhtml">width=1200, height=800</meta>
+        <meta property="rendition:viewport" refines="contents.xhtml">height=1200, width=800</meta>
+    </metadata> 
+    <manifest>
+        <item id="t001" href="contents.xhtml" properties="nav" media-type="application/xhtml+xml" />        
+    </manifest>
+    <spine>
+        <itemref idref="t001" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/valid/rendition-properties.opf b/src/test/resources/30/single/opf/valid/rendition-properties.opf
new file mode 100644
index 0000000..ae9ad2e
--- /dev/null
+++ b/src/test/resources/30/single/opf/valid/rendition-properties.opf
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Missing TOC Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+    <meta property="rendition:layout">pre-paginated</meta>
+    <meta property="rendition:orientation">landscape</meta>
+    <meta property="rendition:spread">landscape</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="page02.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" href="page03.xhtml" media-type="application/xhtml+xml" />
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" properties="rendition:orientation-auto"/>
+    <itemref idref="page02" properties="rendition:layout-reflowable"/>
+    <itemref idref="page03" properties="rendition:spread-both"/>
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/opf/valid/scheme-001.opf b/src/test/resources/30/single/opf/valid/scheme-001.opf
new file mode 100644
index 0000000..806d154
--- /dev/null
+++ b/src/test/resources/30/single/opf/valid/scheme-001.opf
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid"
+		prefix="foaf: http://xmlns.com/foaf/spec/
+				dbp:    http://dbpedia.org/ontology/">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>
+		<meta property="identifier-type" scheme="onix:codelist5">06</meta>
+        <meta property="dcterms:modified">2011-09-01T17:18:00Z</meta>
+		<meta property="meta-auth">Auth</meta>
+		<meta property="foaf:test">test</meta>
+		<link rel="marc21xml-record foaf:ddd" href="pub/meta/nor-wood-marc21.xml"/>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" properties="nav" media-type="application/xhtml+xml" /> 
+		<item properties="scripted mathml" id="c2" href="c2.xhtml" media-type="application/xhtml+xml" />		
+		<item properties="foaf:valid" id="c3" href="c2.xhtml" media-type="application/xhtml+xml" />		
+		<item properties="foaf:invalid" id="c5" href="c2.xhtml" media-type="application/xhtml+xml" />		
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine>
+        
+		<itemref idref="t1" properties="page-spread-left foaf:valid"/>       
+		<itemref idref="c2" properties="page-spread-left foaf:valid"/>
+		<itemref idref="c3" properties="page-spread-left foaf:valid"/>
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/30/single/overlays/invalid/overlay-001.smil b/src/test/resources/30/single/overlays/invalid/overlay-001.smil
new file mode 100644
index 0000000..1e90919
--- /dev/null
+++ b/src/test/resources/30/single/overlays/invalid/overlay-001.smil
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/media-overlay-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/media-overlay-30.sch"?>
+<smil xmlns="http://www.w3.org/ns/SMIL" version="3.0" xmlns:epub="http://www.idpf.org/2007/ops">
+    <!-- old meta syntax -->
+    <head>
+        <meta name="foo" content="bar"/>
+    </head>
+    <body>
+        <seq id="id1" epub:textref="chapter1.xhtml#sectionstart" epub:type="chapter">
+
+            <par id="id2">
+                <text src="chapter1.xhtml#text1"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:23:34.221" clipEnd="0:23:59.003"/>
+            </par>
+            <par id="id3">
+                <text src="chapter1.xhtml#text2"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:23:59.003" clipEnd="0:24:15.000"/>
+            </par>
+
+            <seq id="id4" epub:textref="chapter1.xhtml#sidebar01" epub:type="sidebar">
+                <par id="id5">
+                    <text src="chapter1.xhtml#sidebartitle"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:24:15.000" clipEnd="0:24:18.123"/>
+                </par>
+                <par id="id6">
+                    <text src="chapter1.xhtml#photo"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:24:18.123" clipEnd="0:24:28.764"/>
+                </par>
+                <par id="id7">
+                    <text src="chapter1.xhtml#photo_caption"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:24:28.764" clipEnd="0:24:50.010"/>
+                </par>
+            </seq>
+
+            <par id="id8">
+                <text src="chapter1.xhtml#text3"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:24:50.010" clipEnd="0:25:20.203"/>
+            </par>
+            <par id="id9">
+                <text src="chapter1.xhtml#text4"/>
+                <audio src="audio.mp3" clipBegin="0:25:20.203" clipEnd="0:25:55.515"/>
+            </par>
+
+        </seq>
+    </body>
+</smil>
diff --git a/src/test/resources/30/single/overlays/invalid/overlay-002.smil b/src/test/resources/30/single/overlays/invalid/overlay-002.smil
new file mode 100644
index 0000000..4395dee
--- /dev/null
+++ b/src/test/resources/30/single/overlays/invalid/overlay-002.smil
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/media-overlay-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/media-overlay-30.sch"?>
+<smil xmlns="http://www.w3.org/ns/SMIL" version="3.0" xmlns:epub="http://www.idpf.org/2007/ops">
+    <!-- dupe text siblings -->
+    <body>
+        <seq id="id1" epub:textref="chapter1.xhtml#sectionstart" epub:type="chapter">
+            <par id="id2">
+                <text src="chapter1.xhtml#text1"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:23:34.221" clipEnd="0:23:59.003"/>
+            </par>
+            <par id="id3">
+                <text src="chapter1.xhtml#text2"/>
+                <text src="chapter1.xhtml#text12"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:23:59.003" clipEnd="0:24:15.000"/>
+            </par>
+
+            <seq id="id4" epub:textref="chapter1.xhtml#sidebar01" epub:type="sidebar">
+                <par id="id5">
+                    <text src="chapter1.xhtml#sidebartitle"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:24:15.000" clipEnd="0:24:18.123"/>
+                </par>
+                <par id="id6">
+                    <text src="chapter1.xhtml#photo"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:24:18.123" clipEnd="0:24:28.764"/>
+                </par>
+                <par id="id7">
+                    <text src="chapter1.xhtml#photo_caption"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:24:28.764" clipEnd="0:24:50.010"/>
+                </par>
+            </seq>
+
+            <par id="id8">
+                <text src="chapter1.xhtml#text3"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:24:50.010" clipEnd="0:25:20.203"/>
+            </par>
+            <par id="id9">
+                <text src="chapter1.xhtml#text4"/>
+                <audio src="audio.mp3" clipBegin="0:25:20.203" clipEnd="0:25:55.515"/>
+            </par>
+
+        </seq>
+    </body>
+</smil>
diff --git a/src/test/resources/30/single/overlays/invalid/overlay-003.smil b/src/test/resources/30/single/overlays/invalid/overlay-003.smil
new file mode 100644
index 0000000..6125258
--- /dev/null
+++ b/src/test/resources/30/single/overlays/invalid/overlay-003.smil
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/media-overlay-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/media-overlay-30.sch"?>
+<smil xmlns="http://www.w3.org/ns/SMIL" version="3.0" xmlns:epub="http://www.idpf.org/2007/ops">
+    <!-- seq inside par -->
+    <body>
+        <seq id="id1" epub:textref="chapter1.xhtml#sectionstart" epub:type="chapter">
+
+            <par id="id2">
+                <text src="chapter1.xhtml#text1"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:23:34.221" clipEnd="0:23:59.003"/>
+            </par>
+            <par id="id3">
+                <text src="chapter1.xhtml#text2"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:23:59.003" clipEnd="0:24:15.000"/>
+            </par>
+
+            <seq id="id4" epub:textref="chapter1.xhtml#sidebar01" epub:type="sidebar">
+                <par id="id5">
+                    <text src="chapter1.xhtml#sidebartitle"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:24:15.000" clipEnd="0:24:18.123"/>
+                </par>
+                <par id="id6">
+                    <text src="chapter1.xhtml#photo"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:24:18.123" clipEnd="0:24:28.764"/>
+                </par>
+                <par id="id7">
+                    <text src="chapter1.xhtml#photo_caption"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:24:28.764" clipEnd="0:24:50.010"/>
+                </par>
+            </seq>
+
+            <par id="id8">
+                <text src="chapter1.xhtml#text3"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:24:50.010" clipEnd="0:25:20.203"/>
+                <seq>
+                    <par>
+                        <text src="chapter1.xhtml#text3.1"/>
+                        <audio src="chapter1_audio.mp3" clipBegin="0:25:20.203" clipEnd="0:26:20.203"/>
+                    </par>    
+                </seq>
+            </par>
+            <par id="id9">
+                <text src="chapter1.xhtml#text4"/>
+                <audio src="audio.mp3" clipBegin="0:26:20.203" clipEnd="0:26:55.515"/>
+            </par>
+        </seq>
+    </body>
+</smil>
diff --git a/src/test/resources/30/single/overlays/invalid/overlay-004.smil b/src/test/resources/30/single/overlays/invalid/overlay-004.smil
new file mode 100644
index 0000000..1f47ed4
--- /dev/null
+++ b/src/test/resources/30/single/overlays/invalid/overlay-004.smil
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/media-overlay-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/media-overlay-30.sch"?>
+<smil xmlns="http://www.w3.org/ns/SMIL"
+    version="3.0" xmlns:epub="http://www.idpf.org/2007/ops">
+    <!-- media children not inside par -->
+    <body>
+        <seq id="id1" epub:textref="chapter1.xhtml#sectionstart" epub:type="chapter">
+            
+            <par id="id2">
+                <text src="chapter1.xhtml#text1"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:23:34.221" clipEnd="0:23:59.003"/>
+            </par>
+            <par id="id3">
+                <text src="chapter1.xhtml#text2"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:23:59.003" clipEnd="0:24:15.000"/>
+            </par>
+            
+            <seq id="id4" epub:textref="chapter1.xhtml#sidebar01" epub:type="sidebar">
+                <audio src="audio.mp3" clipBegin="0:12:22.453"/>
+                <text src="content.xhtml#para01"/>
+                
+                <par id="id5">
+                    <text src="chapter1.xhtml#sidebartitle"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:24:15.000" clipEnd="0:24:18.123"/>
+                </par>
+                <par id="id6">
+                    <text src="chapter1.xhtml#photo"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:24:18.123" clipEnd="0:24:28.764"/>
+                </par>
+                <par id="id7">
+                    <text src="chapter1.xhtml#photo_caption"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:24:28.764" clipEnd="0:24:50.010"/>
+                </par>
+            </seq>
+            
+            <par id="id8">
+                <text src="chapter1.xhtml#text3"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:24:50.010" clipEnd="0:25:20.203"/>
+            </par>
+            <par id="id9">
+                <text src="chapter1.xhtml#text4"/>
+                <audio src="audio.mp3" clipBegin="0:26:20.203" clipEnd="0:26:55.515"/>
+            </par>
+        </seq>
+    </body>
+</smil>
diff --git a/src/test/resources/30/single/overlays/invalid/overlay-005.smil b/src/test/resources/30/single/overlays/invalid/overlay-005.smil
new file mode 100644
index 0000000..33c15c1
--- /dev/null
+++ b/src/test/resources/30/single/overlays/invalid/overlay-005.smil
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/media-overlay-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/media-overlay-30.sch"?>
+<smil xmlns="http://www.w3.org/ns/SMIL"
+    version="3.0" xmlns:epub="http://www.idpf.org/2007/ops">
+    <!-- clip datatype errors -->
+    <body>
+        <seq id="id1" epub:textref="chapter1.xhtml#sectionstart" epub:type="chapter">
+            <par id="id2">
+                <text src="chapter1.xhtml#text1"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:23:334.223" clipEnd="0:223:59.003"/>
+            </par>
+            <par id="id3">
+                <text src="chapter1.xhtml#text2"/>
+                <audio src="chapter1_audio.mp3" clipBegin="24m" clipEnd="334:23.233"/>
+            </par>
+            
+            <seq id="id4" epub:textref="chapter1.xhtml#sidebar01" epub:type="sidebar">
+                <par id="id5">
+                    <text src="chapter1.xhtml#sidebartitle"/>
+                    <audio src="chapter1_audio.mp3" clipBegin=".5s" clipEnd="21hrs"/>
+                </par>
+                <par id="id6">
+                    <text src="chapter1.xhtml#photo"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="00:00:23.93ms" clipEnd="0:24:28.764"/>
+                </par>
+                <par id="id7">
+                    <text src="chapter1.xhtml#photo_caption"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:24:28.764" clipEnd="0:24:50.010"/>
+                </par>
+            </seq>
+            
+            <par id="id8">
+                <text src="chapter1.xhtml#text3"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:24:50.010" clipEnd="0:25:20.203"/>
+            </par>
+            <par id="id9">
+                <text src="chapter1.xhtml#text4"/>
+                <audio src="audio.mp3" clipBegin="0:26:20.203" clipEnd="0:26:55.515"/>
+            </par>
+        </seq>
+    </body>
+</smil>
diff --git a/src/test/resources/30/single/overlays/invalid/overlay-006.smil b/src/test/resources/30/single/overlays/invalid/overlay-006.smil
new file mode 100644
index 0000000..c536715
--- /dev/null
+++ b/src/test/resources/30/single/overlays/invalid/overlay-006.smil
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/media-overlay-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/media-overlay-30.sch"?>
+<smil xmlns="http://www.w3.org/ns/SMIL" version="3.0" xmlns:epub="http://www.idpf.org/2007/ops"
+		 epub:prefix="foaf: http://xmlns.com/foaf/spec/
+				dbp: http://dbpedia.org/ontology/">    
+    <body epub:type="warning not exists foof:notexists foaf:valid afterword">
+        <seq id="id1" epub:textref="chapter1.xhtml#sectionstart" epub:type="chapter dbp:asfas asfas">
+            <par id="id2" epub:type="chapter dbp:asfas asfas">
+                <text src="chapter1.xhtml#text1"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:23:34.221" clipEnd="0:23:59.003"/>
+            </par>
+            <par id="id3">
+                <text src="chapter1.xhtml#text2"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:23:59.003" clipEnd="0:24:15.000"/>
+            </par>
+
+            <seq id="id4" epub:textref="chapter1.xhtml#sidebar" epub:type="sidebar">
+                <par id="id5">
+                    <text src="chapter1.xhtml#sidebartitle"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:24:15.000" clipEnd="0:24:18.123"/>
+                </par>
+                <par id="id6">
+                    <text src="chapter1.xhtml#photo"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:24:18.123" clipEnd="0:24:28.764"/>
+                </par>
+                <par id="id7">
+                    <text src="chapter1.xhtml#photo_caption"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:24:28.764" clipEnd="0:24:50.010"/>
+                </par>
+            </seq>
+
+            <par id="id8">
+                <text src="chapter1.xhtml#text3"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:24:50.010" clipEnd="0:25:20.203"/>
+            </par>
+            <par id="id9">
+                <text src="chapter1.xhtml#text4"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:25:20.203" clipEnd="0:25:55.515"/>
+            </par>
+
+        </seq>
+    </body>
+</smil>
diff --git a/src/test/resources/30/single/overlays/valid/overlay-001.smil b/src/test/resources/30/single/overlays/valid/overlay-001.smil
new file mode 100644
index 0000000..595e911
--- /dev/null
+++ b/src/test/resources/30/single/overlays/valid/overlay-001.smil
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/media-overlay-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/media-overlay-30.sch"?>
+<smil xmlns="http://www.w3.org/ns/SMIL" version="3.0" xmlns:epub="http://www.idpf.org/2007/ops">    
+    <body>
+        <seq id="id1" epub:textref="chapter1.xhtml#sectionstart" epub:type="chapter">
+            <par id="id2">
+                <text src="chapter1.xhtml#text1"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:23:34.221" clipEnd="0:23:59.003"/>
+            </par>
+            <par id="id3">
+                <text src="chapter1.xhtml#text2"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:23:59.003" clipEnd="0:24:15.000"/>
+            </par>
+
+            <seq id="id4" epub:textref="chapter1.xhtml#sidebar" epub:type="sidebar">
+                <par id="id5">
+                    <text src="chapter1.xhtml#sidebartitle"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:24:15.000" clipEnd="0:24:18.123"/>
+                </par>
+                <par id="id6">
+                    <text src="chapter1.xhtml#photo"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:24:18.123" clipEnd="0:24:28.764"/>
+                </par>
+                <par id="id7">
+                    <text src="chapter1.xhtml#photo_caption"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:24:28.764" clipEnd="0:24:50.010"/>
+                </par>
+            </seq>
+
+            <par id="id8">
+                <text src="chapter1.xhtml#text3"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:24:50.010" clipEnd="0:25:20.203"/>
+            </par>
+            <par id="id9">
+                <text src="chapter1.xhtml#text4"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:25:20.203" clipEnd="0:25:55.515"/>
+            </par>
+
+        </seq>
+    </body>
+</smil>
diff --git a/src/test/resources/30/single/overlays/valid/overlay-002.smil b/src/test/resources/30/single/overlays/valid/overlay-002.smil
new file mode 100644
index 0000000..c072949
--- /dev/null
+++ b/src/test/resources/30/single/overlays/valid/overlay-002.smil
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/media-overlay-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/media-overlay-30.sch"?>
+<smil xmlns="http://www.w3.org/ns/SMIL" version="3.0" xmlns:epub="http://www.idpf.org/2007/ops">
+    <body>
+        <seq id="id1" epub:textref="chapter1.xhtml#sectionstart" epub:type="chapter">
+            <par id="id2">
+                <text src="chapter1.xhtml#text1"/>
+                <audio src="chapter1_audio.mp3" clipBegin="23.5min" clipEnd="24min"/>
+            </par>
+            <par id="id3">
+                <text src="chapter1.xhtml#text2"/>
+                <audio src="chapter1_audio.mp3" clipBegin="24min" clipEnd="24.25min"/>
+            </par>
+            
+            <seq id="id4" epub:textref="chapter1.xhtml#sidebar" epub:type="sidebar">
+                <par id="id5">
+                    <text src="chapter1.xhtml#sidebartitle"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="24.25min" clipEnd="24.3min"/>
+                </par>
+                <par id="id6">
+                    <text src="chapter1.xhtml#photo"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="24.3min" clipEnd="24.46min"/>
+                </par>
+                <par id="id7">
+                    <text src="chapter1.xhtml#photo_caption"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="24.46min" clipEnd="24.83min"/>
+                </par>
+            </seq>
+            
+            <par id="id8">
+                <text src="chapter1.xhtml#text3"/>
+                <audio src="chapter1_audio.mp3" clipBegin="24.83min" clipEnd="25.3min"/>
+            </par>
+            <par id="id9">
+                <text src="chapter1.xhtml#text4"/>
+                <audio src="chapter1_audio.mp3" clipBegin="25.3min" clipEnd="25.91min"/>
+            </par>
+            
+        </seq>
+    </body>
+</smil>
diff --git a/src/test/resources/30/single/overlays/valid/overlay-003.smil b/src/test/resources/30/single/overlays/valid/overlay-003.smil
new file mode 100644
index 0000000..6cdaa7c
--- /dev/null
+++ b/src/test/resources/30/single/overlays/valid/overlay-003.smil
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/media-overlay-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/media-overlay-30.sch"?>
+<smil xmlns="http://www.w3.org/ns/SMIL" version="3.0" xmlns:epub="http://www.idpf.org/2007/ops"
+    xmlns:foo="http://www.example.org/ns">
+    <head>
+        <metadata>
+            <bar baz="quux">text</bar>
+            <baz/>
+            <foo:bar foo:baz="quux" baz="bar">
+                <bar/>
+                <foo:quux>text</foo:quux>
+            </foo:bar>
+        </metadata>
+    </head>
+    <body>
+        <seq id="id1" epub:textref="chapter1.xhtml#sectionstart" epub:type="chapter">
+            <par id="id2">
+                <text src="chapter1.xhtml#text1"/>
+                <audio src="chapter1_audio.mp3" clipBegin="23.5min" clipEnd="24min"/>
+            </par>
+            <par id="id3">
+                <text src="chapter1.xhtml#text2"/>
+                <audio src="chapter1_audio.mp3" clipBegin="24min" clipEnd="24.25min"/>
+            </par>
+            
+            <seq id="id4" epub:textref="chapter1.xhtml#sidebar" epub:type="sidebar">
+                <par id="id5">
+                    <text src="chapter1.xhtml#sidebartitle"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="24.25min" clipEnd="24.3min"/>
+                </par>
+                <par id="id6">
+                    <text src="chapter1.xhtml#photo"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="24.3min" clipEnd="24.46min"/>
+                </par>
+                <par id="id7">
+                    <text src="chapter1.xhtml#photo_caption"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="24.46min" clipEnd="24.83min"/>
+                </par>
+            </seq>
+            
+            <par id="id8">
+                <text src="chapter1.xhtml#text3"/>
+                <audio src="chapter1_audio.mp3" clipBegin="24.83min" clipEnd="25.3min"/>
+            </par>
+            <par id="id9">
+                <text src="chapter1.xhtml#text4"/>
+                <audio src="chapter1_audio.mp3" clipBegin="25.3min" clipEnd="25.91min"/>
+            </par>
+            
+        </seq>
+    </body>
+</smil>
diff --git a/src/test/resources/30/single/overlays/valid/overlay-007.smil b/src/test/resources/30/single/overlays/valid/overlay-007.smil
new file mode 100644
index 0000000..0917009
--- /dev/null
+++ b/src/test/resources/30/single/overlays/valid/overlay-007.smil
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/media-overlay-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/media-overlay-30.sch"?>
+<smil xmlns="http://www.w3.org/ns/SMIL" version="3.0" xmlns:epub="http://www.idpf.org/2007/ops"
+		 epub:prefix="foaf: http://xmlns.com/foaf/spec/
+				dbp: http://dbpedia.org/ontology/">    
+    <body epub:type="warning foaf:notexists foaf:valid">
+        <seq id="id1" epub:textref="chapter1.xhtml#sectionstart" epub:type="chapter dbp:asfas">
+            <par id="id2" epub:type="chapter dbp:asfas">
+                <text src="chapter1.xhtml#text1"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:23:34.221" clipEnd="0:23:59.003"/>
+            </par>
+            <par id="id3">
+                <text src="chapter1.xhtml#text2"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:23:59.003" clipEnd="0:24:15.000"/>
+            </par>
+
+            <seq id="id4" epub:textref="chapter1.xhtml#sidebar" epub:type="sidebar">
+                <par id="id5">
+                    <text src="chapter1.xhtml#sidebartitle"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:24:15.000" clipEnd="0:24:18.123"/>
+                </par>
+                <par id="id6">
+                    <text src="chapter1.xhtml#photo"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:24:18.123" clipEnd="0:24:28.764"/>
+                </par>
+                <par id="id7">
+                    <text src="chapter1.xhtml#photo_caption"/>
+                    <audio src="chapter1_audio.mp3" clipBegin="0:24:28.764" clipEnd="0:24:50.010"/>
+                </par>
+            </seq>
+
+            <par id="id8">
+                <text src="chapter1.xhtml#text3"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:24:50.010" clipEnd="0:25:20.203"/>
+            </par>
+            <par id="id9">
+                <text src="chapter1.xhtml#text4"/>
+                <audio src="chapter1_audio.mp3" clipBegin="0:25:20.203" clipEnd="0:25:55.515"/>
+            </par>
+
+        </seq>
+    </body>
+</smil>
diff --git a/src/test/resources/30/single/svg/invalid/rect.svg b/src/test/resources/30/single/svg/invalid/rect.svg
new file mode 100644
index 0000000..d7bbb2d
--- /dev/null
+++ b/src/test/resources/30/single/svg/invalid/rect.svg
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-svg-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-svg-30.sch"?>
+<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
+    xmlns="http://www.w3.org/2000/svg" version="1.1"
+    xmlns:foo="http://foo"
+    xmlns:x="http://www.w3.org/1999/xhtml">
+    <!-- requiredExtensions value, dupe ids, non-xhtml in foreignObject -->
+    <title>Title </title>
+    <desc>Example rect01 - rectangle with sharp corners</desc>
+    
+    <!-- Show outline of canvas using 'rect' element -->
+    <rect id="a" x="1" y="1" width="1198" height="398"
+        fill="none" stroke="blue" stroke-width="2"/>
+    
+    <rect id="a" x="400" y="100" width="400" height="200"
+        fill="yellow" stroke="navy" stroke-width="10"  />
+    
+    <foreignObject width="" height="" requiredExtensions="http:example.com">
+        <foo:bar/>
+        <x:p></x:p>
+    </foreignObject>
+</svg>
\ No newline at end of file
diff --git a/src/test/resources/30/single/svg/valid/issue219.svg b/src/test/resources/30/single/svg/valid/issue219.svg
new file mode 100644
index 0000000..8d52dcd
--- /dev/null
+++ b/src/test/resources/30/single/svg/valid/issue219.svg
@@ -0,0 +1,2465 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 546 708" style="enable-background:new 0 0 546 708;" xml:space="preserve">
+<font horiz-adv-x="1000">
+<!-- Copyright 1992, 1994, 1997, 2000, 2004 Adobe Systems Incorporated. All rights reserved. Protected by U.S. Patents D454,582. Myriad is either a registered trademark or a trademark of Adobe Systems Incorporated in the United States and/or other countries. -->
+<font-face font-family="MyriadPro-SemiExt" units-per-em="1000" underline-position="-100" underline-thickness="50"/>
+<missing-glyph horiz-adv-x="500" d="M0,0l500,0l0,700l-500,0M250,395l-170,255l340,0M280,350l170,255l0,-510M80,50l170,255l170,-255M50,605l170,-255l-170,-255z"/>
+<glyph unicode="R" horiz-adv-x="581" d="M81,0l91,0l0,292l99,0C355,289 393,252 415,160C435,75 451,19 462,0l94,0C541,28 525,95 500,190C483,254 450,303 398,322l0,2C470,346 532,406 532,495C532,548 510,594 477,622C433,661 368,680 267,680C201,680 129,673 81,665M172,602C188,606 222,611 273,611C368,611 441,576 441,486C441,409 379,360 279,360l-107,0z"/>
+<glyph unicode="e" horiz-adv-x="547" d="M504,223C507,232 508,245 508,263C508,345 466,495 289,495C132,495 40,375 40,233C40,88 139,-12 299,-12C388,-12 446,8 478,21l-16,65C425,71 383,59 310,59C210,59 129,114 127,223M128,288C136,347 179,431 282,431C402,431 421,329 420,288z"/>
+<glyph unicode="i" horiz-adv-x="250" d="M171,0l0,484l-91,0l0,-484M126,680C91,680 68,654 68,624C68,594 90,568 124,568C161,568 183,594 183,624C183,654 160,680 126,680z"/>
+<glyph unicode="n" horiz-adv-x="605" d="M80,0l91,0l0,287C171,301 174,316 178,327C196,375 245,421 311,421C402,421 438,353 438,268l0,-268l91,0l0,276C529,458 407,495 341,495C252,495 190,444 165,397l-3,0l-5,87l-81,0C79,443 80,400 80,351z"/>
+<glyph unicode="o" horiz-adv-x="604" d="M305,495C155,495 39,394 39,237C39,89 151,-12 297,-12C427,-12 564,71 564,247C564,388 462,495 305,495M303,428C420,428 470,328 470,244C470,122 391,55 300,55C209,55 133,125 133,240C133,338 188,428 303,428z"/>
+<glyph unicode="s" horiz-adv-x="432" d="M45,24C83,3 136,-12 194,-12C320,-12 387,52 387,134C387,208 344,249 251,278C183,300 149,318 149,361C149,399 179,428 235,428C286,428 327,409 346,398l22,66C339,481 292,495 239,495C125,495 60,428 60,351C60,292 103,242 199,214C268,193 298,172 298,127C298,88 268,55 197,55C149,55 97,74 67,92z"/>
+<glyph unicode=" " horiz-adv-x="231"/>
+<glyph unicode="t" horiz-adv-x="357" d="M100,576l0,-92l-80,0l0,-69l80,0l0,-260C100,102 110,56 136,28C157,3 193,-12 237,-12C274,-12 304,-6 323,2l-5,68C304,66 288,63 261,63C205,63 189,103 189,162l0,253l137,0l0,69l-137,0l0,117z"/>
+<glyph unicode="u" horiz-adv-x="602" d="M522,484l-91,0l0,-289C431,178 427,162 422,149C401,104 353,63 290,63C201,63 167,128 167,225l0,259l-91,0l0,-275C76,23 186,-12 259,-12C357,-12 413,44 438,88l2,0l5,-88l81,0C523,39 522,83 522,133z"/>
+</font>
+
+	<font horiz-adv-x="1000">
+<!-- Copyright 1989, 1991, 1999, 2000 Adobe Systems Incorporated. All rights reserved. Lithos is either a registered trademark or a trademark of Adobe Systems Incorporated in the United States and/or other countries. -->
+<font-face font-family="LithosPro-Black" units-per-em="1000" underline-position="-100" underline-thickness="50"/>
+<missing-glyph horiz-adv-x="500" d="M0,0l500,0l0,700l-500,0l0,-700M250,395l-170,255l340,0l-170,-255M280,350l170,255l0,-510l-170,255M80,50l170,255l170,-255l-340,0M50,605l170,-255l-170,-255l0,510z"/>
+<glyph unicode="B" horiz-adv-x="730" d="M108,370C108,351 108,49 103,-6l95,0C528,-6 679,111 679,224C679,320 591,366 522,379l0,6C628,434 648,496 648,533C648,589 620,672 412,698C324,709 248,710 103,710C106,689 108,511 108,481l0,-111M316,312C385,315 454,283 454,218C454,161 371,117 316,117l0,195M316,597C357,600 429,588 429,522C429,449 359,409 316,409l0,188z"/>
+<glyph unicode="D" horiz-adv-x="840" d="M108,316C108,289 106,41 102,-5C425,-5 799,124 799,439C799,520 749,656 487,692C394,705 287,710 103,710C107,682 108,461 108,440l0,-124M328,550C441,550 561,522 561,404C561,264 426,193 328,177l0,373z"/>
+<glyph unicode="E" horiz-adv-x="622" d="M550,162C503,158 352,160 326,160l0,119C348,279 481,275 508,275l-3,160C461,431 346,426 326,426l0,132C344,558 501,563 538,563l-4,165C497,725 161,710 105,710C106,681 108,440 108,424l0,-134C108,267 108,53 105,0C157,0 518,-10 554,-10l-4,172z"/>
+<glyph unicode="F" horiz-adv-x="600" d="M327,0C327,14 326,153 326,169l0,85l204,-2l-3,158C415,407 348,401 326,401l0,154l220,5l-4,165C437,721 186,710 104,710C106,681 108,440 108,424l0,-133C108,267 108,53 104,0l223,0z"/>
+<glyph unicode="O" horiz-adv-x="902" d="M426,-16C761,-17 862,223 862,374C862,594 713,726 475,726C180,726 40,519 40,326C40,166 159,-16 426,-16M437,139C355,139 284,207 284,341C284,463 348,571 462,571C558,571 618,496 617,367C616,218 545,139 437,139z"/>
+<glyph unicode="R" horiz-adv-x="775" d="M326,572C434,571 467,526 467,479C467,412 396,357 352,331C379,287 573,6 596,-32l183,138C753,138 600,293 570,327C648,382 699,445 699,527C699,619 619,677 471,696C381,708 242,710 105,710C108,691 110,474 110,444l0,-82C110,341 112,24 108,0l223,0C329,15 326,268 326,306l0,266z"/>
+</font>
+
+	<font horiz-adv-x="1000">
+<!-- Copyright 1992, 1994, 1997, 2000, 2004 Adobe Systems Incorporated. All rights reserved. Protected by U.S. Patents D454,582. Myriad is either a registered trademark or a trademark of Adobe Systems Incorporated in the United States and/or other countries. -->
+<font-face font-family="MyriadPro-It" units-per-em="1000" underline-position="-100" underline-thickness="50"/>
+<missing-glyph horiz-adv-x="500" d="M0,0l500,0l0,700l-500,0M250,395l-170,255l340,0M280,350l170,255l0,-510M80,50l170,255l170,-255M50,605l170,-255l-170,-255z"/>
+<glyph unicode="R" horiz-adv-x="523" d="M31,0l83,0l55,294l74,0C310,294 344,256 349,163C354,85 361,14 365,0l86,0C442,27 437,92 430,186C425,255 403,305 355,321l1,2C441,347 516,420 516,519C516,565 497,603 466,630C430,663 372,679 305,679C255,679 199,674 158,664M229,606C245,610 266,613 299,613C375,613 429,580 429,508C429,427 361,358 256,358l-74,0z"/>
+<glyph unicode="a" horiz-adv-x="522" d="M427,0C425,54 431,140 447,224l50,253C463,487 413,495 366,495C155,495 31,318 31,149C31,57 84,-11 170,-11C239,-11 306,24 358,125l2,0C354,75 349,29 349,0M375,276C351,147 269,57 200,57C136,57 117,110 117,164C117,299 220,429 346,429C374,429 392,426 403,422z"/>
+<glyph unicode="d" horiz-adv-x="525" d="M460,710l-43,-232C396,488 362,495 331,495C160,495 32,337 32,165C32,66 83,-11 177,-11C246,-11 307,27 351,96l2,0l-13,-96l76,0C419,47 427,103 436,154l106,556M371,239C350,130 273,57 209,57C138,57 118,118 118,176C118,305 208,429 324,429C359,429 387,420 403,408z"/>
+<glyph unicode="e" horiz-adv-x="453" d="M365,89C335,73 292,56 235,56C185,56 146,77 127,121C116,147 113,192 117,213C296,210 439,243 439,370C439,440 389,495 297,495C141,495 33,330 33,184C33,77 89,-11 217,-11C282,-11 341,7 377,27M359,369C359,293 257,275 126,277C147,353 206,430 285,430C329,430 359,408 359,369z"/>
+<glyph unicode="i" horiz-adv-x="229" d="M111,0l92,484l-82,0l-93,-484M183,566C216,566 239,589 240,622C240,652 220,674 190,674C161,674 137,650 136,618C136,588 154,566 183,566z"/>
+<glyph unicode="l" horiz-adv-x="229" d="M112,0l135,710l-83,0l-135,-710z"/>
+<glyph unicode="m" horiz-adv-x="808" d="M110,0l44,243C173,346 249,426 309,426C370,426 381,384 381,343C381,324 379,306 375,284l-54,-284l80,0l46,248C467,356 539,426 599,426C653,426 672,393 672,342C672,322 669,298 665,279l-52,-279l81,0l54,286C753,313 756,346 756,368C756,459 694,495 638,495C566,494 504,457 461,387C457,448 422,495 348,495C284,495 223,461 178,393l-2,0l12,91l-73,0C110,444 103,397 93,343l-64,-343z"/>
+<glyph unicode="n" horiz-adv-x="534" d="M111,0l44,235C177,355 261,426 320,426C377,426 396,390 396,342C396,321 393,299 390,280l-53,-280l82,0l54,283C478,309 482,339 482,361C482,462 417,495 359,495C289,495 223,457 180,389l-2,0l12,95l-74,0C111,444 104,397 93,343l-64,-343z"/>
+<glyph unicode="#" horiz-adv-x="492" d="M193,254l46,147l90,0l-45,-147M114,0l61,197l90,0l-61,-197l59,0l60,197l95,0l10,57l-86,0l45,147l90,0l10,57l-82,0l60,192l-58,0l-60,-192l-91,0l60,192l-58,0l-60,-192l-94,0l-10,-57l87,0l-46,-147l-91,0l-10,-57l82,0l-60,-197z"/>
+<glyph unicode="o" horiz-adv-x="522" d="M303,495C146,495 35,348 35,188C35,79 103,-11 224,-11C387,-11 493,144 493,294C493,396 434,495 303,495M294,429C381,429 407,350 407,294C407,181 333,55 235,55C165,55 121,112 121,191C121,302 190,429 294,429z"/>
+<glyph unicode="1" horiz-adv-x="492" d="M182,0l80,0l123,650l-70,0l-148,-74l9,-66l111,56l2,0z"/>
+<glyph unicode="p" horiz-adv-x="525" d="M68,-198l39,209l2,0C128,0 162,-11 213,-11C374,-11 496,149 496,320C496,409 452,495 348,495C281,495 217,457 174,393l-2,0l13,92l-76,0C103,436 93,371 82,312l-97,-510M146,216C171,352 252,426 317,426C388,426 410,365 410,314C410,187 321,54 214,54C174,54 143,64 121,81z"/>
+<glyph unicode="." horiz-adv-x="211" d="M76,-11C114,-11 140,18 140,55C140,89 118,115 84,115C47,115 21,85 21,48C21,15 43,-11 76,-11z"/>
+<glyph unicode="s" horiz-adv-x="373" d="M9,23C31,6 78,-9 130,-10C232,-10 314,47 314,149C314,203 278,246 224,276C180,300 157,322 157,357C157,399 193,430 243,430C279,430 310,418 327,408l23,63C332,483 293,495 249,495C147,495 74,430 74,346C74,296 105,253 161,222C212,194 229,171 229,133C229,90 193,54 137,54C97,54 56,70 33,84z"/>
+<glyph unicode=" " horiz-adv-x="182"/>
+<glyph unicode="t" horiz-adv-x="313" d="M155,574l-17,-90l-69,0l-12,-65l69,0l-47,-245C72,139 68,112 68,84C68,34 97,-10 170,-10C194,-10 219,-7 234,-1l4,65C227,61 214,60 199,60C167,60 153,78 153,107C153,132 157,157 163,184l44,235l116,0l13,65l-116,0l22,116z"/>
+<glyph unicode="3" horiz-adv-x="492" d="M16,30C38,10 96,-11 166,-11C307,-11 418,81 418,204C418,273 381,334 310,351l0,2C385,374 454,436 454,521C454,596 397,661 288,661C231,661 174,642 133,617l18,-63C180,574 225,590 274,590C336,590 366,559 366,509C366,423 266,383 205,383l-33,0l-13,-65l33,0C268,318 331,284 331,203C331,136 280,60 169,60C110,60 69,81 44,96z"/>
+<glyph unicode="u" horiz-adv-x="526" d="M417,484l-47,-248C350,130 273,59 213,59C156,59 136,93 136,143C136,164 139,187 144,214l51,270l-82,0l-53,-273C54,179 51,152 51,129C51,19 117,-11 179,-11C243,-11 306,28 349,91l2,0l-12,-91l74,0C418,40 424,87 435,141l65,343z"/>
+<glyph unicode="y" horiz-adv-x="441" d="M48,484l97,-454C147,21 147,16 143,8C117,-40 82,-79 49,-104C16,-130 -19,-143 -40,-150l21,-72C8,-216 67,-193 121,-138C187,-73 236,12 288,116l182,368l-88,0l-124,-269C233,161 219,127 206,96l-2,0C199,132 193,168 182,224l-48,260z"/>
+</font>
+
+	<font horiz-adv-x="1000">
+<!-- Copyright 1989, 1991, 1999, 2000 Adobe Systems Incorporated. All rights reserved. Lithos is either a registered trademark or a trademark of Adobe Systems Incorporated in the United States and/or other countries. -->
+<font-face font-family="LithosPro-Bold" units-per-em="1000" underline-position="-100" underline-thickness="50"/>
+<missing-glyph horiz-adv-x="500" d="M0,0l500,0l0,700l-500,0M250,395l-170,255l340,0M280,350l170,255l0,-510M80,50l170,255l170,-255M50,605l170,-255l-170,-255z"/>
+<glyph unicode="A" horiz-adv-x="827" d="M154,-27C176,15 229,135 238,155l320,15C569,155 642,19 667,-26l152,92C767,143 511,577 404,742l-7,0C330,636 48,127 8,57M290,271C309,310 377,451 397,490C412,459 485,323 506,281z"/>
+<glyph unicode="E" horiz-adv-x="602" d="M521,127C460,122 318,124 293,124l0,171C314,295 455,291 479,291l-3,126C430,413 312,408 293,408l0,182C310,590 475,595 509,595l-4,129C471,721 165,706 122,706C123,681 125,440 125,424l0,-134C125,267 125,53 122,0C161,0 498,-10 525,-10z"/>
+<glyph unicode="I" horiz-adv-x="420" d="M299,0C298,23 295,202 295,302l0,108C295,530 298,688 299,706l-178,0C122,682 125,429 125,412l0,-108C125,278 124,44 122,0z"/>
+<glyph unicode="M" horiz-adv-x="1088" d="M173,-29C189,15 294,344 310,391l2,0C332,350 444,148 514,35l6,0C581,123 729,365 751,397C763,371 881,49 912,-29l155,68C1033,115 841,582 786,703l-7,0C740,640 572,353 534,295C504,346 339,641 291,725l-7,0C248,641 41,68 23,27z"/>
+<glyph unicode="N" horiz-adv-x="903" d="M250,-7C249,26 254,394 254,428l2,0C269,410 690,37 770,-20l8,3C781,73 787,224 795,368C802,512 810,648 814,706l-158,5C655,672 652,322 652,281C620,312 232,654 138,729l-8,-3C126,666 118,502 110,345C102,188 94,37 91,0z"/>
+<glyph unicode="O" horiz-adv-x="874" d="M48,329C48,135 185,-15 410,-16C721,-16 826,223 826,366C826,594 675,722 459,722C196,722 48,524 48,329M235,339C235,494 328,593 445,593C551,593 639,514 638,361C637,186 523,113 429,113C316,113 235,198 235,339z"/>
+<glyph unicode="P" horiz-adv-x="673" d="M292,0C290,21 290,130 290,150l0,40C510,229 633,358 633,491C633,601 547,662 433,686C359,702 252,706 122,706C122,691 125,488 125,465l0,-110C125,284 123,43 122,0M290,593C436,587 460,514 460,468C460,374 376,318 290,302z"/>
+<glyph unicode="R" horiz-adv-x="742" d="M297,0C295,15 292,268 292,306l0,290C433,595 466,542 466,495C466,416 383,358 336,332C365,289 571,2 589,-26l141,108C704,111 540,294 512,328C591,382 645,446 645,529C645,619 567,675 423,693C339,704 222,706 121,706C124,687 126,474 126,444l0,-82C126,341 128,24 124,0z"/>
+<glyph unicode="S" horiz-adv-x="539" d="M123,-18C381,21 491,148 491,253C491,340 414,379 353,412C297,442 250,465 250,499C250,557 347,589 446,593l-24,131C216,698 67,586 67,476C67,396 135,350 207,309C285,265 306,248 306,216C306,157 193,121 96,115z"/>
+<glyph unicode="T" horiz-adv-x="656" d="M420,0C418,20 413,199 413,343l0,232C457,575 642,570 661,567l0,139C612,700 394,696 375,696l-87,0C277,696 40,700 -5,706l0,-139C26,570 168,575 243,575l0,-216C243,230 242,26 239,0z"/>
+<glyph unicode="U" horiz-adv-x="842" d="M758,543C758,622 757,694 757,716l-176,0C582,679 586,614 586,545l0,-37C586,319 585,244 549,189C522,148 481,123 427,123C380,123 337,140 307,184C269,238 261,311 261,463l0,68C261,622 263,675 267,701l-178,0C89,678 88,599 88,553l0,-54C88,256 105,180 153,107C227,-4 344,-16 414,-16C523,-16 611,20 671,94C747,185 758,305 758,497z"/>
+<glyph unicode="X" horiz-adv-x="782" d="M154,-32C172,-9 365,235 383,256C414,220 586,6 615,-30l127,122C716,122 529,329 495,366C520,397 705,584 735,614l-121,114C578,683 428,504 398,469C352,524 231,680 195,727l-129,-118C91,580 239,411 286,360C256,325 60,108 39,86z"/>
+</font>
+
+	<font horiz-adv-x="1000">
+<!-- Copyright 1992, 1994, 1997, 2000, 2004 Adobe Systems Incorporated. All rights reserved. Protected by U.S. Patents D454,582. Myriad is either a registered trademark or a trademark of Adobe Systems Incorporated in the United States and/or other countries. -->
+<font-face font-family="MyriadPro-SemiExtIt" units-per-em="1000" underline-position="-100" underline-thickness="50"/>
+<missing-glyph horiz-adv-x="500" d="M0,0l500,0l0,700l-500,0M250,395l-170,255l340,0M280,350l170,255l0,-510M80,50l170,255l170,-255M50,605l170,-255l-170,-255z"/>
+<glyph unicode="S" horiz-adv-x="507" d="M18,42C50,13 125,-11 198,-12C358,-12 455,81 455,196C455,285 406,336 311,380C232,419 195,447 195,504C195,557 248,613 336,613C397,614 446,590 468,577l32,70C474,664 419,686 345,686C218,686 105,611 105,485C105,410 158,356 256,310C336,273 365,236 365,187C365,102 286,62 212,62C149,62 93,82 51,111z"/>
+<glyph unicode="c" horiz-adv-x="468" d="M393,90C367,76 323,58 264,58C177,58 129,110 129,191C129,307 215,424 349,424C392,424 424,413 447,402l25,67C455,479 407,496 354,496C175,496 39,353 39,180C39,74 109,-12 243,-12C319,-12 377,9 404,23z"/>
+<glyph unicode="e" horiz-adv-x="491" d="M400,92C368,75 319,57 255,57C201,57 158,78 136,123C124,148 119,190 124,213C318,209 474,236 474,367C474,441 417,496 318,496C157,496 37,341 37,190C37,79 100,-12 237,-12C310,-12 375,8 412,29M390,367C390,291 281,277 133,279C151,345 215,430 306,430C355,430 390,407 390,367z"/>
+<glyph unicode="g" horiz-adv-x="572" d="M15,-174C49,-197 111,-212 177,-212C233,-212 306,-202 359,-157C415,-111 444,-37 464,65l72,394C494,479 426,496 364,496C172,496 37,351 37,179C37,95 92,2 203,2C280,2 345,42 388,112l3,0l-16,-72C343,-105 268,-142 184,-142C125,-142 72,-128 39,-107M415,264C395,159 313,70 235,70C151,70 128,137 128,190C128,315 221,427 349,427C389,427 425,416 442,408z"/>
+<glyph unicode="h" horiz-adv-x="581" d="M123,0l43,231C187,348 277,424 347,424C409,424 433,384 433,335C433,307 430,284 426,267l-50,-267l86,0l52,273C519,295 522,330 522,355C522,466 442,495 388,495C307,495 242,454 198,392l-2,0l63,324l-86,0l-136,-716z"/>
+<glyph unicode="i" horiz-adv-x="245" d="M123,0l92,484l-87,0l-92,-484M194,569C229,569 252,594 253,626C252,658 231,680 200,680C169,680 144,656 144,622C144,592 165,569 194,569z"/>
+<glyph unicode="n" horiz-adv-x="581" d="M123,0l41,224C187,353 281,424 345,424C411,424 432,383 432,328C432,309 429,285 426,268l-51,-268l86,0l52,271C518,296 522,330 522,349C522,467 443,495 386,495C308,495 236,453 191,382l-2,0l14,102l-78,0C119,443 113,400 103,351l-66,-351z"/>
+<glyph unicode="r" horiz-adv-x="341" d="M122,0l38,200C183,326 250,412 325,412C336,412 345,411 352,410l16,84C361,495 350,496 341,496C271,496 216,443 184,374l-3,0C187,411 192,448 196,484l-76,0C114,436 106,370 94,307l-58,-307z"/>
+<glyph unicode="t" horiz-adv-x="338" d="M166,576l-18,-92l-72,0l-14,-68l73,0l-45,-234C83,148 79,118 79,87C79,37 107,-12 187,-12C214,-12 242,-8 256,-2l3,67C248,62 233,61 217,61C182,61 167,81 167,111C167,141 172,167 177,194l43,222l123,0l14,68l-124,0l22,117z"/>
+</font>
+
+	<font horiz-adv-x="1000">
+<!-- Copyright 1990, 1991, 1992, 1994, 1997, 1998, 2000, 2002, 2004 Adobe Systems Incorporated. All rights reserved. Minion is either a registered trademark or a trademark of Adobe Systems Incorporated in the United States and/or other countries. -->
+<font-face font-family="MinionPro-Medium" units-per-em="1000" underline-position="-100" underline-thickness="50"/>
+<missing-glyph horiz-adv-x="500" d="M500,0l0,700l-500,0l0,-700M420,650l-170,-255l-170,255M450,95l-170,255l170,255M80,50l170,255l170,-255M50,605l170,-255l-170,-255z"/>
+<glyph unicode="S" horiz-adv-x="480" d="M415,502C407,566 401,606 397,642C363,652 318,665 269,665C138,665 59,583 59,484C59,374 154,324 226,286C300,246 353,210 353,139C353,68 310,22 237,22C135,22 88,125 71,187l-30,-8C47,128 60,43 68,21C79,16 94,8 120,0C145,-8 178,-15 218,-15C353,-15 444,70 444,177C444,287 353,335 270,377C190,418 144,452 144,522C144,577 179,630 252,630C338,630 367,560 384,497z"/>
+<glyph unicode="T" horiz-adv-x="621" d="M596,495C591,554 586,630 586,675l-22,0C549,656 540,650 513,650l-397,0C88,650 76,652 61,675l-21,0C38,621 33,554 28,492l31,0C70,537 80,566 92,583C106,605 125,614 208,614l57,0l0,-489C265,44 257,35 167,29l0,-29l294,0l0,29C367,35 359,45 359,125l0,489l66,0C498,614 515,607 532,584C545,567 555,541 566,492z"/>
+<glyph unicode="a" horiz-adv-x="444" d="M438,40l-10,27C418,61 405,57 393,57C375,57 358,71 358,116l0,182C358,351 348,393 312,423C289,441 259,450 227,450C171,438 104,401 75,380C54,365 42,353 42,338C42,314 69,294 89,294C105,294 116,301 121,319C129,350 138,372 150,386C160,398 175,405 193,405C241,405 273,365 273,294l0,-19C250,256 177,230 117,209C63,190 37,160 37,111C37,49 87,-12 160,-12C188,-12 236,24 275,51C280,35 287,21 300,8C311,-3 332,-12 349,-12M273,83C255,66 224,51 200,51C170,51 131,75  [...]
+<glyph unicode="b" horiz-adv-x="513" d="M160,406l0,304C119,696 54,681 7,675l0,-25C69,645 72,638 72,577l0,-553C129,-2 180,-12 224,-12C360,-12 477,93 477,239C477,356 388,450 278,450C265,450 252,446 233,438M160,376C178,385 206,392 231,392C311,392 379,329 379,213C379,96 328,26 249,27C201,27 172,61 166,80C162,90 160,100 160,115z"/>
+<glyph unicode="c" horiz-adv-x="423" d="M392,113C348,72 316,60 274,60C220,60 125,106 125,243C125,349 180,401 241,401C275,401 310,388 342,358C350,350 355,347 361,347C373,347 396,370 396,392C396,404 393,413 380,424C364,437 331,450 291,450l-1,0C252,450 191,434 137,392C71,341 36,274 36,197C36,90 112,-12 240,-12C299,-12 365,32 410,91z"/>
+<glyph unicode="," horiz-adv-x="233" d="M96,135C69,135 44,118 44,92C44,74 52,66 57,65C94,56 121,32 121,-3C121,-42 93,-69 42,-90l11,-30C118,-101 191,-57 191,24C191,94 134,135 96,135z"/>
+<glyph unicode="d" horiz-adv-x="531" d="M522,52l-30,3C454,59 447,64 447,117l0,593C407,697 338,683 284,676l0,-26C354,645 359,641 359,578l0,-138C336,447 310,450 297,450C157,450 36,340 36,202C36,61 144,-12 225,-12C237,-12 261,-7 298,15l61,37l0,-64C421,9 500,22 522,26M359,84C335,67 303,53 270,53C209,53 136,109 136,229C136,375 219,411 261,411C297,411 336,395 359,360z"/>
+<glyph unicode="e" horiz-adv-x="427" d="M383,109C347,76 309,60 269,60C199,60 124,116 122,247C238,251 362,261 379,264C398,267 403,276 403,297C403,375 336,450 251,450l-1,0C199,450 145,422 103,377C62,333 36,271 36,201C36,88 108,-12 232,-12C266,-12 336,7 398,87M227,412C280,412 312,364 311,312C311,297 305,292 288,292C233,290 180,289 127,289C141,369 183,412 227,412z"/>
+<glyph unicode="g" horiz-adv-x="472" d="M468,438C431,432 380,426 331,424C300,441 267,450 233,450l-1,0C153,450 51,397 51,284C51,217 92,170 140,150C124,131 92,105 50,89C49,78 53,60 62,45C75,24 99,1 136,-10C112,-28 75,-56 54,-76C38,-91 29,-110 29,-132C30,-189 90,-254 205,-254C338,-254 457,-158 457,-55C457,44 374,63 312,63C279,63 244,62 209,62C164,62 146,82 146,101C146,114 160,131 173,140C189,138 207,135 223,135C310,135 401,187 401,294C401,329 390,359 372,381l57,-4C445,386 465,414 473,430M22 [...]
+<glyph unicode="h" horiz-adv-x="537" d="M516,0l0,27C459,33 452,38 452,103l0,177C452,398 396,450 314,450C261,450 208,414 173,379l0,331C130,697 68,683 19,676l0,-25C82,645 85,642 85,579l0,-475C85,38 77,33 18,27l-1,-27l217,0l0,27C178,33 173,40 173,103l0,240C199,373 235,390 271,390C332,390 364,352 364,270l0,-167C364,39 357,33 301,27l0,-27z"/>
+<glyph unicode="i" horiz-adv-x="273" d="M138,533C168,533 192,558 192,587C192,619 168,643 139,643C109,643 84,619 84,587C84,558 109,533 138,533M258,0l0,27C194,33 188,39 188,107l0,344C142,433 91,421 39,412l0,-24C96,379 100,374 100,312l0,-205C100,38 93,33 31,27l0,-27z"/>
+<glyph unicode="k" horiz-adv-x="499" d="M517,0l0,27C480,30 455,44 420,81C387,117 288,235 267,267C307,315 324,335 350,361C387,396 411,407 478,418l0,26l-206,-9l0,-27C318,403 321,394 302,365C285,339 256,300 234,277C219,261 201,248 172,242l0,468C128,696 68,680 20,675l0,-24C80,646 85,640 85,576l0,-471C85,40 79,33 13,27l0,-27l230,0l0,27C180,33 172,39 172,105l0,110C178,217 182,217 186,217C195,217 203,211 216,196C269,128 330,46 373,-1z"/>
+<glyph unicode="l" horiz-adv-x="258" d="M244,0l0,27C181,33 173,39 173,105l0,605C135,697 71,682 17,676l0,-25C79,645 85,643 85,576l0,-471C85,39 77,34 15,27l0,-27z"/>
+<glyph unicode="m" horiz-adv-x="823" d="M801,0l0,27C744,34 738,37 738,102l0,194C738,394 689,450 609,450C581,450 555,438 533,424C509,408 481,389 452,368C432,419 390,450 340,450C309,450 285,438 258,422C229,404 208,387 187,372l0,81C139,433 85,420 41,412l0,-24C97,379 100,373 100,311l0,-208C100,38 91,33 27,27l0,-27l216,0l0,27C196,33 188,39 188,102l0,237C217,363 254,387 291,387C348,387 375,349 375,276l0,-174C375,38 367,33 308,27l0,-27l217,0l0,27C472,33 463,39 463,101l0,196C463,315 462,327 460, [...]
+<glyph unicode="n" horiz-adv-x="550" d="M527,0l0,27C471,34 465,37 465,104l0,192C465,393 416,450 336,450C307,450 282,439 254,420C229,404 208,388 188,374l0,79C141,433 91,421 41,412l0,-24C94,378 100,375 100,311l0,-206C100,39 95,34 28,27l0,-27l221,0l0,27C194,33 188,37 188,104l0,236C217,365 253,387 291,387C351,387 377,346 377,277l0,-167C377,40 371,33 315,27l0,-27z"/>
+<glyph unicode="o" horiz-adv-x="513" d="M260,450C164,450 36,374 36,209C36,98 117,-12 258,-12C360,-12 477,65 477,226C477,349 385,450 260,450M246,416C330,416 375,324 375,203C375,64 326,22 269,22C189,22 138,116 138,242C138,356 189,416 246,416z"/>
+<glyph unicode="p" horiz-adv-x="528" d="M177,382l0,78C126,441 69,424 24,416l0,-25C84,384 89,381 89,318l0,-451C89,-198 81,-204 17,-210l0,-28l244,0l0,28C184,-204 177,-198 177,-125l0,130C190,-2 216,-11 245,-12C374,13 492,110 492,260C492,358 426,450 315,450C302,450 283,445 265,434M177,348C202,367 240,387 270,387C338,387 400,330 400,219C400,108 347,37 268,37C236,37 198,54 177,76z"/>
+<glyph unicode="." horiz-adv-x="233" d="M115,-12C150,-12 175,12 175,49C175,83 150,109 116,109C82,109 57,83 57,49C57,12 82,-12 115,-12z"/>
+<glyph unicode="r" horiz-adv-x="377" d="M188,343l0,109C137,432 90,420 40,412l0,-24C95,380 100,376 100,313l0,-209C100,39 92,33 32,27l0,-27l238,0l0,27C193,33 188,39 188,104l0,183C209,341 239,367 263,367C280,367 292,361 307,347C313,341 322,339 334,344C355,353 369,375 369,398C369,423 345,450 309,450C263,450 221,396 190,343z"/>
+<glyph unicode="s" horiz-adv-x="370" d="M323,324C320,348 309,410 301,432C280,441 253,450 210,450C116,450 55,390 55,318C55,240 123,205 181,178C234,154 260,130 260,89C260,48 228,21 191,21C131,21 86,81 67,147l-27,-4C40,104 50,35 57,21C74,7 122,-12 173,-12C255,-12 341,34 341,127C341,198 290,234 213,266C167,285 130,309 130,351C130,389 156,417 193,417C242,417 276,377 296,317z"/>
+<glyph unicode=" " horiz-adv-x="225"/>
+<glyph unicode="t" horiz-adv-x="311" d="M304,36l-9,27C280,56 259,48 235,48C211,48 177,62 177,142l0,255l104,0C295,405 297,427 287,438l-110,0l0,138l-14,3l-74,-69l0,-72l-44,0l-28,-30l5,-11l67,0l0,-289C89,27 126,-12 192,-12C201,-12 216,-8 233,1z"/>
+<glyph unicode="u" horiz-adv-x="535" d="M522,51l-26,1C458,55 450,62 450,113l0,332C433,442 408,437 379,435C349,431 314,428 287,427l0,-24l35,-6C353,391 362,386 362,333l0,-235C330,67 295,53 261,53C217,53 176,77 176,162l0,137C176,364 176,412 179,445C161,442 132,437 104,434C76,431 50,428 28,427l0,-24l27,-6C80,391 88,385 88,334l0,-198C88,31 143,-12 213,-12C241,-12 263,-3 292,14C320,30 340,46 362,63l0,-69l7,-6C389,-6 416,1 443,8C471,15 499,21 522,24z"/>
+<glyph unicode="x" horiz-adv-x="473" d="M478,0l0,27C420,35 406,45 370,101l-98,149C306,299 330,333 351,358C386,399 399,404 459,411l0,27l-183,0l0,-27C319,406 325,400 308,370C291,339 272,309 252,279l-57,90C177,396 181,405 222,411l0,27l-206,0l0,-27C71,404 83,395 113,347l87,-138C170,166 144,126 116,92C78,44 66,35 5,27l0,-27l187,0l0,27C143,35 140,45 158,78C177,111 198,148 220,180l70,-112C307,41 299,33 258,27l0,-27z"/>
+<glyph unicode="y" horiz-adv-x="460" d="M479,438l-181,0l0,-27C354,403 361,392 349,355C329,293 288,179 260,112l-88,246C159,394 165,403 211,411l-1,27l-210,0l0,-27C53,404 63,391 84,338C112,272 158,147 200,28C206,11 207,-3 202,-18C198,-31 191,-50 173,-81C151,-124 131,-147 98,-167C80,-179 72,-188 72,-204C72,-230 103,-255 131,-255C146,-255 158,-250 164,-230C179,-176 200,-118 267,42C335,203 366,286 391,339C418,395 427,403 479,411z"/>
+</font>
+
+	<font horiz-adv-x="1000">
+<!-- Copyright 1992, 1994, 1997, 2000, 2004 Adobe Systems Incorporated. All rights reserved. Protected by U.S. Patents D454,582. Myriad is either a registered trademark or a trademark of Adobe Systems Incorporated in the United States and/or other countries. -->
+<font-face font-family="MyriadPro-Light" units-per-em="1000" underline-position="-100" underline-thickness="50"/>
+<missing-glyph horiz-adv-x="500" d="M0,0l500,0l0,700l-500,0M250,395l-170,255l340,0M280,350l170,255l0,-510M80,50l170,255l170,-255M50,605l170,-255l-170,-255z"/>
+<glyph unicode="A" horiz-adv-x="585" d="M428,236l85,-236l49,0l-242,674l-46,0l-244,-674l49,0l83,236M177,276l82,227C274,546 285,581 294,620l3,0C306,582 315,548 332,501l82,-225z"/>
+<glyph unicode="B" horiz-adv-x="505" d="M81,1C108,-1 147,-5 198,-5C294,-5 367,14 412,59C442,91 462,133 462,188C462,298 376,347 319,360l0,3C386,386 435,444 435,513C435,560 421,596 393,623C356,661 301,679 217,679C167,679 119,673 81,664M129,632C144,636 170,639 214,639C314,639 386,605 386,510C386,436 325,378 227,378l-98,0M129,339l85,0C321,339 412,293 412,187C412,72 315,35 212,35C176,35 149,36 129,40z"/>
+<glyph unicode="I" horiz-adv-x="211" d="M81,674l0,-674l48,0l0,674z"/>
+<glyph unicode="J" horiz-adv-x="345" d="M223,219C223,69 174,30 88,30C58,30 34,36 17,43l-10,-38C24,-3 58,-11 89,-11C185,-11 271,36 271,208l0,466l-48,0z"/>
+<glyph unicode="P" horiz-adv-x="502" d="M81,0l48,0l0,288C153,281 180,280 211,280C294,280 366,306 409,355C440,389 456,432 456,490C456,546 437,591 404,622C367,658 306,679 226,679C169,679 120,673 81,666M129,631C147,635 180,639 224,639C331,639 408,591 408,485C408,378 336,320 215,320C182,320 152,322 129,330z"/>
+<glyph unicode="S" horiz-adv-x="464" d="M42,35C77,8 145,-11 203,-11C347,-11 417,77 417,175C417,276 358,326 247,371C150,409 107,447 107,522C107,575 144,645 253,645C311,645 354,626 372,613l18,40C367,669 319,685 256,685C141,685 60,613 60,514C60,422 125,366 233,328C331,290 370,246 370,170C370,87 308,30 207,30C151,30 98,48 60,74z"/>
+<glyph unicode="a" horiz-adv-x="454" d="M380,302C380,387 353,491 214,491C171,491 117,479 73,450l15,-35C123,440 167,451 209,451C323,452 332,357 332,310l0,-13C136,299 39,232 39,121C39,57 83,-11 180,-11C257,-11 310,32 334,69l2,0l7,-69l44,0C381,37 380,76 380,114M332,154C332,146 331,135 327,125C311,78 265,29 185,29C135,29 89,60 89,129C89,244 227,260 332,257z"/>
+<glyph unicode="b" horiz-adv-x="552" d="M80,112C80,76 79,34 76,0l43,0l4,87l2,0C163,21 219,-11 297,-11C402,-11 511,74 511,245C511,389 427,491 305,491C221,491 162,452 130,390l-2,0l0,320l-48,0M128,281C128,298 131,311 134,323C157,403 224,451 294,451C403,451 463,354 463,244C463,119 400,29 290,29C215,29 153,77 132,150C129,162 128,174 128,185z"/>
+<glyph unicode="c" horiz-adv-x="446" d="M399,59C373,47 336,31 279,31C168,31 89,113 89,239C89,351 155,450 284,450C337,450 374,435 397,422l17,39C396,474 347,491 288,491C145,491 41,387 41,235C41,91 133,-10 271,-10C341,-10 391,11 412,21z"/>
+<glyph unicode="," horiz-adv-x="174" d="M64,-121C80,-93 123,21 141,96l-63,-10C69,24 42,-84 26,-126z"/>
+<glyph unicode="&#xA9;" horiz-adv-x="677" d="M341,648C170,648 39,510 39,340C39,168 170,30 340,30C509,30 638,168 638,340C638,510 509,648 341,648M339,616C486,616 598,496 598,340C598,181 486,60 340,62C191,62 79,181 79,336C79,496 191,616 339,616M474,494C460,505 418,520 364,520C264,520 175,447 175,334C175,233 242,153 357,153C398,153 445,160 480,184l-10,29C446,197 408,186 367,186C265,186 216,255 216,337C216,419 262,487 365,487C415,487 450,471 464,463z"/>
+<glyph unicode="d" horiz-adv-x="544" d="M416,710l0,-304l-2,0C393,448 340,491 257,491C139,491 40,391 41,231C41,88 129,-11 248,-11C337,-11 394,38 419,91l2,0l4,-91l43,0C465,34 464,76 464,112l0,598M416,194C416,179 415,167 411,154C391,75 326,29 257,29C143,29 89,128 89,236C89,360 155,451 260,451C338,451 395,398 411,334C415,321 416,303 416,290z"/>
+<glyph unicode="e" horiz-adv-x="485" d="M442,245C444,254 444,261 444,274C444,343 414,491 257,491C133,491 41,391 41,231C41,90 127,-10 265,-10C349,-10 398,11 416,21l-12,37C377,45 341,31 271,31C171,31 88,92 88,245M90,283C99,357 145,451 251,451C367,451 395,350 394,283z"/>
+<glyph unicode="h" horiz-adv-x="536" d="M81,0l48,0l0,293C129,313 130,326 135,341C156,400 212,449 280,449C378,449 412,371 412,284l0,-284l48,0l0,289C460,468 338,491 293,491C257,491 224,481 196,463C168,447 145,421 131,394l-2,0l0,316l-48,0z"/>
+<glyph unicode="i" horiz-adv-x="209" d="M129,0l0,480l-48,0l0,-480M105,659C83,659 66,639 66,617C66,595 81,576 103,576C128,576 143,595 143,617C143,640 127,659 105,659z"/>
+<glyph unicode="l" horiz-adv-x="212" d="M81,0l48,0l0,710l-48,0z"/>
+<glyph unicode="n" horiz-adv-x="536" d="M81,0l48,0l0,297C129,312 132,328 135,340C154,402 212,450 279,450C378,450 412,371 412,284l0,-284l48,0l0,288C460,468 338,491 292,491C214,491 153,447 127,393l-2,0l-3,87l-45,0C80,442 81,409 81,365z"/>
+<glyph unicode="o" horiz-adv-x="532" d="M268,491C149,491 41,400 41,236C41,86 137,-11 261,-11C368,-11 491,66 491,245C491,391 401,491 268,491M267,451C394,451 443,330 443,242C443,119 364,29 264,29C166,29 89,119 89,239C89,342 144,451 267,451z"/>
+<glyph unicode="1" horiz-adv-x="488" d="M236,0l47,0l0,650l-44,0l-123,-73l12,-38l106,62l2,0z"/>
+<glyph unicode="." horiz-adv-x="174" d="M93,-11C119,-11 135,10 135,34C135,60 119,79 95,79C71,79 54,60 54,34C53,10 70,-11 93,-11z"/>
+<glyph unicode="r" horiz-adv-x="295" d="M80,0l48,0l0,265C128,281 129,297 132,311C145,388 192,445 258,445C267,445 274,445 281,443l0,46C275,490 268,491 261,491C196,491 146,443 125,383l-3,0l-2,97l-44,0C79,433 80,384 80,336z"/>
+<glyph unicode="s" horiz-adv-x="373" d="M44,23C76,3 120,-10 166,-10C264,-10 328,45 328,127C328,200 282,239 204,269C139,296 105,318 105,368C105,412 137,451 198,451C246,451 277,434 294,422l18,39C288,478 250,491 206,491C113,491 58,430 58,361C58,303 101,260 180,230C249,202 281,174 281,121C281,71 245,30 169,30C126,30 87,47 61,63z"/>
+<glyph unicode=" " horiz-adv-x="219"/>
+<glyph unicode="t" horiz-adv-x="309" d="M99,568l0,-88l-81,0l0,-39l81,0l0,-303C99,89 107,48 129,23C147,0 176,-11 211,-11C240,-11 262,-6 278,1l-6,36C260,33 242,30 217,30C166,30 147,68 147,129l0,312l137,0l0,39l-137,0l0,106z"/>
+<glyph unicode="2" horiz-adv-x="488" d="M433,0l0,41l-320,0l0,2l46,47C322,251 415,354 415,482C415,559 369,661 234,661C167,661 110,634 68,596l19,-33C115,587 163,619 225,619C335,619 366,546 366,472C366,360 287,269 106,92l-60,-62l0,-30z"/>
+<glyph unicode="u" horiz-adv-x="531" d="M451,480l-48,0l0,-299C403,162 399,143 394,128C373,80 322,31 252,31C157,31 125,106 125,210l0,270l-48,0l0,-279C77,20 180,-11 241,-11C326,-11 381,41 405,86l2,0l3,-86l45,0C452,37 451,75 451,117z"/>
+<glyph unicode="y" horiz-adv-x="440" d="M11,480l178,-445C193,25 195,18 195,14C195,9 193,3 189,-7C165,-64 133,-104 109,-128C81,-155 49,-172 25,-181l15,-40C52,-217 86,-203 124,-171C187,-116 228,-27 286,122l144,358l-51,0l-117,-311C247,130 235,92 225,63l-2,0C214,93 201,132 188,166l-126,314z"/>
+<glyph unicode="0" horiz-adv-x="488" d="M251,661C141,661 38,558 38,322C41,89 134,-11 236,-11C366,-11 449,101 449,334C449,558 365,661 251,661M243,621C354,621 400,499 400,329C400,152 351,29 242,29C149,29 87,140 87,321C87,513 154,621 243,621z"/>
+</font>
+
+	<font horiz-adv-x="1000">
+<!-- Copyright 1990, 1991, 1992, 1994, 1997, 1998, 2000, 2002, 2004 Adobe Systems Incorporated. All rights reserved. Minion is either a registered trademark or a trademark of Adobe Systems Incorporated in the United States and/or other countries. -->
+<font-face font-family="MinionPro-MediumIt" units-per-em="1000" underline-position="-100" underline-thickness="50"/>
+<missing-glyph horiz-adv-x="500" d="M0,0l500,0l0,700l-500,0M250,395l-170,255l340,0M280,350l170,255l0,-510M80,50l170,255l170,-255M50,605l170,-255l-170,-255z"/>
+<glyph unicode="e" horiz-adv-x="403" d="M353,127C303,79 248,51 207,51C148,51 131,107 131,160C131,169 131,179 132,191C229,216 395,269 395,369C395,412 361,450 304,450C260,450 204,425 162,392C84,332 42,228 42,135C42,16 106,-12 155,-12C207,-12 282,9 370,103M266,408C292,408 314,389 314,354C314,306 273,261 136,223C153,333 201,381 227,396C238,404 253,408 266,408z"/>
+<glyph unicode="f" horiz-adv-x="275" d="M77,432l-30,-30l3,-11l82,0C116,293 102,209 78,72C46,-116 25,-157 13,-171C4,-184 -11,-192 -27,-192C-46,-192 -77,-181 -93,-165C-100,-159 -105,-159 -113,-165C-128,-177 -142,-195 -142,-210C-142,-233 -108,-254 -78,-254C-51,-254 -10,-238 34,-193C91,-135 130,-63 166,108C189,219 200,283 218,389l101,10l21,33l-114,0C256,619 284,661 318,661C339,661 360,647 382,623C390,615 399,616 408,622C419,629 434,649 435,666C436,685 410,710 372,710C333,710 274,682 226,630C [...]
+<glyph unicode="l" horiz-adv-x="254" d="M220,118C192,90 153,65 142,65C137,65 133,72 139,101C180,296 220,488 260,679C265,700 264,710 254,710C241,710 181,683 99,675l-4,-26l27,-1C168,647 173,641 163,595C129,434 95,272 61,111C40,10 56,-12 78,-12C109,-12 181,31 235,94z"/>
+</font>
+
+	<font horiz-adv-x="1000">
+<!-- Copyright 1992, 1994, 1997, 2000, 2004 Adobe Systems Incorporated. All rights reserved. Protected by U.S. Patents D454,582. Myriad is either a registered trademark or a trademark of Adobe Systems Incorporated in the United States and/or other countries. -->
+<font-face font-family="MyriadPro-Regular" units-per-em="1000" underline-position="-100" underline-thickness="50"/>
+<missing-glyph horiz-adv-x="500" d="M0,0l500,0l0,700l-500,0M250,395l-170,255l340,0M280,350l170,255l0,-510M80,50l170,255l170,-255M50,605l170,-255l-170,-255z"/>
+<glyph unicode="a" horiz-adv-x="482" d="M413,297C413,393 377,494 229,494C168,494 109,477 69,452l20,-59C123,416 170,429 216,429C315,430 326,357 326,318l0,-10C139,309 35,245 35,128C35,58 85,-11 183,-11C252,-11 304,23 331,61l3,0l7,-61l79,0C415,33 413,74 413,116M328,163C328,155 327,145 324,135C310,94 269,54 205,54C161,54 123,80 123,138C123,232 232,249 328,247z"/>
+<glyph unicode="c" horiz-adv-x="448" d="M403,83C378,72 345,60 295,60C199,60 127,129 127,241C127,341 187,424 298,424C346,424 379,412 400,401l20,67C396,481 350,494 298,494C140,494 38,385 38,236C38,88 133,-11 279,-11C344,-11 395,6 418,17z"/>
+<glyph unicode="d" horiz-adv-x="564" d="M403,710l0,-289l-2,0C379,459 330,494 255,494C138,494 37,396 38,235C38,88 129,-11 246,-11C325,-11 383,30 409,84l3,0l4,-84l78,0C492,33 490,82 490,125l0,585M403,203C403,189 402,177 399,165C383,100 329,60 270,60C176,60 127,141 127,239C127,345 181,425 272,425C338,425 386,379 399,324C402,313 403,298 403,287z"/>
+<glyph unicode="e" horiz-adv-x="501" d="M462,226C464,236 465,249 465,267C465,356 424,494 265,494C124,494 38,380 38,234C38,88 127,-11 276,-11C353,-11 407,6 438,20l-16,63C390,69 351,58 288,58C199,58 124,107 122,226M123,289C130,350 168,431 258,431C357,431 381,344 380,289z"/>
+<glyph unicode="8" horiz-adv-x="513" d="M166,339C86,305 37,246 37,164C37,69 119,-11 255,-11C379,-11 476,64 476,178C476,256 426,314 345,346l0,3C425,386 453,446 453,501C453,583 389,661 263,661C148,661 61,591 61,488C61,432 92,376 165,342M257,53C174,53 124,111 127,176C127,238 168,289 244,311C332,286 387,247 387,169C387,102 336,53 257,53M258,598C337,598 368,544 368,492C368,433 325,393 269,374C194,394 144,429 145,494C145,550 185,598 258,598z"/>
+<glyph unicode="&#x2013;" horiz-adv-x="500" d="M30,284l0,-60l440,0l0,60z"/>
+<glyph unicode="5" horiz-adv-x="513" d="M433,650l-311,0l-42,-312C104,341 133,344 171,344C300,344 357,285 357,201C358,114 286,60 204,60C144,60 91,80 64,96l-22,-67C74,9 133,-11 204,-11C345,-11 446,84 446,211C446,292 404,349 353,377C313,402 264,412 213,412C189,412 175,411 160,409l25,167l248,0z"/>
+<glyph unicode="g" horiz-adv-x="559" d="M487,352C487,410 488,450 491,484l-78,0l-3,-73l-2,0C386,451 341,494 257,494C145,494 38,402 38,238C38,104 124,2 244,2C319,2 372,38 398,83l2,0l0,-53C400,-93 334,-140 244,-140C184,-140 134,-122 102,-101l-22,-68C119,-195 183,-209 241,-209C302,-209 370,-194 418,-151C464,-108 487,-41 487,71M399,206C399,191 397,174 392,159C374,103 325,69 270,69C176,69 127,148 127,243C127,355 187,426 271,426C336,426 378,384 394,332C398,321 399,308 399,293z"/>
+<glyph unicode="h" horiz-adv-x="555" d="M73,0l88,0l0,292C161,308 162,321 167,334C184,381 228,421 285,421C368,421 397,356 397,278l0,-278l88,0l0,288C485,454 381,494 316,494C283,494 252,485 226,470C199,455 177,432 163,407l-2,0l0,303l-88,0z"/>
+<glyph unicode="i" horiz-adv-x="234" d="M161,0l0,484l-88,0l0,-484M117,675C84,675 62,650 62,620C62,590 83,566 115,566C150,566 171,590 171,620C171,651 149,675 117,675z"/>
+<glyph unicode="l" horiz-adv-x="236" d="M73,0l88,0l0,710l-88,0z"/>
+<glyph unicode="m" horiz-adv-x="834" d="M73,0l86,0l0,291C159,306 161,322 166,334C180,378 221,422 275,422C342,422 376,367 376,290l0,-290l86,0l0,299C462,315 465,330 469,343C485,385 523,422 574,422C644,422 679,367 679,273l0,-273l86,0l0,284C765,452 670,494 605,494C559,494 528,482 499,460C479,445 459,425 444,397l-2,0C421,454 371,494 306,494C225,494 180,451 153,405l-3,0l-4,79l-77,0C71,444 73,404 73,353z"/>
+<glyph unicode="n" horiz-adv-x="555" d="M73,0l88,0l0,291C161,306 163,321 167,332C183,381 228,422 285,422C368,422 397,357 397,279l0,-279l88,0l0,288C485,454 381,494 314,494C234,494 178,449 154,404l-2,0l-5,80l-78,0C72,444 73,404 73,353z"/>
+<glyph unicode="9" horiz-adv-x="513" d="M96,-10C117,-11 145,-10 177,-5C247,3 316,33 366,82C430,144 478,244 478,386C478,554 396,661 263,661C130,661 41,553 41,430C41,319 116,231 232,231C298,231 350,256 386,300l3,0C377,224 346,167 303,128C266,92 218,72 167,65C137,62 115,60 96,62M255,594C348,594 389,509 389,398C389,383 386,374 381,365C358,326 312,297 253,297C177,297 128,354 128,435C128,528 181,594 255,594z"/>
+<glyph unicode="o" horiz-adv-x="549" d="M278,494C145,494 38,399 38,238C38,85 140,-11 270,-11C386,-11 511,67 511,246C511,393 417,494 278,494M276,428C380,428 421,325 421,243C421,134 358,55 274,55C188,55 128,135 128,241C128,332 173,428 276,428z"/>
+<glyph unicode="1" horiz-adv-x="513" d="M236,0l85,0l0,650l-75,0l-142,-76l17,-67l113,61l2,0z"/>
+<glyph unicode="p" horiz-adv-x="569" d="M73,-198l87,0l0,263l2,0C191,17 247,-11 311,-11C425,-11 532,75 532,249C532,395 444,494 326,494C247,494 189,460 154,401l-2,0l-5,83l-78,0C71,438 73,388 73,326M160,281C160,292 163,305 166,316C182,382 239,424 299,424C392,424 443,341 443,245C443,134 389,58 296,58C233,58 180,100 164,161C161,172 160,184 160,197z"/>
+<glyph unicode="(" horiz-adv-x="284" d="M195,694C132,610 65,481 64,285C64,90 132,-38 195,-121l68,0C193,-21 138,106 138,284C138,466 190,595 263,694z"/>
+<glyph unicode=")" horiz-adv-x="284" d="M88,-121C151,-37 218,91 219,287C219,483 151,612 88,694l-68,0C91,594 145,467 145,287C145,107 90,-22 20,-121z"/>
+<glyph unicode="s" horiz-adv-x="396" d="M40,23C74,3 123,-11 176,-11C289,-11 356,49 356,135C356,207 312,249 229,280C166,305 138,323 138,363C138,399 166,429 218,429C263,429 298,412 317,400l21,64C312,481 269,494 220,494C117,494 53,430 53,352C53,294 94,247 182,215C246,191 271,169 271,127C271,86 241,55 178,55C134,55 88,73 61,89z"/>
+<glyph unicode="7" horiz-adv-x="513" d="M57,650l0,-73l318,0l0,-2l-282,-575l91,0l283,592l0,58z"/>
+<glyph unicode="6" horiz-adv-x="513" d="M416,660C400,660 378,659 352,655C270,645 198,612 144,559C79,495 34,394 34,266C34,97 125,-11 263,-11C399,-11 480,99 480,219C480,345 399,429 284,429C212,429 157,395 126,353l-2,0C139,461 211,561 350,583C375,587 398,589 416,588M265,57C172,57 122,137 121,244C121,260 125,272 130,282C154,330 204,362 257,362C338,362 391,306 391,213C391,120 340,57 265,57z"/>
+<glyph unicode=" " horiz-adv-x="212"/>
+<glyph unicode="t" horiz-adv-x="331" d="M93,574l0,-90l-75,0l0,-67l75,0l0,-264C93,96 103,53 127,26C148,3 181,-11 222,-11C256,-11 283,-5 300,1l-4,67C283,64 269,62 245,62C196,62 179,96 179,156l0,261l126,0l0,67l-126,0l0,116z"/>
+<glyph unicode="3" horiz-adv-x="513" d="M42,33C74,12 138,-11 211,-11C366,-11 448,80 448,184C447,275 383,335 303,350l0,2C382,381 423,438 423,506C423,585 365,661 237,661C167,661 101,636 66,611l24,-64C118,567 168,590 220,590C301,590 334,544 334,492C334,415 253,382 189,382l-49,0l0,-66l49,0C274,316 356,277 357,186C358,131 322,60 210,60C148,60 91,85 66,100z"/>
+<glyph unicode="2" horiz-adv-x="513" d="M460,0l0,73l-291,0l0,2l51,48C357,255 444,352 444,472C444,565 385,661 245,661C171,661 106,632 62,595l28,-62C120,558 169,588 228,588C325,588 356,527 356,461C356,363 280,279 114,121l-69,-67l0,-54z"/>
+<glyph unicode="0" horiz-adv-x="513" d="M263,661C131,661 36,542 36,323C38,108 125,-11 252,-11C395,-11 478,111 478,332C478,539 399,661 263,661M257,593C349,593 389,488 389,328C389,162 346,57 257,57C177,57 125,153 125,322C125,499 181,593 257,593z"/>
+</font>
+
+	<text transform="matrix(1 0 0 1 51 729.75)"><tspan x="0" y="0" style="font-family:'MyriadPro-SemiExtIt'; -webkit-user-select:none; font-size:8.5; -webkit-user-select:none;">S</tspan><tspan x="4.208" y="0" style="font-family:'MyriadPro-SemiExtIt'; -webkit-user-select:none; font-size:8.5; -webkit-user-select:none;">tr</tspan><tspan x="9.979" y="0" style="font-family:'MyriadPro-SemiExtIt'; -webkit-user-select:none; font-size:8.5; -webkit-user-select:none;">e</tspan><tspan x="14.229" y="0"  [...]
+<text transform="matrix(1 0 0 1 88.8931 729.75)" style="font-family:'MyriadPro-Light'; -webkit-user-select:none; font-size:8.5; -webkit-user-select:none;"> ©</text>
+<text transform="matrix(1 0 0 1 96.5088 729.75)" style="font-family:'MyriadPro-Light'; -webkit-user-select:none; font-size:8.5; -webkit-user-select:none;"> </text>
+<text transform="matrix(1 0 0 1 97.5713 729.75)"><tspan x="0" y="0" style="font-family:'MyriadPro-Light'; -webkit-user-select:none; font-size:8.5; -webkit-user-select:none;">2</tspan><tspan x="4.08" y="0" style="font-family:'MyriadPro-Light'; -webkit-user-select:none; font-size:8.5; -webkit-user-select:none;">0</tspan><tspan x="7.871" y="0" style="font-family:'MyriadPro-Light'; -webkit-user-select:none; font-size:8.5; -webkit-user-select:none;">1</tspan><tspan x="11.619" y="0" style="fon [...]
+<text transform="matrix(1 0 0 1 292.3115 729.75)" style="font-family:'MyriadPro-SemiExt'; -webkit-user-select:none; font-size:11.5; -webkit-user-select:none;"> </text>
+<text transform="matrix(1 0 0 1 464.0752 729.75)" style="font-family:'MyriadPro-SemiExt'; -webkit-user-select:none; font-size:11.5; -webkit-user-select:none;">Routines</text>
+<text transform="matrix(1 0 0 1 509.8223 729.75)"><tspan x="0" y="0" style="font-family:'MyriadPro-SemiExt'; -webkit-user-select:none; font-size:11.5; -webkit-user-select:none;"> </tspan><tspan x="2.438" y="0" style="font-family:'MyriadPro-SemiExt'; -webkit-user-select:none; font-size:11.5; -webkit-user-select:none;"> </tspan></text>
+<path d="M520.056,723.367h-0.025l-1.664,0.74l-0.377-1.742l2.418-1.065h1.911v8.45h-2.263V723.367z M530.235,725.512
+	c0,2.496-1.053,4.381-3.328,4.381c-2.418,0-3.315-2.132-3.315-4.354c0-2.288,0.949-4.382,3.328-4.382
+	C529.391,721.156,530.235,723.354,530.235,725.512z M525.933,725.524c-0.014,1.833,0.377,2.613,1.001,2.613
+	c0.598,0,0.962-0.793,0.962-2.613c0-1.78-0.352-2.6-0.976-2.6C526.322,722.925,525.933,723.705,525.933,725.524z M536.995,721.3
+	v1.456l-3.393,6.994h-2.496l3.405-6.5v-0.026h-3.77V721.3H536.995z"/>
+<g>
+	<defs>
+		<rect id="SVGID_1_" x="51" y="128.249" width="152.702" height="112.751"/>
+	</defs>
+	<clipPath id="SVGID_2_">
+		<use xlink:href="#SVGID_1_"  style="overflow:visible;"/>
+	</clipPath>
+	<g style="clip-path:url(#SVGID_2_);">
+		<defs>
+			<rect id="SVGID_3_" x="51" y="128.249" width="152.88" height="112.8"/>
+		</defs>
+		<clipPath id="SVGID_4_">
+			<use xlink:href="#SVGID_3_"  style="overflow:visible;"/>
+		</clipPath>
+		<g transform="matrix(1 0 0 1 3.814697e-06 0)" style="clip-path:url(#SVGID_4_);">
+			
+				<image style="overflow:visible;" width="319" height="236" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAT8AAADuCAYAAABPswCVAAAACXBIWXMAABcRAAAXEQHKJvM/AAAA
+GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAASNlJREFUeNrsnQd8U1X7x2/2Ht0t
+3YWW3ULZgiwVcIL+XSgIKrgFVPB9VVB8WS7EyUZZspQpG0E2ZVNmaUsH3SudadOR5v886b0QQtqm
+bZJmnN/ncz4ZTZN7zz3ne3/PmWyKiIiIyAXFJVng2KrQVOE1lNLJE5ICkgZSHqR8kZBfQnKpwfzD
+BxadRHQ+ciBVQ1JB/mlJLhH4EdlXpRV89tmn7dzcFP29vbxCFAqlhw9ILpcrKisrNbm5OTkCofAG
+fO4QfDwZUilU5EoXzzMePHhBCqBvEtx9e/cqnnlmlILL5XIUCoWbu7u7H5vD4VVXV5cWFxUfgf85
+CPlWTkocgR9R61ZeNjzIIAVv27a1+5+bNo3QVFT0v337tgdF3RaWlASzBw4cRG3Zshk/Xqt0c8t/
++umRDyYkJNysrqq6AP+/HSpymQvlF4fOL5/t27eFeHq4hYSGhnYNCgoOk8lkCg5IpVIpa2tr5VVV
+Vay8vDwRJMb5aQCIvTq0D+fD92yFfKslJZDAj8j2lRhDMrdVK1f2mjNn1gPtwsO7sChWZzab3W76
+9Bkc5nNBwcEUwi8YHkHs1NRU7zVrVj8Ozx/m8XhXe/fqoYXv+hsqstrJ3V2bLZs3d1IqZEHePj6B
+AQEBYRw2J0StVvuXlZX5RkdH85nPh4WFUT179rzveyDvhJB3vcFFvwkvb0M6S0oigR+RbSszf+pH
+H7bfu3fP0xCTDQc30rX/A/3RzVAvjh5NjR37yn3/89n0GUwFZkAoSE9P77x27dopDw54wBu+czcA
+MNEJ80q2bNnSB1f+/ttIsVgcBeAKSLt9W8lmsSSYT4MHD9bfIEzlmQn44YNw166dvadMnjQZvvt7
+yLMLpEQS+BHZxsH4rPvjjx7btm/7Pz6f/9iI4SM8zK28KASfAQiFEN713Lp1S5vXXhvfAb5/FboZ
+ZwjnaGfstX379qd+/23F+MLCwl6PPfY4f/DgIXccsbl5ZiLvFJs2bXyC/p2fIb9Ok9JJRGT5Sqx3
+epDC1v6xbnRUVNTC3n36nA4JCSlfumy5Dt5vUYq7maADCOg8PDyK3333vY3wXl9nyDe5XO4NeTUN
+YHcDoKWzRF6ZyLOS1ydMWAnv+ZOSSkRkWfCJ5837qq9MJvugV+/evw0aPPgqQK9y+vQZ1qrMxW+9
+9fYf8F4k7ZwcNd+kE9948yV4mmRp8BnnGYTSaQ899NAk7GknJZaIyDIVmP/fTz4d0KlTp53wMi84
+OKTG0tAzVZmVSqXqxdGjf4X3fBw03zgA8J7dunU7ZC3wMWnf/n908JNVgYGBMfB6ON2TTOTAIm1+
+rV+B2f/3zNMhV65cmchms0dg721z2qia2Z7lduTI4YfhcR+kHY6Wd5Fdu7irVAUjwC33x/Oxdp7B
+9/P27t3bZfz4Vybv2rkTe84PkSEwRETNh59y0qTJb4eGhhZa07nU52Y8PDyLJkyYuAh7Sh3NLQ8b
+NhzBHTtw4CCb5BfjmOE31T6+vtvhvR6kBDuu2CQLWjdsmzr1o7YxMadeCAwMUlrTudTnZh57/DHZ
+3r17+sPL/o6Ud4888pBnYmLCo8HBIZ3HjB1rs/yiHaa4qrLywTcmTngVrqEnKckEfkRNl5zH4w3I
+zc3tbasKbFyZx4x5ha3RaEImvf/es1CR5Q5y02BdvXLVLykpaQicA8eWNw0GgE888aTyzz83jRg8
+aOAT9PxqIgI/InM1ccLrXmfPnHkoKChYZGvXZ1iZH330Men27dswhOvoIFknHDRoUHhIaGh4q900
+xr7CgptGQEJC/IvwVjgpzQR+ROa7F97169eDTpw43r01j4OpyJWVlZ5vvvlGT0fIu9EvvuB261Zi
+z6DAIGlr3jTgtwXV1dVdXn5p9DB6dRgiAj8iM6QY8eijfYODQ3xbw70Yq7i42G3jhvW97b3jA0Pe
+vXv3eFy9erW3Hdw0qNLSUo/du3cNgrfcSZEm8CMyowJPmTzJ79ixo0OhEnFby73c42JeeUXk7u4e
+CS+j7Tz7eFHdugWGhoV1bO2bBuP+FApFWwdqMiAi8GtViVSFqi7paWnd7cH13e34qAx8882JI3AY
+iR3nnaRP7z4dAgMD3e3hpkG3/bm9/967XUixJvAjakQvjX7B/WbczQGtMbyloYr85FNPKnZs347z
+fYPtNe/ef/9d6blz5yIonf2U3eLiYumKFcvb0estEhH4EdUT8rJPxcT4Xb4c+4A9HRfC7+WXx3Ld
+3NyC4GUPO807auXvv8tPnjxhb72rIi6XGwKPQlLCCfyIGgjbRowYERkSEtLeHkJeY5WWlionT57U
+w07nrnIA0l5t27a1m7yj20v5YrEYV3shK74Q+BHVp9deG+9+7erVfq05tq8h5efnS1et/B0b7+2x
+11fYs2ev4ICAQC97ai7A9lK5XOEBLzuQEk7gR2Q6bGPt/Ptvj7Nnz3azx+NjJu+Di/GGl23s8BDF
+4eHhoTqdzu46ZNTqMvmUKZM6kvF+BH5EpsXv3btPcGhoaDt7DHmZ3kuBQIBbONrdnNWPPvxAdPTo
+UbsMLVUqlWTZ0qU45IVMdSPwIzLW00+PVNy+ndotMDBIbo8h7x1C8/m4WKebvR3XwoW/Co8ePWKv
+aw8K2Gw2HhuPlHQCPyIj7d2zR5GQkBBF1W2QbbcqLS0V/uc/0/zsrMkAoYyO1F7hx2axWEJSpxxH
+xKLbrvKyAvz9lO7uHnYZ8hqqsLBQ8NOPP3oicERCu2le4wQGBqIb9bfj/NORkk7gR3S/eJ06dfbj
+8Xj+9hzyMiEcuBh0WDjcRWsnxySMju4RmJeX62nH+UdWdSZhL5EJSbp169a2Rltj12vmYafHuPHj
+hQhpeCmyp/xr36FD29panT1vHsSi7LxJg4jAz+bq3auHYsuWzZH2NC2rPvi9/PIYvlQqxZkeofZy
+XH379JatXrWykz3mWVRUJPXd/O/ZAoEAx0YqSWkn8CMy0JUrV8QZGRlBjnCsOh3Fkslk6FDb2cPx
+YHvpzZs35bdv325nj/mlUCipyK6RbJFYjPBrQ0q7Y4i0+dmo8vr6eMkgbAv49rvvHOKYc3JyRAMf
+7G8vFZkX3SPaX1NREWqv+Yc9HRKxWAIPeIM7Q0o9cX5EdOXt0KGDl0Qs8YuMjHKIA9ZoNLyzZ8/a
+Swgn6dWzV4QU3Kg95x+Hy0UzISXFncCP6K6EnTt3CdDWaiWOBGxIcnSt9gC/oODgtvbeXpqZkcEd
+MngggR8Je4kMJA5r2zY0MTHRkW42zIwFLCPVrdhkQA3o30+an18Qhp0x9qyKigpBTEyMBynuxPkR
+0erdq4d8yeJF7R3leLH3cv73CwR8Ph/b/Fp7dRdWcnKy0sfHO9wB2ku5lH2uhkNE4NcqzoWVlJQk
+S0tLC3OUY8bey65du3KkUikubhDS2k0Gffv1CxaLJW0coL1UyOVy/eGak0VNCfyI0A20Cw/3jI6O
+9neUnl6UfriLXK6gWn+NOklUZFR4bW2tIwBFIJFIAimyqCmBH5Fe/IjwCB+ZTC5zlJ5eRtlZWYo+
+vXtFtmanR6+e0bLVq1dFUHY+cwKbCr79bj4bXLMXvOxKij2BHxFFicD5Bet0OofrXKqoqJDFxd3A
+WRWt0oOJnR3x8fHyjIwMu98WUj/QGW5uubk5vj17dMcd8MSk6BP4ubqEHh4e3pSDzfmknQyu6uzb
+imGcoG/ffsHR0dFtHaXJQKPRSIuKinAHvAdI0Sfwc2k9NHQIZ9HCXyWOdty0k2GJxRJ0fQGtdBiS
+Xr16dZDKZApHaDJgQt/8/Pyg7t0iH7XTTaCIaJFxflbWyZMncLCw1N8/wCGPXwKiWmmBgx7R3eSF
+hYUdw8MjHOImzYS+lZWV8qysrF5UXU/5LVILiPNz5RuMw479yshIlz3Qr29HW2/IjZ0sOL4PINLZ
+AbONI6kbJhRGij9xfq4sdH4KRz348vJyyfXr19rRAC+2JUBCQ0O9hUJhO0caInTHVbBYbIrs50Gc
+n6sKeys5HI7DVgL9OnWt1+kh6t27T6i9L2ZgKs++/W4+lZub6wlh+2AoA2R9PwI/lxRLIpHw+/Tt
+K3FE96Kf6REZheeArs/WE2txCbAISkdxHC3PENZVVVXKuLi4Z/3b+L4LAJSQqkDg53KqrKzSJiYk
+VK1Zs9phzyEvL0/ap3cvmy4k2rNHtGLhr79EOWJ+0e6PU1tbGwQ3jv+Dtx4kNYHAz9Wkq6qqrCko
+KKi6HHvZgQFeqbh69UpXcDA2aSPGISIaTYUPqIOjOuaxY8fqAcjmcNA1k2WuCPxcS7jto06n383Q
+Ybc0pPenkMhkcpzpYashL9KHHn6kk0Qi9XG0KYGMUlNTqbVrVteWFBfnw8trpDbYn0hvrw3cnyPD
+r26Fl0i2m5sS1/brBinB2r8Z3T1KplKpOrZv38Fhy2dRUTEVGxtbxOVyj8HLJFINiPNzRdVAKnH0
+k8jJyZH279/PJuPWbty4IYHfc/gxcgqFImfu3Hn7IQKoJNWAwM8VhRtZVzn6SVRUVIguXrgQYO3B
+zji4WalU4rhIh4Xf5cux1H8+nqqprKy88f6kyedIFSBhL5FjS8jl8nBlZ9zIXG3NMhkaGoqzI/wd
+sbODCXkvXbqUx2KxDlK2HRhORJyf3Tk/Zwh7eAIBH9eqc7c2ZKOiugXK5HKxo3Z2cNhsLZ/PT37l
+lXH7IOTVkSpA4OeqQvAVOPIJMKuViEQiHLbhY+WfEwUHBwc42uBmw5B32sdTS7Va7cXFS5beJsWf
+hL0uq+07dlZv3bK5OCnJcTv8mFkLEol+easQSFZrx+rTp5dEVVAQFBbW1mFD3oz0dNWy5SvOguur
+JjWAOD+X1bBhwyrd3d1zKQce7sIoOztbNGDAA1Zbmws7OxLi4xXp6ekdHTWPWCyWrqqqKnf06JfO
+ktJPnJ/Lh723027nQKXAIS8OvcqHRqPhnz93zpptftzOnTv71dbqwhyxswND3qlTP6T4fD5utuRG
+ij5xfq6uqqRbSQVsNsspOj0gyay4oZE4ukePMKlMqnTEzg4MeS/HxrKKioo8ukV17U6KPoGfq0t7
++3ZqQWxsbNa0aR85PPzYbDYu0WSVzoju3SKl27Zui3DUzo47d7uqKml8fHx4a+56R0TgZw+qLSws
+LFapVMmOvLgBLT6Px8PNmKyyRFNcXJwkNzcnxAmuuZjL5eJ5iEjxJ/BzWeHiBlqttgyeJjvyedDD
+XbgSiQThF2jp78eFX/l8Pm736JAbfuuHuNx19jyBQIBjIj1IDSDwc2lt3Pin5tlnn8t05HMw2M0N
+x/oFWaMsuru7y+GxjSPmD7b3ofbt/0c/JlIilWLzQDAp/QR+Lq2nRo6sgDAoje7xdWwnC6Kss5Ul
+LyKivUe3bt2VjjqtTQk3iIEDBxqOiQwlpZ/Az9WlgbAog8PlOPzqLhkZ6fyhQwZZY18KMW5OLpfL
+hY7W02sU8uqVlZnp1rtXz55k714CP1eXNjU1VRV76ZLD9/iWl5cLY2Ji/C29ukt09yj5hg0bcHCz
+w/WQMiEv41ixfXT27Dmy5OSkSHjpR4o/gZ8rSwfQKC8oKMhxgh5fHoTvMkuWHRwSkpKSoszOdsg9
+eu+EvIxjxfbRLl0jOVKyd69di8zwsIGwx5eqW9OvyBnKDIfDwfX2BFTdQq2WkKB//wFt4ebQ0VHb
++0xed5EIe6/bkBpAnJ9L68+/Nle+9vrrOU5wKjyxWNLGwpVa1KlTpxAZyFGXsTKZUSDKgTesJ/Aj
+soieeOJJbUR4hMaRz+HO0lZi/dJWloSf0MfXFzdGd6oZEWlpacIB/R8gbX4k7HV5VZeUlDh02Mss
+bSUUCHHivsXW9evZI1pWXFzU0RGXsWJ6erHNz1gVFRXiS5cuhlRoqvgiIb+KVAHi/FxVNWq1utwZ
+TiQ7O0v0wAN9LTLLA8Ag7tylc4/09PQHHDEvjHt6DV3y/PnfC0UiUQi89CbFnzg/V5a2rKxMDYGd
+lqIce+K+RqNRXI6N7WoJRxMWGuxbXl7xZGRUlJsjD242bqtkenzFYjEubYWDwtNJFSDOz2WdX0FB
+QQmLYmmd4FxEcrm8PdXCYRwAT/dx4199EkLehwEgLGfq7LjjLrhc7PSQkOJP4OfKqkpOTsqDylDi
+DOUGXKx/+4jwwS0Jdz/+eNqQ5cuWToqKivJ0piEu99zxarQ4HKicFH8CP1dWbU5OjprD5agd+STo
+Hl+qurraW61WjwKINXlgMvyP8MMPP+i7auXvb/n7+4cuXbbcKV0fdl1rtTUIvwpS/O3QlZMssJl0
+FRWaag6b49DDXRR327cEJSXFDwx75OEfAWa74PVFSLhbWa5IyC+jF/LEmyvuXYJtnDjeDZd5Cty8
++a+hAL5HysvLOyicNNytox+rtrq6Bq93KSn+BH4uDT+1uqzqzJnTZTg04ttv5zu8+5s29SPZhQvn
+H4zuHtWxqKioUK0uL9ZoKhCA+QBANovFFsBp69hsNo/P53sIhEJfiVgshdDfKzw83O2bb+ezlUrn
+HQOs38yougrhRzYuJ/BzXTFT3AoKCkodfX4vur+xY8fqHeDly7F8gCAz4wM3aMe9K7AHmKXT1eqb
+VbRaLauiooKHqaiwkBUZFUVBqEs5reOj6PF/Uz+sgagXwUfa/Aj8XF5aZ6kICnrtOnSBBhBD2Imo
+RpZvR7fnzOBD4fi/S5cuaTkcDoa8ZP9eAj8iygn27zUFQVdWLD3Lw0RTRlVtba2KvukR2ZlIb6/t
+nR/p+XMiofOdPn0GVU9TRrlOp0uhmwOICPwI/Eg2OJfzrS+E9/T0LFu3bkMS3d5LRODn0iIDXl2p
+crHZmqefeSaH5ASBn8tr1ao1FU+NHEnmeLqIakEU6ewg8COiqOdfeKG2bdt2ZGkjFxG9mKmc5ASB
+HxG4gPy8vEIWi/T+OYtM7dzGSCjUr3voS3KJwI+IosqPHj2SxOFwyXQnJxGO57scG2vybxy40FQj
+Yx6JCPxcRbUlJSVlhw4dzBk+7BGSG04uXd2YTh3JCfsUGeRsQ4mEfKwIhZBuQmpPcsQ5NHDgIGrf
+/gMkI4jzI2pIFZqqgmnTPo5xpGM+evSofm5yS5OruV1W3apWLFLqCfyI6lS4du3ao9j2Z88wMATe
+8GEP33E4AG992rf/n2Z85xGXgmNiYiIPzotsXUngR0SHvrVZWZk41u+I4wHvgEGoN/DO+w0lBpKG
+31PfZ4zhaO8wxPxi8qkekX17CfyIjEJf1SvjxmHoq7OXSmwO8KwlY5A6KgxNSMBisbzhnEg9I/Aj
+oqXetXPXVajcqa1ZoQ2hZ2vgNQWGDBAdEIZigUDQDh7dSJEn8COiQ9+CgvwseHrCXqBn772Vptwh
+A0N7hCAeLxwjVyqV4ubuIaTUE/gRGYS+Eye+ccrWoa9hO5UjD9FgYGjKEdrCGTL52FgeAvxw28pQ
+UuIJ/Ijuquzffw/d5HK5RcTtWdYR3j3nI63eoywUinCGhz8p7gR+RHelTUlJUR06dDDd2g7FGaFn
+Lgzr60SxFQTj4m7w4ffcSXEn8COihRWwpqYGV3ix2s5ehqFZa0DP3NDQ1mGyjSHIY7FYCtLjS+BH
+dK+wvc/iS5wbuz0y9cq0MzRuL7QSCEUcDgfDXrKcM4EfEQorH5fLFcBTd6yAlqh49hTiGg8Arntt
+X72yptygFY6Ry2azcaAzj5R6Aj8iOhzq0qULrvUW7AwhbsPHdkR/bPY6NMVUz7E5x9iYq8bv3X/g
+H7ZEIsFxfoGkyBP4EdXJ89nnnh8EFUjWnHmy9h7i0uPc7kCivpkb9gRCcyFoxrS2u+0aOorF5/Nx
+UVMy0JnAjwgrmEwq9pn+2actqvn27fbuB4RxmGmvIDQEtyUkEumHu7QhJZ/Aj4iixE89NbLroEGD
+uzLAakp7E+P25sye5ZBDV8yZy9vaIGQAaIl2QHB+2NnhQYo9gR8RRUnad+gQotPpmrSYrKP04t7f
+2dEwQOx16lpDAGxK/sfHx3PhXGSk2BP4ubygIkjnzZ0T0ZQwy1GmpTWlPcxWYaclj6UF50eWsyfw
+c23hYFdvbx8/eDqgqUCx9xka9w5q/scA1P9YaxiJDc+tRcdvlfGcRAR+jibF6NGjHwAohJgDMXua
+JdHc42xq+5kl3KN13WCTrwWO5/SCGxdZ0t6ORDYwsn3I6w0POMTFacFnqeN2otkpMh6P1xkexZDU
+pBYQ5+eiIa+3JzyNcobzaUoHjLnuzx6Bf++xN8uR8mUyWQA8hpFaQODnqpI+8cSTkVCxA0xVbEMw
+2KvrM97nw7gd0pzjdvT2v6Y6YlBhZWUlLlybSaoAgZ+rhryev/22Ajs6WI5YkU3t89EUMNtTL66N
+wFcOT/dyudwX8wsKP4D8KyC1gMDPJUNeDw9PXNK8n7lgsAfX1xTomeP6zA9/j9jp8vSNXxM6H8pE
+ItFmyKuXa2pq9kMe1pBaYF8iHR62k3jEiBGd09LSQsysPJQ5nSI2CNnuq/Q5qjJqX0z8PZ+Pv3aB
+mj/jHSqiSzT18pSvqdW7L9T73fHX4u8ALqpnX+qj/y00bBmgPpq1UP9dzEBne7gZMNDGWTVm5FuN
+XC4/l5Ob/zkcv4oUfQI/V5d7r169egL8WA1XniPU0WGtt6Wv8WDq1Ru23gFdfUAzBN+9IDOtiM7R
+dwBX39+XbIm57/sZGLYmBBlH2oDzrfXza3MlKTllJhxrCin2JOx1+ZA3NCQ4eMqUyU9aMryyJvgY
+B2fs8FoKvuaIgSEmhGZrhcSNhewcDrvG28fnNIDvLQDfEVLyCfyIKEqnVpdh+HPNnMpla2EYO/3b
+5XrwIcT0kLESyCwBQgaAGDKjG91/OqHVjysm5pTm+eeeO5CamvY6gO8MKfIEfkSUvpdXl5tXkDp6
+9EvroNJW2kNDPgIPwYGpMXdnTdcXfxW+4/N3WvS/2QWlNoOgqRvU6dOnK0Y+9eTujMysN+Fa3yAl
+nsCP6F4Alq1fvw5rzTJHBp411FQAMu7P+H8ZCNoChIbLb417ZUxGTm7+OnieRko6gR+RCVVoqjI8
+PDx+g4pz2pbuj4FeQ8BjgNJkEDXR9aFbfPOZvvd1drQEgKZkTTdo5P4K8/Pzd8PjYaNrzYcUAikK
+koSUfgI/lw9/0zOyrvbo0WMGADDT2gA0B3rNBSAT8jYnTK4DyKD7FjNtLgAb+j9rh8Tu7u7J+QWF
+y3AAM5yLEtKzW7ftWA6vcWzfaUiHvb08voX3fUgNIPBzdQBWnz9/HtuFNtfXa9jSnt6mQs8moa0R
++AzPz9BJtaQNsCFZGoLMMfv6+uHy9M8D3IYsWbJ4Llzf9U+Peup1eA8HaeIiFsrS0tIJPaK7/QOf
+eZfUAAI/Vw9/q2d++b/S1nZ6LQWZuSFvQ+CrJ5S0WPhrbQhev37NF4D3GaQDUyZPehvOj2vsaEG8
+69evd+nXt/f/4P2FkNqTWkDg54rgE48bN7b/zC8+fwlfW2LMmqWg15xQ1hLgMwagtdyfFSGI9Yhj
+6nwMQXjp0iV3gOQrUonov/Ae2ceXwM+lwMcfOmTQwE0bN/4CL0OM/97URTyt5fQsNWC5KeBrLSEE
+mwtA09tzHmjssyI2m417+ApIjSDwc6n8loHg0d1wL1tD92cOJKwBPXNDWXM+Z9yj2xzw2cL9WSsU
+buweWFtbi0NiKkl1IPBzGUHIo9m/f38sPN17v+trfKFMazk9S4W7poaxNBV8tuj8sIYLbELzRZVW
+qy3Aji9SIwj8XC30TRk69KGFUFkSsLKY29BvaiUVS4OvueFufdBr7mZLxgDUf3djQ28sBMqmukBz
+r59BkwZ2dMWRmkDg54rur2rX7j0nnn/hhZkAwGJDt2DKJVmzB7ep4DP8PAMl4/D2bgN/y9r3mM4C
+R3SBDUgnk8ky4Lz2k5pA4OeqAFSvWrXm7wkT3/gQAFhYX7hrLbdnrKYuRXUvpCwHPHNdoDlO0FIA
+tHBbYF5paeleuP63SS0g8HNlAJYuX7YUabHRlOuzNviasyiBcdtgU9rzDPf+uLsHiHlDfIxdoK2d
+YGMusLGlrpgFTiUS6VU4j+Wk9BP4ubxwsPOs2XOKjVdJtvZA5ZaCryntecY7vJkYAOwQoXBzw2CD
+tr40tbpsJeQF2cSIwM/lwSd4etTIHjOmf/aiLcNcS8zJbS70jP+vuQO8DSGoB+AM+wYgqJDNZm+F
+Y15HSj6Bn6uDj9uvb++ee/fumQVgCMal4m09Lc3cBUuZ/zHH7TW2rWV9oWJTw2Dj77ClmgJA2vVp
+5XL5VXW55mc4Ry0p/QR+Li2oBBGXLl2aDXDobrhHhj07vuaFtgfMcnCGg72b0x5o6zC4iR0hRSUl
+JcfIfh4EfsT1aaqCfvjxp8kAicG2Ap+hmjOWz9xQtyVT2EyB0J4B2JgLZNr6AgIC8uCcjpGST+Dn
+6uDz/N+XM8dOmTzp9WxVqV0tOdVQuGvrObnm7u1rjwDE62rwWqtSqbCD4yIp/QR+rgw+2bvvvjNq
+3ry5n4D74thygyBb7LBmaUiaahNsLCS+ryPEhgDUCPxMtT+WlZeXX4NjziE1gMDPZcEHbm/kbyuW
+TwdISPa3wg5t1nJ9TV2JpjmhsDFUjIFYHwxt7wDj9b85clBnJk+KIF0iNYDAz1XB5zVnzuzJS5Ys
+Xs707Noy3LW06zMerMx0clgzNDZsDzROhu7w7so4rbMFqPEMGKVSie19J0gtIPBzRfB5fzVv7tuz
+Z/3vMwCEoDU6OJoLy/qgx7g8a09ra447NHSEc2bPsnn4ayQdh8NhUWTdPgI/F4MeLmXeZdWqlfO/
+/HLm5wAKoSOA716o1Lm55g5jaU0IMqGxtcJxM90fS+rmHb52z8V34LhEpFYQ+LmE2/vhhwUfAjB2
+vvXmG2MAGJzWAl9LQ16mPa8ly1O1NgT1+WBj98cAMDXxhnz+p+OfhLfeIjWDwM9ZgcdfsnRZOOht
+gN7er76a9zW2773x1jvUD0v/cBjHx8AyMiqKevKpp6jnn3+Weu/99x0CevVB8PSZs/rzqVCXUWnJ
+CTb7fQTg9PlrKLVG26aNn+97s2bPGYPlhNQWAj9ngZ5o0eIlwSOGDxu0b9/eT/Pz8+fgrI2xY8dS
+f+/aS7015VPq7PX0Vjm2crqyiyUyKjAkwuzPK5RK/etpUz+ioiKjqG+/ne/Q1ygSzmHZsuWUm1xE
+rfpllk0BGBgaTj3/2hSqsFAV+P2CBW+eiE3pAWVGSGoOgZ8jQ08IKeDll0Y/efTokRlHjhxeePDg
+wfEvjxnjhtCb+smX1K2MglYDHyo9JZ7a9NsCKoCugOZ+PoqGBbqlouIi6vLlWIe/XpE0xNOS420O
+QJEYbj6hETy+QNztzz83ffrBlMnDcJYPgWDri0uywGzgYc+dEsJa/2eeHtXhoYcfHrxly+YXwSl5
+YJtYZFQkNWfuN60OPUsoODiYGjv2Fb37mzZ1qkOGvcZSKhV6oF+OjdUDcNx7M/TOzBbuD39r0+8L
+pLs3r36MpdV069ip0+6rV67shDKFMz9yyH4eBH72Cj3MIw9PD7eACRMmDoHno/bs2d0VktwQeoWl
+FXYDvpaEvHg+sbGX9eBjXjuDmPB34sQJegACjChbzbJBAOJvQR6z4XcDvlvw8wSqpuLxxYsXbT11
+8iQudYWNwvm4wRWpcbYTi2TBPaDDjaQxYUiC47Okffr0Cv6//3t26Befz3gc6xACjxE6oqpqrd25
+vab08iL4Tv27Sx/y4rlt+vNPas2aNdTs2bMobLt09DY/Y2EYjwAsLKmwmfszFt5otq35ieLoqqsL
+CgpSpnzwwd5biYmHvl/ww2WqblZIOSQNDjFqZjnm0GUYt0mVfz5juujbb7+h4OZd8fMvvxbibxC3
+6YLOD6ea0YWCGXvFhYKAoOM+0K+PR3BIiFdYWNtATw8PTx8fn7bgEvpAasNAz3ipeVVJucOGuYbg
+M3R9zgo+xgHieeEQHluGv8ZO8IvvllNSqpj3n4/eD5/60Ydtg4ODn4vq1u3fm3FxF27cuJ6Um5d3
+C8pqCXwcUxmU0UozIhQpJLd58+b6xcXdCOvaNbJLgH9A54TEBD94n514KzFjzuxZZ6Qy2SncRRDe
+QxCWuCoIua4EPbjIARMnvD6ga9eundzc3f11Ol2tgM/HAuODMLx48aK7QqFUnDt7Vsz8X33Q07/n
+QIOWTYnp5EBhO9+TT47UOyNn6OVtSK3V/mcoFThPSq6gZn31A/XZJx+z3eVi34ULfx0Nx/QCAik0
+NDTx999/i0tNTbl+Oub0lc6duySdO3+hmHaFWoP6K5o86X1Zv7692zz44MAuHTt26nn27Jnue3bv
+Dj0dEyMJDg65U45rtbXd16xdM6Jjx46pHu7uFxITEy8olcqzUDewB6gAqwnUkVoS9joH8LA32xs7
+KcaNH99z1cqVz0EhGNrQeTfUuO8o0DM37DU1lQ0doLO6PuPwFztzsEe7NUNglLtcRD0QGaK/GeEx
+MdL3tsfGIujyAwMDr7/3/qTY9LS0NLVajW2DOjc3N7mPr2+bfXv3dDh48GB7eM8PbmJ8Bnhj4Dpi
+x5Wh1qxZTa1ds0b/PDU1taZDhw4pjz722KGYU6eOHTt2NOnJp0YWLVjwA7pN3F8YCE1VQ/3REfg5
+DvTwvLwDA/xDJk2ePOrzGdOfhtcRAD5Wc3ouHc3pIdQWffUfqt+Qxxsc5mIIP4QeOj4MfZ0dfIZi
+ZrFYc7mvpgAQH40BbQDC+/4PHTsDu/qAV58YEIK7RBAi7HIeGTYsbfiw4dcSEhNvXrlyOblPn76Z
+c+fOK6RhqIZU6SwwdIqwl3Z4GKoqIMk93JWy//z3k1H5+XkIvo6mQldnhJ6hPLz99PAzR67i9uxZ
+GAafvJxyDwCxfZIps4YgNFRTYGcs/D9MNAT1beGVmsp2O3bsGIKuEKBYqJArUlesWH41JSXlpkQs
+Pv3fTz49C58rI86v9aGHHRUBYaEhvoMGDYroHh0d6efn1+mVsWPC4P12rgi95oS9rbFaM3F+9TvA
+Xp0CKR6Xc48LtLXuDY/1zpAaMnTolt27934Jzu8ycX6trHGvjO370EMPv5WVldlnw4b1gZmZmfrz
+cVXoETmHA8Ty19oQZFwhCpcHwxEAVZWV7vv27XN3lrx2aPht2rTxDUgvNhd2hsAj0HNNMT2/Gjvb
+VNIQgsZtgbZWkL5dMZi6du0a94vPp3Oc5do79NxeuCD6vRE+mz6jWS6P2SScSa4k41kdrqpIOx/W
+w7QF1o0prWiVY2BcYK9evVUxp88WEudnB4q7mbBeJOSPHj7sYV9cvoi4vDrRk+kb/Awzxg9dsyt3
+dBQ7wOINxqEwqjXCYW2tFv2x02y87tDOD8B3ViaTLYWnVdhw3ZDDcyWXxyyl1Ngadq7u+lA4o+WL
+L2aaNQfaXiCIiXGDZRVVNvt9FohyouFxDr+kVW5ewc/wcN1wyXJXBJ4p4RJOOIG/vpDX2WdymCtz
+l/2yRxDGJmTdKetWBSGLVVtUWITzjotJ2NvKogcy+4D7awOPFyB1Q/fXvks06bhoIPRl5vPu2/K7
+fmwfkWPrVnqBPqHaBnhQ7SAxkoj4lFRkmcWj2Wy2NicnJ4+qmw9M4GdD0GEPEzZw4EoVOJhZggOZ
+//vfT0bBc5y94YufQ/e3ZEsMqRHU3UHOl84cqRd8xPU5LwhNwbC5QMQxfikpyazycrXf9/Pnd4H6
+iB2NVXSqpB9xcYRqR5obbFfwo2dq4DHxadjhogPiqMguXj169AwLCQnx9/XzC3JzcwsqLy8P/fzz
+GeGGS0zhjl1EdWI6NHDwLgEfgWFDQGxMi5cup1avWoX1ctSJE8ejfP18k9RlZXmlZWWFebm5udk5
+2QXZWVn5cXFx+GPqd997X/Pdd/Nx/rGGBiN2ktTSjwjJmuYu1+Xw8KOX3xHSgNMnyAxRYEAbUceO
+nTwCAgK8w8LCAv0DAtopFIrA+Pj4MEh+ALo7x2tqbB9mKM5awM1jSNhbF/ZipwfmCbbxEfARmQKi
+Of+DCg4OlpaVlXVdtXJl1zpHWDfzgwYaLoaA7YHFCfHx2cuWLc0sKCjIglSoqaiorKio0JSUlJQl
+JCTkPvHEE4XAABy3g/OFcQhGOdTdGlvnhdV7bmjQSWgXJ4GTFHfo0NGte/fuoSGhof6+Pj6BALg2
+48eP84e/y+mkNAQdo8bG8g0f9oje/eG2gQSAd6evueqiBeYI24knvPlOq67qYu/auXE5dTnmgH48
+reE8YsMpcKbD5TtwpGjXh8ArGjlqVP6oUU9n5ObkJCQkJtw8c/p0wsBBg3KgbJYyQAROWL0b2yrw
+ozsjcJEBn+7dotoMHDSwS7t24e28PL3CXn11XBC8j1NkfE0BzlzQ1et4aDvt6m1/JMw1T8zKzhot
+xy7m9tor/KLC/fTwa4rMhCO2GeY9+uhjqY89/nh80q1b12NiYq5A9Je0es3aXIShtdoRLRr20i7P
+18fbs81LL7/ct2+fvsPi4m5EQQpgwlTjZeCJrCMyiNk8MTM83v/wY5IZFpbh/OAG4KhfnEStVgd8
+9+03/QGG6BCze/fuc+bDDz/Yr5DLLwBXsqi6XuZyS4LQIvCjOyq8+vbp3WXM2LEjIbYfsXjRovDr
+165TLZl3S0RkbRU7yfac1lJBbhaVD4kC54chrEEY22LhOoSMm8S5w9hkBTDEkR3+4AqfXrTw14eH
+Dx+RuGjRwpjz587FeHl7XwPW4J4RhZYIi1sc9sLBKIMC/SPeffe9p2bO/GIcUrw1gUfC3jphBwcu
+0Y6bdev34QWHQ3S/7G1JK3uAXUFe1p3XJw/t0jefMA4O3RoDK8NFVFsq43UJTSypVQZciR06dOjh
+Q/8eihHw+dd3/L0rG+p7uc3hR2+6HDRt6kcjfvnl5zfgeWd7cHkEfndF1uszD37PP/8s9fjIZ6mn
+x77faosHtAbYTImBXWOAa8kiqk2V0YrT+FZup86dD74x8Y0/3nzr7eNQ55s166RZYS+Az3vkyCcH
+vPji6HEAvkehcvGaC7365uQStUx8HocKDfTTL9dURId2xP3VF34FU5PffZMKCAnRz5l1dADWBzkG
+bA1BDSsyY2JsCbiGZLTiNL7lDSB8Yf36de3c3Nx/BB7tbA4Am+T86JkWbefMmf3S7Fn/mwyZpGwq
+9IxhZzgn17AzpHl38buDnHG4iym5whAYBF9bfw+qV6eAO72ZSoWSuL8Gwl7GHSP4zt2o24q0qrrG
+rkHYEOQyk67ahWuzphvERVa9fXzOvfPOu9+DEdsFACyxivMD8PGjIrt2++STT2cA+J4wN5RqDHaW
+7P3FcX6Mzh7YaBKMxlB0Fhgi8NzldTtuuslEevAxrgYL+t87dhDS1SPD1W1wmahhferG+zEgtBcI
+4vAl7MVvLERF92Y8Js/ZZLDKdM9ffv5pcnV1dRUwai8AUG1R54edGkOHDO576tTJmfCyT1PakIyn
+sbTWUBdDMBoCsT6HaO9gNISdMfAYYU/mGggTnHkTcks4P3QQDZVFQzdoS0doDDtmlk6UieYLZ3Bz
+zXeAs2ulUsm/41997Zv33nv/SGMbvJvt/AB87tOmTX0RwPcZgKtNU6FlHMq2Vuhl6ncRiMYOsTEw
+thYQzYGdsXCtumlTPyJj/eqRucNcDN2gKRhaCojmwI7cxO53gLdTU9lwgx/0048/qDIzM/OAWZcB
+gI0uusptBHzyGdM/ewVs5f+gAsmaAy57bmdq6NhMgdEUEOvm0LZsWpQx2EzJHNiZqthkwdL68wdd
+MXNzaIqMYVgfEBtTUdG98EXY4cB0ZjoigZ15ovcY4aampj5y8OA/KRQ1D1edyWx22Iuh7pTJk55Z
+smTxj1A4pKSx/P7QGWGIiweYWghToYACHGVe72pTwWZuxSbhbsPhLtP+jD3ijeWRfqMjC/WW4/VB
+V163F+9H98Cu7njIHOzmhb+zqJCQ0GsTJk6c++yzz/3V2EBobj3gE3766X9fBvDNJOCr3ykyMDR0
+iPphJbGx+grVx0QBtmQlIuBrmQyhM23aR/rrVp+MAdnU68gAD4XQw+uDv42uk8DOYuEv5mv7+IT4
+x2JOnboIHIsDAOrMdn44Ve3FF58ftn3btj/gwrgT8DVNdXfzqfeHOAZQbEklIuCzXD5hDzhTvuu7
+bqauoblu0bhcMMAj7s667g/C36ywsLAfrl2PWwrwK2oK/ELgH/6Gp13M2RGNqHlQrA+GzXGKhmEU
+AZ9516I5Yx8Nr6EhCM11mAR4tgOgp6fXidcnTJjz6quvHahvrUCWEfjEixctmvnBB5OnkSlRresQ
+6wu3GnMVpIKZJ3OGuDTn+pkOmck1saXwukJ9KHd3d181cNCgb7dt3Zps6nP3tPm98/ZbQ37//bcJ
+BHzWF7o5U3lsqlLhxWzIbaCzIG6vaWFvS1dyqe/6EbW+6N5fMYS/T8ZeunQLTN1yU9PfWAauTwgf
+OAhPHyDhrmOFzuRm1XTXh4sZkBuG84e/fn5+FyZOfOPrl14eswP4pqnP+WHDUo+Wzq8lsp1bNByu
+QdQ010f2LHZuGUx/6z537pyXk1NSksDUnTfs/WXTrk+0ZvWqN+GpgDgIx1MRWZDTbGHHELaPkoHf
+rgFASKxbt24N2LZ1i36LW3qLjbvwA3V9442Jz5HscixhTzDj1LH3kgCQuD6ie0W3/7m3aeM/+ocf
+Fozv2aO7P65OhRBk4NcdkpSEvI4ZBuNKzQwAMRQmEDQtXAgT24KIU3Yt94cr3Ny8GRf6yX//8255
+ecWL8DZOp1Kw6LD3/yAW/nPf/n9YAwcOJDnmgGI6Q7Bio9DZWHs2iaPmE94kUGR5f9cR0wHSoWPH
+ndu27cB1wM4x8MOBzRfgqRvp6XU+CDIhMqnodTJewJTINYTwO37i+Lmff/rlbLvw8F1M2Hvb19d3
+H1MwiJwjFMYZDDhnFSu6uQNyiYictckD0+F//xVs3LhBDm8J9PDDvTCTU25/A09zsaIQADoXBCOj
+iOMjcm2thbAXQl8dj8dLFolECLhUxvkhAC/y+fzF8DSLANB5xCxjT0Tk6q4PzZ2np+exDz+auh2e
+32Qbfqi4pOwrDofzPTxNAQBWEwA6vsi4NiJXB9/cObNrwfXhTk8bsrKycKZHDqSye+AHb1SUqSt+
+hKczlUq3YwBALQGg44qMayNyZeghu+bNm6vZuHHDTYlUugTeRrbd2SeAbfxPAMBqeFiVlZ3zNjxe
+ISEwcX1ERI4GPuzZBXaVr1618nSXLl3m5uerfoY/3bO6C7u+LwAIIiFnQMok80cdV8T1Ebki+CDM
+LWGz2UcUCuVXx0+cWg88Uxl/lt3Id+0UicRoFWuI+3PMkJeofpGZHk4Ivjmzajdv2ZylUCg2K5XK
+WRDB/lPfTm6NwY9SFRZhD3AKcX+OF/Li5jhE90s/4DsqSr8cGBn/6BzQQ3P21by5FZs2bowf0H/A
+ouycvC9UKtWp+lZxRjW6by/8c4lQKFyp0Wgmww944XtkCpxjiGxbaVo4BhLHP+I0N8b94XuGmww1
+RSwWS8fhcKrZbFZtrbaWq63VcnS6e1dJR+DisKPmfH9DCq6buO+SwKOHr1Dr/lhbvWrVyiK4Dud6
+9uy1ZvuOv/eZCnPvu27m/FCFpkoiFgmm6nS61+Fl4L79/xAA2rlauky7q+QRRjToAufP/772xvXr
+5ZMmvY9OAcMk3IG8ElI1/XEBJCkkHv26ms/nl0FoVQbGQF1TU1NYW1urAQhKuVyuHB758JpXVFQk
+hM9KukdHi1577XX2+++9y6a/H7+3HFKt0WHp6MShf5NPR2hs+r17NH78q+zxr75GcbkAXxa7tu4L
+dCxtjZZbXVMDx4Ag1rGMYeyo8GSgt3bNat2aNavVYrE4F/L6llqtPgkmbVuBqgg3LK8166Zl7o/i
+rm7wpW/A0w8h+QMAxcQF2qdM7U5GdL+YRQ4w/BWJRCX+/gGnEhMTbsCfcMVf3IE8H7OTricY9bSF
+JKfhVNqxY8fECxdjE+B5LqQySDgxXoSwgyTcsWO7/IXnn/OF52GQ2oAzEWACKCL0SrAu04C9Uw8l
+EgnL29ubl5aWpgOgesBbmPjwf3w2my0yrr9Q8UUAt1r4rAoemYn5XAQwwNkbHmUcLldQqdEIy8vL
+DeGph/mrr70uHjNmrECrreEygLRHIBpDD0CXAflxduCgQXu2bt1+HD6S2VCI2yL4Gai3XC4fUFJS
+Mgye95k+fYYS38RlY4jsy9GQifvmVSp0yLt27yp57rnnd/zww4/zoBJdt8Zv0QtpsoydCb2YiPiH
+5Tu6/PTb3wMjO4Yotq34bDF8LsPofzlGDpFFO1H8virDVYrh8/i+mIac4ONpU8U///wT36DeyyD5
+AvR9PTw8/cA5+RUWqnCpp8CHHnrYu3//AXJwjXqX+yCUo9YwOViOjx09on9+7Nix6iNHDmcolW4X
+RSLhybC2bY//88+h69gs19zv5zbjf87k5ObHwo+e8vD0HDx79izsCemBTUwEgPYjvHOPGTuWZIQZ
++USXW/mG9eseVRUUFAA4EIA5lv4tGk46I/AJvvx+ffjarYcfdlNIh6mKSjueu5x4wvhz9P+acjY1
+9fxWNe1aG5SqsBgZIBk3bqzbpo0b/RB+Fy6cD0pPTw8CGPrk5uYGDh9+xu/cubPy6upqobamRgAO
+857w29JwZKB39NhR7dEjRwrhrQSpVHbVw8PjfIcOHc78c/DfBJyhAalFv8NqyT/jVpdwAD3Apg+C
+TBrw9dffRJWWlvoSJ1i/y8AJ1ve18bDgMuh0+msB4U0ti82uAUuvxfcgROLA61p8H/+Or2u1Wr45
+IUJTXJ/hsQW54HxgxgH++defCf0f6P/JwYP/bLbm70Hd4U7+fGnAjgNnBkslohFpmXlID3c2ixUj
+l4tnppxacdTctisrHBu2Uypee3W8x/r16wIgdPaXSqWeEPG5QXLPz8/3zM7OVtLuUfrII8OUAwYM
+UFbX1IiYcmyshgBp6PD0Lu/4scojhw+nKRQKXG/gbF5eXuyABx+MP3DgYLbxJkStBj+DzJLAQXWF
+TOoOZI6+evVq+6++/iaiXF3uzlhnZwdiPWCjaKBp4SKqMzIzShYvWoR3sjyZTFYYEdFeXV5eXsGG
+Es+DD1RXVUP5waSthLtsJQCQzeNxBfC6WqvV1iAjuVwets8oU1JSFHTbksDgp/CO7I9tTOaEvMwx
+c3m8CnA8qT/99CPGX13gf9muGC7TzQXo+HBs6zxrQQ/b/7btjek/dfZvQ/JVJYPoNkE2n8dN6NAu
+YM7RzV+tb2r7lZVhiJ0teMPVd968+cZEt9WrV7lRdR1AMrFYDKbMM8DNTemdl5cvz8rKxHZRdzrh
+Z4RDhgzhAQD5cOPmGnMH8l139OgRbDPFvE+B74vj8XgXO3ToePbwkaO3IC/KrXFeXEt8CRycGh5i
+SsvKz+CFhdcRn8+Y3jEoKDg8MTHBB97D5CVXKNyqKislVVVVUr3/r63l2jsYmT1zaYrV0sMaqhBm
+6MYAUiI4J1laWlrVqlUrsYGcaXTGHj3sbk+Hzxa7ubklwR0zi34vPzw8vPD4iZN4wTUGbTc1dNLS
+iWnnqaXu9gpy/vrzT8nYsS/L6YLFwE8HhUYAv/VgUVHRx6mpKXzm2Bn4CoTCUj6PX8Hhcqp5XF4l
+fEb9ww8Lcnx9/RI5HHbSsGHD+968ebOLK4bLTGM65JGqV69eN44fO2ZpgOB19Nn09/G+C1fvflgu
+FQ0E8IXTUKEkYmH2gF6dNmxc9PFOewIfXb9r6XKKCVfJzTD8e4GqiMuA8IMpk6WLFy+6Az+RSOQm
+kUjl8QkJIqgjUpFILM3Pz+NnZWVheWf7+vrWeHp6lfv5+WWCw7tVU1OT3DUyMvnw4aN58LtVLQ1t
+re78GrjY7nDw7jT8vCEp4US94Q7hg1VSKBSKr1y5rG9khZDZHWyQu2FIZ0sgGkIODFcNVIISiVii
+mjJlEvb65XbvHl1eUVFeAWGntrKyUl1QUJCDbown9uik1krGKuWSsr5d22zctWvnRSP4pfkHBJQl
+JiZhj6DasFHaGnk+5uWXOp0/f24KOEN0E1oAYlFQUFCOSlWYVVCQnwvHrKYBi72M6tDQ0JzrN27m
+fPH5jLZw9/2ezxf0cTXXR4e8uq1bt2SD612xecvWH+E65VvQNbn/sfVw34Wrdj8kl4kHnTof18nI
+sZdC+dmeErNiBvxuijPlLe10+fTNHR8FM7/4nPf111/ha86kSZOrv/7mWw3dPqm2ZajPaoXMENN3
+CZQAThbDtEAImT3BKbZLSrqFr7Hh1QeAqKgBGGpravgQCwoNnWK9JwTgwkcel6tvG2BzONVccGq6
+es6VA58XSyRF7737DmZ+ft++fUvBoeVBygAHhU4N4ZcDx11B3/l0tLtDiNT2fuKjrvFJGd8qZOLu
+T4/ot+WHLyeugPcvwnlVtlJhE/z880+BH0+bijcVbXhERNHly1fzsIJBKjcF306dOvsBGKcIRaIP
+P/tsOtdZ2/vqa3PNyMxUb1i//mq/fv327Nq9Zw3kUbKlnN6fO4/3+Hrh5n5uCunQs7EJXam6HlhD
+VYPrPuvr5TY96eSyf61QHvh09FBV3zQvVxXLXg6EuUPCBcLxVNhp4gtAVEpAUqlULhZLlCKxSHI5
+NhYLjxcdsuPxV/Ts2SsXh9ZXVlZVQ0iNkKLU6jJsW6PApVWUgSD0Y5loi2NVgGgrj/DDnr4S+nWp
+OY2rgrBnsNH3KUgz3ZVSz349Oh5NSM7868zO+Qfg/7Md4M4sGDXyqaH79u39GVxPW2u7vrqpSEea
+3aFiDDBzOmeY/6GbJvBGUEI7Xy1EH9kQcsVCOTl+KynlQkt7eWmn4/3H1iPRC1ftekgmFfePuRDX
+nqobH3ifJGJBev+enb7ftPg/Cxu6YdLDYVgGTSFC2k1xDdp+EXTYEaGYOX+d5IcVO8QyiUiB7cYv
+Pz0od9a0MXHwtxvwO4UEfRZq87Ngu0I+nW7oY4GycjZ9gQX0xRbC5xB+ntTdkfaaY8dP5NBtYtXU
+3RH5DLiqaafGqud3a4xeN+m4K5O2lIb0m3BArda0VRWVfbDr4NkR8B3txkya3xUK7N/wkTOt5QLN
+0fBhj3hlZGQ8FhwcHGaNtj4GPODAqxRyeVZubm7Wjh3bq6sqqzxwXBlAR97YdyDgsAMHv+d22u2a
+1atWoRvHsXhewcEh0QgDUwDE3/5j7Zra7OzsgrVr11zx9w+4zOPx4qqrq4vo8qH18PDIhbA/EadD
+taR9iYZewN8HzvT/6te/eotFgj7X4m+bcnr3SC6TFAP4sLzL4DuwE0FE/4+Sfi46eDxWqOz0opTN
+1g90Zgt4XD6Ez258HlfE5/NECDihgCcAyPEUcolSKhEqr8alIhBFpeoK/C7O4VNXise8P/8mm8Ne
+C7+zoyXj44jzI7rHtU76fGknCGu+vJGQ9gy+5+EmLxnQu9Op5NvZm49u/gr78W/ZW9iBru/pUSOH
+7t275yeASztLuj499AA8WZmZxRs2rL8eGhp66ebNmxcAPNhYXg0Q8gK1F4vF7QCIoo6dOlUW5BdQ
+iYkJeGMLoCu+3sWHhYV5DR4yRPjbihUFEA1clMvl+1UqFe42GArpHTj2QcyxMx0XXB5Pgz3Yixcv
+wvFh54AZpxJvJSNkCizZrkSHlUE7Dpzu8+PyvwfKZaIH/z15JZS+WTcqAFd+VKfQg5k5qkwejyOQ
+iIRScINihUyiEAh4IgHALa+gWHjg2CUp7exMOT9zTYyuS/vg5ce3fv0/yIN04vxcC1JMeIDtXhpc
+udpSrhW+O2nix7+sA/j1xMpQUFgi374vZqhMKgp/bOzMflC498BnTsBnM+0F2GNefikk7mbcS+Ce
+Qlvq+hiHx2KztQKBoCQ7K6tg2bKlN318fM54eHqeOnvuwjX4WDYDnpJSNbp6yfbt27wXLPheePjw
+0arNm//SwTF50fAT0vBjZWVl+e7auVMJ35vO4/FjMzKzr9NNEvoIITMz02/O7FkR+Dw9PV2zYcOG
+a4GBgf8mJMSf9/Lyvp6UnJpkiUGxJvKQ9ejYmb7gwCawWKynzl9JDKPu7choVODMPI+fvf48VdcJ
+ZXL+rgWVVVJWHk+3/5I2PxeBHoYNT3h5KDqIhQJZrU5Xqy7XFKuKSvOLrm/AjgvsiUVHoqbb/kqb
+0yvbbfjkNvCdH+XkFb1H36XvRMcQBsWHBvkcysop3Jd0cllMa7e7+Pj4eqnVZRMADtM++fRTt+a0
+wdHuTocT/IsKC2+By0oE6GQXFBRk5ufn3/bx9U1ISbl9E861uAXXjrlJC+gb1j3u2dvb26u8vHxC
+WVnZZMxngNBROIbNN+MT8UaTZ+Vyxer31NQ2OfnFr8J1fwKLQFPhZ0OV8LicjXAzXpB1YfUNgj7X
+gd8ggN8v8DTQ0Pkh7F578RF1cYk6D5xZOtyFy1WFpRlZuYUZhdfWF9NQxPahAqpu4jo6kYr6wIjz
+KcEJ9Dx1Pu4reGlqOHs5hDGxvbtH7Pj79xk74fVNehqSrfNDOmXK5CeWLF70JYSMEU0Ndw3a0lSr
+V6+6BAA6mZaWdjEiIiIh9vLVfPrmUW6jc2EPHTo4OP7mzVG4qgpA8Bi4yhu2amLAXt3Jny/12rL3
+VC8Bj/dYfqF+0HJEExwcs4IM1kWJlQ6z1k0hPdw5ImjOzlWfHyG9vq4Fv4kAv6VmfhzdX8lrLzxc
+XARQLC4tL8xXlahKSssLAI4qVVGZSnV1HTYW4xi+LBqM+D84RqmK7v3FMGYBVTf9576CqJCJc7t3
+aXswMSVz29WDv+JKs0U2zAtq/PhX2iUlJc09e+bMc4ZbWzbWc4rQW7/ujyqVSpW6ZMnii56eXher
+qqpOpKVnXG6Ju7MEAOmbWm0rDjHiTvlimf/2/acHSsXCx9Ky8vHm16axNjgImVP8/Tw21NRodVwO
+p01yWg4CEDs7sCOImUXBpx+FzTy85CB/r+8vH/h5NenocD349QT47abqhsg0V5WM83t99LCy0rLy
+gtz84iwAYz4AsqCwuDSnc0Rw4b4/vqxcsGx7uy8XrMclghUNfR8U/GsP9Oy4aduKz/bD62sIT1vA
+Lyqqqz+HzX6lpqamW0JCArphXDZJENa2LW/ChIn8mupqIc7TZLNYWpFIVCgSi4slYklxcUlx3vJl
+y24lJiac8fDwuJSccjsVjpm0H92bv4KZ368L/+m3ncPAiT5O0Yt+1OfI3JXSc0knl+NScam7D51T
+vPTed1IafnjjdGezWVLsBPFwl/uyWJR38u0cOQ1GhL03/d1MWzbXRJ1WcbmctTKJ6Ofsi6sTyRVy
+PfjxAX7L4Kk1Ru8yIXSZr5eb+rGhPTTp2QWi/UcuBpgR+miVCklur8jwk+AUdsfs+O4QvJdu7elN
+9LAM5e+//+b1zttvIfywh1WAU4lxXKVcLldKpFJ3bU1NVU5OTiqEkvqxce3ahedduXrtNjYHtNak
+ewcpb1T4g2/KIFroAXk6vEJTiRDsZKo8iEWC9D7d23+3dfmnC001gdBLWWGvrmzHgdPyVyYvkNNg
+RBfoDf/voZRLPEUigUIiEshyC4q9snMLfWko1vB43CPeHorfrh369SIJd10Qfij3zqP7qSsq11J1
+k8jtTdUSsTA1Isz/39z8osNQUPdbanpVEystU9GwYono9qji1miXdBIIskeM+cIzITnzIbi+o25n
+5D1I1c1euufaA5xi4o8t+RDy+VwzfoNHXyt0fqI3Pv7Fa9PO4wz8qj3cZFdvnVgWT8DnwvDDhumH
+R8+Yei42YQ5l3eEELYKgj6cy5ubRxdOgsJ4mxdN5QuFZP26MWLB02yO1Ot0IeKs77bb1AuemGj44
+euWSr979AofkkByzjVxmnB/e+aAQroHw9zHKdE+suWIWBTDc3wHfq6Jf450Y2xalTQyd0WHFdggP
+wD1CyfQj5yp7lVD2rixfvz+5vFxzhsVmD6mqqsZQGGen8IpK1MoTZ288As8PQtpNcozAzxqFMLNt
+/4nz07MKPOk7L7ZbMctKobDXVW3kiLGTo6pb57ByKMAarVaLBblUXaEpqaio0g/nqKquqdTpdAjD
+muAAbw8IY0adjU0YasYhYShSgMNf/LzdTlbXaI9sXzEdp23lkaLpdGUPH8pwoPvA//vv9dT03EsC
+AW9kbn7xAHi/vaayKuyTr1aPh7/jTKCbJMdI2GuNEEQE7u9JKGC+NTXaGgBOCQ04Bn7lJuBXWXR9
+Qznt9rQmnJ8WCze28Xw85/cusdeTvz19MX5YI9DL53E5l9yVsn/gOYa618iEc5cqh7z/zF0ZsGTt
+XtwG4iVIfWRSUdmQfl2Xrv7xw3n0GplExPlZ9A6MMNtUVNfjWWtur6WZU6PclArpIwC+Xg1AL5fL
+5ZxWyiVHq6trzgD0LmFBFwl/I6XRtcoh3jiTBWHPrJdKhElcLvfpouKyh3f/e/6Z6EenXAc4/mWL
+oU8Efq5Z+Cw6nASn0C35Y2/vE2ev43AaN6M/o0tMBqd32U0pi6msrDqaeHwpzk+tEAnXklLowqpM
+2lIGN+LDr330Y8KWPacuQzTyfElp+Tj401VIl0kOEfjZewjDGv3ut0HxyZnjbqVkdTFyelkQQx9m
+c9i75DLx1fiji5PrnB6BHtGdGzGWk9vgAtdBGcEhT9GkbhL4OYrcIzuGPLXn3/M4jAGnWmEoXUCH
+t/tURaX/FlxZh05PJxKuIrlFVK8LvK2pwh5fHOZEQl4CP7t3fYqte049fvJc3GtU3bSjIh6Pe97L
+XX6gVF1xGMLby3XhLZ9kFpE5LhCbY4pITlhfZDHTloFP8tvGfx5at/XwjHOXEzvy+dzzPp7KQ6Vl
+FYdTYlZcIPNeiYgI/JxSU2f/3vvfE5c/SU7LCW0X4nckLTN/R9LJZedac4UTIiIiEvZaXbpana5M
+XRHrppCuPvLXPIReGmnTIyIicoWwV0xvOkNEREREREREZP9ikywgIiJyRf2/AAMAntHXk6RY1nwA
+AAAASUVORK5CYII=" transform="matrix(0.4792 0 0 0.478 51 128.249)">
+			</image>
+		</g>
+	</g>
+</g>
+<text transform="matrix(1 0 0 1 101.4902 254)"><tspan x="0" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">3</tspan><tspan x="4.997" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">–</tspan><tspan x="9.652" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">5 </tspan><tspan x="16.539" y="0" styl [...]
+<text transform="matrix(1 0 0 1 111.627 265.001)"><tspan x="0" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">3 </tspan><tspan x="6.887" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">t</tspan><tspan x="10.022" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">i</tspan><tspan x="12.245" y="0"  [...]
+<text transform="matrix(1 0 0 1 108.8154 276)" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">(</text>
+<a xlink:href="../02b-STG-Stretches.html#p_28-04" target="_top"><text transform="matrix(1 0 0 1 111.3179 276)"><tspan x="0" y="0" style="fill:#10137F; font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">p</tspan><tspan x="5.075" y="0" style="fill:#10137F; font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">a</tspan><tspan x="9.345" y="0" style="fill:#10137F; font-family:'MyriadPro-Regular' [...]
+<text transform="matrix(1 0 0 1 140.6914 276)" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">)</text>
+<polygon style="fill:none;stroke:#FFFFFF;stroke-width:0.5;" points="125.738,221.005 129.74,221.005 129.74,206.055 126.359,206.055 122.081,207.941 122.748,211.023 
+	125.692,209.712 125.738,209.712 "/>
+<polygon style="fill:#1B4787;" points="125.737,209.714 125.691,209.714 122.748,211.025 122.081,207.944 126.358,206.058 129.738,206.058 
+	129.738,221.005 125.737,221.005 "/>
+<g>
+	<defs>
+		
+			<rect id="SVGID_5_" x="199" y="252" transform="matrix(-0.9998 -0.0174 0.0174 -0.9998 588.9976 584.6672)" width="196.099" height="75.528"/>
+	</defs>
+	<clipPath id="SVGID_6_">
+		<use xlink:href="#SVGID_5_"  style="overflow:visible;"/>
+	</clipPath>
+	<g style="clip-path:url(#SVGID_6_);">
+		<defs>
+			
+				<rect id="SVGID_7_" x="198.999" y="251.999" transform="matrix(-0.9998 -0.0175 0.0175 -0.9998 588.9933 584.7904)" width="196.099" height="75.652"/>
+		</defs>
+		<clipPath id="SVGID_8_">
+			<use xlink:href="#SVGID_7_"  style="overflow:visible;"/>
+		</clipPath>
+		<g transform="matrix(1 0 1.862645e-09 1 1.525879e-05 1.525879e-05)" style="clip-path:url(#SVGID_8_);">
+			
+				<image style="overflow:visible;" width="409" height="158" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZkAAACeCAYAAADg13fCAAAACXBIWXMAAAsSAAALEgHS3X78AAAA
+GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAHoZJREFUeNrsXQe4FdW1nsO9dPCi
+IF4LigoxBkHRWJ4oap5RYyVYEhUL9haJRl805slTn+WZYoyaxBpiiUZjiQ9MFFESQEAUgp8xEgER
+KSooXKRegZt/MevgMMycM3Omz/z/961v73Om7dll/Xvt2XvtkkEQBJERrFrdXIegvvy7fbs2a5gr
+6UaJWUAQREoIpDuC0yENkK4gkN3w3yrEF0Fa43cPhF0kDmlR/fU5ZDnOW4hwLWQBZC5kIuQ9khBB
+EATJpQFyKaJzlDzCECGnt3DfhyBbMpdpyRAEUTxy6Yjg+7A2zkLY2+G473viXk5/z8S9zsaxCcx1
+kgxBEMUgmEFQ+jchukdQYvFIOG/g3gfgv3XMfZIMQRD5JpiLoOzvRLRNFOTiRjZ4xiWI/5olQJIh
+CCKf5NIewW1Q9JfHQS4OFs0SPG9f/J7F0iDJEASRL4JpC+X+MKKnxEkwDtbMcwgG43cLSyUetGIW
+EAQRMcHIupY7kyIY6/NALoMQnMFSoSVDEER+8CDknKQIxsGimYs09EV8GYuGlgxBENm1YNpDfpUW
+grFgR8jNSAs72bRkCILIKMHICv0nER2UMoKxfp+5DPF7WFokGYIgMmbBQHk/guiJaSMYG9EsQ7oO
+RXwaS40kQxBENgimE5T2Y4ge74VcXFbou907dGsGeAf3PQS/F7P0SDIEQaQfYsEMqUQKTsRSiUD8
+nu+XaHCvxxE/jUVHkiEIIt1WzBVQ1j93IwErWQQhibDuYyOas3QdD0GSIQgihQRzOJT0KENdxViV
+v90SCdMKCZFoZqk3gCUsTZIMQRDpIpgdoJwnI7pdJYKJ4uN/GPe3WDOPIhCLZj1LlSRDEER68Azk
+224EE/XMspCJ5puIv8wiJckQBJEOK+YGKOXrkyIYF6IIQlSjIUewZEkyBEEkTzADoZzHih5JmmDC
+JBpcewziL7CESTIEQSRHMB2hiMcjupdVqUf9DSYmopmAa7+BeDNLOjjou4wgiFpwpp1gbCSUJAFu
+Rng+MQByKouYlgxBEMko8e5Q4G8g2sNJqafJR1kAa2YM5HCWNi0ZgiDiV963p51gbIRRCw7Bu+zP
+0ibJEAQRrxXzTQRnORFMCtMa5HLZaO1MlnhwcLiMIAivSluGyV5DdNeyEk/Dh34vlozftOl1i3Bd
+H8QXsfRpyRAEEb3CHp4lggkhXVuXrTaClgxBENEqa5nS+xKidVkhmJCsmfG6FQBdzZBkCIKIiGDa
+6pqYr4dsKaSaaPSaJlyzE+JNrAm1gcNlBEFUw01ZJhhrWmuYpNAZsjerAEmGIIholPNgKOarskww
+AYlJdOSRrAm1g8NlBEG4Kdn26sK/b15Ixu+wmZ4/TdbMIP4FawUtGYIgwsOFeSKYAGnvb3D1P0mG
+IIhQlXE/9NxvyBPBOFk0PkjpBNaK2sDhMoIg7Iq1AUr4b4j2yyPBlEnG55DZHJy/O+KrWUNoyRAE
+EUwBD88zwfi1ZhQ7GuawGUGSIQgigBUzEMFleScYP1OaLbPMuGNmDeBwGUEQZWXaDkp3nGFZE5P3
+qcpeZ5vpeVNw3oGIr2VtoSVDEIR//MBwWHRJbIQsytyT2UCSIQjCvxVzGHro19r+K8J7b2LRVDmv
+DnIia4s/cLiMIEgw20HJTkC0Z5EIxgovw2Z6ziyc0xfxVaw5tGQIgvCmYG+zEkxBidbrqbLVwT6s
+NSQZgiC8KVfZ6fK0GhVubi2aKkR0AGsOSYYgiOoEI8NkDxjmt4bCE4yPxZnfYO0hyRAEUV1Z3mKY
+iwwLTzBerRnFfyCvtmZOkWQIgnDvtR+N4EwSTE3WTBchGuYWSYYgCGdF2lpdx3B2qU9rxkJCA5hL
+JBmCIJwh7lH2oxVT2ZqpNGyGYwNwHvUnSYYgCAcFOZS5EBgyjbkXs4EkQxDEpr30nobF0SOtGP/W
+jB5rZ3AqM0mGIIjNcDqkM7MhFIuQH/9JMgRBWHrg7aEYz6YVE9yaUezO7zIkGYIgvsT5hn5HIMGE
+gj6QTswGkgxBsFe+urkTeuTDmBOhWjNdDe6WSZIhCGIDToXsQismVPKRdUZ0lkmSIYjCK8QO6Ilf
+wZwI35rBfyQZkgxBFB6y4+XutGIiwcHI0y2YDSQZgihqL7wLettXMifCsWYc0MPgkBlJhiAKDNku
+uAutmEiJZxBzwx10kEcQ+VWCO8GKmYzoNiSY4HDaoln/m4P/+iC+krlES4YgikIw9VB6dwnBMDci
+R0/IYcwGkgxBFAkXQY6z97yJ0Mm8HOWQmQs4XEYQ+VN8jbBipiPanQQTHpyGyyz/f6ZDZh8xp2jJ
+EETelaFsSNY9r0o+aavFng79fyvIMax9JBmCyLsVI3vFXODU4ybBRJ7G8+RbGGshSYYg8kowp0HR
+/UbaNQkmEcj+Ml9nTSTJEEQeCeYEKOMRiLZhbiSS/+Xo8cyNTcEP/wSRfQV3AAjmZUQ72hRe7iyZ
+NLybpMcpHZrOT3FsD04AoCVDEHkhmG2g0B7KK8FkgfhsEPf/5zCHaMkQRB4IpjOU3R8Q/VaeCcZt
+6nAa06PH5uFYP8SXsJZmzJKRjZdYZASxoS3sBiU2uigEk7K8r5a2HQwuzswWyaBQ6yA/RKFOQXgX
+hBYYUWSCOR5tYSyi++eZYDJaNmUCOpt6ykQpA4W2pc6aOd7y3x10X04UVIkNQ92/VfRY3gkmbR/8
+3dLn4gFgPf4fiPgEWjLpblC9UEijhGCkIC29hCsQv5QqhygQuYi7/vtQ939RBIJxsg4yll7RrWew
+5qbYktF5/7KwrNGlp7AO/7+I8BXIa5DFkOUQ2aWuHWQFpAmyDNKil8oMnAbD3F9DZC1kJqcbxl62
+DVoWJS0HKdCvQL4K2Q7S1lJmcs46yHzIGsjbkDdQZvMLlF91eN+/IHp4kcglbR/8a7BmZDrz/ojP
+Ismkq0Ftj2C4jGkibF1hBocdTUoyDaqkVijBlElGpJOSkCi2svsHmQlyPcIRuG8LKaBi2Yh/JvGJ
+taVh7ggoRNGoxNCA/OuuPbh6nLscvzvrpa2VSFZouLWWhWEhmTofSVmI+49H+CfIq3jOghznubTR
+u/COlxaJYLJOMuVj+P92hD8kyaSjMYniORcFcjnCbatVrrBnneBZ5+CevyWRNLdT4hAy3hXST6wM
+5I0QyU42gkgDFiDNUm53580ixXu1xjs9WB52KeIHfreFj1khGeAdHNsb8TUkmWQb00kohJ+qEgul
+Url4Sq103oc457AimLZ4z53Lea3WiFggvfHu/Q1z+mWZZNp4vF9ijdsCsUh/ifCxvFg2OqPytqIS
+TNatGf2/Bf8fXOQJAKWEG5EMbYk5majXWIvCmqREszpnpCLDh70gPXUYUnbx65pWAglINmLZ3IPw
+JYiUowyhzsN5azNYdDdC/pskY2TdmhkBGUqSCUeZyXcO8UR6EGQPyD9lGEMb+lGQVjK2jPPelSEX
+xA9R5Zd4JbJUFPFk+3iGCaUbgr00/+VD+hZ4nz5iqRg6KymrhOKTbAwryeDdxiF8HOdNzFBZnor0
+/r7IJFMu24yTzFL1APAhSab2xiA5KbPBrkK4n+3wLZDdcM6xOC4kVJdG5WZRUq8hPYfi9xcZUUQl
+JZQTkWbZNElIpmdeyaRGsrHiFbz/owjH4tz3U/4690POI8lkw5qpNCSPY3ci/D5JpjYlJ1uO/grR
+gQ6H50JmQw7NgrKzVOZv6ZTRNJOLfJCXdJ5omB/n2xaJTEIgnk/F0lYL51XIDJw3NyVlK7PybkJ6
+LjFcZliSaDJnzTRr53Vi0cquFLAxnIJMu0d7z5tksmasjIPXZ0XpWZTR05CTUkgsvdViFO8H4lKk
+DUklNEvnE8j7OpQrH2kn4ty3YyrXDoa5BkZm8O2O5x4p1j/LNTtEUy1tevxNHD8Q8UIVaClAwzhb
+XYyXPGRuJhqKRQG1qDXzYgqIRdakiK+qUxAOMMx1QLRYoied1aoU/ojwFZz3VsBylLVCXzPMNUbr
+IfMtMxkfgQzJgrVPkglEMoVcKlGqobFIbt2u61lKXgo8o0TzLtK7L34vT4hc9kYgH36/bZjrVQwq
+ocSIRzJ5GvJ6KsLPIbvgHLHeW6ulvhjHFhrmRBcZfpOht2VaPtIpOB2/z0XYV68RLMExWQPzonpT
+ZrkWg2hm4/g+iC8lyTgrtG76/eVkvwWdRaIRj89KpnGQSmcdIjkEzxT37QcbLsNhWcrLHFs6lfAv
+SHmtjniw6O1ynrjLEXLageXpvzxS/E232vGh6vSXJGNTcI3qrHLvWgo4o9aMpPdW/P5RyIQivV+Z
+ui2r58W3kQyD7W5YxuErNSSSTLJ1w4erI8dydDuX5emf9DNKNDPUp1lTEcqs3se5fWslmKxB3q9c
+WRBei9/z1IKr9X4ybVvWqsgq+6OUVGQIrJNXxUSCSU/dCEoQ1vpFgikkpDMpHddC+DTzQzJdYh5y
+SBPR3C0zgNT1jZ97iHVyDK77jmFOM27j5/lEsYmLyG4H1c3itRy/CnHxAH9/3vOk5DHjZC/xvyLa
+v5YGkeXet23oTGYa3QF5vZqbEtnvBufcjmiHMIdNaMnkA2nfkCvFeSYzP5/QCTHtsrhuxnJ8LY4P
+0s8QxSUZZIK4JXkY0RNqbRBpdwvh0wqT7QCmQz7GO5W9/n6ioXxjWYhrZFjxyLB7tSQYEg3zy5iv
+C8Afk1GCjJOMoEldWb1QSJLBy4uvMVmYOCgIweShEUU95Je3qeAEiSaivJIFsn2RV9vi90gjxd+J
+fRDNKhlax+8P8lhu1bZf/p8gBJMnWLd/ToJgqIjyW6/i6sjkBNvq8L1sXCejBQ+mNe/sSw4qINez
+zOorZNDJyJxCuxkPouTdZg/VMquIyqcYdar8wZhtriJkn6NdINORV7Ll+nn6/7kZtmBvzasV42rJ
+6Eyq4azswS0fqwUUlGBYFuzAEBs8JvSx5dvoLFkz9nTi93E4r2OhSAY4VgqSlT6cHou1h2olIFow
+hBel5IQuX/vuBikoBth+d8iapWqDOEe9Kq+FVe+i3I6OQtla157kicC8kEGQ9yXZF49onNZaOJGK
+/Lf0nSeK1nE7WHwoWrwZt8piGVt1B8KLdc+Z3Pk0q3d4+Y540YOiUGxOJmOeZp2F+S4cmycqkUvB
+IUsHWiy/S2lvK05eHmz/bwMZBrkhb4Xl1AMQ9zE7h83Y5bh9qCgvQ0IkGCJstN1lMAnG2GSYSRZA
+/0TXlVh3rl2ZBV1SrT0j/T+WrQCKQDKHhW1+On2D4NRNgnC3XIRgiE2wDDpDNhL8L51VZsU0w9yO
+Iesd1HrZBBK/h0Ha5aXgSraXLeElxyI6MK5edK3ea4PM2Ao7/bRiiLDIpVbk9buMtodP0B4GIz6h
+wqnPQU7I2FYilXSh7F90Hf77c94sGRkX7BdnQXkwIR1nZVSYqRF7ZQk6DEBLjuCwmGv7Wg4dMaQK
+wWzY+wnB+iy1pSod5P44/hz++5ns45UnkjnUCOBtOQjReCW2tPVUwkoPyaa45EKCcW0LTboofLSH
+a8YguCYL71dJZ9h0ocyguxIyUb5D6ZYhmYPdd9kDkHOzNlRTaYZXJcUd9D2DDpVZzWYuuqT1EhR5
+GDKztIMp6sl8is9biD+zY9LehrwMizvortdw/r0Ix+DY/MyRDBLfFQmfjnD7rBJMnCQTxreYLHun
+JtJDLjkjmM/kwzfCZ/F7RQ1WQndc9xKie6a5bfnpVDroMPHbNgLh/Tj2fpZI5gQdA8wNwQTpRZBk
+iLQTTJ4+9lva5PmIPxDkXrjHrrjHOMN0pplpa6YK2XyKa8VLvkx6eDethGMdLhMz7IKsKL0gs8qC
+kkxY5ECSIcEUmVgc2vKfdBbZ+qD31Ps8JduV5MGaqUI2ZcKRjSV/oQSbLpJB4johYTMQbpc1gkli
+j5uwrJig1hRRDHLJu9sYbQtL0Bb2RPzDEG8tWxuflydrxgPhrIOMw/1eQzgZIt6dF+C8RUmTzCFI
+xKuyTiZjpnUiJBHmB3+CBFNUcrEpyf8zQp4dhvbVBfd/EdH90r6DZhj6wMXCEc8IC0Rw/0kIX4XM
+keoFacI1y2x51hVBA6QzZDlEvou11f8kgXNxzcpaSOZq2Y8+a0NlSVkxQZ9NgiHBVMKa2c8Upo5Y
+9rrfB/G3wr4/7tsb9x2PaPe05aebL7Mo7mtDs5KMyGLjS28JQiaNhrmMpZMLyXyINMqMv4chE/Cs
+1Z5IBrgPcn7eSSYMJV+rFUPrhQTj1XIpUl3Rd52t2w9H9cKysdn9aclPP15O4nheALyNtP4R4S/x
+jCVuJ5W9MHfNagWtZWZGiOOfJBgiMMEUzVW/A96MkGAEMlvtADwjkTWAXpdRWNz+h6ov3O4TAvns
+gXvsgfAo8SvntnanTDKts9wT8rmgKRNWF5EewvBDAn4IptJ9i1Rf8K7vRd1O8Yxr8IxjII1x5G0Y
+6/Oinn0aYmdbCHwS7nczwt+4kcyHGauUjswfleIPsnCK5FIci8Tr+bRcNmsrc2J4lnx7EGeTQ+Mi
+E786wG2r5jS70rKkdQfE78CxkQjnOZHMP9P6Qn4LxUNm+CpAJ8ecUfcUiHySEcnFETLldlpM+uJ5
+tN9QSCZKd1VunegMTFyQ7QmuhVy6Gcko+1xnmDMLsmhu+z7HSwHWasKTXIpnxZBgaoZYGO/F9CyZ
+zjwT7bpXGEsQom7rdp+GaTECKulFHLsQaXzHMF3eNG8kGfyYgwMXI3y2KKvQnXoLfvaucSMtEgzJ
+iOTiCy+j7TTFpBxXIZDpt73CUK5xtPVKnwbSNolBUYdz7jZMR8sbdvlsZblY/N/8rmg1vJoFU237
+aFowxSUSEkwo7W9szI/8PAzrJe627qankprYZNWFdlH0h5wpUm+78AdI9EDIzkVVmH57CrRgimed
+VDuH5OK5nclCvr/G/Oi6qHVCHERjH0aLK30+79+8iSWjif0UwaMFr/i+CYYgCZFgaoJ88J8V8zOb
+/eiDtLZxN2sqZWkW32mTWzkk/hEJiqpAvZrCdBFTTGKJi2AK0v5eCsPjsk8s8pL3Wcl/tyF869bu
+cb6L5Vny6UU2kBtZ73DeQsN0qta+iAQTxzUELZgiwzLE/GYCyny9H2KvtkwijfrLbblGFPrKJV9k
+B8/v4ZjwiOFEMl8o228RZY+sluGotPkeIsEQUZCLfepqTiE6ZnwCz23th1yy3lmuts6vhl05K0Fm
+CT6De16B6zZOsHAimY5xmPu1NKIw93GxN+Y4d9Uksmmt0HoJFVMqOVWMENtW0gdx6KC0EE6l9/eg
+n8UilJX9sw3z28s0XD8V123mIqje4aFXItg1SIZmpRdWqzsagoirfua4M/NuQs/t7pdg8tLu/RCO
+A2TfmVGGOVljLu4l2zJ8YN1bxu36eoeEPIiTexjmHOfAijuIORbneGg1C4Uf+gk3q4cWTU3tbHrc
+ylu2YsYzt3Rrz0XqRLotJq8AOaEfpCekRYfDWuE+MkT2hlozE8rfYawouSRAVm3KpjSn+VGqUX1D
+CaLgw3ANQ4IpHnGEgaDkk0dLRtvSCrzXXojPjFmxtsEzX0d0T4+XyDoemYErClWUZ2PedUBAohVP
+zLfgHv9flWQ0I9vj5AmGuXIzMe/DUa5d8cvmJBiSTJxEk7fvf5b2JW5HvpdA7106z2MRPajCaX+D
+PK1bFa+0kEx/XPt0EfWAX+JB/vwWwfm4TpyfOn74L994lXoAkHG49l4fFOX2oUHN2WppqzSrhwRD
+xGXB5FxRTUZbuiGhoakOkN1cjr2FdN2I8BmkrcWh0ywTokQJFO7DbA2e6ofiGvHs/5OKJKMnv4rg
+FshNcRBMmBWv1rR4cYZJEHGQS16mMlve4de6ediyhJIiDfkzyNaW/+aKfkO6Hke6VlS4VmZTtbCz
+0MbreZKn46qSjFb0SWFuzBNFo4qCBAqyVoGg5RKHUhIF/b+Q4Um2KTx7DYLrDXM75s6QmWjng/D/
+Pzykq8TS9IW2kEGeSAb4yDA3FqqLo1df6TtJUhZFUbY/IEguEfV6r4b8PCXJelJmthnmepl3kcaP
+WFKRQAh9kleSmQF529AZGXEr3KS9ntKaIUgwgQhmbIoIppy2GarX/ICWzOb4l2FuBDcHspdhzkYu
+e7kWx6fPS6SVhwL5Asr2LL2h14qV50ZDkGBY97xhNnTHRTkp9nUkms2wFuX7snQiEN5mmN+7NnYu
+xPmpiOdMw0366JTmBicrI88fyulKplhwm8achPWStbpn0QNLkOb/xO9peagTeJcGvIt4KWgsih7w
+uGB1re6qLBPEZELFm5Cf4r9n9RtYdUvG8sB/IBhimN9oNj7QyZV0Xnv9tGZovRDubcPSPl6Ckjky
+LwSjkBlxf6ce2AzyyUX2IZMZyGNQ7icjfKJMML5IRjESN9nX0PnPRYHdYmMlI8EQjp2vJh1aF4KZ
+krN3lOnL71HvbcRyyFSIWDHPIrwLcjji79vvE2SMcSjkJMNc4CRTFEcb5rjlzYa6087rsFmlwiCy
+D+twWRoIJurJNg+/MNXx/zOP3ttPexija2DeyLHSPQnv91TR2ryD3nsb738+wte9bDoXxYesHynR
+FM7HD8mGJBNlXfNbv9zIIwxcOPiAclQ+7v8YaXy8AD371rpAfUAR9Zvi93jvYTi+2Ou9ShEURD0S
+IPOj9ynyBzIi+0STpmGyStZMlGRShWDGI02nIm3zilIv8L5H4X3/nHR7d9sXK0IsgPwMz7pDhw49
+I6opeddAbi2yWUmyIaKoW/c+MynRdFgIZrR85EW6mgpYHPdALomqrfsgjNWqw9va/l8LWSiGuGG6
+wpGP8+VZwXJuNw/3lo7D+yqv62yxBbW8T30UJYAEPYoEXYVo1yKtlufiTSJsxG2leCSYvxeYYKSd
+X4l374XoEdWszBqIw4qPDdMDtIQy6eADPOdN/W+5hWTERU75AS1KLh9VIJltIFshTbKAsofxpU82
+uddc9UC9iTeEIHotysVF34E8ZsTkjiaNvU5aM0SYpCJKPklLRklGvsEcgTo+q8jlhDzojDwQP2jy
+AW8HH5eusJDHIrU4ZAqwLGRchPuK5SDTf1fqsc/xnKVZzquoV7BeZ5iO8ThsRhABrZWyJZEE0eiz
+VyrBTGCpbWzfjciP4YY5GUAsgi0Mc7atkIisrZmrBDJLtywW4vhEyeOLIuRRfcQFcBsycn9Ej8v7
+sBlnmxFhk0paoASzDvX5AhLMZu1ehpQuRt60tZOMnUSKOpQeuS8eZP4WyFz5UDYkb4q3UqUhwRBh
+E4vlm0gs1ozleeI6RHY6HMGSJFJHMqpw22oPaJ+sK2Bu0UwkabHENWRmIRj52HwZ6v1IliiRWpJR
+5dsLFXUMojtmTRnTYiGSJJY4rRnL/cV7x72o3zfXOnWVIGIlGVXI+6HC3mfo3jRpVdJex05JMEQc
+xBLEmvE6I81CLksgz6Fu3492MJGlS2SKZFQxi8vshxAdnLTC9vMhzmlbgyBz40lQJJawrRnr/zVA
+1mH8AfVyRNGnJxMZJxlVsO1RkcXH2TDDXEgUWAGHPXOjUhoqkYzTfguQmTr80EPftxTk+UHygOSW
+XXJxIxoPkIV7QhxWr+st+p8srJyMcFJRF1cSOSQZi8LbDRX7MkQPhvQ2TI/OYWK1NixZ3PSZNrb1
+Gq6CbAf5qh8F7JHMyo16FO75pMY3koyuFj4DMtAwV+pK+uqUkCTNMg2yfQ3vK07rZA6+KAtZwPWx
+KpMO+uydDXNvcxJORsmlEslU2ERQtsV9SttCuc234BxWACLfJGNpBLI1gCjebqj4FyIUH+ON2uuv
+t1gE9RYlLqSxTJWohNMN02HfQss5VpKRVbWy2na9ZUOd2yFXe+ntu5BLWanLXHnpDb6lK3ZFwc+u
+tthKSNYwt0Vo1nSuU/ITFxBi7Qnx7qXE0Evzw+qcTshkqj5XNpWTd1+E61a6PG97HDsW0VMhB+qz
+PVtuRPIoD49ZScZedpbyknZxOeR3zDmi0CTjoAw7qGLtBOliUagdNc2LlWSaAvbIhNCGqLIVy0FW
+6faEbO9yvjznBcjzSOMMw/RM+jGevyqmfGlrUyZrAtxrT1x/FKKHQ3Y1TNcYrW3vWtI8WaqkXVLF
+ZSVPsQzn63/z9Pd6JUspI1nE97n+rpRPdUiPWJXdlEy72Qh1Y9K13NtoGlfreUKwzXjWatynpEQt
+PpraaV0qudyvpOReTruQ/WLcR6xPO1mXcO9GtTQbK9zTfu9yOjtpHreodNW0ba2WbIM+fysVJ+eH
+buVpJxlZ2yKLoP9CNUeQZNJBbG2ErBBui/AU/HWjKpOP1UqSseuRODYuh+/eVUmmi9aJZiWXVkoq
+S9UKLAUhNqJ6HXQgGRle3ckwhzollJmZ+3lou6MgxzJXCSK9DV72wzkO0oO5QaSsbgrJ3AJ53TBd
+sS+3WEctasUcyZwiaMkQBBGUcGRYUYbbJOwi7tvx31SEo5g7RBrwbwEGAFUfjZyKu7ZEAAAAAElF
+TkSuQmCC" transform="matrix(0.4794 0.0084 -0.0084 0.4787 199.6738 250.2939)">
+			</image>
+		</g>
+	</g>
+</g>
+<text transform="matrix(1 0 0 1 258.0879 342)"><tspan x="0" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">1</tspan><tspan x="4.465" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">0 </tspan><tspan x="11.353" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">s</tspan><tspan x="15.161" y="0" sty [...]
+<text transform="matrix(1 0 0 1 262.8164 353)" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">(</text>
+<a xlink:href="../02b-STG-Stretches.html#p_29-01" target="_top"><text transform="matrix(1 0 0 1 265.3184 353)"><tspan x="0" y="0" style="fill:#10137F; font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">p</tspan><tspan x="5.075" y="0" style="fill:#10137F; font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">a</tspan><tspan x="9.345" y="0" style="fill:#10137F; font-family:'MyriadPro-Regular' [...]
+<text transform="matrix(1 0 0 1 294.6924 353)" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">)</text>
+<g>
+	<defs>
+		<rect id="SVGID_9_" x="-12" y="-30" width="612" height="783"/>
+	</defs>
+	<clipPath id="SVGID_10_">
+		<use xlink:href="#SVGID_9_"  style="overflow:visible;"/>
+	</clipPath>
+	<path style="clip-path:url(#SVGID_10_);fill:none;stroke:#FFFFFF;stroke-width:0.5;" d="M262.442,313.825c0.943,0.575,2.645,1.058,4.692,1.058c3.864,0,6.394-1.863,6.394-4.623
+		c-0.022-1.909-1.449-3.243-3.22-3.542v-0.046c1.84-0.644,2.737-1.863,2.737-3.45c0-2.139-1.956-3.795-5.268-3.795
+		c-2.07,0-3.979,0.552-4.922,1.127l0.782,2.967c0.598-0.322,1.932-0.851,3.197-0.851c1.288,0,2.001,0.506,2.001,1.265
+		c0,1.035-1.311,1.357-2.346,1.357h-1.472v2.944h1.541c1.403,0,2.668,0.575,2.668,1.794c0,1.058-0.966,1.587-2.438,1.587
+		c-1.426,0-2.921-0.575-3.565-0.897L262.442,313.825z"/>
+</g>
+<path style="fill:#1B4787;" d="M263.224,310.721c0.644,0.322,2.139,0.897,3.564,0.897c1.472,0,2.438-0.529,2.438-1.586
+	c0-1.219-1.265-1.794-2.667-1.794h-1.541v-2.943h1.472c1.035,0,2.345-0.322,2.345-1.356c0-0.759-0.713-1.265-2-1.265
+	c-1.265,0-2.598,0.529-3.196,0.851l-0.782-2.966c0.943-0.575,2.852-1.127,4.921-1.127c3.311,0,5.266,1.656,5.266,3.794
+	c0,1.586-0.896,2.805-2.736,3.449v0.046c1.771,0.299,3.196,1.633,3.22,3.541c0,2.76-2.53,4.622-6.393,4.622
+	c-2.046,0-3.748-0.483-4.691-1.058L263.224,310.721z"/>
+<g>
+	<defs>
+		<rect id="SVGID_11_" x="350.461" y="146.001" width="186.539" height="83.13"/>
+	</defs>
+	<clipPath id="SVGID_12_">
+		<use xlink:href="#SVGID_11_"  style="overflow:visible;"/>
+	</clipPath>
+	<g style="clip-path:url(#SVGID_12_);">
+		<defs>
+			<rect id="SVGID_13_" x="350.462" y="146" width="186.658" height="83.255"/>
+		</defs>
+		<clipPath id="SVGID_14_">
+			<use xlink:href="#SVGID_13_"  style="overflow:visible;"/>
+		</clipPath>
+		<g transform="matrix(1 0 0 1 3.051758e-05 0)" style="clip-path:url(#SVGID_14_);">
+			
+				<image style="overflow:visible;" width="389" height="174" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYgAAACvCAYAAADnnUkcAAAACXBIWXMAABcRAAAXEQHKJvM/AAAA
+GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAOJNJREFUeNrsXQd4FUXXvum9kkAI
+QZp0EEGKiICAIiIdlA4CUkUUFT9/ARUEGyAoShPpoUlVQZoivXdIaAkJLaEkpEJI/c/JncVl2dv3
+3rvlnOeZZ+eWbTPnzHveKWdcdSQkJCQkJCLiTkVAQkLiCHmQk1seDs9DqgUpysfbMwi+ewj5q5Cu
+QLoB6RakZPgtkUqMhISERP3AEAVpHGTvQCoyI92GdATO+RZSLSpBEhISEnWCw0dwSDITGMTSA0jb
+4ToDIAVQiZKQkJAoHxiC4LBC2ODD9yaTEbA4Bb+3pdJ1nLhQEZCQkEgMDsE+3p7rINuC951V14Lr
+CL8qhGutguMo+O0ulbZ9xZWKgISEREJwKCkVOHDnCs53hev3hLQNvo+gEieAICEhUQY4lIGG+zep
+wMEEUNSFe/1CpU4AQUJCIn9weA4a7L8h20xqcBACBU/awedJVPoEECQkJPIFh+oADr9Dtqo9wUHs
+2nDfsfD5B0g+VBMEECQkJPICBxxzWATZSK7xtic4GACJUXD4jmqDAIKEhEQ+4PAUNM5/QrahvVmD
+GSAxCD5XoFohgCAhIXE+OHiw2UoNnAEOIiCBXUxjqWYIIORqMMGQKkN6BlJZIQ2Hw1xIuyA/EY2L
+SoxEwbruBYfvIT0np+diLGIo1ZB0QgvlrDcSHJCrDKkGKGZTOFaDFM48mTRIsfCfrXAsgt+Hw/Ep
+3uk4h/t/8P1JKkkShel9OOjtAsi2E/HinQkOXPYePE9j+HyBaosAwqGUGg6tILUH5asPx+qQAsQo
+r8jqz0dGxPstA75bCcfP4LtbVMIkCrABH9BVDJ/RUU7gIAISGyF1ohojgHCEUSAItAXlGwbHl6Qy
+DJ4yx7JIl1vgu/tU4iQy0/9AnX6coRro5xtwbC7m+MgMIPC5XmbrMkgIIOxiGDgzA5f0v6Zj87vt
+YQw8pY6B6/8Dx0nEKEhkoP/PwqEX6CKyhSoSXdORILEF0mtUkwQQUhvG86BkoxlF9XSCYp/D8Qk4
+HoTvUqhGSBys/6XhMA50721O/y1t6MW6WB0JGOz++XD9FyB/hGqVAEIKw4iCAw4cD4ajlzPos8Cw
+4uH+78B3W6h2SByg/35weBv0DfdviLJnIy4EEKnvwbv+v3DtVvC5kGqYAMIW4+gDSjQVsqWcAQxG
+FPwBG8j+mEIbk9hR/3HB21KdneMoGQMKe4EEXLcL5NdTLVsnrho3DH9IM5hxlHJUmABzqDd7Dpw1
+MgBXq7INWEhIpNY1HGfY42hwcCAIfQr38aSaJoCwRnl+gvSeXIDBiAE1gtSU1JVEYv0aD/ofrWNr
+dJxpB+aOW1hhO/XJdgggrFGgCXDor6BH7oFdAaSyJBLovgdjzhMdzRqcwSJAulCtWycuGjWQD8A4
+psmRNZjwrm7DM+MmKTNoTILESt13Ad1ZAtk+zgYHMR2301hEMlwXIx7cIw0gBmHKQLqCokxR2DNz
+WQytPBbSPviuHqkviYV6hGFgfpIbOBhwhqQU3Jr0JdIAAghTBtKPeU+uSmEPfEPmPXMVeI8NbDET
+CYk5+uOH0VchjRDRJzk5QfYCntdJCwggjClgT7axia/SwMGAIZWF91kGn0NJjUlM6EwA6MoayLaR
+I2twkL20ZGs9SAggnlAS3C93PmRd1GAcvHeoCWkIqTGJEV0pAbr/hxLAQSSgpZSCmwm1JY0ggBAq
+nQubreGrJs+JZ0x9aJ43iQEdcWPRV5trjTmICZRFb9IKAgihlIfUSsXGgSyiJakyiQAcfBk4vKIk
+cLAHi+C9ezMWa4qEAOKRoIF4qfwdXyZVJhF4yzhb6Q0lMwc7dDWFQOpA2kEAwVeyNir2Erl37An5
+JqTOJEwvPofDAKWCgz2fGWylHWkIAQSnaGFwaKGBeowExR9P6kwCOj8EdOELFTk/UoNOc4pIQADB
+yUBIwWoenOO9W2NSfM2Dw/vQoM5xhCeuYMEdIntRMWgcIFgI4w81VJe4NWRtUmnNgsMI0PfvdSx8
+jpqmc0vNIuB6b+IML9IajQIEm943F7IlNeZFZZFKaxIcqoK+T1cTONhZ0JGqTsWgXQbRT8cWBqlZ
+0LPieVdnIB0lldYcOHiCDmAAR4dtj6tkFsHEHRINVmsRIEChyoEyfak0Y+Eae3MNQfA/jPL6JnyX
+TSqtOcHJCU2JOVgMOO1xES2ViIYAAuPcs0G6Mkoxlt27dxc39s2aNbf4/1xi9ZiOsWYgebGEMf9d
+ScVV29C5T578Fe6hPk7t4GAnFvGcjiK8mkW11CS42XozcxtbOYDDq631a9y2btsO+Vfgu10G/4uC
+/8f3w//z2ESJqVOnvHf61KmY1HupGfl5+QUPHjzIi4+PS4efc8DA8uE/RXDMg88P2WlFvDwK/lZg
+4pHz2XmoN+h94UAfhpD2hYTg7CFyDv4Po+fivTAefzr8j8ZKbJSXmjereejQwXd1xQrfXDPvjXYA
+Bm7TNbC8wM68Vixf3gn0cjfoYwFplLioimLNnj23+/DhQ1cqbSMgrsHnAEP4/HwgEYID7zrYcOOJ
+9yEVssYcu5yyVq5a/aBH9zdzFy5anJ6dnZ2C/0VJT0u7U1hUVOgCkpGenp59P/uBoWfV/z89qwAk
+KDgowN3d3c3Pz9+3ZMmSESVCSzzl5eUV1Lt3z2CRUxE03FesWHX3+vVrx48dO3YCnmM/fBcPz51H
+JmiVR12SMeXOYvqgRuE7T1LYN7OZeLhWU8jfJK1SOUAwo8GNgPopASC4Rp9v4GK7avH/xzENY0Bj
+2TPssvSxCxnL8BDzysy8V/6iRYu3zpkz5/ud/+7aB8/+kMzQIj33njZt6phxYz+dAGXuogVwEOr5
+1m07bGYRPFvrAflVpFkq7mLCNQ9ff/3VYMh2lIqGOhocbPkfJ5Y2FuiVWSiuOgPjVqbuzbuX+1tv
+9cfNW6p07dp5JNTdduz+IlM0T/r379t89apVo9G50xI48LqGRFm2tdda89tvbeFav4EOFpJ2qZBB
+4DaKv/wyb/qod0cOfbzB2iFLkDDW6PMZBL9byZQx2Gs/Xwd0F5yBZ+4Ezx9PpmiWruMmUWsh20Ar
+XUv21HV2rRu4MyPt8W7YI1S61AFwGCTs6uAaV6UxB71n8/iYg9oE3529V+35838Zg90mZIomwSFs
+9uxZn2gZHPj2wE3akEAiITUkDVMhQOC4wy/z5uIG7O6c8sjVcIQzlsR+Rxk7brzRAWk1gQTKuyPf
+6a/TTzkkMaznblOnTun3wej3hxvSH60I9+5SOIAMbFzWrVv7KmmZygAC5/lPmfLd26NGvTuA+w4b
+V7mDgyFGwP2uBXAQGKhPdPSyYbh2g8zRoFQfP27sKGzMtDSl1RSLkApsevfq2RT0z5/U7ElR7BgE
+C8Z3ArKhj1f6DrP77h0NDtzzGQMIY/8zNKaitDEIkWfPhmdvBPlzZJJP6Hnw0iWLfx4yZHAvLXct
+iemNhLOZ8qGcX4P8DipZ9QDEq1ChW/gehXDaprMbTCE4WOoJCd/HFLjIdWDemHAD1nPmznuvf/+3
+frTThvVK1XG3z8aP6w9MGQNPulMoDemdIk7/VqxcNa1nj+4fUcmqByB6sD13HymJcCWyIxtMsUEz
+PjiIgYEFU0ONAoc5IGKKhcjA2P9gM5pouuF/Ol4ZymMzZJ8m9mA/1syutQeu1RLy+VS6/4mS10F4
+ijW4fJDABprfYErdOPJBwRBTMLbAzZQYOsfY+oXJk760CUCcCCwYJgXHxAgg9A2f17x5cwcTOBhm
+31Ys9DQmNSFFQLpOpasOBvEioP0/kPUQehFcA2qqi8bSRk/IEkwxBGuBwVYxtQDOGsPiys4eQME8
+uMO4rzZ5cHrp0bNX05UrluOah3DqWjKsNxKOQxSxXonVVLLqYBCnIV2DVNFQoyxsKI0NBIspmTFA
+EIKCnDw8a7uujAGKvcc5ateunUTs4ZHz4wsN1RgEB5q1ZMoZkmxVtcv6deteZauqaWW/0hkEk98g
+dTO30eI3jOYMANs6hqAeI3x8bEdKj5YXoHA0GOYMMkmdbtiw4a3nzJm9AZ1bYg8mPX8pxyEuwbUa
+Qz6FSlcFAFG5cuXxly5dmmiNkgi9aCFgCAFB633AUkfTFBhmPouqeZDYQ64flAM6Pq/R2IPDAaIQ
+rtUV8huodPXi7iQjwMFI3EuAf8yxtP/59JlzO1k0UIsXWQkNTwgYZJhPlhdnkFIFQ+R14SVCOk/g
+kOsy+v33XoJsS9JB0yLlQDW7luv6devaQT1spG4mBzEI3PlKp99QJiC4Ro8QOHqUCAnwrvhURJC3
+l6dHcJCfv6+3l9/cb985YOlCKeZt4T7M1YiKK49FcIBTrly57xMTEz8kgMgNgzJZB9mmSmAPcoia
+LNVANU8fL0A9PEfb99qRQWDDDYdgBITGHceUbFCnctWqlcpUge/qQwpMuZfpD8mP3R93JPMAgMDd
+sc5ZWKFYiYcQIOQe4lttLEJCyTp/4dJqWiCn0/0wY3pXJYGDFAPE0jgukj5HBUhPQzpFFi8hQLBu
+oxAAhdJvj5n53HO1K2EAtnqxl66VgxRl7NyI8OB9cPjXmvtWrFjxn/j4+H6gJC7EIpQjXPfS008/
+vQcOJ4g95AYASA7igFj+bPJl1dUB62byXLF8eVMCCIkAgnUhlan+0vCo7h2avgj519ds2tcIkrku
+Yeb5XXM+BuO4YM39z8WcPwbnIjJQsDcFCWtgss6cjfmF1Z+mZcIXn+O4gyKi2nLgrrYpuBxDHjjw
+rebQrs2iVf02AARjDKUbdxhTdXDv1r2Sbt9rOWP+7xUsvU75siVxfukBG94B10LgtLRIanYd20hY
+26XHNTCVK1fZC4dNxB5y/aExwlDerkpodI2FrVeJNICE+6unEkBYp9CBNVqMqDFyQLuesZevdf1g
+wq9lrLx/9smtP86zccYAbnyfSU224xsJa7v0WAPz8PSZs4uIPRSzhyZwaKHyRldJUhZSNUj7CSAs
+Zw1lARDa3LyV+t6n3yypbsvNK5aLQA/yb1uu0b9/v+eIPSiLeTA5CekvYg+5XmzswVMJ7EGt3Uuc
+cNNdl0cve4EAwoJprqjIVZoOrfnJyG4jACB6w1e2bhP5MC1mZR8wjjU2GFconL8Esq/ToiLHCH+2
+kTUMgp2fGxQUNCw9PX0hAURufSiTfyHrp4RJFnLbe4Sbem2HxZub4ZrttL4ewtVMJQ7o/PZXL99O
+SZ8F4DBIAnBAOQvJphZ9zuxZ7eHQlqi54tjD6eRbdzS/WhUZ+dKlS3DLXD9iD9aJHe2+BiTN7zLn
+YoYSe300acGb85dv+0qnD8kslEKd5VuXFkWWCv3gyoH5tsbemQ9pkJw8Gq0wCGsYGzs3Lzg4eFha
+WtoCAojcClAm2OpGEXuw7bnswCDyGLs7TQzCiHw2Nbo6gMNkyIbp9KP6XFiE2JAg/xMB/j77S4UF
+IxuwhIqlxuyctdnWhy9btmychfclcZLnxmMPl5KSb28kcMh1mzdvLjo3URSxVVJ2arOw+vCA9Awx
+CBMSXKNHJ3d3t09zc/OvPczNuwxfXdTpN9XIT4tZmQxHXM1cC/63jhWqae5Wueym/RundLB1njEY
+WQ3WfxuuxO02paf+9n9/a71ILuZ+RETpT5OTk74hgMiNgjI5oBT2IHcGIfVz4TWXRS+f27Vrt+Fa
+HocwOYsp6fiSrTr93gupUFBpItTO9auZv7XS6YPumSNFAA6bpViEAteIgcM2SL3lsuzfGeCgoD2p
+b1xJSPyNwmrodLNm/YzjZ1Hk+8tX+vTu9RIABK6HuKfVMjDZxQTG/ABSvBAceFLhu9lrPxJcqwDS
+VUg5Ys4TpB1SvUD58uV/12m0m4kPDii43aiMGU5RqVIR80GP4og95Pp/+MHoPrzuDBJ5CsZkaqTl
+AnC1UdE9F67eMVKnX1TyH2KULYWe/SSdfh6xsPHGlc+JUr1A7PmLOP6Rp3VwkPM0X/acdxISr0YT
+OOTq/u+T/2FYjYZ61kez7+QoDLjd1q5Z86qWy8GmWEx93/u+/h/bD/cTfJ17YusP34CnuNyrYhcc
+s6jAUrHUrlbuOP5HwncI0Cl/ZzyrwYHzQOXa0HDsITw8fDkcNc8eQEJnzJj+Adqe0tiDlPsvyF24
+uEx9+vRqzraAvU8AYZknFBpco8c4VHjBT5cgFc9SeRi/bmdorV7fZt/PmaljA9h71n17QqpBH9xg
+ZemSxe11Zg6OS9XgYT+/JbMmpBwXEIKD3D1Q9qzJV6/dmEWbsOh0AA64bqe5EtmDncK9y11q6vTb
+FOzWor5aG4vJ7duf1+Bq6teEv5UtHfYHf7ONG0cXrQAgGQLZeuyrqxI+f8iQIYM78z1pO3vCxQ0e
+DgZbEu5YbL9ra8DD2eBg6VRC7v/lypVbBzpxSevgAHbjA+XQzxH6Kof6V7rwwn/3gLrbB3VXoDWd
+dbFS0StDo/+P7slZGBlpMStfgoJ8LL5/+DN9+mdk3f8Vsq7w+4vw+36JDO41uBZGA7XrXhDC/n6+
+Apl3/i6LwUMIHHJgDpYukmP/fwB187JUda5wgGgC5YAV7q3EGXdamuYquPZ1uPYLkL9GDMK0krsv
+Wv33YBFwwNDd2Go8sfLw6uEFvwOgJOj0YxFpEj5/RZ0Dxh+E/f18ym3e+a+YvLYp4HA2OPC9Rwvv
+fwzScQKHXI/oZcv6IzjQzCXFSdQPP8zoBXU4VWsswsUKRa8GjT1GYBVGUC0EdtAJCvAPsfOARYwF
+FjEc/tPK2s2BRJ6lNdvD189eawA4z91eDbMh8BBjHc4cc7CUPXDlVqlSpQ/i4uKma72F6dixU72N
+GzdsQVNQ6nodLTII3j7siazHIpYYhBH2sHjNP4N14uG1b0M6YuhcYBHzAFhw34abUrbfQUFBf6Sn
+p7eGxijUWF+/oa4bc9mDvRpmQ9cVDgY6ExysYQ+s3HLOnovdrfWFcSykN+65Hq5U9qD2MN/G7JOB
+RLnFixd9BHU5EteGEYMQV/Qq0MgjnEYIf6tUrvSyY39N7+fomSrwTOXgniNKlCjROiUlpTS2rTp9
+tFl39n74PK68/8vea5LTNFbh+Iu55cDK7Rj8v6mWDMqAjtZlYw+hxB6kF3uE/Dbw/vfhHm0gv4cY
+xJNK7rr4t7/7iYEDSAGAw2/OmMYI98RFd/+7fiNpOeRfh3wZHx+fpzw8PEJcXFzcioqKCkJDQ0sm
+JCRUVoqnJqdprMIxEnPiPnH/KRMVtYHAIdd9yZLFaDehNPZgPy8fG3BbtsE13fNQPKPJd3l09BCo
+0yNwvxxiEI8rehlgD2j5FUV+vpYWs7IeFNpdmRglRp4NYMyhcPPmTT26dun8ldwZhNzAwdDsLb1R
+Gh7zYWV2B8qsudb6bEV08Rk20y5KybHC5MwgHPV87B6ZcI834LhNC+t63M1UcreZC//sbgAcdJUr
+RO6QCziwisRnucue3RfAoS6/u8bcxtGRDTHfW5cbOAjLDek8tx7EEJso+9RTawkccn2WLlk8Wkch
+vVUhjEUE/L5x48QOHTuibl9V+zu7mKno5djMpUoiPxcAe+gGjcEGmRoperEYkdbLHO9C2Fjbo8Hm
+U2G5hs0wNmuJm3nFzbTiswn2PjlQ1i3gGge13KAMHDSo9YJff10PWV+lRxqWO4NwxDgEvxy+nz7j
+++HDR4xVe1eTWQxi6dqdbQ2AQ3FXAiTZDtps3LgBV1p7WQsMUjbYwtXYcmMNYuxJ7Jm47zij5N4H
+QYK9zzlIJzTOHgKg8fgfgoNa2IOc38MR4xA8FqH7YPT7gwEgMJK0qoNTmbXlKNsMqK2Bv2wHBtFG
+iv0d7CR/QWoj5v3wG0JHAYMhpZMTOFgya4k3T5wLQVJUoUKFT65cufKdhsHBY8xHH775008zF6ET
+poZ9SqTe1lPJLIfT+cVLlm5+883uOHMzRcsMohakJoZ+rFwhcpeMwQH7wq9eu3o1H99VOK4gbLCr
+1Kpnd2DgwIdrVOUMDvx3MOSV8eaJc+cWvN6uXdZPM2fWBkO9qWbjMSStX2lVb8+ePZ/rFBixlcR8
+ttK/X9828fHxuMJ6llpXWLuYYg9L1+6c+e74uYMN/AVXT2OcnZ0y9uYahYeXmJyVmVkDPuLuUD7C
+/3DA8OHEWcXHfm3rSd7YClkJKpjcorHyxx34IMaxA2PUXTAukQXp3JgxH2+c+OUkHJu6BNfO1wBz
+wF0Vy8O7zoVjKyVE27VEl+XOIDhHxRE7K/KYcwKUS3uo87NaBIg6wTV67IWsv4G/pABA4DS+mzI3
+3LLwjG96e3s3ysnJwbUSvmLAwIktACE2I0mMlciNsouFFOF3H5kDEnyg4MBiydJl276fNm3CgYOH
+DsqZaUqgY561a9Ws9/H//vfBkMFvv+GIrg61dd0o7Vk5+5j3y/zVffv2ex/unaQpgFi0+u//G/rJ
+z18Z+cteAIjmSjF8UJpgeFaMQls87XXuOvFJNqYAwtgUWHNnJKEiy2UPaT7bERqW2IwlY11OBrys
+o3BdDFQXq8a546hXrVu/3HDP7t047lKHq3+17BZHAGHyfkU/zvxpwuDBQyaqTb/djXlEwB6MbrdX
+t1alWCV5hWxf7WRrWYEQBMTEkgFuOdB2Y+sd+O/BAcV/salMAwVvfKL+ihXLv+7Zs9c4eN84Ne3O
+Be8TMmbMR/0AHEbBx4py3+FP7cLNMrL3bCZBu1Aw5bvvngWA4EL7qB8gdPrQ3PWN/F60c/XkMz7e
+U1TFmow1oEIQMNQoKknMnWZrLVBwIDFwwFsdvL28Q9auXTMPvj4LDSsGbsxnCVe8i+0rnsu+fyDH
+MQwMozHhi8/f+Gnmj1N1bECagMG5wg0g29v54rULRREREUcvXro8XY1dqAYBInr9v9gK+hk59yGk
+fxT4zsWVyI0/mPIOxLxrtTQC/Aid5r6TMaAwBRK9evVoCh8bQLqwZMni87kPH2bn5ORku7u7e2Rl
+Z6cXgRQjOAjmU1NSUu7evZt+8tTJePg6BQwemQcCSwZ/10IngYPvi01eqH/s2NFPCBzkq9/23AKA
+Yw9XEq6OA31U5XZ77gaU3yW4Ro9WJs7FUBYJCnzn4pWP7bu/bVG3i72M3xFU2NQ7Ct9NbIxF+Ixi
+QGGMTXAgodNH2q0zdMjgOmY+KoIGToK4s3LFiutJyUkXThw/fpqxkHs6/QZU98FAH1rDAOCAM49y
+ze07xq5XOIT27dO7GYDDeMa0CRxk2M1kDxZhLD6ZZgACJBxSIxPnJjEWoQjBaLQ6jPTq7RmKn6eN
+H6H78MtZov8dCr9Z6lnLSYktUXKx7rLJk758YsMiQ8/IBwpT3U78sjS2y55AsEuwDDxPmQED+j8L
++XZM7+IXLlhwNDY25uTp06dwv+tExjCwK8pTxwvxzkCmkKXiNTGgB77P1asbHhEREQAN/TU497Sx
+biwGJhGtWr70TJvX2jZds+Y39DDCaJ2DfLuZ7MwcHrWhK5YvHwr6cRjumakJgFiwakdrOJQzce4N
+pFcyBwWM6BoIKbhsVGTgp2PH9YX8i9zv0xgQiDXe9vYK7aXEloKDoVAaFjTgT5xjbreTJSJ4Hi8A
+jOojRgyrDnmsU1yMFxe9bNn1BzkP0v39/MNd3Vw9GDC4FBUW5ucXFDwsLCwsyMnJyfDy8sJp2+Vi
+Ys6VhYTrYjBkPIZxPouxdbD7iIEMB1DBjRo1qNS3b78O+/fv7w6ppL0dCDl65M5iu7Y8sz2dKu76
+Awe+1SH2fCwq6Dq11b2Lge6lJZDtY+zEhs9Wmb1n3TcjZAoMgWDo5fv06duoTp06tcuUiXq2V68e
+ZXS8aLTCMYiLZ4/rHG30HEA4crqrpVuHWiP8qbH2ejchgFnSGIhFp126NHpH9PJls7f89Vd8p86d
+a0RGRhaDgKuLq0uNmjXrjRg+rKWO7aSoxZlKztBVKZ5Ziuc15FQJ1gntYgvmVMUixADCFwDiMGRr
+GjsxLWblBCiML2QIDiVGvjOi26+/zh+o0w+IuvAbhuRUff3xF8ddPHf8EZtwZHcPX8Ecud+Eo0CQ
+v7JVrMvJnoBhiu0YqAcc00iAVFXHFlM6mlnKVYQxt5QAErauiTAnDD+vXPI/HTuu21eTJ21UO0BU
+BYDASJw+JgBiAFTAIrm90Lxf5vccMvjtxZD1EHqLWLlLNh9/nDnwwMEZXQaOWtjjaHBQWsPC7+4z
+NK6g9YFopYGEtbZlbjQEEd3ZBPfqBZ8z1FLnT4xBLN+wq7ZOP9PEmOBg32U5vhAgeCT3XsLG8FZq
+1mPAgOJMcHCUGJuxZG8RBvPj2IS9GYU5DYCh7ieakWReXcp9ZbWlYyeWAoPwPiCtPv54TGcol2Vq
+Cd7nImAPOP6AK98+NHHeQ2AQdeW4Yxi8QxN4LqwtN6EC89nD0C7Py6JRsDeDkMs2psK4TpwX+qSx
+NZPsvQ0/i/zDriuBSaiFRVgLDAb0+wrcq4NagvcJGQTOCW9kxnm4Ef09mb6Tp87EammOPWiJOTj7
+PcVmRuF02v+edZdB0LCuETMMAmKD1M5gV0pnEkpgEeY4DlKseeLNSqywdOmS8VAuo+DzLbUBBA7M
+lTfjPFwkly7HF9qwfj3OVHI19h85dSvZcwqh3HarM/YMHHjwQcPWcjX3GZwx3VgNIOGIHdykBgZ7
+skfOljGab3JyciyAxAwW/001AIFTQcPNOA8782XZx9azZ/fK5rIHuTSanDcmJWW3JoyGI703Y4vo
+SJQjcmcR/AWpxhwIKfSPN0bj8tn4cR+npqTcgrL5FUBCsXHfhQDxtO6/BULGBFFRrhvAlBZTAG6A
+ms8e5OaNSWVszhyUNueZUJyxelwp8/eVIkpYQCe2INWeThPvfj4zZkz/8uzZM2dA1/cqlaUKu2JK
+6cyLdpojx8iFOMgOhzCxhnHrwYuy9lj/W51pW8wvU2E0nOlpOguYtBY/x5GNrzPr1lLbcpTt8+5X
+YseOHV/DsZpS6/gxgNi++6SvmefJdQoXrn0oY+hHrntJjvFzUGnxudDYrAUJOQ1KixkNPzmStXBl
+Yiv4kphufOUMZI56Xs6Wmby4etWq78F5La/E+n2MLXhV7IIbrX9hxnnRD+PX9ZEhgygBzAapQqjY
+FFduaquc+0y56XLWLO6RKzg4S8ztWlDSjmlyLWe5T3l1Rh3zp3b/9POsxYMGvT0JsnFK2nXOlde4
+4iHEzPNyZPo+OIYSqDT2IObtcF0jBA7SeLdULvYtZ6V0MzmSRfKZxMh3RvRftmzpN1FlIutAW+uh
+OAbBFsmthWxnM86bAwxiuNxeJjp6xajevXv+IPQUcIC6fGSoYrxES2M0OSIAn1KFmz5raoqtNayN
+5HEdlHv5OYspChaJ7n/uufrj9u7bf0IJU2Afm8Xk6uq6MzjQr0JqWmZxqI0SIQHF+z2k3Mv0wmPJ
+sOD8vLz8vKzsnENy3AgCwKEG36vmZNuhi4pgD3zPg1MqUzNE5DidVY6MzNR/aC2E7UIzxUzbM8gL
+x44dnffRhx/8CEC1EfTuqiIYBENWXEldC5hEBH5Oi1l5G4/wuST7jHNFcYHcRZnO7UUG1MXQj0rz
+EE2FNOB3LZH3q34PmLxz+9qTg5lE3owfflw4dOiw6ZCPl+taCReV6ekiSN11+o1icLU3jpWU17HI
+rkpsAAwpNY07EEDIUU+pm8l0OentVw8Ui5cs3Tpv7twZO/7+5xA8m+zCF6kNIJp4eXt/UFRYmJeb
+m/uvTr8t6hxIEUpuRMVAgt8lQg2bNA2HkjbDoTJUNtMRsIkb778/etrX33y7AfIJcprlpDaAwIoP
+hkM+FHIW7iMMxzj4/JTSG1Hh5jvOXJVMXSQkSi1DOUWiFYBE7qzZc1YPGDBwqk4/FTaLAML+YBHE
+BoEC1WD4YvP6afYNAYTcGl/qZrKszFA4oFixctX+P//849f58xfsxB4Q3CPdmc/nqgG9LVLLizg6
+ZICWRCkz3OQsStFHZ6yJMFZm/PUSPXt0fyF62bJZixYu/LJjx/ZtAcRqsF4RYhB2YhCJkA1Si2co
+XPNAg6vSli2NQ1gv3MQJNW9Haui99TZp2zsL2QRI2rLo5Sf27t2zYc7s2TvhWW/Cd/ccGQdP7QwC
+6dlVNb4YsQfpZdy48cUNnFR7UmhNuHExJZWhrc+J53Pxvmy9FscmUA8xgQT36d2rBYADLv5d0+Kl
+Zj+WCA1+B4DiGUj+xCBsZxAugLarIPsGFvhYfaGrgkFwng8xCPl6lloSbBwn6RtIdMrQw/WVcxny
+ntemuuZfh3MypGpnOMCZ9Djw3GrRouW+2NiYU1cSrp6Dz2cg3QC9zSaAsE4w3O4najF6AgjHNBxq
+cSgcrZdNmzZbuGdPcZfLAK0MVgsbcqnfm89MeGCRMWDgoKvnY2POXL58+dzVazcwXMQFSDfhve4S
+QJgpnTt36bZ+/TpkEa5qAgiuAeOUhxozYhEyKLPrUGYvlyoZ5pGRkfE36GhJOeul1M4Adz176o0B
+VpE+cNDb169cib94NTExIS4u7jw8A4IERsLIhIQL8NIYu8OwSRhiKduc1duqBwgoqCpQEKcg660G
+gxejxsQiCCDkoJPt2rWf8eeff4zGkD1Qhhj2pqPWprxiWTgCFA2wCpQ8SHcGDBiYkpqaeisrKzPr
+7t2Ue3fv3rmenp5+LzAwMMjDw8M7Kirq2o6/d15grOOWIbDQAkCEwMsn6FSyFkLM8yGAIICQCXto
+C3nsE9d17NRp+MYNG2YpBSCU3KVoBCz4gmMUDzgGER5e8l6LFi2uXLhw/qyfn9/Zv//59zR8f0YY
+7kMLAOELL40vX0lNBs9vxDBPfebSAzABhPll1aNnr/kLFy4awoWJgLKrDvmjoJe+ctVL4QCzWnoY
+hDLJ+Oyq/LCwsNtNmzWLTU9L27lp85a9rH3ZpRWAQLq7DLI91AgQCAz2GhzTuldMoGu2HmaA7nWC
+/E6e3XnB50OQrSM3vTTQj69a+zE2/TYxMVG3dOkSzBaGhISkjHhn5Llx+l6JFpoACJQBAwaOWrhw
+wQ9qMnih96N0mixnhkZivJy6dXtj7dJl0X0h/0Dw8wKdzGYzidmN2gHCmCBALAOA4ICCtwDXRTMA
+ARX/PLzwP6jPalICMU+IGjQCCAc3tulQRm9AeT2xcnPosOEfzZ0ze4ocylBoK2whGtkOE24VvBAg
+XDXy/rigZLspuqU0GSvCGGgVsDTCNSBUnoYFG9dXX22Ds5X2i/0+Y8YPl3VOjoWG9cexBm5iB8e0
+x/63YlnTdc2xCJ1+BlQKSzrNMAgUd3f3Jvn5+bh7UwM1dzVRNxOxCAfqXTKUzWtQTicNMPcG8Nt+
+0El3R+ukIcYg9hxa3lsFwQHLCruXfH19rw0YOHDt1KnfY5mM1hRAYNiNsBIh7bOzs+fCxwilN6Ri
+3UsEDgQQjiybLl26zo9evmIY5AsM2Fwkm0FYwpFlyHeajAGDof+r3YZ4jOHR2ENgYGDKK6+0Xros
+evlPrH7jNAUQTGFxA6FFkO2tVMM3BAymjIDE+oaGgFe0XDLYuod9RuzNE6e6Qra2o2zN2sZe7SDB
+7z7jzVxCeQgprlSpUtsSEq/Ngfq68FjPi8a8nvxOnTpv3rBhfW8lN1gEDI6RsYKBTCpn3aPyaN+h
+w5+QPWrir/k6fTTl2lI1bmL1IFwoZo1d8OtaTfVtYEov1ssdPz+/CxUqVDhz7ty5vbdu3TrGsQa+
+uGhNucGTKc/mZ5dUCoOwpD+VxD7dKUplnHZyUpLYuofDZpwyG9Iwa8vO0HRuIWDxf7PFLtTCJARt
+BkbXTdLpYzIlubu73wwMDDoRHBx08lzM+Us6fYA/0eu4a1DHr0FaAeldKERXuQcTk9oASCwXbjGi
+o+LsyBwcCurXbzDfDPbAyT0bdf8WdoFAagTJjc8S7MGmxZiEM50xa2dWsWfHGWSxtWs/s/fMmdNH
+dPqAfUlBQUG3rt9Iuo7bmRoCBs0yCCZVIWGE1zpybXCpO4lYhBzLoGPHTn+tXLUaQ2pcN/O0LyB9
+bkm5cUAE2b0hISEb7t27h9PUJ0J6nu8kTbZjA+4M+zMQJgO9/1RIdyDdYoCLyhgKKQySh07fZYTl
+hdNUfRhjuFW7du3YM2fObIeyP2BBfWmeQaBcqF6jxszYmJgfoAL85NTwUneSvFmEltkD2g2AwyRr
+GxsLGub7jRs3XnPgwIFFN5NuYeOWExpawj81NQW7q0o5wqvnX3uSSDeXVOHBRbz+DObpY7juxGrV
+qiXfuHHjcmZm5g34nMx+Q1AowQOIPAYQCBTeHEAcPnLsAtaVKZZADEJEMMrri00aTzh27Fhf+Bgs
+ByZBaxrk70FrsU44j/75xo0/PnjgwPcWnj4B0mfmMAjuPg0aNJy7e8/eGVDel3j26tmxQ/up27Zt
+fdfRTM7YzEFLwEIEEHBBGu7XgJFWbzds2PBGQkLChdu3b99kjCER3hP3dEg1Z+8Ge4iLlg0eCv+p
+CuWf6pecnNwdPtZylrdOrEFRDaXmQIJ5oLgJTSvI37Tw9M+xm8lUmXFl2+rll9f8+efmMSxEv9Be
+a8D3ayBb3Rl1YCjI3ziR5xgrshIfpwbDIR0b/6ZNm14+derU4YyMjBQOIOD9kCUk2Wv7UAII60DC
+HyqkDWSHQGoGycuRymfpoh4SWTSWmgIJfOd+/frPXLJk8ShLzx0yZOiIefPm/mzM62c2UNiiRcsN
+m//aMpFt8CVmqy5PV6rw1o0bNzAiQpCz6sCc/RdEYj3tDg8P337nzp1idgDvggPvcfCuD+Vc9y5k
+8o/khWefrdv75MkTgxAk7E1hxVgDAYNyWISjuzmc/L6F8K5doTHbYIUD9jqc96eh8uKu37JVq/Wb
+Nv01ka28NnY9P/gPrvZ9Sw51YGAcQYxRfAk2/q2c2AEBhOXKXBYqcAZku0jdYBtSJGINygUJLYA6
+Y0wJYBsvQD7JCpuqwlZTBwgbcx7YboLfPjUFDjypA2k9pApyqwND3VBdu3bbtXbtml/hPbfDeyYT
+QChXGkCKhlTZVu/EGBUlYCCQUApA9OjRc+7CRYuHc7vFWQgQuHHQFsi+JCwrBj4Y2qE/pEOWXLdt
+29e/3rx50ydyZXIGgCK+WvXqf5w4cWoxvPsJJdS/O5n6E3KkatVqP164cH4qVLKXtcZvaB41j3JS
+SStYtBCGgzVyuQAO66wBBwYCD599tu6ikydPvABl5SkYvM2H32bBb4csve7adeuXwrUxZE5ZOeuH
+wEGseD42dlj7dq+Xh/waALad8A43iEEoTHAKLFTcZsg+b62HONkO86ZJ5M0k1FbPzMM/BfbwEuTT
+bLCnEnA+dgk15Q/edurUecuKlav6w2+3rbimK5yHK7oHKIHFiYQMuVyrVq3tR44ex6gOuNYjnwBC
+QdKkSZOh+/btw8Ewd4rBQ2Ku8auly4l7pzZt2ozbsmXLZFuvV6VKlTcvXrw4DbKROv2irmNgVzid
+da+11+zW7Y1ea9b8hvvNuyjBRkW6nfI7duq0a9vWratT76Xjft44q6mQAEIZLKI0m3P9AgEEiSXG
+rwY2wdjDTdD9FpC/KIE9BZQqGdYnMjKydn5+/sPLly9vge+2Wdt1xa5ZlW1W5K0kGxUBimuNGj2/
++9ixo/9mZt3HrZET5AIUNAZh2ECS6tatO+vEiRMNoEI9qIuIxJiMNRJhVGm6wzVg7dt3wG6hyxLZ
+UyY04r/q9DGECuDzHVtCQDDB2ESIDN5K1RWmJ2UPHTqI4ynNXnzxhaanTp7cD2WFwfViMMwIMQj5
+sohQtiFKNWIRJFphFKzhvgo638HQojWZ2GcgPB/uNxGkVPs0MNPxZuvWrY8dOXJk782kW7vh82l4
+z/vEIORnKBhFcSMChNZDPZNIwyiUMJiK8sorryzHhknmxewFyVVNesJ0JXLbtm04VtOkW9cuLQ4e
+OrgbABCnA2NKYu0SMQg5iJubW62CgoLFkK1Hq51JbGl4lbBugrGHK9AgvSbcflKGDKImPOMxnQMi
+HziLfTJJGzBg4LW4+LgLVxMT4xMSEs7B+2KQPwzTcQVSvL1CdhCDMCFZ2Q/OlYmM+Do1NXUWVFg4
+AQSJLZ6inJkEa5hy6tSpMwuOFxVQrFE6/d4IamefwQsXLgjW6bduxTGJm8OHDc3My8vLTUxMiD9z
+5sxhNmaBYIGD/rh6HcvGDb6/bMtMMWIQ5nkqnu3bvz5tx/btI4lFkEjgoctu9S9vqu7v8GyDrVmb
+4AS7fAuec6Ecy9MejELAKvhyt2OnTqfi4uISigqLiqpVq1Z57do1uIDQtWPHTpdXrlo9B/K7oKzu
+EoOwj1HnggLOgmMdqKCmcvUASUhsBIeD3t7eU5QADigfj/motJbYp5iwegvbuGFDK+67c+fO8qPJ
+lh8xfFipffv2roM2bIalCx4JIMwHiVidfvvEkVDor8HRm0CCxFKR2850PHD4G9KUe2kZ+yWYfuoQ
+mTnzx6e0pj/mtjn8LVkXLlyAXVORNWtUuw8gMR3qN8/c+1EXk+VSp0aNmgNiYs51BGMvT2yCxApn
+QyezHQz/hfQZpD1KKUMWamMTZNtQt69hPRPITRaVN5EAwr7KWTowwK9NXl5eP51IlEoSEnMM15n9
+5vxuJUj/x0BCSTboztYoNaQ1SobrGIUf2gPKqi6U21kCCMd4MDgeMRFSM1JSEqUABA8ccIroOEhb
+FGh/CBAIbs+R7RkODsqPE9asWfPordu2j7JkHQWNQVhv5BgrZZePj8+XDx48mAUVUZlYBIkSGhLW
+YJwC3Z0EurtFoa+C0zlTuXci29MJ2QL/cxakvQAOky1dZEcMwnZPxq16taqDExKufDVu3PgQUlQS
+cxiEM7oleeCwH9IU0N0/4FkKFGp3LvDs30J2jDPZmBwYA1+PBGHF0Yk9XKZMme03btzA7QsOWnof
+VzJXm429IPb8heUNGjRYCBWTOVlGM1RI5GvYTgSH3a6urhPguEGp4MDsrqhNmzYYpyhf2GBqjTFM
+ZkmoVx06dNwGhy8ux12Zag04EIOQ1qN5qlrVyoMTExP7gndYzhmNAIky2IOjPF7BAqvcpk2bbdiz
+Z/ccuPe/toTZlpHNlYT3wP0gXtEii+DXMT8oJHMEcHX1aCif/bZcnwBCWoUNKRMZ0T01NRVD9z4D
+FRYoRgNJCCDs0ZhNFu9/vgcpvmq1antPnjw9D+4fo6by9Pb2bpGTk4MrhatoeZ933pRWZIU73dzc
+pmdlP/jLVkeABqmlraR7YPiL4HgpIiKiCRhoXfi6MqSSnp6ePjoXl6LCwkL3gvx8T8zDB1mUP4GX
+Y2WchOUtEoYBg7jhQOQDSLGhoaGHwGGJAXA4DHp5S21leS8tY1d4WOjkrKysd+H960ul0/yBby5v
+qhtrrMT1as71RJ7pPKQvABz2S8ESCSCkBwkMpvX3lYSrhyD/NAKEr69v5Jw5s0MLARI8PTzB6fHy
+LyrSFXl5e/mePXMGWYY/JF9IZXh1guwO3QIcaPJg33EVns++92QegxukPPb9I0IDKRlStu6/sSZX
+dg7eL5xjkIFBQR4FBQWYPAsLCtwRvIpdEfhcVFjkCo/tagjQjBkOAY99GhIRUMB6T27ZstWRmNiY
+U8lJSbhHAu4fEHvjZvIl0MMHSlkdbYW9FYJTtoLNzvkUUiMoE1djZW3OeMUkkfhHUq2AFw4qi9mQ
+oXu5u7vn5Ofne4tsOlTsHDRs2PDXw4cP75OqvqmLyQECCowNvA9r4N1ZI415T6jIIDj6MYCI4gME
+iGcRNMs+IEU8yc3NxdC+hV5eXr4PQYCdeMJ3OQwsxADCRQAQAXyAwHsCavn4gcA1fQoLiwpdXHQu
+cFt/F1dXNzdXV3cENA8P/Ju35/Hjx/0YaBX9uWmzrt3rbfFdvNk7FLJ39Z0+/Qd/uBQATJFrXm6u
+Tx4o9qOnKypyyS8o8AJA8tASs0HDtbZ7SbDwCS+SAOlC5cqVr1y6dOkMi+iJoZ8zNWpqrZ+pU+eN
+06dOtYR8RUNsTdD4os3kMHvMZnaDgJsl0lbmMYb2gNksOncZzEErxXO+vHjOnC/7XZRBcmMHgmfK
+ZACfAukOe57MWrVrp2RlZqUmJFxpCOc0LzZoN7fciRO+wGeIiYqK+vfS5fg5uBumVAVKACFvYMGp
+fEW4KIjPILjZJzjFFvPc0cZ7ubNG34On3J4MVFz54Ab38uOBHPdcXswYihhA+DBjQeNwARYVGBgY
+FIzAg2CDR/wOAMcfQMnTHdDn8KFDQTx24zd16jS3vLw8bwQW9Jqwew6BRcmAwk1xNfe5RdjCTUhn
+KlasdC4+Pg4Xul2AurumlAB7DrCZsoEBfq1Ab9rDx/pML92ZPnqwBh0D1l2pX79BUkZGenr2/ftp
+4KgUpKSk3AFHK5sBQbYJgPDlAQRevyTeC5Q81N/fP7DYkwNbCAwICLt48WIF+K06z0HzZecUCa6d
+BSzwaGxszOm7d+/ehne4wwACbRu3bMVorPehrp+pUaNGLw8PT/fMzMx7t24lX8vOzj4Nvx+D39Kl
+LE8CCBJHsijh3sFeLOFvuDI2mHlm4QwoXIHUgM0FBsMxyN3dwxtAxef48WOBzNj8GRvCz36TJ3/l
+l68HEy8wTzc5ggiP+mODgHsuhAJglDbR1YH/jWvQoMGRo0eP7oV3O83i/N8lzRLVNYxyUAsBAlk2
+0l7QoRDM3759+3pGRgaCaTz8L4kBQQ5jvvclcLS8hAwCrlmWAQTqpEdYWHi4p6eHlx5D9F0FOTk5
+91NTU+/C+Ufx2fC52GJcQ/eJZCCDTCPdkgB8BBAkagQWb2YQ3mAMfIDwZwDhHxISUiIgICDYx8cn
+0MfX1+/kiRPISEoz7xGNNmDS5K9883Jz/XB8xRngwQMInMM/MywsLAq8xb6QR4MP1v03XoSeYMLz
+zze+BL/fuXz50gGu8VDDFFUH6o+bkEHYa/c1C55JlEHgWJHcyo8AgkRNjQEHJF4MSLDBjWCNA37v
+X6JEibCgoODwwMCAkJMnTwazroFSzJMPtTdocAvWvvxy8uzx48eOgGf2ged82cPDo2yZMlHl3dz0
+4z3JyUlX79+/fwmZApx2D/5zh2qYhACChMS+IIJggd1YfgxAECBKBgcHR4JUjomJCWbefAlM48Z/
+FsYf95ACMJBFvPXWgOOz58ztCvkErltEyCDs1W1AQkIAQUJiOfsIhUY5hAMIX1/fUuXLl68OoIEr
+43GgMfizz78INTbzyhxh4wo4PbMD29OAhESWQusgSEh0j9av3GTpHH6XkpqGQBDOBhkreHl5hUUv
+W1oxLi4OxzXCWEInC/uSsV+ZG2DAY/GAJDvi7zjgyE2pTG/S5EW8xzUqeRJiECQk6mAZ2NiHAGBg
+91M4AwgdAwA/AUC48o4cQBQygEiDayFAXDQ2U4WEhISEhISERJby/wIMABz48H5TI73bAAAAAElF
+TkSuQmCC" transform="matrix(0.4798 0 0 0.4785 350.4619 146)">
+			</image>
+		</g>
+	</g>
+</g>
+<text transform="matrix(1 0 0 1 408.4912 240)"><tspan x="0" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">3</tspan><tspan x="4.997" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">–</tspan><tspan x="9.651" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">5 </tspan><tspan x="16.539" y="0" styl [...]
+<text transform="matrix(1 0 0 1 418.6279 251.001)"><tspan x="0" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">3 </tspan><tspan x="6.888" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">t</tspan><tspan x="10.013" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">i</tspan><tspan x="12.235" y="0" [...]
+<text transform="matrix(1 0 0 1 415.8213 262)" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">(</text>
+<a xlink:href="../02b-STG-Stretches.html#p_27-03-04" target="_top"><text transform="matrix(1 0 0 1 418.3242 262)"><tspan x="0" y="0" style="fill:#10137F; font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">p</tspan><tspan x="5.075" y="0" style="fill:#10137F; font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">a</tspan><tspan x="9.345" y="0" style="fill:#10137F; font-family:'MyriadPro-Regul [...]
+<text transform="matrix(1 0 0 1 447.6895 262)" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">)</text>
+<g>
+	<defs>
+		<rect id="SVGID_15_" x="-12" y="-30" width="612" height="783"/>
+	</defs>
+	<clipPath id="SVGID_16_">
+		<use xlink:href="#SVGID_15_"  style="overflow:visible;"/>
+	</clipPath>
+	<path style="clip-path:url(#SVGID_16_);fill:none;stroke:#FFFFFF;stroke-width:0.5;" d="M429.482,218.38v-3.404h-5.197v-0.046l1.472-1.15c1.771-1.449,3.473-3.381,3.473-5.773
+		c0-2.944-2.069-4.83-5.543-4.83c-2.116,0-4.002,0.713-5.151,1.564l1.127,2.967c0.827-0.598,1.954-1.219,3.196-1.219
+		c1.519,0,2.231,0.782,2.231,1.863c-0.023,1.518-1.564,3.082-4.601,5.704l-2.069,1.817v2.507H429.482z"/>
+</g>
+<path style="fill:#1B4787;" d="M418.42,218.38v-2.506l2.069-1.816c3.035-2.622,4.576-4.185,4.599-5.703c0-1.081-0.713-1.862-2.23-1.862
+	c-1.241,0-2.368,0.621-3.196,1.219l-1.126-2.966c1.149-0.851,3.035-1.564,5.15-1.564c3.473,0,5.542,1.886,5.542,4.829
+	c0,2.392-1.702,4.323-3.473,5.772l-1.472,1.149v0.046h5.197v3.403H418.42z"/>
+<g>
+	<defs>
+		
+			<rect id="SVGID_17_" x="62" y="372.999" transform="matrix(-0.9998 -0.0175 0.0175 -0.9998 312.904 824.2565)" width="196.098" height="75.528"/>
+	</defs>
+	<clipPath id="SVGID_18_">
+		<use xlink:href="#SVGID_17_"  style="overflow:visible;"/>
+	</clipPath>
+	<g style="clip-path:url(#SVGID_18_);">
+		<defs>
+			
+				<rect id="SVGID_19_" x="61.999" y="373" transform="matrix(-0.9998 -0.0174 0.0174 -0.9998 312.9036 824.3816)" width="196.099" height="75.651"/>
+		</defs>
+		<clipPath id="SVGID_20_">
+			<use xlink:href="#SVGID_19_"  style="overflow:visible;"/>
+		</clipPath>
+		<g transform="matrix(1 0 1.862645e-09 1 0 3.051758e-05)" style="clip-path:url(#SVGID_20_);">
+			
+				<image style="overflow:visible;" width="409" height="158" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZkAAACeCAYAAADg13fCAAAACXBIWXMAAAsSAAALEgHS3X78AAAA
+GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAHn5JREFUeNrsXQm0FdWVrcf/zCAo
+iF+FiApRg6KoUVsUNe2UOBEc0ipRcY4aicZ0TExLq+3QZjBxSFRaQxyi0TjEFo0iQgIIOBFsYyQC
+IgqooPCRWeD3PtR5WBRV9apezVV7r3XWve/VdOsOZ9e5w7kVgyAIIidYuWpNA4LG6u/27dqsZq5k
+GxVmAUEQGSGQHghOh3SBdAOB7IL/ViK+ENIav3sh7CpxSIvqr88gy3DeAoRrIfMhcyGTIe+QhAiC
+IEguXSAXIzpHySMKEXJ6A/e9F7Ilc5mWDEEQ5SOXjgi+B2vjTIR9HY4Hvifu5fT3TNzrLBybxFwn
+yRAEUQ6CGQylfx2iu4clFp+E8yrufQD+W8fcJ8kQBFFsgrkQyv5XiLaJg1zcyAbPuAjx37AESDIE
+QRSTXNojuAmK/tIkyMXBolmM530Vv2exNEgyBEEUi2DaQrnfh+gpSRKMgzXzJIIh+N3CUiHJEARR
+DIKRdS23Q7FfkAbBOBDNmUp4BEmGIIgC4B7I2WkSjI1o5iINeyC+lEUTP1oxCwiCiMmCaQ/5dVYI
+xoIvQa5HWviRTUuGIIicEoys0H8E0cEZIxhrt9kliN/B0iLJEASRMwsGyvt+RE/MGsHYiGYp0nUo
+4tNYaiQZgiDyQTCdoLQfRPR4P+TiskLf7d6RWzPAW7jvIfi9iKVHkiEIIvsQC2aoFyk4EYsXgQQ9
+PyjR4F4PIX4ai44kQxBEtq2Yy6Csf+FGAlayCEMSUd3HRjSc1kySIQgiwwRzOJT0aENdxViVv90S
+idIKiZBoZqk3gMUsTZIMQRDZIpieUM5TEd3Oi2DiGPyP4v4Wa+YBBGLRrGepkmQIgsgOHod8041g
+4p5ZFjHRHIH4CyxSkgxBENmwYq6BUr46LYJxIYowRDUGciRLliRDEET6BDMIynm86JG0CSZKosG1
+xyD+DEuYJEMQRHoE0xGKeCKie1mVetxjMAkRzSRc+zXE17Ckw4O+ywiCqAdn2AnGRkJpEuBmhBcQ
+AyGnsohpyRAEkY4S7wEF/iqivZyUepZ8lIWwZsZCDmdpk2QIgkgeoyBnZplgwqRJr1uL6w7SqdlE
+CLC7jCCIIFbMEW4Ek8G0hrlcNlo7gyVOS4YgiOSUtnSTvYTozlUlnoWB/hitmYW4rh/iC1n6tGQI
+gohfYY/IE8FEkK6tq1YbQUuGIIh4lbVM6X0e0Ya8EExE1sxE3QqArmZIMgRBxEQwbXVNzL4RWwqZ
+Jhq9phnX7IB4M2tCfWB3GUEQtXBdngnGmtY6Jil0huzNKkCSIQgiHuU8BIr5ijwTTEhiEh15FGtC
+/WB3GUEQbkq2va4T2aMoJBO020zPn4bz90f8c9YKWjIEQUSHC4pEMCHSPsDg6n+SDEEQkSrj/vhy
+v6ZIBONk0QQgpRNYK+oDu8sIgrAr1i5Qwn9FtH8RCaZKMgG7zObg/N0QX8UaQkuGIIhwCnhEkQkm
+qDWj+JJhdpsRJBmCIEJYMYMQXFJ0ggkypdkyy4w7ZtYBdpcRBFFVpu2gdCcYljUxRZ+q7He2mZ73
+Cs47EPG1rC20ZAiCCI7vGw6LLomNkEWZezIbSDIEQQS3Yg7DF/qPbP+V4b03sWhqnNcAOZG1JRjY
+XUYQJJjtoGQnIdq7TARjhZ9uMz1nFs7ZA/GVrDm0ZAiC8Kdgb7ISTEmJ1u+pstXBPqw1JBmCIPwp
+V9np8rQ6FW5hLZoaRHQAa45/sLuMIMpLMNJNNtkw14CUnmCqJOOjy+xZyDdYg0gyBEF4Y5Rh2fmx
+7ARjtWTc8kKPL8HxL3NbZn9gdxlBlNOKkS/xM0gwm+WLn9O6Qv6FuUWSIQjCWZG2Vtcx7MmoYdF4
+kNBA5hJJhiAIZ4h7lP1oxXhbM16TAHBsIM6j/iTJEAThoCCHMRdCQ6Yx92E2kGQIgtj0K723YXH0
+SCsmuDWjx9oZnMpMkiEIYjOcDunMbIjEIuTgP0mGIAjLF3h7KMazaMWEt2YUu3FchiRDEMQXOM/Q
+cQQSTCToB+nEbCDJEAS/ylet6YQv8uHMiUitmW4Gd8skyRAEsQGnQnaiFRMp+cg6IzrLJMkQROkV
+Ygd8iV/GnIjemsF/JBmSDEGUHrLj5W60YmLBwcjTLZgN7qBbCYIo9ld4V3xtv2uY/rZIMiFg99Bs
+cab5NcTHMYdoyRBEGXEiCSY2Aq9GBzM3aMkQRBmV4A74wp6K6DYkmGgsGTtZ639z8F8/xFcwl2jJ
+EERZCKYRSu82IRjmRuzoDTmM2UCSIYgy4ULIcfYvbyJyMq9G2WXmAnaXEUTxFF8TrJjpiPYgwUQH
+t10z9f9PtcvsQ+YULRmCKLoylA3JehRVyadttdjTof9vBTmGtY8kQxBFt2Jkr5jznb64STCxp/Fc
+GQtjLSTJEERRCeY0KLo7pV2TYFKB7C+zL2siSYYgikgwJ0AZj0K0DXMjlfyvRo9nbmwKDvwTRP4V
+3AEgmBcQ7WhTeIWzZLLwbvaV/7Z0foJju3MCAC0ZgigKwWwDhXZvUQkmD8Rng7j/P5s5REuGIIpA
+MJ2h7P6A6NeLTDBuU4ezmB499gGO9Ud8MWtpziwZ2XiJRUYQG9rCLlBiY8pCMBnL+1pp62lwcWa+
+SAaF2gD5IQr1FYS3QWiBEWUmmOPRFsYjun+RCSanZVMloLOop0xUclBoW+qsmeMt/92C/y5n8REl
+VGLDUfdvFD1WdILJ2oC/W/pcPACsx/+DEJ9ESybbDaoPCmm0EIwUpOUr4TLEL6bKIUpELuKu/27U
+/V+WgWCcrIOcpVd067dZczNsyei8f1lY1uTypbAO/z+H8EXIS5BFkGUQ2aWuHWQ5pBmyFNKil8oM
+nC6Gub+GyFrITE43TLxsu2hZVLQcpEC/DNkVsh2kraXM5Jx1kHmQ1ZA3Ia+izOaVKL8a8L5/RvTw
+MpFL1gb867BmZDrz/ojPIslkq0Ftj2CE9GkibO0xg8OOZiWZLqqklivBVElGpJOSkCi2qvsHmQly
+NcJRuG8LKcCzbMQ/k/jE2hLSS4miSYmhC/Kvh37BNeLcZfjdWS9trUSyXMOttSwMC8k0BEjKAtx/
+IsI/QcbhOfMLnOfSRm/DO15cJoLJO8lUj+H/mxH+kCSTjcYkiuccFMilCLetVbminnWCZ52Ne/6W
+RLKmnRKHkPHOkP5iZSBvhEh2sBFEFjAfaZZyu71oFineqzXe6Z5qt0sZB/jdFj7mhWSAt3Bsb8RX
+k2TSbUwnoRB+pkoskkrl4inV67z3cc5hZTBt8Z47VvNarRGxQPri3QcY5vTLKsm08Xm/1Bq3BWKR
+3orwwaJYNjqj8qayEkzerRn9vwX/H1zmCQCVlBuRdG2JOZmq11iLwpqiRLOqYKQi3Yd9IL21G1J2
+8euWVQIJSTZi2dyB8HmIlKN0oX6A89bmsOiuhfwHScbIuzUzCjKMJBONMpNxDvFEehBkd8g/pBtD
+G/rRkFbSt4zz3pYuF8QPUeWXeiWyVBTxZPtQjgmlO4K9NP9lIH0LvE8/sVQMnZWUV0IJSDaGlWTw
+bhMQPoTzJueoLE9Fen9fZpKplm3OSWaJegB4nyRTf2OQnJTZYFcg3M92+AbILjjnWBwXEmrIonKz
+KKmXkJ5D8fvznCiiihLKiUizbJokJNO7qGRSJ9lY8SLe/wGE43Huuxl/nZGQc0ky+bBmvLrkcexX
+CL9HkqlPycmWo79GdJDD4bmQ2ZBD86DsLJX56zplNMvkIgPyks4TDXNwvm2ZyCQC4vlELG21cMZB
+ZuC8uRkpW5mVdx3Sc5HhMsOSRJM7a2aNfrxOLlvZVUI2hlOQaXfo1/MmmawZK/3gjXlRehZl9Bjk
+pAwSS1+1GMX7gbgUaUNSiczS+RjyrnblyiDtZJz7ZkLl2sEw18DIDL7d8NyjxPpnueaHaGqlTY+/
+huMHIl6qAq2EaBhnqYvxio/MzUVDsSigFrVmnssAsciaFPFVdQrCgYa5DogWS/yks0qVwh8Rvojz
+3ghZjrJW6CuGucZoPWSeZSbj/ZChebD2STKhSKaUSyUqdTQWya2bdT1LxU+B55Ro3kZ6v4rfy1Ii
+l70RyMDvNw1zvYpBJZQa8UgmT0Nev47wM8hOOEes99ZqqS/CsQWGOdFFut+k622plo98FJyO3+cg
+3EOvESzGMVkD85x6U2a5loNoZuP4PogvIck4K7TuOv5yctCCziPRiMdnJdMkSKWzdpEcgmeK+/aD
+DZfusDzlZYEtHS/8E1JdqyMeLPq6nCfucoScerI8g5dHhsd0ax0fpk5/STI2Bdekzir3rqeAc2rN
+SHpvxO8fR0wo8vUrU7dl9bz4NpJusN0MSz+8V0MiyaRbNwK4OnIsR7dzWZ7BST+nRDNDfZo1k2Q2
+LcwjkCnP11uweVOMNqK5WC24eklFpm3LWhVZZX+0kop0gXXyq5hIMFSWRGFIplQ+zRoDnNs14S6H
+VCGVpJpuhLfLDCB1fRPkHmKdHIPrvmWY04zbBHk+UQ6wrItVlqI33Cxey/ErEBcP8CNpyRgb9xL/
+C6IDymDFeFg0MtPoFsjLtdyUqPVzM6Idouw2oSVTvC9ylmWgPJOZnw/rhJh2eVw3Yzm+FscH6zBE
+eUkGmSBuSe5D9IR6G0TW3UIEtMJkO4DpkI/wTlWvvx9rKGMsC3CNjFsdFfVXLQmGRMP8MubpAvAH
+pZcg5yQjaFZXVs+UkmTw8uJrTBYmDg5DMEVoRHF3+RVtKjhBookpr2SB7B7Iq23x+2mjzolIGSOa
+ldK1jt/vFbHcam2//J9hCKZIsG7/nAbBUBEVt14l9SFTEGyr3feycZ30FtyT1byzLznwQKFnmTV6
+ZNDJyJxSuxkPo+TdZsHUMzuGyqccdao6YMw25wnZ52gnyHTklWy5fq7+f06OLdgbi2rFuFoyOpNq
+BCt7eMvHagGFJRiWBT9giA0eE/rZ8m1MnqwZezrx+zic17FUJAMcKwXJSh/NF4v1C9VKQLRgCD9K
+yQldv/JvG6SkGGj73SFvlqoN4hz1iqIWltvA/yjImVFvg2xde1IkAvNDBmWeNEEYkZS9G6kseevh
+UuUJ8H/Il32r3owRPwfx/8lyW/HRfS6zVXctok+zRgdl2BEvelAcheVkMhZp1lmU70KCIWqRS4kh
+Swda7B/LWW4r1g9sl/+3gQyHXFO0wnLqLhNPsTtGbSpW4/auoqJ0CZFgiKjRdqchJBhjk24mWQD9
+U11XYt25dkUedEmt9oz0/0S2AigDyRxm1J7aHDhz7RnMqZsE4W65CMEQm2ApdIZsJPjvOqvMimmG
+uR1D3j9QG2UTSPweDmlXlIKr2F62gpccj+igpL6i6/VeG2bGVtTppxVDREUu9aKo4zLaHj5GexiC
++CSPU5+EnJCzrUS8dKHsX3QV/nu2aJaM9Av2T7KgfJiQjrMyPGZqJF5ZwnYD0JIj2C3m2r6WQUcM
+rUEwG/Z+QrA+T22pxgfyABx/Ev/9XPbxKhLJHGqE8LYchmj8ElvWvlSiSg/JprzkQoJxbQvNuih8
+jI9rxiK4Mg/v56UzbLqwDd7rcshkGYfSLUNyB/sUZpkGeE7eumq8Znh5Ke6w7xm2q8xqNnPRJa2X
+sChCl5mlHbyinsxfCXgL8Wd2TNbbkJ9ucQfd9RLOvwvhWByblzuSQeK7IeHTEW6fV4JJkmSiGIvJ
+s3dqIjvkUjCC+VQGvhE+gd/L67ASeujmintmuW0F+ah00GHit20UwpE49m6eSOYE7QMsDMGE+Yog
+yRBZJ5giDfZb2uR51YWV9QL32Bn3mGCYzjRzbc3UIJtPcK14yZdJD29nlXCs3WVihp2fx+2RgxJG
+WJKJihxIMiSYMhOLQ1v+k84iWx/2nnqfR2W7kiJYMzXIpko4srHkL5Vgs0UySFwnJGwGwu3yRjBp
+uGuJyooJa00R5SCXoruN0bawGG1hT8Tfj/DWsrXxuUWyZnwQzjrIBNzvJYRTIeLdeT7OW5g2yRyC
+RIyTdTI5M61TIYkoB/wJEkxZycWmJP/biHh2GNpXV9z/OUT3y4NPs6g+XG0QzwjzRXD/KQjHQeZI
+9YI045qltjzrhqALpDNkGUTGxdrqf5LAubhmRT0k8wPZjz5vXWVpWTFhn02CIcF4YfXsx0tTRyx7
+3e+D+BtR3x/37Yv7TkS0R9by082XWRz3tWGNkozIIuMLbwlCJk2GuYylkwvJvI80yoy/+yCT8KxV
+vkgGuBtyXtFJJgolX68VQ+uFBOPXcilTXdF3na3bD8f1wrKx2cis5GcQLydJPC8E3kRa/4jwVjxj
+cS2SkRkKQ/I46F/PzIykrRgSDAnGD7mUsb7ouz4KOSXmR6W2BtDvMoqkXWRFSD5TxK+c29qdqqv/
+1nmupAEXNOXC6iKyQxhBxkaCEIzXfctUX/Cu78TdTvGMK/GMYyBNSeRtFOvz4p59GuFkgwPwnxDN
+9QjvdCOZ93NWKTd52aAVNMz89KALp0gu5bFI/J5flk3GArSrOQk8S8YexNnksKStgaAus+z7bmXZ
+lZYlrT0RvwXHnkb4gRPJ/COrLxS0UPyaon7f18kxZ9xfCkQxyYjk4giZcjstIX3xFNpvJCQTp7sq
+t4/oHExckO0JfgS5eDOSUfa5yjBnFuTR3A58jp8CrNeEJ7mUz4ohwdQNsTDeSehZMp15Jtp1nyiW
+IMTd1u0+DbNiBHjpRRy7AGl8yzBd3qzZSDL4MQcHvoPwibKsQnf6Wgiyd40baZFgSEYkl0B4AW2n
+OSHluBKBTL/tE4VyTaKtew0NZG0Sg6IB59xumJMsNuzy2cpysfi/+V3ZangtC6bW9tG0YMpLJCSY
+SNrf+IQf+VkU1kvSbd1NT6U1scmqC+2iGAA5Q6TRduH3kehBkB3LqjCDfinQgimfdVLrHJKL73Ym
+C/n+kvCjG+LWCUkQjb0bLan0Bbz/mk0sGU3sJwgeKHnFD0wwBEmIBFMXZMB/VsLPXBNEH2S1jbtZ
+UxlLs/hOm9rKIfH3S1BWBerXFKaLmHISS1IEU5L293wUHpcDYqGfvM9L/rt14Vu3dk/yXSzPkqEX
+2UDu6UaH8xYYplO19mUkmCSuIWjBlBmWLubXUlDm64MQe61lElnUX27LNeLQVy75Ijt4fhfHhEcM
+J5L5XNl+izi/yOrpjsqa7yESDBEHudinrhYUomMmpvDc1kHIJe8fy7XW+dWxK6cXZJbg47jnZbhu
+4wQLJ5LpmIS5X08jinIfF3tjTnJXTSKf1gqtl0jxipdTxRixrZc+SEIHZYVwvN7fh34Wi1BW9s82
+zLGXabj+dVy3mYugRoeHXo5g5zAZmpevsHrd0RBEUvWzwB8zb6f03B5BCaYo7T4I4ThA9p0ZbZiT
+NebiXrItw3vWvWXcrm90SMg9OLmXYc5xDq24w5hjSfaH1rJQONBPuFk9tGjqamfTk1beshUznrml
+W3su00ek22JyD8gJ/SG9IS3aHdYK95EuslfVmplUHYexouKSAFm1KZvSnBZEqcY1hhJGwUfhGoYE
+Uz7iiAJhyaeIloy2peV4r70Qn5mwYm2DZ76M6J4+L5F1PDIDVxSqKM+mouuAkEQrnphvwD3+tybJ
+aEa2x8mTDHPlZmreh+NcuxKUzUkwJJkkiaZo43+W9iVuR76bwte7fDyPR/Qgj9P+CnlMtypeYSGZ
+Abj2sTLqgaDEg/z5LYLzcJ04P3Uc+K/eeKV6AJB+uPZ+HxTn9qFhzdlaafOa1UOCIZKyYAquqKai
+LV2TUtdUB8guLsfeQLquRfg40tbi8NEsE6JECZRuYLYOT/XDcI149v+pJ8noyeMQ3AC5LgmCibLi
+1ZsWP84wCSIJcinKVGbLO/xGNw9bmlJSpCF/Ctna8t9c0W9I10NI13KPa2U2VQs/Ftr4PU/ydEJN
+ktGKPiXKjXniaFRxkEBJ1ioQtFySUEqioP8LMiLNNoVnr0ZwtWFuxdwZMhPtfDD+/7uPdFVYmoHQ
+FjLYF8kAHxrmxkINSXzVe42TpGVRlGX7A4LkEtNX7w8gv8hIsh6RmW2GuV7mbaTxQ5ZULBBCn+KX
+ZGZA3jR0RkbSCjdtr6e0ZggSTCiCGZ8hgqmmbYbqtSCgJbM5/mmYG8HNgexlmLORq16uxfHpUxJp
+5aNAPoeyPVNv6LdiFbnRECQY1j1/mA3dcWFBin0diWYzrEX5viAfEQhvMszxro0fF+L8VMR3puEm
+/XRKcxcnK6PIA+V0JVMuuE1jTsN6yVvds+iBxUjzv+L3tCLUCbxLF7yLeCloKose8Llgda3uqiwT
+xGRCxWuQn+G/J3QMrLYlY3ng3xEMNcwxmo0PdHIlXdSvfloztF4I97ZhaR/PQ8kcVRSCUciMuL9R
+D2wGGXKRfchkBvJYlPvJCB+uEoxRj/mHm/TEDS41zME8r/MKTTC0aspjyaRJMHmwZCxtoxnpvFS9
+hRQRtxq6iLSM1owNywxzCGUk5E6ve4TpYxwGOckwFzjJFMUxhtlveb2h7rSLTjQknOKTTBYsmLgn
+29z3zOuO/5/xjb2DtIexugbm1aLWC7zfSXi/R8vW5h303pt4//MQvuxn07k4BrJ+rERTOh8/JBuS
+TJasGTfyiAIXDDmgGpXB/Z8gjQ8VvV7gPVvrAvWBZdRvit/jvYfj+CK/96rEUBCNSIDMj96nzANk
+RP6JJkvjMF7WTJxkUoNgJiJNpyJtH5SlXuB9j8b7Ppt2e3fbFytGzIf8HM+6RdzuBLkwril5V0Ju
+LLNZSbIh4qhbdz0+JdV0WAhmjAzyIl3NJSyOOyAXxdXWAxDGKtXhbW3/r4UsEEPcMF3hyOB8dVaw
+nNvdx73lw+FdlZd1ttj8et6nMY4SQIIeQIKuQLRbmVbLc/EmETWStlJ8EszfSkww0s4vx7v3QfTI
+WlZmHcRhxUeG6QFawncg7+E5r+l/yywkIy5yqg9oUXL50INktoFshTTJAspexhc+2eRec9UD9Sbe
+EMLotTgXF30L8qCRkDuaLH510pohoiQVUfJpWjJKMjIGcyTq+KwylxPyoDPyQPygyQBezwCXLreQ
+x0K1OGQKsCxkXIj7iuUg039X6LHP8Jwlec6ruFewXmWYjvHYbUYQIa2VqiWRBtHos1cowUxiqW1s
+303IjxGGORlALIItDHO2rZCIrK2ZqwQyS7csFuL4WMnj8zLkUWPMBXATMnJ/RI8rercZZ5sRUZNK
+VqAEsw71+XwSzGbtXrqUvoO8aWsnGTuJlLUrPXZfPMj8LZC5MlA2tGiK16vSkGCIqInFMiaSiDVj
+eZ64DpGdDkexJInMkYwq3Lb6BbRP3hUwt2gm0rRYkuoysxCMDDZfgnr/NEuUyCzJqPLtg4o6FtEv
+5U0Z02Ih0iSWJK0Zy/3Fe8ddqN/X1zt1lSASJRlVyPuhwt5t6N40WVXSfvtOSTBEEsQSxprxOyPN
+Qi6LIU+ibo9EO5jM0iVyRTKqmMVl9r2IDklbYQcZiHPa1iDM3HgSFIklamvG+n8dkHUYf0C9HFX2
+6clEzklGFWx7VGTxcTbcMBcShVbAUc/c8EqDF8k47bcAmandD730fSthnh8mD0hu+SUXN6LxAVm4
+J8Rh3dqjRf+ThZVTEU4p6+JKooAkY1F4u6BiX4LowZC+hunROUqs0oYli5s+1ca2XsOVkO0guwZR
+wD7JrNqoR+Oej2h8I8noauFvQwYZ5kpdSV+DEpKkWaZBtq/jfcVpnczBF2UhC7g+UmXSQZ+9o2Hu
+bU7CySm5eJGMxyaCsi3uo9oWqm2+BeewAhDFJhlLI5CtAUTxdkfFvwCh+Bhv0q/+RotF0GhR4kIa
+S1WJSjjdMB32LbCcYyUZWVUrq23XWzbUudlw2BfHp4ViVeoyV16+Bt/QFbui4GfXWmwlJGuY2yKs
+0XSuU/ITFxBi7Qnx7qXE0Efzw+qcTsjkdX2ubCon774Q161wed72OHYsoqdCDtRn+7bciPRR7R6z
+koy97CzlJe1C9n76HXOOKDXJOCjDDqpYO0G6WhRqR03zIiWZ5pBfZEJoQ1XZiuUgq3R7Q7Z3OV+e
+8wzkKaRxhmF6Jv0Iz1+ZUL60tSmT1SHutSeuPxrRwyE7G6ZrjNa2d61onixR0q6o4rKSp1iG8/S/
+D/T3eiVLKSNZxPeZ/vbKpwakR6zK7kqm3W2EujHpWu5tNI2r9Dwh2DV41ircp6JELT6a2mldqrjc
+r6LkXk27kP0i3EesTztZV3DvJrU0mzzuab93NZ2dNI9bVLpp2rZWS7aLPn8rFSfnh27laScZWdsi
+i6D/TDVHkGSyQWxthKwQbovwFPx1rSqTj9RKkr7rp3FsQgHfvZuSTFetE2uUXFopqSxRK7AShtiI
+2nXQgWSke3UHw+zqlFBmZu7no+2OhhzLXCWI7DZ42Q/nOEgv5gaRsbopJHMD5GXDdMW+zGIdtagV
+cxRziqAlQxBEWMKRbkXpbpOwq7hvx3+vIxzN3CGygP8XYADI1rPOTgMXYAAAAABJRU5ErkJggg==" transform="matrix(0.4794 0.0084 -0.0084 0.4787 62.6738 371.2939)">
+			</image>
+		</g>
+	</g>
+</g>
+<text transform="matrix(1 0 0 1 90.2842 465)"><tspan x="0" y="0" style="font-family:'MyriadPro-It'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">R</tspan><tspan x="4.968" y="0" style="font-family:'MyriadPro-It'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">e</tspan><tspan x="9.329" y="0" style="font-family:'MyriadPro-It'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">p</tspan><tspan x="14.392" y="0" style="font-family:'M [...]
+<text transform="matrix(1 0 0 1 131.0864 479.0029)"><tspan x="0" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">1</tspan><tspan x="4.465" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">0 </tspan><tspan x="11.352" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">s</tspan><tspan x="15.162" y="0 [...]
+<text transform="matrix(1 0 0 1 135.8154 490)" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">(</text>
+<a xlink:href="../02b-STG-Stretches.html#p_29-01" target="_top"><text transform="matrix(1 0 0 1 138.3179 490)"><tspan x="0" y="0" style="fill:#10137F; font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">p</tspan><tspan x="5.075" y="0" style="fill:#10137F; font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">a</tspan><tspan x="9.345" y="0" style="fill:#10137F; font-family:'MyriadPro-Regular' [...]
+<text transform="matrix(1 0 0 1 167.6914 490)" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">)</text>
+<g>
+	<defs>
+		<rect id="SVGID_21_" x="-12" y="-30" width="612" height="783"/>
+	</defs>
+	<clipPath id="SVGID_22_">
+		<use xlink:href="#SVGID_21_"  style="overflow:visible;"/>
+	</clipPath>
+	<path style="clip-path:url(#SVGID_22_);fill:none;stroke:#FFFFFF;stroke-width:0.5;" d="M129.973,428.94l0.023-0.047l1.265-2.483c0.552-1.035,0.966-2.001,1.449-2.99h0.092
+		c-0.046,1.035-0.115,2.024-0.115,2.967v2.554H129.973z M136.597,435.38v-3.357h1.656v-3.082h-1.656v-8.511h-5.198l-5.198,8.901
+		v2.691h6.486v3.357H136.597z"/>
+</g>
+<path style="fill:#1B4787;" d="M132.686,435.38v-3.357h-6.484v-2.69l5.197-8.898h5.197v8.508h1.656v3.081h-1.656v3.357H132.686z
+	 M132.686,428.941v-2.553c0-0.942,0.069-1.932,0.115-2.966h-0.092c-0.483,0.988-0.896,1.954-1.449,2.989l-1.265,2.483l-0.023,0.046
+	H132.686z"/>
+<g>
+	<defs>
+		<rect id="SVGID_23_" x="50.991" y="541.996" width="192.089" height="66.176"/>
+	</defs>
+	<clipPath id="SVGID_24_">
+		<use xlink:href="#SVGID_23_"  style="overflow:visible;"/>
+	</clipPath>
+	<g style="clip-path:url(#SVGID_24_);">
+		<defs>
+			<rect id="SVGID_25_" x="50.992" y="541.996" width="192.088" height="66.345"/>
+		</defs>
+		<clipPath id="SVGID_26_">
+			<use xlink:href="#SVGID_25_"  style="overflow:visible;"/>
+		</clipPath>
+		<g transform="matrix(1 0 0 1 3.814697e-06 0)" style="clip-path:url(#SVGID_26_);">
+			
+				<image style="overflow:visible;" width="401" height="139" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZQAAACOCAYAAAAW//7pAAAACXBIWXMAABcRAAAXEQHKJvM/AAAA
+GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAQbVJREFUeNrsXQd4FNXanmTTey+k
+F5JAEkIooVcVUMRyEQvVq6CI+uu9ig2sBESKWEGkqMCl20BEOgm9JKQS0gsJSYD0Xvf/vt05MBm2
+JWyZTc77POeZLbM7M2fOfO/56mEYCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj4MeuqFNzQ2m8Cm
+D7QSczOTUjoUKCgoKCi6QibPwuYCtHpHR8d98L4vNEPaMxQUFBQUnSGTl2Ej5rR2aDfd3d1/gu8G
+QbOivURBQaGiPDGE5so2C2im0ETQaOd08xtvD+1N1EqQSOC1+NDho2IeudT17x95Gb5bCi1EDcfE
+ARYJbRK04dC86Z2goNBrOWIJzR/aeGjvhof3+wc+zodWAO0qtGRoV/bt/+sgfP8qNE9q/eheAyAC
+2ufwMpsQB5IJt8kgFtRa0K+Cg+XvsLCw/bDfCziYVDieGbTBW7Zui4a3p5Gk2P9sdXB0PAPfhdG7
+QkGhVzIkGNpr0H4ZNGhQPHxUhs8zT2bIa7nff78OJ6je0Axob+rvIBgDm53QGvk3WQVCkdWqXF3d
+/ocExTmGETQ3aEOgPQ3tjW3btv8GX1XK+Y8aExOTn6lZjYJC8PLDDtqUgIDAnSyBtMt6plF28OUJ
+ttGjx3TYb+u2/x3FiSbKDNq7+jUQesHmJ1k3X9aN5xMKDgQlRFMxYMCAv0GlXQ+vD0K7Dq1F1vHI
+f3H/x9fXNws+m0bvFAWFIOVHALT3w8LC4/CtKuShqPGIJX/hwndeQrKiPS38gYA+ko/hZZGqRKKI
+TLqgwSj8H85/lBkYGHxB7aoUFIKSH0O9vb03wstiaG33QyJKiKVx2bLPl6Flg/a6MAeCCc4oGI6P
+RBmJyBL08shEEako+42c3zeKRKJfMRqE3j0KCp3KDozGivL08voB3t5WN4koIJW2JdFLKakIcED4
+wOZYV4hEkebRGaLowvHaLCwsYuhgoqDQqewY4eXltQNeVmmaSOSQSsvXX3+7rrtFfhrp8YAYb25m
+sgFe+rPvO/0fEyc8qItTN3RwcHCBbX9GGkVGQUGhPbnRGzYvRw0eOPv69evO+BkQCTN69GitHP/Q
+4SMgdx5iYmNjjN544/X5xsbGGIb8MciyXEoouhsU/4IbsA1emneVTOQBZhCSm65JFBYWBvQO9P8Y
+zrsVruNoD3ugccw5QvOCZsFIo/Bq2FYB/VHH7mfIjk/cYlQcPvzozMRom1pGmk9UCftXUDFJocK4
+c4DNk+Fhfd/KysoKgtcibRKJHFJhFiyYP6OxqbEGzm85jOXrlFC0PzDeho5fBi+N74dM4D90eRnG
+QCpDhw6J2gXn/ye83wbnc7wbP8zY2b7r1n4/Fq5zKiOtoYbReCKWIBoIobAmiEbYD++vNYdQHNn3
+aC5oYqT5PRVh4eGZly7F4QwATZ8p8Lt2Kj4pOGMPfZVPhIX2fTM7OysSXpvqikjkkIrhf//z5gIL
+c3MMU/4Qxm8OvWvaGxwfMV3wlchqjBZ9J8p8N76+fhhK/HQ3vF+2n3zy6XP4/EC7yXQiUq4LrdzO
+3n4trUZAwRl/g9zde+2Cl9WMlnwk9+lXOWRtbR1KEyC1MzimsbNZvSYTecTi6uqajI7C7mLWGjVq
+1CB4eYCRkVGsJKxapfsiZ/8mZ2fn49zkU4oeKSucQDBjpYoSRosOd3WQyuaffv4T3vehpKLZARLK
+mkPUcvOEQig8wdjs7u4eq++kguVpZs+Zg2atdG31L49cCKn0p09Oj5QVQ+E5+oc1owqeSGSRysZN
+m39lgwf0DoZ6MEA8WQe8nbqc7/g/3P/ShiNeHtCWizZdgHFxcfFIHx+vb/Gh0LOHGOP5HbHczcaN
+G5Zv+eUXrFQQRPoW+3rR4g8lNmNN9SEeg+1Hk1u3bo3y8fb8Dk0eVMT2GCLBqr+jQ/v22QLP0QQY
+C1hTT+e+ks4AZRA+L3NffOFfO7ZvX4l1/2gCtHoHiStsLjJq8pvI0lR0pZkomGW3+vn7J6KJTx8G
+E+bTfPnlGvRtYdhjM6OkhI2m+5tzrBYbG9tj8JkffZK6vZxw6NOnz+vwMlPftBIlPpWExR9+9G99
+KtUiaIEFmsmHsBlMtIruDI6mIsrNyekH1/5jYIAfrtEyWMAPssvSpdHz//vf/3wKb30ZNvKOaHyx
+sbGSaDpuvg+GSuJn3KZOzYXTj0bV1VVDbG2tP4XztKZit9uSSZ+HH564Ki0tDSuKBwohgkuNiIhe
+8tnmP/74/QBc51P6MI4NBTxQMPlvpqbIBAWZLk1dKphu7IqKiqZaWpi9giYlAd4fAydHey8Y8P+6
+e/5j2POXkomqiaNcklGzWcwywD8AT+IlKnq7HZHgQlaPvfDv5zedPHHi+cWLP7TUNxOXItOX9FrG
+SN4/9+wzw+HZ+Pn11159Fj63oYTSBfz802YUArakU9UJFHaIfhH9hK6tmJiamrrD1l4XhMGW5zdl
+FwrzwErO7AJDGIFi6OLiiqq4p7QvIyR+Euzb7777VkImtnZ2koeC2157/XXJw3Lh4iXJe/ydPHKR
+1VQhHOw//H/877S0q25urs7zPvzwoygaOaP3JGIc3q+f+7/+NfWx/hHhm2E8bDp79sywHzdsNMCx
+191AiAWfGXiWLDdu3PD5pIkPjRFyHUADgQ4cKxgsuDhVhKa0E01pPuokPRTKGE6cl3/9FTjnM1rq
+e9yYbdu21WP1qlVeII2tnZ1dLAdHRQ0Tt7e3l5WVXf70syXIyDdCgoPG5ufn7WWkGex3gEQS0S9C
+QtgrV66WeZyqqkomMTGJSUpKZBa+/VYnyFZ1rRL/e968uUxSYmKjr5/firS09K9oZr1eEgnKKZtP
+Pv6o75YtvzxRXFz8lI+Pj7+Pjy8zc9YsZtas2d2+D9gkyLZnnnl23s+/bNlNKkoIDULNlB8GLUyT
+2gn/tZ2dLdOvn/DSF6ysrNBuGgjtjDYe3CmPPmINhxwKx5197VraKGiSVSr37NmNmeqMl5fXrb6h
+oRtgYK/09vYyBkKpJYTSVSIhv5OHSvgNkEKnrwfvJ54HELOZg73DeJjh4YqZR2k2vV6RifmM6c95
+9erVa+z58+dmgMY+BOSCaU8hEj5sbG0tBCy3hXdiOEP+44/fH2EktXbU799YGr2Ew/p3bfxoHtmw
+YaPgSKW5pcX0n38OOmuh301A4HqmpKSMLSkpeQ0+iuRrHTArRMHu9NqrC56Mj4srdXJyxrBcJ2VE
+QkiEaA1IJMQcJu37jr/j7n/nN4lv3SEXnAioOgGQ7Af3Nj4+rn96+rVHdmzffhWutVDHpXcolI9H
+Sc23H9f/MDglJXn6b7/9OgHGnyOatnoikbAQ+Xh7YyUIrGFYJcQTNBDiQIKHPQZeDteUSYprh+fO
+foXkpOc4tXH5Uayq/L6m+vuLL5Y7Hzt6JAwI4unff//tcRD2zix53CGTWTAjnDLlcXJOOMPHVSpN
+yXeKiESWNiKLfDpjBuvMBIDTl/khISHfXklI+hnGWBkV24I1b1kvWvRBH3s7u8nHTxyflpOdHezj
+42vQU7USxMKFbzFbt25lZkyfsXfM2LHvP/P0tCyqoagGVOmCNXkALmlw7OxScoH3AtNSJFV3kVzV
+OatGIlm1aqXziOHDgh2dHB85derUv0DYB0gd5f245CEhABT+HBOhoTIyQSA5cJ3zyrQReUTCNYmR
+CQA2vG/yjs3VYPA1EmR+fr6Pi4vrC/v376uF698D/VlORbiwzFsgKD09PD3GXLp4cebt27eHenv7
+mPZwrUQCHOdJ8JysXfu9z/r1P1iqWx50Z0KxZVU6rQCFDs50CaksfPttQWgpxFQD52RsaGhox96r
+VjU8tEgGNv8cPBh06lTsU/HxcY/Z2dn1BoFvSIQ9CnmcDRFhLisaThmZkGsgBNUZbYTvU+H+nhuO
+jPdLXmgy9h3+hhALCiU0d8bGxvQVi8Wvt7eL26Av9sJDWUlFue6tEv3CQ52enzN7aGZW5rP79v35
+AEwAnCiRyISZiYmJEWtdElNCUY4Q7DRtHpDjvBWMlsI5J3NAAHyEeTk37sOMYPLll6vt+4QE+z76
+6KODGxsbHz986NADKLxn8ogBBT0R8kQ74ZIczPSVkgm5Bj45q0Ikipz6MmcgMpz6eB/xfhJiQWIr
+mJXPRAOpAJGGtra2vioWt2Nm8n7YvQyIpY3KKp2Yt2wXLfogqKKi4rFdu3Y+C0Qi0ZJ7snlLCZoB
+rUIkE0ESyu+//x6OJhVNRHipqBHINKXoIgqMPSdR4fXrnps3bYqCj/7o5AOLCZHWu3ftdPnp55+C
+TE1MR+Xl5T783XffBoEQNpWlPVSxhCpLOyHa3NatWzol8Ln/jZoPl0i4ZKBIkyEg56ZMU5IS1tt3
+iIUvnM6dO9vfzMxsYXZ2tuvRI0d2QF/lUke9VsnEYtbMGWjeGnf+3PkZVlZWg/r2DTWnRKIU9W1t
+ba1CHasGAhtkaBfcBC9f0EWOCNefIsuEoosoMNbEU2FqarqlsqpmMfRPrSpmraenPWWdnn4tZMKE
+iUPq6+tHb968aRRqOcq0AGJSUsWk1dX+RQ1HVRJR5qBXdl8IseTn50mOKwM3w8LDf7h0KQ5tfLhu
+BlapbYB+bqWySyPPuMnIEcOcAwICh6SkpEy7ejUVzVvO1LylHBhMVFhY+IeTk9M7Fy9eyKQainLg
+jDpQAGame75DYdTVmfn9aikRERE2ubm5I1eu+AK1lONKNBKbvXv3uKWmpozOycmZm5GRgWXcjVTN
+ESEaANfUpc7+VabhyNJiFJIUT6Pka5LE7IbH3Ab/K4NYXDw9PZ/fsuWXYNAE0wsAvn5+6dCX2fDd
+bSCWFirK1EMksHH4cvWqvjdv3nw8Li7uCSASb2re6hzeeuvt6hdefLFFqBqK0AgFl3rV6ToAXNOX
+MnOMtkhuxcrVIiA5n48++nA8n1CIWWvnjh32/SPCPSdOejiqprp6BJDJWPjcvjN+CeI7keeIVydp
+yyISWb4VeUmP3HBvrnOe74wnQIGFjRDL3YlCHvPPwYPe2NiPGidMmJD51VdrDjY0NPwF/XuNka5d
+T4mla0SCMsZuxYovwoxEoolHjx591FAkCgEiMRIqkeAYrKysgolcP8bW1k7pvhhBqGw/tZmUAIxA
+K5wIkVA8GOna4ToDDg4c5NH5S9Ru8rlPWMCgDS4pvdmXkeaANIBwNAoL7eMFJBLZUF8flZ6ejg01
+PIPOOriJdqIJU5cqx5bnW1FmmiP7krwZQi7KiIWATzAAM+jD8MOHDwcPHzFibHtb234LC4uzIBgx
+7v8Waw6jTKGcSKQO9w/eDzIzNx8fc/LktDNnTkfAfRIJ3byFJlKsKbdy1WrJsyCPLIgJVxr0oZ2i
+lBmZGfYHDx4U7AAUGqH0YtgS6LoAEWwYCSQkMmG1Joua6poHf/11r2NTY1NlRUVFUWJSgk12dvaI
+td9/5wu7ibqqUXEFOpogtH3dxJyo6vnzAwdmsTNdFARcDYZLLGSygI0LPsFwSMYEtJcoGAuRkyY9
+nAekchxwxN7ePhWEJSZFor+lGchFzFDwycRizpxZXm5u7uPOnz/33MULFwZDv5vri3kLx14iR1OW
+RSqETMjzqS18teZLz/U/rJMUaBXi2BOaU/5R6KT97GutH5/MeoVW1l6ZX6Gr4bayZvu6unZ8QJX5
+qGSZxeSdL3HGc81jKMhmssJMFrnwIcPvcmvEiBGXx4wZe/7CxQtJwcHBOatXrymFzytg3HbvBXtU
+e34xx8lx06aNMMn5fvrVq6njsVyKPhZxJJnpVZWVjKw1VthijYw2119hj1ni7e39XHpG1ikhhroL
+SkP5de9efyIkhAoUaihcNBntJbOWlYIMcnX5dzTpO1E6K1QQBKDIvyLvfLk5MIRcUAAgSRDNBMlF
+EbHw/S5ALM5nzpx5GBuSSHtbW8oXXyw/aW5mfgqEKUbdYOZ9XU/MaYHrN5s9e6ZvWGjYkydjTj5f
+V1cbpM8Od5KZjmNG1mQFJymo/WpTO2HR0tLSSvNQVJndwIOIUUyC0g74kDiuYfaiqRBief4EfDi5
+jmhN+Do0EdmlDlKVlwSp6vXzI72kWpmUXLpCLFIzXZ79iRMnRkEbjiYxSyvLU4kJCedOnz6d9sST
+Txbu2LHrNksu3bqyMRsUYr9u7feDrly5MmvP7t2ToB8dukMYMDF94fjjOuhxcoLPIWon2kojICTm
+5uaWYmlpeVuo40pIGgouIjVcHwaaJku0cCOtiD8BBR0KPVJ1VxeOc20TibKSLF3Ryrj+EkIOXSEW
+7u8BorS0qwH//HMQqxk8A63AzMz04oJX5p90cHBIAoFbhFY3aI3dzd+CtbdefnlegJen1yOxsbHP
+tTS3hMPER9RdwoCJloLjEIkDTVu60k5YEmtYuPCdY58tib5Jw4Y5mghz1/GOD1gL+6ChduIrhE6R
+V36F6wzWlDDlR1oRjYUb0dQdyUSVsGF1hm7ztQ4+sRDIIxg55GIOmkswzNSxPTl23LiUL1evPnXu
+/NmLQC5YNr8E9qnljHl9JRJ8fp02bdoYdfHChdlbfvnlQegjm56QnKgL7YSDnF27dp4BQhFs/Tkj
+LQ1APA4u1OTi4+Pl3LdvXyf8vLmpqTUuLg5DMVtgcE5kBBIkQJLl+GYtbo0rjZnTOJFWXPOXuv0l
+QiMTrplPm/k/9/pJ8iVFJIkjXhVHvixygd9bnTxxYig2+Lhi0ODBZxct+iDm0sWLaR4eHtnwTFxX
+pepBJyZpWFDVln3O0BzShFoR07GgaDun4eetqphO2P/HKTHW2LNevXpVb0NDw4nHjh59sqGhIRDG
+a48oLa9j3wniRkFBQZWQzagaIRSWQDBJEVcbtB08eKDr8OHD+w6JGjLuZmlpBDRbzgBHtq177dUF
+JLFMEnWkrcgJLrhJjbJqesmrcaVO7YRoSNgH3MWourOJi08murhWefkpSCovzXux0+TCixCzv3zp
+0mRoOGmq7N8/8uyOHdu3w3OSyAr+erY1stqLsudLxBKI1WuvLbDuHRjgOHzE8IABkQMHOjk7+bS1
+tjVX11TfKisru1lTXV0rZv23TU3NzQ319Y1AAo23b9+uzsrKKn/99f+rWbFyVR2rOeHxSUABHgPX
+Lrf67NNPnBMSE+Byfd2Dg4L6nDx5YuzRI0cC4QOjnlIyhUQh6lA7YXx9fVvt7e3bQfsVbD/dt0bA
+zl4s2GYDD4MFCGUXJJDg4JC+rq6uodOfe9aPkSYtdoCsaC4SVaHNcDz+wOGHm3KhKYHHDd3VxvFk
+HVvbIcO60MCQGLCpEjbMJxfp7ztqLsr+R07Jl/aJkyblT58+I72utvbWrdu3C/Pz8vISEq5k19TU
+piclp5RgLTH0UTDSRF8zIujfeuu/5seOHnGKGjIkoHfvoCDQEoJjYk4GwVfecB7WGKIr+7olxxez
+kzgMcUYSqX7kkcmlUx57LLe4uDj7RlFRaTUQEO5vbW1t6erm5uTp6dl7359/hrE+Iuu7ZNoz1nMn
+4cFcaFs2kZyX55//97pXXlnwOYyN63pPKGzmqxVLHFZwUfjaAAac1ciRo3oH9u7t4+Pt3RcuHJ8u
+T0aapCiXOKQ35ojCG6grUuHfSE1GVikiFG3N1nVBKHwy0ZZWggJ+qSRxdbZkjZSu/J5LLtLQWOU+
+F3Lcu2Tmyxf2qKmUhIeHb754Ke6nkSOHt/v7+wNvDB1va2vr1gLKhYGhoeEfv//mfujQIfyxOyYL
+cv9HkYCXURFAHuGQEjPoJzHgn6uy41BC0dg5iN95591Fn3625EchrzaqkskLyMTWztY6cNq0pwcE
+BAZ6e/TywBkRlvgwLCwstN+5c4cH+S9Z5NEZIYX7kpuIQk4XCY4E/GKRmgir5Tqj+dBGGK+mAw0U
+Xa8uzHn3Kwhl+UuISYx8P5N3DFLOB4H78wUyEk109BI0L/mIRKIHPv7ow5qbpaU+cZcvP7Fn926f
+jmTle+cZ64xgl1URQAbhSNbN6ankIXC05ebm3mDNkoKFkRIiQQef5xtv/N/4pqamBdu2bQ0lWk1n
+tI7OAv+D2JF15U/RhlC9a2J7655cE20lGWo60ECeVqJNDUzdpMIX0rLyW/j7Sc1jvsyPGzYqNJEl
+JCQMhBaJlgCse6WqBqKua6EQLAxAU0XrkEgvCQXIpNfzc2aPf/jhh5/9cf0PD4KwM1U3cSgCClei
+pejS9MV11KuDQPgkEiGJb5cudLV48YfSWmJaKkypaDGt7kommhbGXNMWd/bPz9DvaG7qUE7fkmgj
+dI0Q4YCsVIqlWHQEkR+AHR/VekMoWEIBtAO/r75aM3fXrp0vQbPSRX0noZi+uro8sLxM77vO5wjG
+ztbuTr/qojAlN4lSk8fszmQii1wK8qVLDcszLfE1GL5Ji5qahHlfJfcN7pG2Q4ZJxr6dnT0uA26q
+VxrKv5+fMww2i95/790HiKagq1IoXFLRpemLq6Uoy5CX5SMgWggZHEQTkYQhsgTFz0HRhvlJk4tp
+KeqL7phLowxcspC3emRXAwUoNAOSd4KQZMvraNVWkrGfmZXpduDAX2bsyrbCJxS2ntY78FLnZMIl
+Few8XZq+FK3kKG8mTnwistZs587WNVXCpTPaiSZyavhZ791ZK1EFOBaQLJBYFKweSSEgkKx4rmDX
+Rf4JwVdrvgz87de9jpMnP4qpGoJMbjTkvUddboBQyIT7MCJQoKOmIkRwTVZ4vig8sf/4AlSbTnBd
+aCfcUjGUTO5CSiJ3/Sg4NgjBEA3GW8W8GArtmZpw7Epf6yw7ngvvhyZMCGek6RuCBJ9QMFvdgWgG
+QgGei1BJpYrNaidaRwRb2VaZ8JRqBhEdsuK1SXya0E5k+UoIufYkMkFiwOvmkgW+91awuBeNshIe
+cMySEkC61k5YcjNub2sfu2P7dhddplMoAt+H4soIbxXHO6TCddJr2/xF/CiEAAj4Yb+qCmiJZrBq
+lSRx8umnn+oQ7aVJcDUkdWsn3P/uyVoJP5yYOtj1B+XVDUxLq7T6zPXcDF3X7upAbuhH+emnzSPj
+4+N9n5s+PY/pWKdNkIRiIOSbrUtS4fpRZPlSSJinooHHTyLE/0Qnn7KVCjUBTYYJUxMXo5LWwS0D
+Q81duiMOLi5dvS75DrH6owVMRoruanfJQa+Ro0aFwfYyI62DKGhCwSxMdPYYUlJRTAZ8oPOOv4b5
+PftwtBkizPtpcVErbUR2afq/uxO2sSHEi2m+idYJhEscCieSwvCddJj0uwEYaX03wYFPKOWsGmUi
+5MGhzRwVVRd84gIT2/iFJflJjNoWuJr0nahCuBSyQbUTYREIwfXcTKahrpb5dv1aIWknCHF9XV0t
+I0BzlyxCwQzMZl0TCvFRKNI8NF2e5X4XfOJWLVa2rzag6SRGIUSv6ROIuYs649WD2oZmpq6hucsE
+wieTX75bwtjbmAtNO0E0paen5zLS5Q4ETyil0LLRaqFLIiE+Clmah6wIL3Wbvu6dzUfcqa/V2XXM
+hQBtmboI4WqjBpm+g2vuorh/IskqLGOyC9VThHf3T2skDvmNwvKdEJScP38ujxFokcgOhAIz/sbg
+kJAT6deuRWgzM51PJPIKT3JLvOM+pN4Xl1QIunLuXK2E5JOgSQIJRVv1tTStnWha2FP/ieraCTV3
+3b82ok4i6TAhFJ7vRAJfX99sOzv7cqGu2nhPiHBCQtJhONkFIKBNtOHw5q8DIi+hkk8mZB/0pUi/
+j+nwP4RcOnP+KHjxP4gmcqdYY7T+kom2SqxQ/0nXtBNq7hIOiSAE7DuR4D//+W/OSy/Pr9OL0iss
+TkPLgRaiaYc3nySkRCDbTCSLTLj7E2LhkwtXa+FDHtmg4MWHfd++fcx+aPpMJpp0xOtCA+ouoNpJ
+54hEkyTCBTF3CQ04YYPnue3GjRvoP6kT6v26h1CA+WoCAgIPZmdnhWj64EtZs5I8IpHlL5FHONzP
+5WktfFy4eEnyYHOrAiMwQgvJBN8LqWLA/Qh6bZAiNXcpB3XGC5NIuBCiuQsDfBITE0stLa1wQfka
+vSEURErq1f1o9oKXppr0pSgT1nwykOdbkfe/XK3lXrKKkWSp40PNj07CBx7JRJ+FozYd8RSqgzrj
+hUskBLousyIPzs7Op0tKijNBNjcL9f7JK7NyEdoZaONAqBsIoW5MV4pVKtqfkA2atLgLaHWHLG9t
+mbr4xEWhmnZCzV3CJBLiPxEapOauqpannpp26ss1X90Wqv9ELqHACaON7iNoP0ILAS3FUNtl47nm
+Lk1UPub+H/HldJeSIdo0dVH/Sde0E2ruEg6REAjVfyI1dyUUl5XdTgRCqRHy/VRUYgU1lFk4iUdh
+u1TOCnSaAB6rY8SW5vwYOGPEBx1njStXrtIameBx5a3cp47rQWjT1EXNasonSFLz8RhmlIqm2+6M
+0vJaJjGzmDmblM8cOp+hczIROsaNG5/48COPlAo1XFgVQkHEQ4uGlhGtRULhHkvTtmYi2HE1PW3N
+GvGYSJrY1Ekq5H+3sgSJVW41fR3bNECK3RGnJKuOxkj8kbpaeVRoZIKtpKyGDg4VMHnyo/nffPNd
+vdDPU5UikJeHDRu+EbZibWophEy665KoZI0MdZEKn0wWacGsoikti2onlEgoOqK5uQkz49uEfp4q
+rX1y/MTJ7aBqPQ2awyB8r2khT7QSbZGJNmbz/OPhtUmWf42WmvgK2KVg0VnbWSLQBZnosv/0VTvB
+cd0dtRMkS7zGUZLqFaNlEgkSCNlSdB4HDhxwzczKMhP6eapEKEAmRY6OTsvLym6vBlLx0bSw17ZW
+ok1zlyxi8dnqwzG9+UjIRVVi0RWZcM1duuo/fUJ3106IFsbwSJNoJfpAJMPHTWbKbhYL8tzOnDkd
+HBd32aahsdkA5LFYrwkFUVh04y+PXm7O5eXlLwKp4LrzhotoLL1atRV8jVv0IZHlY5UJai4RaVMz
+4R6XaieqEEr39Z3gdZ2CJql/F3v3OvWJTBDDgFDOnjhwJ0jHR1ih3b6+vn5OsBUxAi1d3ylCAVZs
+Anb8GbbX+/ePfBIGD46a3rrQKNQvHPMkwlGXs+wOZjAAWT5W3jkRDYEQkbbJhGonFFxIzV1SLSXo
+jwNMUOgAvTVxEb+gxHogHFJxGBwV5cdIcwQF26mdWpkRqxHD5sC58xfQO//J4cOHtgGxXF22NLpd
+2w777qyxzFTR1BV9x9SlXaFOtRMKWVoKmVjiuNwDpKJvZHIOtBNi8trKTtaEAHzG4Fkz6h8R0R/e
+2gq5D7u01C8QC/b09pjY05/C9tM//vhjIwyidBIKq39CXFizbB/Wf0I0J8UagnaFOtVOKBSRCraM
+lHhm/66NTEZqvF6RCZ4zEAouMngSWur27f9rFAKp4DOGz9rfB/8e9uHiRe4Njc2CXaL9vk4MiCUL
+NrsvXros0ViAVA5Ba6Xainq0FKnw3nqPQNdlRBfVTigUYRS7TpE+kQqHTBr8/f3/6tWr1/L+/SPX
+7tq540aBQLQUxLGjR0MKCwv7oOgVal8aqeNPgFgKYbMTWh60m0Aq02Erok579QtzXZKJkLU6CuFo
+KRjpheHwGCq9n9nITHlmrsSnIkQiQRPXWem21NnZ5a+nn35m48effJoAX8c7OtiNBy3F3dvHx1zX
+vhScvOXn51kkpySPmDr1SdSgBFnCXt2q03loS6H9Hq0HWoqQM735Zi8hkAm3TA3VTigUkQqJ9BKq
+pkK0ElYzyTE2Nv5h4qSJK4FM4lhf8a36+vq4n3/+qVpIZq/UlJQxKckpnkI1e2nipNIZabmWYqGb
+voSc6U1Ig2TTC4FMluooCIBC/0BMX1xS+UsgxMIxcZUEBATuc3Jy/sLV1XXdhg2bMoBMWlirC25K
+GOGt3e43ZcqUgbC16SmEgsB65hejqS/lvkmF+FJ0beaivhOKrmopXFLRtbbCIZNc1EpmzZ796fXC
+oi2FhYWlMhIGjaEZCKVP2Wgvk7i4yxPmzJnl0pMIhZAKxX0KcW40ly7JhEZ2UagDujSBccgky8jI
+aK2np9f6d9997wpr4pIFG5ZUBAFi9jp//nzUzZs3gxoam017DKG8/fbCEvr4dF2AC8HMRbUT9eFO
+aZIeBK7ZSwikwjrfG6ysrLb27t1729W0a6XyypiAsBYZGhp6vPjiXHMhZcyzWorzxAkTsWMdhHbP
+jTT1x0uil7asWrWSSpIuaAJc346uyYQLqp3cD6HEdChL0hNAIr7wuu+SasxdUtFiBBgnaTHewcHh
+r/griTeV1MQyAULxnTFzlqAIBZ+/bVu3Ghw5cmRCVVXV70B8eB2CqUJspMH/lqwbjLNsIYcPC2HW
+LYtIhEImNLJLXTP12B557Vxfyigs4Q/kQoiFkEowSyhBYQM0Ri6sdlJjYWGxq7GpKVeFharMRCKR
+dVtbm5EQ+/X48WMhoGVh5nwqtKqeQChF0Nqjo5cYCptQfHUWfst9z482E4pmQs4NTRdUO+m6UD3V
+wxfV4pILIRaitaD5S0IoqQMk5KJuYuFoJ1esrW1O5eUXVKmwLruDmZmZBSMWGwitH9mcFJNLly+N
+mf7cs4d6CqHcZKQLwgi2TIA2c1C4JCJLE1nMFoYUgs+EaicU2tZauOSibmJhtZM2T0/PI55eXoWq
+LKM75dHJQ5qbm13EYrFW5Rc+//zs/JkSZ/y9Zrf4uLhRI4aPGNvQ2HwbrkkQpKJJQqlkpFUxHYQ6
+sMnMWxuCmetgR6LgLm3szVm9UUhkQs6ZaifqAQpMiQCl2opCcuESixp9LDdcXF3PnzgRo1Q7QYe8
+pYXZ8Pb2diexinJEXSVaZBWlJBXFZezjfv78+fnr1/9wE875GFyXzpcI1iSh3IJWqitCEUJSJdc3
+Qlbsk7dwFj5EQhLeNLJLE4TS8xzzXSEXPrHcj7ZCzF0jRoyI8/P3zyeJi0rgY21t3aeqqspSFcJQ
+R2XiWawWwn/28b8VJV9funRx0NSpU8fCyzho3ZpQMIbbQlckwkuqLId2m5HWv8HCariUpjM0S00L
+5WgVtA6hlYCheScUQiEWfKbvxwzGmrvE416el7ho0eJKfrFVWXjm6WljW1tbA1A+4nOAEwFFhDFL
+jkmqM5Bn1sIJKPYBOT45FofEmmvr6tAa1CKEe6dJQsHFt3ppUwvhkEglqx2VDhs2rCgtLe1KZWUl
+BgnUsiRn5unpFVhYeH0GvPbVpFBWxYQlNG2AaicUQiEWEnZ8n/6VluSkpExGhYKKDY3NDg72tg82
+NDQ4cwlDkVaCZKAprZMcm5AKORb2B76Pioq6LG5vP8HKvG5NKHjzDkIbDp2BS1eqJXxYhhYiZokC
+OzSjX0RE/o2iG9m3b9/Kgfc3j5+IwUrIBfxs2MysbFsba8t6IJX/g8Hhqs5ZOPE/4MymM/4QIWgD
+nSFCCgptaiv3QSy3rlyJvw7bJmU7PvjA+GHt7e0YjmuOY1/eqo1EoGsDXFLBZ/OURGPKw49qBgwY
+uGXxhx8lcU15bOFIdBSRLH8z1jKDk2nMrjdg+wJlNLomGtW1Tr0mCSUD2id2dnbjQfBPhddDmC6u
+Qy/HlIUEEhcSEpJRWVVVWlJcjAMm48KFSwVo3iIOKnkOOIyKGDw46n+5uTluy5ZGz8fOV4fw7AqZ
+kCgvbx0nUFFHvKaF4xhJTgqFdoiFEy58vaSkBOVFmxLtxNbezuaxpqYmDxS6M9VgytKUpsKiqrm5
+GQOf/OHc0XzvOHbMKDuYKFtaAUzNzCwMGAMDS0sLW0tLS2srK2srMzNTUwMDQ4PGxobGmppanFBn
+fPfd2nT4fTI78W4WJKGwAv1KccnNNHidgn0CZPAEbC1VJRVCJCyJtDLSUOTSMWPGZqempl4BLST2
+SkISLvJVB8eoUUQgshB76nTRqJEjdly+fGnQtq1bh6mLUDorkIk2QE1dPUMoUqiHWMiaK5ggSYhl
+2LjJjKOLu2Rf1n/CPPDAA9eDQ/rUqSAbwmECPBjIx0pVv8gsLZKODFKxBtk199FHH6kCwrCys7Vz
+zMvLt2tpaTGrqKgwZe4WtzRlZb2snJqK9et/yP/6668S33jzzRNALFfgM5SpDV3RWjSeBcqamjD5
+Js/T0ysXyOFheD2QK0BlRWSZmJjUwr5YD6xo5MiRJaWAzMxMzAot+efQYTRn5SBpdYZAZJxbq5mZ
+2VUjI6PNRUWFniBMve6HVPQ5b4M64in0jVi4/hVCLLeBQDDUmJAKQDx27Ljstxe+U7f2++8U/ue7
+7ywMBe0EzfOGqmon2tZieKRim5SUNK4zv5URfmx/8uQJeyRTyw0Wwzb8uD41JSXl3KJFi88BuaAi
+UNUZYtFmWYH0zKzsVXByF4Ao3oT3D3DMWEg6qNHges6ooxZ4eHhksGazoiNHjyOxlMFvb3ZWC1GG
+isrq6r59gv+GWYnn8s+XvQwfuXVVmOpzVjnVTjQHUhiSaieaN4PFglaCcAJCYc1dbRkZGdmMCg75
+b775Gk1iEuFJJoZCquPFJ5XO5r7wyQ9N7OQ/4NkXHTt2LAheYhu5adPGxNVfrj696INFZ4FYsIpn
+hSoJoVqtU8Nmc/6FrAckgnfbvF9ERBVc5K3q6upyUNMwMgvJIz8rO/cG7F+tbgKRcU5i6LCShydN
+/PnKlXiLz5ctnQsf23eWEKh2QiEPp9iCiNR/onliyZ+XJ/GdcGFnb2eFsg6ec4WyJCSkz5WsrMyL
+ra2t9iBgraXPg49ONRJlpKII/PyZTqQmOIPm8yBsB23YsOHBFStXnHjxxbn/QP8lKEue1FXhs1Os
+JmJ24cIlJA30fzRwI7E0SSIySKUdOuv67NkzN589c8Zh2dKlz8HHFp0RrFQ7oVBF6FFoto/RlM5z
+XItiY2Kn9Q4MMJo+Y/oheM5xVUaZ0V5XEhJTnRztvw0ICMguKCgYDM9EIFosGGnE1J1nBZ8TNspK
+kCBEooaES7vLly+NhG3Y1i2/DA4ICPwV+g9nR/nynPe6rKSZpW3iUEIqbdBZOZ99+snGffv+dNu2
+detkVYmBaicU8kDNXbozB7EC1SAxMWE4fOS3a+fOqMGDo47Cc57NkgTKP5xxl7GT2trbZRVo3skK
+7dsnKDc3x9/X1ze0pKTEraGhAfe1hP/E/DpUUQS1uBVXG5FHJHJ8KCoRS1pa2sQf1/8QsObL1aMW
+vPoqaivH4fNbfDOYER2CHUilGcPn8vLzdp4/d24kdLitKgJWX7UTfo0xqp1oQBWPjZGWXKGEonVS
+4foIAO5bt26dunHDj4N279pVaGxsbCIyEhk3NjbWl5eV366urqqpqq6uqK6qKodtTUtzM/pTar9f
+uy6uurrapKioiElOSqqvq6sbcOjQodmwvzsxI/F9LUS4a9o8pohEZEWfKfKhcP8T5Rj/t/C5wbFj
+R5FM/U1MTAas+GJ5kL2Dwy8gLwu4pEIJ5V7U79+3L6m2tjYZtJSR3XnGLrTqxt1XO6H5J7okFo4A
+NQQB6ofaipzZOSYHNjJ3y5jULY2OLnJ0dKxtbW1tKS0tvWVrZ2vNMGITrgCWavf3zvyxyUuMVDeJ
+8AlEFTKT9byTQrX833JKwIhgghQGHzlbWVkZhoQErUcfNLxvR2sTJZR7tRTxoMGDi2/cuHEEOm8o
+3DQjVZMT9WmGT01d2tNOMGmVaijCIhhZs3NGmrfBXUMeC9t6KTMNySreiMfCez8z/27tLVW1FkXF
+KOVpIurShuTJARmmRFeYdP97+oyZWNImjZFG5NZQQpElCE6dqRw9amTMpUsXnwYtJVRZHS6p2uur
+d+YuauoShhaDxCNd1ZGSjq60F0WQQz4qEQwplcLVWlQhFGW+DXUTSWf6jKOteF2+dGlGampqaWho
+6HL46holFNlaSkvvoKA0JyenvQUF+YFwg00VVQrW1roqmtBOyKwDB4i80voUmtVisBKEZIlgqsno
+PfkQMuFvFWkzqhAHH7oMX2bXtZfIkfj4uBFlZWVYxWQDfkcJRQ6SklLKhg6JOpCYmDAOhO3ozg4s
+IZMJccSz79vYxFKxj6+vGZCLESUWXWgqMZJSIpRU9Bf4TJGQZXWVZBFSPbGO5yVZhhiv1Zr9yJgS
+imItpc3IyDjd0NBwE3SaBwyUAD6p6Fu4MIdMWszNzbODQ0LONzc1NVRVV5eJ28XtTY2NXkAuI+B6
+egOxyKr7IzYUiVqNjY3roTWKRKIWAwOD9ra2NuPWlhaz5pYWi7bWVlOiFvd0UpKasWIVrtR4d58Y
+SirdiEzU7YzX1TWp4PfpUJaFEooC1NTWVft4e/5TXV3tAgNlHgyYIC6pcP0Q+qKdwPmKzczMikaM
+HLlu//4Df8LHmKCEsfjidxa+7bx9+/YxIiMjrBDdi7lbUK7e2tq6NigouKaysqIc+qMMWmVTU5NE
+szEyMjKxsbGxtbOzd4K3rjk5Oa69e/f2vHXrlivsY+Pp6WncE8kFSeEUNElxUzlEQWpSkUKHlFT0
+l0xIdJRQtYquEqQsvw/Hz9PCkko7JRTlWgqWtL4VGRmx9VpaWh104Nyl0dERwNoiIqCxMzF5ihS4
+FKrg5PhNKkG7+AvIZBdcXylvt2q43qJNGzeefu21Be6c8dEABFF7+sxZTP6qYQmoCbU4KfHW4/oL
+qJlY7Ni+3e6FF553yc7J8V654gsvIC9vZxcXD0MDQ6/yivJe9fX1Dr169TLXV4IhTvS72sVoFbWU
+GIWkckqyaFLMHV+cZDxRUtErMukOWgkB8ZGQa1QCMdVQVCcV7CwUvDscHBxutbW1TYEZZxS8D2Gw
+Eqe5+UVnZ5cK6PwBy5ZGewHZmArN3MMxdaFGcb6urm6jDDIh14v7kMKcdxAfH69obRmcnTSwDbOO
+s+vqGs7D1mTjxg32r7/2qsvcuS8guXhaWFgE9urlEdLY0NC7srLSw83d3UqfyIU40aVEECshgnsJ
+ZLRcDUTemvKEeMhvYtnlbympUDLRBdCEzx93RCshIdEs4ZAwawNKKJ1DZdGNkn3RSz5LXLo0ehS8
+nyISiRpCQvpsmjx58o01a74cAoI6EoRNmL+/fzgQi7NQiIWYukxNTQsjIiK2xcSeTtR0yRuWiLFm
+Ugnbkioqq0VLPvvUYdmypd4LF74d4ubm3mfw4MGhDfUNoWXlZT6enp4mQicXvs8jltVW7hLIvSTD
+13Bk+VO45jFuTSpKKpRMdAF5SY/Ep5I/L/+OhYZqKF0XkuhvwESeGzhpBwFtdPbc+SS2ZEsmaCiH
+gGx65+XlDQfBMMnPzw/NY3a6JBaOqasOCPAMkMlhXdVPY01kuOTorcqqmgTY2qz/YZ3PokXvR1ha
+Wg61t7ePKC8r86+vr3f09PIyEiK5yFqHoyNh3Esy/O/lmb46OPFZTUdCMLG0sCQlE2GSDCP1ndwh
+FAM6PNQLLJHt5dnLprKycpCLi8twaxubIa0tLf2fe266p7aJhWPqagYyuezq6vbRjRtFxwTYZ8Yf
+f/Sh24oVX/SxsrIKsba27mNv7xA4b948/5qaGpfm5mYrIUaNcf0p3M8UEcpdYpISBt9EdsfUxdw1
+fSEWUS2FkolArp9Xybjq0OGjLTA2n4AJ4xlKKJoTkti3xt9+87XTrl27ejs4ODwaF3d5alhYuF+/
+iH7MypWrtSLwJk54sA1m/0kzZ85656uvvzmJq1QKvN9EX3+1xvK99961c3BwdBo0eJAPzH/CEhKu
+DImMjAxtbGz0DO/Xz0gb/ddVEpeX5YyaIt/BKS0s6CuxWXNX40PNZDG7qil5LYRlons6Jk54SDJh
+ACHaIwh+4cK3mKTEpDvvE5MSmarKSvK27eGHH1kHciXH29t7D8iWQmry0px5B9VANJHdACF5c/Xq
+VZlnz509DoNxSkpK8iS4SRolliS48TgYADdbWlp2wU0/I3QyYfsNzWK4Rk510Y3i67C9um7t2tOH
+Dx/anZmZ6erm5tZv7969g7OzstFnFQR9aCAkclG0yh8JKeWSCyEgTBLDyBopKeXd+Y3EXn1/a1pQ
+UHSZTLbCmOQQCB+VFRXlB4FMLuNr/IASinaEZCuQyo3t/9tWlpubm9rU1PQPEMvM5OSkMUAsLriP
+OskFyWTevLkws0hsNjIySgT1fDecQ4OeknIj226lXr2W9fXXXyW+9+47fxU4OHg7OTmP3bljx6TU
+lNSwtrY2a21pfuogG7LlVCyQSRzkN7gfTRal0CZQM1FAJgiTW7duYR4KypY2SijaFY64acL1A/r2
+CbkJzH7NxMSkLxALRowNTUpKCoUbaKsOcqmsrEIyYezs7PLfeOPNze+9/0GBUBYyU4P2gstIV12O
+u1K4fPnnaZmZGX+VlJSEpaVdHZWamjIsOTk5UNwuNtUnciFAspjJIQzu90g2BVRT0TlWrlolmaz1
+lGtFWcLVWFCucCDm/4YSim6IpRGjwp55ZlrBvj//vOjm5uYKwj8IyCUSvhsEmksfIBdMLDToLMFw
+TF2VjY2Nh4BMDpEExO6m9aHWAv1Y9v5772YAocRYW1v3qqut7X/58uWRKSnJQ5KTkr3EYrGJUMmF
+mLO4a2oosstTLUX36NcvgrGztesR14rjjes/kaFBXyorKytmNRSaKS8Qc86N3LyCkiWffZq+bNnS
+GFNTU0dvbx93AwOD8JiYk/2l2kuiL9xYlVSMyqpKnEWILS0tC15Z8Cpmw1d3837EgVyLLe1axvVl
+S6OvAqEcsrGx6QWEGnrhwvn+qampg1KSk8PbQXORCvJZghDKslb6k0UYXOKhWoowgJO2DRs2Sgim
+u16fHP9JObTkRx6ZfLq2thaL5+Jyyq1UQxGeUMRyJvWVVTWYBJi+/od1l4FQ7P38/Ho5O7tEgvYy
+DD7HWmKu0ByhWcj5OwwESGttbf1xyZLouFUrV/S0fpSYxIBc8r/55uskIJS/zc3NXDMzM4cWFRVh
+hYMBBQUFftu2brUQErmQGWCBHD8KifCiWoowgKYfrjmoh5BJiZeX1+fNzc0xDz00oWT+K68gubRw
+zemUUIQnFBmW8fFuVl5NSy9Y/vmylIsXL/xtYmJi4+vnZ9cvvJ+nk5OTQ9GNImOYjZtOnfpUgxim
+34VFhUaH/jnUHBwcFJeYmHhNHx3xauzHO9FimVk5RRMmPJgFhHIgKCjYPSoqKig5OSkc+qhPcUmx
+5+5du5xbW1vsiQbTUTvQLOHwzV7yCOMOqUQzjNDrxnV3dHc/igJnfDFo/WcLrhdhMrf4P/95454d
+aB6KHgGTJgFYmBIFn/HBv/82/Hz5MsPY2NOSbNXDhw4ZvPDC80AsxbX6ECKsoz7E/jOfPWumzZ49
+u61tbGysg4KDHf39/F2BpO3Pnz/nFh8f785qgY69g4KsAgICzNpa2yxbWlvs2tvazclzoy6yIRFe
+JJSYkAf3v/FzDCu+fr2gOjc3t83Hx9dm0eLFIkXHJ7/RFjn2JGA+SndNNkU/LNG+eI74PdDeh5Yt
+77dUQ9E/7QVn3vUyPpf7nuIezaWWbUzpzdsG7HOAnWb88kvzzIBQzNj3ppkZGUalJSXG/v7+Nj6+
+vs7p1665X7t2LQy+iwTh7gsC2wZeG96PVkN8KdxQYr4Wgqaw2NiYSktLyy129vZX8vPznvh82dLx
+cHxref9bUFBQn5eXe5uRVog2Lbhe4AZbK0oq928SwgS/7nhdXCc8mewA6qCdcHBw2ODu3qs4NTWF
+oYRCQSGbYDA4ooVtMsGSDmo2Ji+++G9TIBRbZ2dnp4CAQM+CgvyAjIwMXHwN/VvICK4g7K2JZtAZ
+cuGSCimbQ7Bjx/YiOOaOMWPHbrqaerXIwd7+cnl5+UDQVrDe/Uhovow0jFNS7TkyckDS2HHj4k+d
+EmVlZ2VVe3t7W5SXlY9ZueKLWXBuIVRbUZ9JSJYgVjfQzKbJAAAZfhOceKVBiwsP73eqtq72gqWF
+Rc6ly/ENiias1ORFQdEFNDQ2o1ZiPGvmDIu9e/dYwWtrDw8Pu0GDB3tfS0sbmJ6ePgI+CwWCsMHS
+KqqCXVa1A8kYGxtnAXGsDwsL33n+wsUSNlHWcEBkf4u0tKuOQ4YMCejTNzQQ/WhJyUl5iQkJxU9N
+m1b5yy9b0W5Rj1oZ7t870N+xsLAQCehFX1+/0R8sWmRBSaXz4JZf2b//T2XZ5KqgnbNtZycvIu4O
+/SKUhyvfD+kQMxfHxJXDSM1bF9966+2y6KXL6tigF4WghEJBoV6SMX3yicft4AF1HzFiZAgQSwS8
+7gufoxaDEXpoojLuxN/mGxkZrXVxcf05Oyf3FqtR8Y+L/2fGvsVQ9BYFs0jLiIj+QdevX3/M0dHh
+WXf3XsGgrRhQYuk8oaCQL8jPb6msrCyCj4vZWb05qyniekNoakSmIaH7kpUNp0x5rNLXz7d1z+7d
+9iUlJeLRo8eUeHp6NonFMCUAwP02srKyshAZiUQGBoYGv+7dYwv7cQNGxOz9xnFlyZKPS//+ke42
+Njbm9yPXObW6DkNDr/u1zvyemrwoKNQE7kJjIORRoFybM3vWcSAU214eHvbBQcEuHp6ezinJyfYJ
+CVdwuunACiAyubNkCUdSA27gwIFFwcEhadfSr507c+acTDJhj6vQZMdDHWg5SWGhfYqAWOJAo5nx
++bJlE/BcKKl0clafmFg8bNjwzRUV5UeuXbtWzgp6EbttYu6aUluZu1nl4ukzZrQ88cST4tiYWGMg
+CmbGzJmNs2fPaeeQBTGxSojh9KlTJrCfIY9Q8HsbVoYb+Pn52QJJeZ88cSIMCA59fO4s6Ziz48qB
+HZvNnP8nvkL8P/SToF8RtdpE0Kq3+/r6FMXExHSqT6iGQkGhRRMZtrff+q/x999/Z8I+zCLeBM+I
+NXs0zp//Sv2ar77GAIxGVcwNXTgnjHbz/vvvA496eHjMdnN3D505c5aIEoty8xBbKy8hNDTs1ctx
+8Rd0XY2CjV40DQnubZOfn2/DkoXIycnJFM2uAQGB7lVVVTW1tTWNqPWYmpoa29rZWpqbmZu1tbe1
+V5RXVBUVFVbl5uZW1dXVlU+ePLl076+/18ubxFBCoaCgkEl03l4e9pGRAyIzMzMmi0SiR3v18gig
+ZjDFYM1eFY89/vjLu3bt+UuoOV/sREbETl7amLv+GqKlEM2nlW1tnSURSigUFBR8wWPy4APjnb28
+vaISExJmNTY2PvD+B4tsKKnI11JemjdX/OLceZvmzXspGoQwrYlDCYWCgoJHLBbz57/k//tvvz3j
+7Owyy8PDw6c7hRjzQ3zvJzIKtZT8/PxMHx+fOYcOH7mgCbOkvoE65SkoKO4AhGI9kEra+XPn1mVn
+ZxdkZ2fNz8/PwyrYem0CI0QCmoW4srLyJnyECZ+mr8x/2dHK2tqGEXcM01WVbKBvPIBQMGEU/WNN
+lFAoKCgoOpIK5q0U29vZ7GltbW2GWfibS6OXYOVrvdJUuNpIcnLSzYqKiosjR46MbW5uTk5JSblt
+ZWVl7ODg6Orl5eVqYWlpsXfPbrfS0lJv2L0PtMB58+Za2NnaGcgjFvz8pZfmGTu7OFuxspQSCn18
+KCgoZJAKOmYxIeFPaCKWVML1gVQIkSSCNlJVWZn7r6lTDw0dOuzwmTOn0ydMnFS6cOE7mB+CDmgD
+VrPAHA/DE8ePmwGhWAJsH3poQvCJE8cfTKqqGvfSvHletra2RnytRbKEc16e2N/fH/tKTEcNJRQK
+CgrFQFL5HVotkMqrS6OjsQKAYEKL+QUwWW3kFmgjF8aMGXsaCOLcqFGjc+fPf+UWahBIlB99uJjs
+SvJFOmgWt8sqkGiu+fv5nO3bN3RHYmLCiPr6+gfhswGs1iIhFiStyspKAzNTMyQlQzpUKCgoKFQD
+FpV8KCgoaLefn1/V6NFjxD9u2ChuaGzWasNj4rFJ8/HxIUl5WCrk5BNPPLl84qRJT9jb2/dZ/sUK
+BzY/o8vAKgROTk7OIpEobO68l15ycHA4gcfrFxEhtrWzk2S+L/7wo09gP2c6RCgoKChUF67mzz//
+73AQ1h/DW4xu0hqpECJhCQSzuS9C2xwe3m/RtGlPzwwM7I115EPX/bDeDfY3g2ag5mvHZjNgwMD+
+IiOj9+Cjv6FlQMtasODVOfgdHSE0bJiCgqJzglUUEhLklJ+XNwnevgYCfhB/7RZlkGWmUga2aCb6
+PuKtrKx+t7a2OV1cfOP27Nlz6tb/uAGTChu1ka2OiYJ2ttYOTU1NTnDtjoaGhgYTJ07KWPPV12W6
+zpanhEJBQaGvsIU2Gdqrvr6+A729fUyVSJo2EL5N0Brz8vIac7KzkQSwaGIFq3Ggr6Y8MnJA2bDh
+wxqkPzEwOHvurOWV+HiLfhERtQH+ATlxcXHpLS3NeTm5+VW6zvtgs9BRhrbfT3Z5dwJ1ylNQUHQF
+SAIHhgwZmlt0oygqNjYG14PB8FkLRlrSA/0adf37R5YOGTqkrK62rr6mpqa2urq63sbaut7BwaG2
+vLwciaOF05qihgxpXr16zZ2Z/hv/97oREIrRwIEDW9au/YFoIu1CWESOJjJSUFBQqHeWbjR27Dis
+nOwJzQ9aILTe7GuvOXOed4F9bKFZoQ8Gmin+Rt0+DgoKCgoKCopuhP8XYADpronVzrKsywAAAABJ
+RU5ErkJggg==" transform="matrix(0.479 0 0 0.4773 50.9922 541.9961)">
+			</image>
+		</g>
+	</g>
+</g>
+<text transform="matrix(1 0 0 1 108.8979 622)"><tspan x="0" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">3</tspan><tspan x="4.845" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">0 </tspan><tspan x="11.732" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">s</tspan><tspan x="15.542" y="0" sty [...]
+<text transform="matrix(1 0 0 1 113.8765 633)" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">(</text>
+<a xlink:href="../02b-STG-Stretches.html#p_26-01" target="_top"><text transform="matrix(1 0 0 1 116.3789 633)"><tspan x="0" y="0" style="fill:#10137F; font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">p</tspan><tspan x="5.075" y="0" style="fill:#10137F; font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">a</tspan><tspan x="9.345" y="0" style="fill:#10137F; font-family:'MyriadPro-Regular' [...]
+<text transform="matrix(1 0 0 1 145.6304 633)" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">)</text>
+<g>
+	<defs>
+		<rect id="SVGID_27_" x="-12" y="-30" width="612" height="783"/>
+	</defs>
+	<clipPath id="SVGID_28_">
+		<use xlink:href="#SVGID_27_"  style="overflow:visible;"/>
+	</clipPath>
+	<path style="clip-path:url(#SVGID_28_);fill:none;stroke:#FFFFFF;stroke-width:0.5;" d="M138.992,582.62c-1.38,0-1.978-1.242-2.07-2.461c0-0.438,0.023-0.69,0.115-0.874
+		c0.253-0.621,0.897-1.104,1.702-1.104c1.334,0,1.84,1.15,1.84,2.208C140.579,581.654,139.98,582.62,138.992,582.62z
+		 M143.085,570.246c-0.322-0.023-0.736-0.069-1.403-0.023c-2.507,0.046-4.554,0.76-6.164,2.186
+		c-1.656,1.518-2.691,3.864-2.691,6.624c0,3.427,1.886,6.601,6.21,6.601c3.289,0,5.727-2.392,5.727-5.451
+		c0-3.196-2.231-4.898-4.669-4.898c-1.265,0-2.208,0.299-2.967,0.942h-0.069c0.414-1.426,1.656-2.69,4.715-2.828
+		c0.529-0.023,0.92-0.047,1.311,0V570.246z"/>
+</g>
+<path style="fill:#1B4787;" d="M143.083,573.399c-0.391-0.046-0.782-0.022-1.311,0c-3.059,0.138-4.3,1.403-4.714,2.828h0.069
+	c0.759-0.644,1.702-0.942,2.966-0.942c2.438,0,4.668,1.702,4.668,4.898c0,3.058-2.438,5.449-5.726,5.449
+	c-4.323,0-6.209-3.173-6.209-6.6c0-2.759,1.035-5.104,2.69-6.622c1.61-1.426,3.656-2.139,6.163-2.185
+	c0.667-0.046,1.081,0,1.402,0.022V573.399z M140.577,580.39c0-1.058-0.506-2.207-1.839-2.207c-0.805,0-1.449,0.482-1.702,1.104
+	c-0.092,0.185-0.115,0.438-0.115,0.874c0.092,1.219,0.69,2.461,2.07,2.461C139.979,582.621,140.577,581.655,140.577,580.39z"/>
+<g>
+	<defs>
+		<rect id="SVGID_29_" x="249.455" y="616.996" width="287.389" height="53.999"/>
+	</defs>
+	<clipPath id="SVGID_30_">
+		<use xlink:href="#SVGID_29_"  style="overflow:visible;"/>
+	</clipPath>
+	<g style="clip-path:url(#SVGID_30_);">
+		<defs>
+			<rect id="SVGID_31_" x="249.455" y="616.996" width="287.389" height="54.182"/>
+		</defs>
+		<clipPath id="SVGID_32_">
+			<use xlink:href="#SVGID_31_"  style="overflow:visible;"/>
+		</clipPath>
+		<g transform="matrix(1 0 0 1 1.525879e-05 0)" style="clip-path:url(#SVGID_32_);">
+			
+				<image style="overflow:visible;" width="599" height="113" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAB1CAYAAACSy58dAAAACXBIWXMAABcRAAAXEQHKJvM/AAAA
+GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAJ0xJREFUeNrsnQl0FFW6xyshhJAF
+shJC2AKIrAECQXTeoE8ddNxAFHXcxV3P+EYfjqOOjuOoo446o6Mz6lMQBcUNARERGIGw77IIsocl
+hJCVkEASSPK+L/2VlGUv1d1V3dXd/98591T1UtXVt27d+6t7b90brQAAAAAAAFOJRhQAAAAAAECw
+AAAAAAAgWAAAAAAAEKwI5ERdQwcKMYgJAAAAAAD/xWo4hffb9Bg7hZatESMAAAAAAL5JVTyFG0mq
+vqLQTGEvvT4TMQMAAAAAM4ioJjGSqDa0uDK533WP0jJX3i6r2jrt6rZxsduRHAAAAAAAwTIuVh1o
+cROJ1a20HKD9SORqHZICAAAAACBYxsSqBy1uJbG6hZZd9Z+TXD1IcrUYyQAAAAAAZhIVhlLVihbn
+kVTdTsuLKaS4+Oqr9Xum/w5JAAAAAAAQLNdilUqLm0msbqblEA9fn0VyNRqnHwAAAABWEPJNhCRW
+/WhxI4nVdbTM8WK7zrTgYRkaKVS6EdA6CrFt42JraJsoWjYj2QAAAADAHSFZgyXjVY2icB2JFddE
+Jfmwm1LFMdCqIcGiUE2Bmx+b+BBk6Yx6EbefDeJatXUaf1ZD4ajuc/6dBgqHKDR7OF91ElJ0x8D7
+q6VQonmP9xVHIUu2bTY57XAcHtPsm38rjcIB+azexbYcj+kUjmiO6TiF3fwfSGLrcGkCAACAYAVO
+rAbRYjRJ1VhaDsLpCzv2UlhQv2f6XYgKAAAAoUzINBHyGFYkVrMUJ08DgrCBm3h7IxoAAACEOiEz
+F2HbuNj6qq3TbqXVmYrrJj0Q+jQgCgAAAGg5UdeQQuFcCj1D5ZhDqpM7SdZCWizk8a2S+103ntav
+pdALSS+sOIUoAAAAoKP1K2/POO/jL5deTw7wDr2eRk5wwM4HHNLDNFAkJ5NojaPVByn09WLTPRK4
+szp3rk6kkOBhm/aKo0M2d9D2VPN3VEQhXr7P8cwd5ZNEarkTd1sD54Y7kJ+k0E72o6VZjrmNrNfI
+Nu2c7EftGB8r32caZRs+ptayjygJjcrpDv2tAiziG6u2ThtGFw5ECwAAwI+06TGWu5H8mcL1A/p0
+2790+guf0foHFL6nMqMJgmWNaCWQaF1Eqzxi+8UiEi6hAvwOOhnvevkb0SIhMR4Eq5n23aDZTpWW
+1iI/RgVLEQFSBStad760gtUk3412IVgskvUawWrWbJOkE6hoJ4LV3kBa4e1S6TwkU/zup2VXWrLE
+xtJ6D428VWlklp96TFZOPw3J+9hfv2f6LGQlAAAAdOWwkp57Q/9Tpxpfo5fny9vVXTqlL9i84PXX
+aX0plb8nIVjWnYCBMor7LVJ4O2MbFf6j6EQcRJIFAAAAQqaMj73ohicvWLVhxyR6man5qDanS2bB
+hm9efZPW/0Pley0Ey7qT0ItE6wZavZNCtpOvrCLJuoxOQhmSLAAAAH1BLgU4tz4UybJlzEJ+6Aox
+FNRzk/rkS1Nve23il88rP+/CUtstO2PRxvn/5FquBcFsOoyKgBORRaLF4yrdqOg6xJNgTaLIH4/k
+CgAAQEubHmN5to/fU7hBI1jcjYH77XI/W3WQZLWfKncNaR4+uHfDvA+f5oGWuSvISQkVyk8Heuay
+lwt+7mfLXTVOKT8dOJpfl8s+FNm2Xr7fKO816crwJjmGJAmVmu/w/rh7RtgM5EznpwstHqVwjwuX
+qc7pmjl/w9xX36P1Avrf1RAs60SLO8SPodWblNNttyxZ91LEv4nsBAAAgLbMeOS59259a8rcv9vk
+kJpEsjwJlto394ROsI6KzNWKuP1sZo/8QWecmP/RX8q+XbYp8fk3PksQUTwp+6lQTs/coXUIPp5q
++e06J6JYLWJar/ndk/L9U7ptmiUck+OM0gnpcbVGivte3/n716/+dPbSt5TTD285o653j+z1q2e/
+PIXWv6Lt90OwrL1wLpK5C/nOpDVJ1jUU6Z8iSwEAACDlROuRV/1h1KZthVw2tEWMWIIzwVJEypwJ
+Vo1y+ol5rqXjVql2Bn+rsU+vzrtXznppouIY4mEfBMvaC0jtED+WJOsqivA1SO8AAACofGiV+6vf
+nru/qPQTxTHHKggPGgf26X5wyfTnP6d17ia0BYJl7YXUT3FUPRYiNgAAAPDQPD1/ceeI8spjHymY
+oi0cae7fu+vhZTNenErrfI43kgM0QrAAAAAAawVLycq7OZ2W3GeXp2cZSKGT4hhPMMFD+cl9gngA
+a+4Yn+Tmu+og1CB4NCa3T1heuOLdu0iwfoBgARB6mTVnuPzUi9qxkzug1thpUDwAgKFrmTtsx5go
+WG0V5328oj6fszzh9gmvcb7Bv9kkeUeMSFkGhRT5rjrLCL/HfZKOKI6nCN0Nis3Hx8NQ1Mp+kuR9
+/p145fTA2q3ldxPkN+I1n2sxEi92gjvdb8lMT35/e8GbPLj1frOHdIBgAWBtZtybFtfThTtWI1hc
+Dc2PenNnzWP0He5syU/orKWwTTLHw8rp6YuaJfNKloy1nWSG6RQ6Ko6R9vkOu0S25cex+UmZo7J9
+rWQmKfKbdZJhVphdJQ4ACNm8SnUCdeYRRSdY8fI63oUQRkv+FKfJt7RTvPF+2i9euaXV6PHPtBUZ
+zFZOT+fmrFaQt8kSGVR0wsrH0Vlx/wShHhao0h5dO85bP/cfH9P6SsoDy62KUwgWAOZmUpxxnEXh
+PLpwefqmforxp1xUSkWw9NeqVrDiDN6hqYLVINvXyPtcc1ZJx7uLlssorKJQSMdcjLMIALBp/qrW
+kin9z7+/c9Hh8j8ojsHEPcH539asDikTty36Nw/VsCcQxxuDUwaA3xc930kNoXAxXbhX8rXv5y4z
+JLjlrekrXX5299gRiubOTtvHQ3u3142OdzAtr5bXPJjibvo/h2jJ00jxnd0RWfJrfnSaa8XKUfMF
+AAg00oTXwKLVqlU01+AP87AJtwzM7ZDe/pMdBW+toO2PtI17N2DHixosALyTKW5m42rpnnJx96aL
+dgAt+3ojQN4gsmT6ft39hhOatYJFoZjigpshN1Pgx5x/4MwLKQQAYDVteoztQ4tXKPzaycfc3Lg1
+u2PaF99/+8bnlC9tC9ZxQrAAcC9UsSJU3I/qAsXRj8plu78V8uNJhKz+TYMCtn/o0KHbli5bwcK1
+gcImCjsozhqQigAAJubJ2W9M/mrC4y988DvdR9ypf277pIRP9q16dyHlPUeDfawQLACcS9UvKVxC
+F+mFIlSprr4fCMHxVXyCKF+1eXl5m5YtX8mD93IfrzUUl3uRugAAfuTNHf/xzswHnnrlI54jkjvQ
+c5NhSZdO6V9tXvD6u5THrLTT8UKwAPjpBTyKLtKnFUdHdVvJlJniZeV/2fH9euXlJ+7TvtUyj1m/
+fv1WrVv/3WxaX0rhIMVzFVIcAMBg3pz6x79NGf/6pNl/UxwP6uzI6pAyY9uif39o9vhVECwQbhdP
+B8XRj6mILpZdQfj9NPpdbtPnOSpjQ1GqzBIws/+vE+HiPhIHKJTl5w+vKliy9KBkmDw2GHeeb6fL
+o/gRcX6qkpsAmmV9h6SVo7h6AAj78iHt6X9MG//K2zP4qcF1Ke0TJ+1d8c48K4dYgGCBcLhwcmgx
+gS6UyxTHdBRV9N6z9PqlAB5DEv3eIlrNC4RU3XxJ3s/ee3/OeluLl1nx4US2fKFZZGzfsPz83UuW
+LNstwrVRcYwBxoGHoziOgVwBCPkyIqpz/m1denXreOmiz/7KHdaXh0rfTggWCOaFc5uIVKqTzx6n
+z54L0HGcT7/1H7NkwplAeYNdZCsQ0mWScGnFi2vCKkWwePyv6uHDzypdXLCEh54oEhErls9Yvjij
+5rF16mSdR9c/jqsTAADBAnaRpRgqmE4Z/G40ffdfXHZr3mtZ0vva731Ki/lSM8Hjmew3+86FfqMz
+7fNrWh3gqzT4K1ShJlzupCtEaBaZ0goWi1l9//79D6xdt+F9ShNv46oGAECwQDCEimudhlO4kgoj
+NozW9B4/MfYOvV7lZjt+8uNF+s5DerlS0UqWBu5rs4++u4KWk+k7K0z4D2fQfqYpPjQNWi1VoSZc
+3khX7wF5yv8+/S9LjsGEGrGm9u3brzhcUnoLpY3duNIBABAsEAip4pFzediCS6nwOYeWPZwVUPS9
+GbScR6FQccytx/NHdaPQj7a7RnEMgeBUrtwIlhYeyXcqLbmWIVb2XUZhD2273eB/yaDvLlQ0o64b
+katgilWoileooJGzhoEDc3euXrOWazZZ5Fm0uHmRmw65lraNJu/kqZG4U/4xCkfMniwWAADBAuEt
+Vjyh8MNUeFwlMuMNR0SwUpzs1+PGBmRLCxdy22m/PDP667RtpZvvTmZfChe5goCZKlh6uPmw2Ilg
+RWkEqzovL2/vsuUrOZJ5oFV+bJznlCyjdFhtwTXJF0YnxTHZd4IcA881GSdLTvsn5HgrZF3/n/g7
+3EzKDwVUQg4BgGCBwMrVWZTxcl+oLibu0+dtvRCu9fQ745xN6knvn0nv80jjsUYEK9TFCiJmimR5
+Cw83wc3apWefffbhbxcu5mmFFlHgR8sPGrhGWok4JYs88dyU/MRt12/mzu0/ZswVPeWaTPfj+NSO
+/SxYZSNGnF25cNFifhigkAIvD4hYltAxH0ZuCAAEC5gnQjmUsc6l1d7OBEnXIT2gx2ZQtD6kcIOT
+9/9E4SnIlTWUVNQo36zcEdKCpe8n5ky83PUlcyFqJwcNGlS4ctUafmKVI6iDSFS0mhd//fWcxLFX
+jmFx4pqoNBGsJMVRUxYMuIarZPjw4XsWFyzlptLtImAsX6UiZ8foeqxDygcAggWMyVUcZZo84vZQ
+ZxIVTLnyQr7K6dgGa2sM6DX3A+MnEztBriBpRgXL3/2ZiZUPCXhxzNycyENhcDPj0WHD8g8tWbps
+j4jXd4qjBqyEQgXGIgORSgyiALjgDldyFQJyqEoW1wBwp/pXeDBRWl4s42518rQPyFVwyUxN9Okc
+2K32rHf/vJCbCcDTMYuAca1bOwnK2rVrcnW1yi01X/n5+Qfp2mPh4gdK9imOUfgPQbpAJIAaLOBM
+UHjgTZ4zrq0ruVIzU7uKlyaz30rHOJ1ej6P1M7XfcVWIQK4il4KCAuWiURdaXksUjhio+eJ+Xy3j
+2UlT6Tpa30mBa754yhN+CvMEYhKEC6jBAs7k5EEjchUicJNgP/2bkCsAzMVVzZdGvLjjPnfWz9i4
+ceNQeSqZ4ScduamxOD8/v6hgyTLu57VFcQyPsU/EqxYxDLyoJODyq4/iGKsxV96OEsnnIVf4KV9u
+zj4i6aseggUCkTB5RPbMcPtfkTAMA/APtfYKWC9eutquGFW81qxpaWr8tbzPhWGViNc+Eq9CWuf+
+lFzj9T2FXVYVjCAkyy4WqKx33vm/mzUtFgluNmGxLx8yZMge2nYxrXNLxxozjwlNhMAZ31AYJYn2
+Zx/auYO7/vggV8BbwULzYHDw8oGA48OHD98mTzbuU0VMcTydyUNiHEY/r4gRK66tyv3gg/fH3HXn
+HWMUR83VacGn6/nya+8wkraqcnJy5mzdtv0dGYTab1CDBXxJ0LZsJvRFrCBXANgDAzVdWuJXr17N
+zYxDndVKUDiYl5d3cNnylVsVR1PjLnmf7wi5Zqzl6UfavhExH3LlDw9czQPs9v/888/OoXPIM4MM
+o5ColSr9TZKr8kCTxpL37t17fX7+0AvpN3iWkJdp31X+HCtqsIA+8WZRotqsOJ7Ac1tDZaeO7lq5
+8uapLcgVUFFrsEaOPFf5Zt78oD6RaPZwEeGIlzVePMF3vU6wqmRwVe6To3a25xO+l/KTcsSwrYQq
+i0K/jz+eNuzWW24+V3FMcZb1E0H3cK14uqa06Sk3d1DZqtVr3qLVP/kj4RAsoOdRCs8ZFadgS5av
+YgW5Ap4EyxmBkC4rxs4yQrjJnI/xyBnZvqFDh25ZumwF135tFflq6RCN6YQCIlQ8yG4vCgNnzpyR
+d92113AtJT+olOlPmvUyPTTExMTMOVZz/Df+DKILwQJ6llE4xxtpCpZkodYKmC1XjDvBCqR0GSkQ
+LCxgwl7AvIgXdTT7A9Lni6Vro+KYCokHW+UCmOdBPSWBMybuXB2vOEbp59H4OyuO+Vi5Jo1rRHhy
++lIROnUfVbKfhkgROSozOI5yJH7yZ8+e3Wfc1WP5qT+e87admWnQy/TPw4m8Q+ERf/4fBAuoCZ3v
+Ds6gC3seu4s3shRowUKtFbBKsLyVq0BLl83EI2wlzOB/V2XphIhRo0aw4iVEKZo5T13so0EE66js
+5/jw4WeVLy5Ywp31+alJdV5IXnLTZlmoPD0pc2ryIM/ZiuOpPp4GqsO8ed9kjb7i8mx5P0fiytS0
+1DEtSRl11hk/u86ffeYvbq9xyQua0tLS1x4sOnQXxfVGCBbwNuFzu/ZZFG6kBDSQll0VRyfBZF9k
+Sd/B3Ir5Cn3txA65AoEWrHAULn8kTFtYhrq4BakJV+1DxoJ1ZNiwYSVLli7nsZy48/5hETH+rJpC
+LeWVRwNcnvADc1xDxzVR/WfNmjnk2mvG9aX19opjzk0O7aw4v85EyqT8gGsZ36TwBAQLGLkIYkWq
+xtEFOJKWg1x8zxQBMrpf3s5IZ3rIFQhVwYJ4WUsEN1+qcJPicREsbnIsFyFT+vXrX7Fu/YbPafVT
+f4euEJHiB6B4urE+s7/8csS4cVf1lhvzLBGptladJytkylVewMKakJAwtay88jmJSx7stpni0HAB
+CcGKDLFikfo1JYyrFc38gnphuXvsCL8Ey5MUuRMsZ5/7W2MFuQJ2F6xIljCrBCRSnrz0RmK7dOm6
+Y8fOXRMoT/3SQHnRSoSJJYo7m581d+7X2VeOGc3Ne1wjlS6S1dZK2fVVpkwcMFiVVq4NbBDBahw2
+LL9iydJl/KQ9ZxQFFKfVEKzIEipu0+ZOgoPo5PPAa/+luBjzTCstZgqWM0HyRrDMkCuIFQgHwYKA
++SYckTjEhSvpGjx4cMWKlaun0+rHFNRxpLjGKUdeKwvmz0+8/PJLeUT9eBGoTMVJ3yirZNYXoQry
+7AsnMjI6fLv/wMHHXfXTgmCFj1TxxXIZnejLFcdTgGmehEqP2YLlSp48fcefTuyQKxBpggUhg2h5
+K1zeYnYcWlk75e+xehlnJ+Pj478tr6i6hcqtEghWeEkVd0q/gMJYOrm8zPZWqqyULKMd3F313UKt
+FYBkQcYgWtZJViDixJ9+U+6EyspjdxVn6m9qP+/WrduuH7bv/AOVY5/rv4+pckJTrHiGcO6ofpmi
+m3fJHzmxEleyZZZcQawAMJ/M1ESvri07CZk69Y5aGO7Ysv7HG8hIlK1Qlim7SDKnoZefvK9lbkOV
+pqYmHp7D6WCkqMEKHaniAet+SULyO1peoTgGsDNdqtQMSC9CZoiVETBgKAgWqMEKLMGQMU81E+GG
+9v/apZnPiEzZ7Xy4qQUsbdWq1Vs1tSeedvaEJgTL/mLFfau4tuoWWuZZIVVWCpZR2cLEzMAOcsVA
+sCJHwsJduMya09LqJ/rsPM6Zs2ZBYX90dPSztcfr3nU1XyEEy75ixdMF3E0nbrSi61tldfOfGf2w
+jNZcQayAnQQLchXZ0uVtp3C7i5i3guXvOFOh0Mxn0vk3NJUO+mDZS6r4fJxPcvJbCqMU3RQLgepX
+pY6J5WkAUG9lCmIFAPAXZ/3CzJIutd+W0QJX26/LbhLh6djNGrQzWB3RjeDtfyxIrFHWaG6yXPy3
+xtTU1G1Fhw5P9lT2oQbLHmKVSotL6WTdrzhGWg+4VOnRNxX6IlH+/A+IFQgkqMEKTwLZz8uT0ARa
+NrTHY3a6diVVgf6PAR7ZnalPTk7+tvjwEa4E2e1pWwhWcMWKLeYaGQw0x4iQOLtbMiIzRrbTbmv0
++/6KFMQK2EmyPE0ECyBcZgmXJ3yRFVe/6a9g2aGWymqZctcPU/MZz/v4KoXnjewTTYSBlyqeAPMi
+liqZDzDKTMEJxrZm1LJBrAAAVmNl8+LPxEPX3OitdLlqfrRKKqyWP7uIlJF4KChY3NJqM2LEiLqF
+iwrWbdmymUdqvyslJXX7oeLDM4226KAGKzBSxR3WeYiFK2nJV0yCK0nxtYbKiCgZFSFXx6Cdr9BM
+2YJcATuAZkJgtXT5QqAnzg53mfJStpq7du36w/Ydu56l9W0USqkcP2B0XxAsa4SKjYGHVxhBJ4Pn
+AeSpa2J9kSq7DRhqRMSMHjfECkCwAKQrOFIWjv2lLJIsngKHmwX/6u1+0ETov0zxRJkDFEcfqnNJ
+qFiq8l3Jq7PJlUNJqtwdp/b/aNf134NYAQBCDW3zYqhNIRRImQolkTIgV8wpCrW+7AuC5ZtUdaPF
+EArnkUydS8uBFFoZEZFQlyojwqX/j1ZMIg0AAHaQLbsLl9VyFepC5fFcZ3asLNy3f70vT9JDsDzL
+VBotukrgGqrBFLjGKsOIULmTKiNiZWVtz/tz1gdUtIxO/gwAAKEsXN5gpZzZaXqcUMBJ7VVJScnh
+j6jsWurL/iBYP5WpdrToRaEHhXMoUs+mkClyZaiGyohY2aV/krPfMFO6+H+qv6G3f6ODmAIAAOTM
+uJSZ2Sk+3IXKhVg1U6jpnpOzbNu27f+k9fm+jgMZ0Z3cRag4ZQ+nCLyAlt1FsKI9iYMr/G0CtFP/
+JH9ky9X/QC0WCIWMFh3dQTjIgjc1WJEgUx6GpThOYUOnTp1m7d5TOJPWC6m8qvfn9yKyBosK9ja0
+uIcijzW/t68yZaZY2U2utMfjjWi5+w+QKwAACAzqTYKz2q5IqZnyIFUnKZSySFFYER+f8FV5ReUK
+Kqfq/J25JGIFiwr2aynyJtDqMH+FyJVYhdu0MJ5EC08FAgCAPWXCn/5hYRQXXBO1ncKS3NzcLatW
+r2WpKqNwSHGMbXXy+PFaxSyxijjBIrHqTpH3KoUr/JGhSBIrM48XtVcgNO76R9Jd/4KWjPmiUb9C
+MyEAoS1XNfwyOTl5cvHhI9yXqnLTpk2mi1RECxYV6NzH6iPF0XndZ7Eya4iFSK7xgVwBAACwWKy4
+o/qe2NjY545W13xoZrMfBOunBfr5FLGf0GqaN0Jk9pQwkSxVwUjYAAAQqUTiQxoauWro2LHjyr2F
++x+hsmdlMMufsBYskqtLKXKn0GqyMzGyemJj9E1C0yAAAICAyVVTenrGJpKrB6nsWR/s4wpLwaKC
+PIci908UrqWXcdrPvJUqCBUAkXb3j35YAISgXDVmZWVt2LN330N2kKuwEiySKq6lupAi9koKFyma
+JkGzBApS5R2ovQIAABAIOnfuvGvnrj1PUrmzxC7HFNKCJVLF8wBeR5E6SnEMEmqZTEGoAIi0u+PF
+qMUCwLbX54+1V9XFxcULafkfOx1fSAkWCVUHkagBJFRcWzXEk1SZIVaQKu/QdypE7RUINbTNhACE
+mGxE2v89kZiYOK+0rOJpKntsVdjYXrCocGaBeoBlioI66bJHIFWQKwAAAGEtV80pKSmbDxWXcJ/r
+Yrsdp20FiwrmLFr0oEh7g5aDjG7nj1hBqiBXAPw8M0czIbA/kVLrqq2p69Kl684dO3c9Q2XPVjse
+a9AFiwphPoazKPDjfWdSRGXTMlVqqzoqHiZe9kesIFTWyBXECqDAAgA3BVbKFbHjwIH9D1PZ86Vd
+jzcogiV9qX7JeRhFzkhaDvZ2HxAq+4kV5AoAAEJTXJ595i/K4398wpQbCisGOtXLFYVHKMyyc7xG
+BVis4mkxngrlhxWDfal8lSlIle+S5OO5RUSCsCx41Ew9EkfHBqGbXi3gJIUKCo3ymidQrpV1Ltv5
+qf52iq7ixozrRjcFzi4Kf6Twid3PR8AEi4dUoIL8U1q90CyZgjwFTqAgVwCFFiQLhJ9kuUrTuv3U
+JCYmzigtq3hcREsrWFEawUqbPPm9Xvfcfde5tD6cQo6imUnF2+tHdwz1nTt3Xrlz154/U5m2MBTO
+RUCaCKkAbkMR8hmtXuCPUEWqXLEgeZIYgxLFdx68oyoKlRTKKHwvdwQV9BuFtDxF++pPy2x6vZjW
+b6P1GyBWAIBgSgLk1jd8jTddH8Smmpqao1Qe7Hfx9TrFUbu1h8IaCh9R+RD34osv9PzTk09wd6Cx
+FPIKChanacsqZ8fm5Nyf4jIqKSnpbZKrybR9RajEfUBqsCiiJ1Ck/M2oWKnT2bj6TjjKlQW1TNWS
+4PmCmE/nYC0tD8vdR4tg0W8eN7AfnnJgCMQKoMBHLVYAa1iaJa/izKZG3kukwBlla33ZhXNiTVrV
+7Ks+JiZm9rGa4zdSuVHnSyULLbpPnPju2fffd++vpEzpTCHJzWZ87renpaV9eLCo+AP63aJQOxeW
+12BRxLaiiLnGiFx5micwnMTKg1AdFBnijOWYiFIHWbIU9dJkME0UdlLYR6GM4nu34qi25RqqCvqd
+Ml8FjvZ1vQzmCrkKUyEP1Pk0q9kC2PscePEb9ZLHHaVQSuEABS5Aiwbm5pasXr22WPIxrWAlUOCC
+Ou7jadPSb731Zh6+5xwKOQUFizPpmkhHOrKM+sbGxhI5H77kV3y+t3OgPGey4mhS7Pn2228N+58H
+fnsJrZ9BIUPSRVHv3r3Xb9y0ZS6tr+YyzOpuLiErWHLXcaarDyNBqjwkDm6220CBM5RVlPi+peUe
+2qYkmAWv7GuIq/2Hu2j5E4++xI2Xv8c/cELkmzesVk53PFWJFhk/KhKuwmLeiu8mKXC/yDhn+YA/
+59dNIavWStQprmvP+Vja8mPmRuMEhahXgtMswrJXpOaApBOWm1Ny8zaUQj86B8k+XgfNUlA2yHnm
+/R6hUMgFbK9evdZs3rJ1k+R5x/Q1Ips3bTJ67udQOuX9cxrOfO+9STn33nP3MFo/WwrsM+g/tPHU
+JBVumDW8iDYtde/e/ci2H3YspLhsMiFvbRZ53iRhotRwpUma4YqBplCVKkWX2Vpdg5VAEcUXVrrd
+7qoDLSxCsdRQHWI7p/+6gH5jtR0TBx3bCDq2p2g1hUJ7keUMKdRD6jz6eI4PSUF00s3100rip7UU
+LIqsp2uurwTlp+O5NYsUqe81SQHUJNtwxJXL92ql8ON0Uyj95CoMCBbv5wT9t5Muzk1HOadcOGXR
+9/gmaLAUsF0odPPm3DqJQ/4C16pyH7/v+/Xvv33dug17Rfjq3eQ9beZ89VXGVVddyXHaTu50edBh
+7iybLWmwg3zGcd9WMThWnj+CphcXuxTUHoSqQdLOPslztvTqdcbOzVu+53NywFUXAe47Q4sen376
+Se7NN93IosKdlFPlOigTQY6W9Mppr3LIkLz65StWlst3WKiqdIJVTr9XFcC8K37SpIl977v3nr4i
+jPlyox8RtVz+NhPq0lVF69atJ1Yfq33Cl+bBSCZQTxFeR+EVyShtWyD7KVPVEp9qmzLXQO2XApLv
+GJfT/1tGy92h2JZMx54o/y1dMtsf5UEGhU2XjFit6s2U95LsJGIuzjFn/DyuyndcGNHxbBSJKTQy
+/QJ9v61GsJplPUMnWAkiBIqIkVvBCmZGRv8nQwSLm136itCo5zJD7jQTZBktBW6ZpPd9ffv23bJ+
+w0auld2mNlGbeGytJf21l9/mdNnuiy+mJ1//m+u6ymdJEtcnRMTKNYW9eo1yDV5nSafZSoAe+DH4
+xJavHJMagR/69Om7dcN3G7nf5Vazz0EoQumGL/yuU6dOGXjH7eP5RqKvnP9O6vkPJ9HyVbB06bCl
++0lsbOyLR6trpkozH7ChYHECz6YTNJVWzw22WBkQqUapveCMaYsUvkXK6aaWKDrmUuX0GCCckVdK
+fKZL5s7NfAcjOENLk7jgAjmG4oIzst5SO8K1J12l9qVZCsEOGgExi2pdGm+WwpbP2zaRKZbeLXR8
+u5AdGD63cc4Ei+KwJsT+RysRspxp0z7qdduttwyUQrejhFhJPwmSRhslTR0VmeQ0lCLptl7yi5Py
+XgeR1B6aPMFfmiWvOSJLzoPWDByYW7h6zVpOv1xDuNOMZpwIScct5/+N11/vO2HCQ6Np/W6SkYRw
+kyyjgqWTq7KMjIwp+w8UvYG8MTQEqx2dqJm0ep6VcuVlLRRnloelgOCO4mvoeNZJRlkshUYjkoll
+hXSsSGt7KZC4xkSt+crU1AI169Jss5y3lqZW2lelSFMbTU2EVnq1BRSf21rcjQE3aTNa0qZWsJKU
+001iXFN0QvqSeKo14XSc+c03c9uPGX0FyxzX8A5Qbzw0N3THRJz4BoBFtULSK18XJwYPHnJoxcpV
+nCeVaASrDvmTaec8+bHHHv3N3195+SmO83CozfKmFks3kCffODxGYSZSRhAEixJjqhSC6ZIJJcvd
+2iG5q1LhQrQ7hXzKCP5bcfSj8FuufGzKq5bjY5HiPk+7RKZKJKPC43EAABC5khV/xx3jL5o6ZcoL
+LMKhLllG+w3qvse1oE9SmIIU4T8xBhId93HgvlPcZj2aRKQPhY4iV+38SMxmCpVaG6He3S1hC5ch
+C5rkjpCr9Yu1zRjh8JQCAAAA/+FO/1RmfFlUVFS4aOHCxwoKFl9B78V6UfvjkUBKmw9PE5ZERUVN
+PH6i/kOUjYEx+rsVR3Uhy0mzWYH2ayi42J4FigfS+id9Zxw/6UZhgIQMnDUAAAB+ln0JDz74EI/P
+xM1kpR7KNLVvHvdVKqDwZp8+fW6nfZw36b3JlyqOSYk/VhwPIFQZLSdJxgyXle4CSZbL/amfUaiM
+jY19jf83zr55RLlIXPyo9kiy2He17xuZ1sbTuFY+TvnCHc1n0rZzaFlE39mHUwcAAMBi0eICqeeH
+H04defv423KV031AOVQMGDDwhzVr17UM8sw3/1Q2VbrZV8vwF5MmTRx83733nKc4ho3gJ5DjZH/c
+2tJOAvf5a2P2/1Fr0PTzDLZp0+azqqPHHqDjP4azbqFgUSK4nSL5JUUzQaNZguVOrpyIFY+dsoC2
+4eEdlmD8DQAAAGEmcPxARWsngtV+6tQp2XfcPp5H2uZJk/npa346VR2GxCxqEhOTZpaWlT9sZEga
+4IdgsWFTJG9VdJ3RjQqWL3LlRKz46Zl/0fdn0GfrcIoAAABEuIjFiGC1DH8za9bM+GuvGddZxIvh
+2q4O6uciacmyHq/bHfdZbhkEOCEh4cuy8srPUHMVOJv+XDHYRkzC1RLc9Jfypm8V9/N6mz7viTMB
+AAAA+FSO8ziNsRQ6UBhI4fzpX8wYQx+Np3B/amrqaHovBTFlPc6aCFPIZq+m1V8ojvFa8hQvh3Mw
+MI2G1qQXUJjNc/DR93bglAAAAAAgEkyYZyt/XHE8TcGzYXPfKH+fJOTqyTf4CUDEMgAAAADCDW9r
+prhdt2fbuFhuxuMZy7l2i8fIOtPA5vyUBY+UzgOY8QTHRxD9AAAAAADOpSuRwk2K87GyeCqTifT5
+JRS6I7YAAAAAEAmYNhchCRRP5NtJ9/Z2PPoJAAAAAAAAAAAAAPwiGlEAAAAAAADBAgAAAACAYAEA
+AAAARBL/L8AAyhisV4aqtnkAAAAASUVORK5CYII=" transform="matrix(0.4798 0 0 0.4795 249.4551 616.9961)">
+			</image>
+		</g>
+	</g>
+</g>
+<text transform="matrix(1 0 0 1 376.2324 681)"><tspan x="0" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">5</tspan><tspan x="5.035" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">–</tspan><tspan x="10.165" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">6 </tspan><tspan x="17.052" y="0" sty [...]
+<text transform="matrix(1 0 0 1 386.625 692.001)"><tspan x="0" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">3 </tspan><tspan x="6.888" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">t</tspan><tspan x="10.022" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">i</tspan><tspan x="12.245" y="0"  [...]
+<text transform="matrix(1 0 0 1 383.7822 703)" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">(</text>
+<a xlink:href="../02b-STG-Stretches.html#p_30-01" target="_top"><text transform="matrix(1 0 0 1 386.2842 703)"><tspan x="0" y="0" style="fill:#10137F; font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">p</tspan><tspan x="5.075" y="0" style="fill:#10137F; font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">a</tspan><tspan x="9.345" y="0" style="fill:#10137F; font-family:'MyriadPro-Regular' [...]
+<text transform="matrix(1 0 0 1 415.7285 703)" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">)</text>
+<polygon style="fill:none;stroke:#FFFFFF;stroke-width:0.5;" points="353.253,640.93 353.253,644.334 359.923,644.334 359.923,644.38 353.897,655.88 358.313,655.88 
+	364.316,643.506 364.316,640.93 "/>
+<polygon style="fill:#1B4787;" points="364.313,640.934 364.313,643.509 358.312,655.88 353.896,655.88 359.922,644.383 359.922,644.337 
+	353.253,644.337 353.253,640.934 "/>
+<g>
+	<defs>
+		<rect id="SVGID_33_" x="307.205" y="421.999" width="223.788" height="109.237"/>
+	</defs>
+	<clipPath id="SVGID_34_">
+		<use xlink:href="#SVGID_33_"  style="overflow:visible;"/>
+	</clipPath>
+	<g style="clip-path:url(#SVGID_34_);">
+		<defs>
+			<rect id="SVGID_35_" x="307.205" y="422" width="223.787" height="109.296"/>
+		</defs>
+		<clipPath id="SVGID_36_">
+			<use xlink:href="#SVGID_35_"  style="overflow:visible;"/>
+		</clipPath>
+		<g transform="matrix(1 0 0 1 3.051758e-05 0)" style="clip-path:url(#SVGID_36_);">
+			
+				<image style="overflow:visible;" width="467" height="228" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdMAAADlCAYAAAAIqh2pAAAACXBIWXMAABcRAAAXEQHKJvM/AAAA
+GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAATHpJREFUeNrsnQd8E+X/x5Mmabqb
+dNOWAl3Mtuwyyy6IbFEZAgKyFZElS3/+/OnPnwJOVHCAin8FRUEUlSXIRmZbNgh0L7pXmibN//tt
+7vAISZu0SXpJv58XD3e5XHOX5y7P+z7P+D4CAYlEIpFIJBKJRCKRSI0pIWUByZ5VoVC6wyIQkhck
+R+ae10Aqh1TMpDxnJ0cl5RaJRKqvxJQFJDuDpwMsIiEN7Tvuxf6ydhNwvTkkN52HRwRqKQvTPQfP
+Zg7sHX0H1nMg3YaUhtshZTD7VAJwNZTDJBKJnCnJ3kE6tNPQ52ffSc0eAC9lZri/KyFls8D94ZOV
+GYP6xKTCehKkLEj3GPCWEGhJJIIpiWTrEHX0iZ68SKVSL4KXzax4aIRtyo5NK/4e3LfjVQa6CNu/
+GYeLwC0C0KrpKpFIBFMSideSho5bCYvnIfnz6LTKEKjvvjJr+9NPDNoAQE2nK0UiEUxJJL660ic7
+xi98/W5aThhPT/Gq1FEyNfvi1nNUFUwi2a+oAxLJlkHaOaz3rBfzCkrCeHyaeZXKKgWBlEQimJJI
+vJSs3YSxAm1PXT4rWaCt8iWRSHYsB8oCko26UrmTVNJNoO21y1u9unRyVuGVbQq6YiQSwZRE4qPk
+jhKJJyxFPD5HTX5haS4sKSAEiWTnompekq2qWiPQVAu0wRdq60iHw1JwqMpxSJcF2shHVQJtRCQf
+SMGQWkLyE2iH1TgLzNcxT3U3NRuDPlTQ5SKRCKYkEh9lDPA0b656euOcp4a9BeuphjoBMVGT0OU2
+6zFqaYtrt9JaCbRRlDBhKMIISC71OUl1dXU1XSoSiWBKIvFVKo1GUxdUVYdPJh0HmObW1psW3kPg
+FTDpig5onWDRut/4lcEJV+4gVNszyY1JCFupgY8uvnIjBQM3VNLlIpEIpiQSH5VVXqFE8EUzUNMn
+UaC/Fxvgvl5VrQBa7DyUwCQWsBIG4njcoN5jlwddvp6CoG3JuNlwZv1qcnouRkKiCEgkEsGUROKf
+AHJV0tBxp2E1vhaYOrQJD+4ASw9IReY8NrOazySM1fs7B7ZYZdwCUiFCH/anC0Yi2bkoAhLJZgXQ
+8g/sMm1TeUXlUHjpZGC3m61C/Gdc+P29kxQjl0QiWUo0NIZky+40O+Pcl//19fK8UctuEUtmj5nP
+OEUSiUSyiKial2TrQP1LGjruC1hdKtB2BnpIz67Z9NiFS7ePgpP9BvYvsta5Mb2E+0AaIdDOKPM9
+pL/hHFR05Ugk+xJV85JsXtjj1id68kaVSj0eXroa2O2Sq7P06fRzX563RpxcOCcfXx+vhaWlpXME
+2jGsNecwcNCgRXv2/HYUzoECOZBIdiSq5iXZgztV3Ev8vzfknm5/wktDofs6vLJk0jMCbZCGukDY
+DNJTkILrcz7wdy0D/H0/A5Au44C05hz+OHhwXVRU+86wj4iuHIlkP6JqXpK9APU6AGpRix4zPykq
+Luuj795e9tqWWclpOTdhvy2wf0EtH9cqMm7Oi+Me6eXL7Fto4rkMhEVHgf5OUR1Xrli5HJYvQrpJ
+V45EImdKIvENqDcBpKth9SIkfZGHRBu+2PPi6Bmv9QFISmv5KKnIwcFh49bfngnsMi0c9q13c8je
+fQfQqdakuLh+Ndtmzpwxcs7sWf1hmztdNRKJYEoi8U6Vt388AYslkBINANVv+pOD8f0IBJyhj2HC
+ALabPLZ/L4E21KDRgs+9FRAQUPIwWPezQBV/9dWXy3v1jO0K+1LtEIlEMCWReAnUI7B4A9Idfe8/
+/cK7/bbvPvqaQBtzV5+U1dU1QfQF3WIiBgsebPc0RgkFBQUYRlA9NH4wOmbBkSNHdIEaPnXqtCcE
+2uD6JBLJxkVPxSS7VOGVbd/L208QazSCf8PLMIFOz/U5Kz4crVJXV4IzxGrhWzpRipxFDg41HYRm
+v7hhwK+HzqKDTIN9yo08vFwqlTpVVlbePyZCFat84+Li7u/0wguLJiQmJp6Gz/4BPruErhqJRCKR
+eClp6LghkC5CUkPS6KYt3x3cCTCL5Fb5wvqo8D6zr3P2OwKpgwmHfQFSOiSMy3uKWWL0JQ0AVQOf
+rwF3isNzMOXExw8dTVeKRLJtUTUvya5VefvH/bBYCOmcQE/A+bkrPhzzfz8eZt1rjWTtJvikZtzj
+dlCKHTmkewxA0Khp2GC/39u2bfv82LHjesL6VE9P2RmBdg7VGoeKVb6c6l7fadOeXsQEeCCRSCQS
+idcOtRuko5Cq9DnUD7b88gkALYTZ9wVI6dz3N28/8AO8H27KMWH/mRERkTdYV8p1pmxiHSoO66Gr
+RCKRMyWR+O5QzxRe2TbbS+a+V6AnsMPS/2ye9fm2/S8B1Hp4uLsgVB8YOjNv5UdDhk95pR28b9QU
+MLDfoLDQlktu3rwRUdvvjHWozk6O/4a/6UNXikQimJJIvBYA6+rtE5/O9XBzwRi5D3X4WfLq58/I
+2k3YV1xS/iy89NZ5233KYwOmwDLEyGP1ysjI0P2M+9W8euQBf4PutyddKRKJYEoi8R2oaSl/bZ4n
+dZSsg5fZenbBQAp6e7nPW/XxuLkrP8JgC25GHArHpkq07vPA/YAN+oCK7pSRH5wfdojqRVeKRCKY
+kkh8B2pZ9sWt/3VwcNhgAKgGfy8DekbhDDDGjA1F56viApMLVF1xehP7w/ntgdfz6EqRSLYjGmdK
+aqpAVQGw/ucdNSlfra7GOLlGVd/OWfHh4G27j0bD36ZigP1adk2F9MC4VI4DNQhUZryrDJYfwXIw
+9gZG+NMVI5HImZJIvAVqXtI3v7m7OWcItL1tjZHruEd6jhUYmDuVA8bM4OBghannxMbxZTQOznEv
+vB5AV4tEIpiSSLwTAMof0vO9Ri/7tqS0IkZgwty+z720aSw41L51tJ2eycvLuwrLylo6HdUKVUa9
+Aah/oLGFbfF05UgkfoomByc1KYDCIhrSsL7jXhyRdC25lYDpJFQP4dypCypv/3i5ln1wKrYPILXT
+DSVognvmvlTDd9gEy9dhewZdURKJYEoiWQOeSKJQSB27j1gy7MbtdBzHGdIAgHKlemZi/KJ1L834
+GsBWVJuRFWjnLg2qL1D1QDUDvtt6WH5KMX1JJIIpiWRJkPZo02/eq1m5BX0F+ifpNoeOQZoH7vRS
+bUB3d3NZrlKpcOyqf0OAqgeq5+HzX8bev3TFSaTGFbWZkuxSsnYTBABSDOV3SKCtksVGy5MC7Tyn
+ODUbVpNWNvAwsQtnjBwKQPOqBX7KktLyN0Ui0S54WVyf9lMdOHPbUzvD5/8Cr7dD6kRXnUQiZ0oi
+WcuxYphA7DiEFs8HuYvr3R5d3OHmnYzusN4SUnNIAQLjqoNvess9pv59/JO/AGzVteyHM8OshRTR
+UHdqwKXidHJbYIlONZeuNIlkXdE4U1KTEoCmkuNIMzlvHeQAFzsqBfQeszzw8o0UDO8XxiTssOSl
+87uJWD5vHIYZTGOSIYif9/XxyiktLcXPMUuNEOtQGahKYTkXlo/A9jdh/WO62iQSOVMSiW+OFl0q
+Rj5qFTtyScz1v9PbwXospDaQyv19ZI9dP7LxiCF3Cn8vhPfeg9Wp4Ew9zeFMa3OqcLxvYbEcwyfS
+1SORCKYkEp8B6xnaa1aX/MISub+v7Nj1PzfmALxqC/7wGKT/QQo3V1VvHVBNhXN8AQPo09Uy+7V3
+ZMpPjOWMTQca5nUFpFJmXYNt5pRbBFMSiWTeAtjP20u2tby8fCDAVGwpmOpxqdjbdz1sO0RXweRr
+htX62H7uB6kjPghBPuJwqyCm/PQQaNvfWZhi1KsSFqbw98mwvC7QdnxLZd5LhM+ooty1L1GbKYlk
+JUEBmgOLs5C6CB6e4s3cELgPVUiPwuow2PY2LN+lgA968ws7o2GISJwAfgDkEbaP+8DSj4Gpcz2v
+OQYJGcnZhNBNZB5wDjOAvVtHnGcSOVMSiaSjpyH9C1JLS1b1GnKpAm3Ah19guRXS8Tqqpe0FlGga
+sAe3r0DbgQzBiJ3MghmnGcU4zUDGZdb5kNKA/NcVVgnfhc89JdAO4zoB+9+lnwnBlEQi1V4Yx7YI
+Cf40JycnylowraVQPwXncxSW+yCdg/cLbCgfWSAiALHatQUDR5xhJ5dZd4bvhL2nZQxM0WV6GOvq
+rXwtWN2D9Decw//Bcgfsl0m/GoIpiUR6uKB2cndz2ahSqcYDTF2tCdM6CvK/GYd0ASELKR3SbaZq
+ujHzy5Vxk+gcMRRkVzinGOY1wtSnnp/Lq/vCwDVJh/PEOXffg/cr6NdDMCWRSA/qcUhvQAqztjs1
+0SWlQMqGAv0aLI9j4Y4RlwzACdsVo5mXXFLhUCGcJJ17EHSKcuY9rtwZcKKDdIdjBTLQ9Ga28R6K
+From5+B7PgfbTtJPh2BKIpH+AYCbp4fbJqVSOQZeuvABqEbCFXUYzh9dKwb3xyrVYNgfx99ix51g
+C+dbk7tXONeiCL7/XHi9jX5B/BT15iWRrF9AlkLB+Floq5YdMzMz2vEQ9rUV6v3rgC3B0czXgslv
+T1h+C6/DYPk65QzBlEQiaXUyNzcHZ5vBzjNOfD9ZLvhYmBIMrQ5UXL6K1e4UiIN/ompeEqnxNBHS
+awhUWwITwbRx8x1UDnk/Fl7vo1zhj2gKNhKp8RzHXicnJ5wmzmai4ZiripdUP4fKPMC4wHV4ixk/
+SyKYkkhN3mnkFxQW/zcgIOAqQYpkonB40BjKBv6IqnlJpMbXJEj/x7oPW3CmVMXLi+twAq5D3zrm
+0SWRMyWRmoagQMThDlu5sCKRjBDGeA6lbCCYkkgkLUCrAajTYHUzAZVkgnDqt+6UDQRTEon0D1Bx
+uq6XYbWYcoNkgoIpCwimJBLpQaBiZKGX+exOqa2UX9cB7pOxsC6iHCGYkkikBwvJ92FxlM9AJfFK
+2Ku3OWUDwZREIj3oTrG699+Ch4PAk0h6bxlIcZQNBFMSifQwUA/CYju5U1Itwjlb85j1tpQdBFMS
+iaRH4E7fFDw4lRmJxBU2Bdxh1v+m7Gh8UdAGEom/+hLSVAaufHHNAj6dT1OQvtoJyP802P48rIpg
+/SdYpwtCzpREIhlwpx+TOyWQGtiOQ2KWwj3iSCAlZ0oikeoWhhmcxBc3iIU7uVLrg1Q3zznvXYT3
+usJrNeUYOVMSiWTYnW6nXGjy90Bt2xSUQwRTEolUtw5BukLZ0HRdaR3vnyZXSjAlkUh1F6olsHjD
+mAK2sQt4kmXdqIH9zlBuEUxJJJJx+hrSrwQ0ko6wivcsZQPBlEQiGe9U0J1qbMUxkR509LrJjDBN
+oxwmmJJIJOML5GOw+IXcqe2B1BjA1lP4h76Uy/yQmLKARLIZd/oCFLw9zF2AGirMuS6UAN7wfOXM
+9GL0NWDfM1AjgOW3B+U0OVMSiWRa4Yxh4z5uKNyMdUW6+1AVb4MehB5Y1031lARSKOUuwZREIple
+KL8nYGKy1geoOn+DwdLV+gp4UsMfVEyFbT2uAQbdGUC5TjAlkUimF9b5sFhb34KeURmklVBgD4dl
+ZV2FO6leDypGv2cMYGv53CfgfR/KfYIpiUQyvZDdLDBhqIyOUzoOf98Plv+DVCowst8EQdXo/LXW
+PcCuBkCaaMf3usuMmTPxoe/3Tp06/QGvV0EK5uO5UmxeEsk2C5lgKMATYVVeh3O5/yeQPoB9X2MC
+QeBnDIb1fVgOGPoMai813Y0aiqNr7jzkHPskfHZvnFjezu5x15kzpo/65pv/w6YNttNdpZeX95/p
+GZmL4PteJWdKIpEaWpDi+MKDhgp0HbeET/TDYPkiC1JGYbU9UBNITXejhuLoWiIPOZ/ZGVIbOwOp
+dOyY0f0BpP8VPNh7XZqfn9e/WTP/d2CfCIIpiUQyR4HzpW7hrlPIJ8M+k2E5CLYd0QOEZiYU2KRa
+3Kgx71lQUkjjbfg+FkMKgDQE0quQ3t++bds7v//+2wZ4uyXuExfXr+Ze3LvvAL50LCwo6O/v54NA
+DeHL96BxpiSS7RbqGMThWUivQOJ2QimC9A0WTLBPVi0f4cYzKNg0SLn7WPshBI7ZwUbA6QKL1pDQ
+VWJ7r8fPP+/u8sTj47vCepBAT00JgnTvvv0PPUAUFxcPio5qv42ZWSmDue/xwaJAoJ0AoMqa343a
+TEkk23eoLaHg6A6r7rCeB8vL8PqmEX+6B9Jwa7XxWRN4ljh3Q0EYjH3fknCHY/0b1l/hs/uERdT2
+7dtWPz1t6iOw7mLM3xkAqeDIkSOCofGDDf1ZvlQq3VJYVPIvyJMycqYkEsnYAvUuLO6a4iihcHOE
+fVvU8r5Nu0ZzPhCYkKeN5kxBf/MYpAJ3N5c2KpUKOxL1NRWc9ZBXZWXldLnMwwGO/Qpcj2JrfE9q
+MyWRmqawiq1VfcHBZ5Dqbm9otKja3jO2E5KFVQ3pFo8vT/O31q6bz4KUbf/UTaaANC4uzsBnHLgP
+VIVCMTs8rNVW2N6TYEoikSwldKVSfeDgiys1FoSmjLU1BazG7suDBxAM5HGNp67U9emnpw5a/MKi
+mWZ2nwYhywGqa3p6+qhuXbvsQoeK52LJ70rVvCRS01QXSCI+gpQ5F+w8ch1PCV63FJgQ3H/Tj6ce
+2jZnXA+98KtrfG1tjpNHLh5daTEfbzLII6wBwaALjpYGqS5Q2TbVS5eS/OA8Fsvl8lCm2vc2wZRE
+IpnDLYigQBnDw4IXF9mQsGoOJ0S/BtsqYR1ddBtY7ybQBnZvxpRdOCwisjaI6nvPEFjrkY98AWoB
+nIeah/eZMLCZv29BQUEXax+brQbmdFRyh/OY2LtXjzjYfgJe/473mTkDXVBvXhKpacIU50ftoQuE
+xnCmnOPvhOMvgdd3jPgO2IEKQyoOqguktYkLVmNgybeOWcz5Ya/sETy8zzyfX/jclE8+2fQ+uFKh
+NVypIen2/u3UqVPBiZOnD8HqcUhJAu2kD2mQn/fImZJIJGMLYHQxZxCmjeWsdI6L8YLfgm27jTkf
+2LcL7LcFVqMaAtLa/nbq8M56gdpIPXXrUks4p16wzGB6dvPlPsOq+f58NG0XLlyQw/mNg9VxzCZl
+TMeOtyAfd8P6F/DedYIpiUQyRu76nJiFgIkfzK1Ow5CGOMA+A465EZY7YF+jDo7QgH13wapvQyBa
+m1iQ6uYL+314OA63PZwTOix0VTfgvLAHzkkmn3MYyJY1wnnJBdq2ed5IX7st41odEy5ebAf51DY8
+IuJxyEOcmek7eF1AMCWRSLXJxVIgZWCD8DwKn/sRLK8wr4VcmGJBZYozhs96Cvb/AFZllgJpHcfn
+u0vFKFg+cF69mNfVTF6nxfbokXX48JF0gbbX75+QrpoCinrkldeaNasGrF+3rrm1Oh7VH7Bx968j
+gFUIYA2DvHmvbdu2M2H7p4xTrTOaEsGURGqCCgkJOZ+SkvKEDgBVTFIzBfH9Ti1Hjx0XV1ZWOqvV
+1SLdzxKJHNSDBw0sR0DK5V65YrH4r5LS8s/hM880tBoZCjMJfEbkBxs+xLbU6ZEdOguWvPqRxfJF
+15XqA+rQ+CFQ6P75gEvF3qNYKDem4/rHaf3JruLQR09Mp0+das+5FgiGzMDAwGvTZ8w8cuH8+T9/
++HEnQjYf9qmu53XCByWX77//rvmve/Z0nDd3zsQvvtgS7ymTiaJjohv1Xi8qKhQkJiaYBFbYXzpr
+1jPdWrYICXzp5Zc9EKp1BX+gDkgkUhMUFA4doHD4GXkAqRAKvRK1SlVcpVIVqqqqStRqtUKgnbZN
+W1AIha6gcKlUKs/Ly3O6b4V8fCoVCkV+aWkptjFdgs/Fkvwm9sI1wzm69enTq9u5s2dfBoj2x22W
+BKkxMGWFQNUBV6MAVV+VM3tuqEIEScKDIIFrLWjRogW7XenvH3Bt1qxZ2/fs+eW3EydP47UrNeEa
+4cOV5+7duwN/2rUz2tnZefznn3/WB7b54nGmTJkiWLt2faPe6whSAGPN942OiRF8+ulngujoGKP+
+bvasZ6qTk5NvLHj2uVfXrHlpJ+SNgmBKIpF0HR/OKIPDTC7CawxHh+4SC9Jy3TZMeB9dDgYi94b3
+/BjXo4Ht2Asyh5kSzpznFzB3zuxhX375xSoAaYSlIYoK8HYXxMeaNquXLlStDdS62m8RCMuWLn0A
+quhi165bp7u9AuD319y5cze+8sqr++Fz8+pwoc5btmz2ee/dd0JGjhzVq0KhGPzhhg/wScQbIRoD
+sEJH2tgg1QdUU6qdmfZUtbOzy7mJkyYu/vDDj08YGk5DMCWRSHyCPEI6dN26tc+8tGb1fACpO19B
+qgvVxgCqsZ2huENDuDDRgW21n5/fnVWrVn80Z+68nw8c2C+aNHFiVU7uvVR8uGKrcn/4YUeLn3bt
+inEQOfTfvm0bftFwSGI+QlRfHpgCUw6ES2Uy+c+ZWdmrYfMdfc0X1GZKIpF4o7DQlm3//e9X/wUg
+fdzS7aNcNQSkWoDuvw9ULLCt7VARFMYcD4HHbcPE6k48dwYaDgCNsPXr16109/Doe+3qVaeqqqr8
+iROf/BBAmvDuu+94w/u9XFxdJ37//XcYZ1fOArTms3gK0YYI8werhSFv3AoLC+N/2LEj67Hx43HC
+8nvkTEkkEp9cKM6pKmMe7J3gif9NWI6wJkhRxraV8s2hco9XmzutzZVhB52EhETGpS7R/VOFk5Pz
+sTFjx3yZn5ffbd++vRNgmx/fXaiu8Dtu3bq15vvVp3cx61AzMzJSVqxc9fr8+Qu+0G0KIZiSSKTG
+AKksIjysfXx8PJTJMTFOUqmbm7t7s6cmTxpgbZA2tIpXV9wqQGsA1ZgexSxMsQOOLvwMQJQr7OGN
+7enuAFGhLUFU9/s3pFOUtkPSLFVqasrx9Iys+ZDvV7jvUzUviUSyFkCxF7AnRsZZvmzpoLS01IWb
+N38eyt3H2iBFmROkKHQ+rFvEAtzSY1HZ4xlzLOyAU8uk2g+I0+sX20M9bBGiusLvUN/zxyrft9au
+E8+YPi3ihx074iGvr3AfnAimJBLJkgDF4BAeUOj4jBo5IqJP374YrL7PBx+8HwtLx8YGKbpSc4vb
+fsq6Iku6UzxeXeN5ZTLPGlfKHSbDbe/kiu3hiyB99tnnBF9v3WrTEDVlnKkxSk9Plz3zzIzYx8aP
+xzG8RQRTEolkLmBiSS5iyhMnBpIuUMC7PzV5UrtOnTphDN0++/fvawdJpu8zGgOklnCl+oDaGB2S
+9Lkq7EiDPXfvbzMASO4wkg0bPjB6XCZfhe3BWI2t2/mqPmIeSlxSkpO7rF+/rj/G8mWHylCbKYlE
+MgTIKt0xdbAdgYmBHtBxyuB9t75945rJ5XI3SLLg4GB/D09Pmbe3d8gzM2e0hn3CGMAaitLTaCA1
+d1upPlmrQ5K5IzHpBjpA6NaAhKdQZTtR4Tmio8Z17nepb8cjfWLaX8tcXFx+yssvXAR5n0vOlEQi
+6QNpiwH9+7W7cuVyPrzE+USxA0o1FBqOnTrGyGNjY1u3Cg1t3rJly46wPfTo0SM+DGBd9X0eC1G2
+IMPC6Ej8n40KUku6Ul2HyoLOGg7VXG20nCEh99tZ+QpVbk9dPMcpU6bW1aHKHO7UNSM9PfbLL78Y
+CPm9nZwpiUR6SN9u27524oQnp8IqxiIt/ebbbRheUDnlqcneAm0w9eDaoKkPKDpP9Y0OUmu4Un3u
+lHlYsRkHrC+Ckr4ewdYALOs+9Z9j3fA0Z8B95j4ucnBw+KqsXLEYNmkIpiQS6QH5+/tvyM7OnivQ
+toMahGRt0KylAKqBKKopgNTSsDN0DHMDWx9UH3CyHMA2BKy6wOR+lu4E31zV1ZnKQjCtEovFe0tK
+yyfBJjXBlEQiPSAoiNuGhARvzs3JwWpcp4YW/ljwaAv7wY3qRlmZK0ADH4Fq6VlsuG2phmRKMHld
+kLLVtfrcpL5j1xU8whzjS2uBaalIJPq+tKxiHmyqJpiSSCR9QO0q83RfUVlZiTOA+EHhLDS1cOZC
+FMUHkDaGK60NqFpgxFnk80//dcYiVa+sS63NBZrSvlpbBCZdN8l1p8YAkj1Xcw7tYaH/8ktrMtu1
+a/fuuXPn3sLtBFMSiWQIqJ7+fj4vFBcXL4CXPqYW/tyxj3wAaWO6UkPAs4SLZD/f2pNy19a+agiq
+um5UZ3q4h1yuoYD91hR7DmFhYXcvXb76L7jPv8Lt1JuXRCLpQhQfsv2hkAgYOHDghT/++CMZYcoW
+YsZAlXWlfAKpJQI01Ee6QR3YXr7mcqns5xcywQqs1fOWGzSfda54Dvp6Auu6UW51rbY37j9Qxqpd
+1lWywRfMMWa0oaoCCThBG8iZkkgEz5r5KQXa8aAyby+Zz6pVqx9bs2b1MHjdHMsugXb+Ut2/q/XJ
+nU8g5YsrNeTcuS7VXFDFz69v+6U53Sq3nZOFKrdK11B1raFOT4096Th7f/v5+SUlp6TNhnw+RTAl
+kZomPLFGykOgna3Fxc/Px3Xw4MHhrVqFBkdGRsbMnTO7K2y/37Co25u3tjY/voK0sdtKDRXIhgJZ
+mKPqNza2m8mTYVsDqFwoGhPvV7eNtrFDGzLXrtrT0/N0VnbuVIDpLYIpidR0ACqFBdZzenfr1iV4
+8OAhndu0adPZw8MjaNLECYGwPYhxpg8BVLcgxipEXahiwU8gNd2Vct29ucejshBDNXZIQH1AbWzI
+10ecNt5yiUTyY3FJ2Ry4luUEUxLJ/h2oFwaZ79evf1hsjx5Rbdu27Tn96WmdGHjqdZ76AKpPuj1T
++QhSFN+qd2ubW9Tcw2e4U6/xAajcals+nFM9QSoAkKYGBQe/fvfOnU3s+wRTEsk+IeoHDrTtmDFj
++772n1eRlhhs3lsfPBviDnTb/fgGUj65Uu5QodpcGTdPzeVO+QQvPp6TKSAFqeVy+amMzOxZcK2u
+EkxJJPsCKP6W5dgDFwqowIkTJg5buXLFBNaB1lZt2xDxcfgLX10pm1d1VW+aO5IRF158qVq1JaBy
+QIqTPlSIRKIUDw+PbwGmr8E1rSaYkkj2A1I3ucwjbN78BUPfeXv9UNjUBlIgF6KWKkBZQPARpHxz
+pXU5Un35aq6wgHxqP7UloHJAqgSIpjs5OZ1xcXH5PSU1/Xe4RpncfQmmJJLtQhSrc4NnzJje79tv
+/g9DmsVa0oXqwkHrogYTSM0MUkvAtL7n0ZSByoJ09aqVpTK5/IyqqmpbekbWT3BtsvXtTzAlkWwP
+ojjVmVfXLp3CwY1OfXbB/Cex/LW0C9UtlPnqSFF8rN41BYyWgCkf3akuUPkCeo4jVfj7+x+5m5y6
+Gq7J2dr+xoGKJhKJ9/AUQfKAFA4vuzw9berjGz/+aNXly5e/AJA+zYIUCyFLOlE2sW6UryDlS6Qj
+roM3duYdVuz+3EhSDRU7RymqBl6JCbzIIzwvdtwoG7WpsYXRmbCzkaOjYw640u/rAik5UxKJf+DE
+hYtAG5HIHX7E7mHh4V79+/fv0KNHzwGznpnZHraHQZJwC11LPs3rTn3FV4iyILXl6l1Lu1O+OlQ+
+uVNuhyNfX78LKalpc+FanCGYkkj8hifWDmGp6QbJy93NxWPEyJGR4WHhIa1ahbZdsGAekgF75Ibo
+cziWhiiKOwcpiq8gRfGlepf7AFJfGFoKptzz41M7JV/adDnXrtTJyenHgsLi5+FaFNb1dxTonkSy
+LjwljPP06BHb3b1VyxaenTp3CoqKio5s07pNd5VK1W7Xzp3BjDMV6ALUWoWMLbSL6nOlfBF3ZpP6
+Cv+WGxHJnKoJOA8gRSeIgRQM3VdsQPqGTPhtSyr6p5q52sHBIVkqdfrRGJASTEkk6wHUMzq6g3dc
+394hnTp1jmjdpk37wqLCtllZmcG//Zrp/9uvv3rog6c1AWrIjdoKSPkWnKGhDgv/Ft0pfp65J/pm
+2ym51ff6hCDlWw9gS4ptK5VIJMXBwc0PX7l67bC+CQkIpiSS9QB6v+p2zuxZoYGBgV1Kikv63Lxx
+I+rMmTMBAqbNs6ZgA4cg85Q1Cjxt3Y2yspd2UkMu1xJVvaysPVWbDUjl4eGRBCDdBCAtMvaPCKYk
+kvkAisHkPTt3ivEaGj8ktEvXrm3btWvX89ixo91u374dyP7edOG5dt26Ri/IuL10bcWNcl0pn0Da
+mA9EpsjYqt6mIk4Vb1FeXt5RAGmSKX9PMCWR6g9PXGDbpmenjjFewx8ZFhYXF9e1uLg49urVq9FH
+jvzpC4WVODi4uQATn+DJKju/VHD90nneBl+wFVfKBWlD2kmtKXaoDPaiJXf6TxWvWCwu8g8IuJKe
+lmbS3xNMSSTTIYoA9Yrt3tWneUhIZGxsj04lJcU9rl272iE/P88rLCxcBIl34NSnvaduCNa/vNxm
+QcoHV6oLUltyeNy2U113yjo1nHcU5xBtIlI5OzvfuXXr9lFj20oJpiSSaQDFYWTukZHhzZ54YnxU
+XN9+fQsLC3smJia2SUtNdQN4ChGgfIenPtkiRFmQ8sGV2ipIWbHVvbrulHVq+L0aczJua4h9cJBK
+pUUBAQGnAaQppn4GwZREqh2i+Hjq1S+uT2DHjp26l5eVjfh59+6ekORQAAlbtmxlkwC1dfEFpObq
+uWtI7PAYS/To1edOscoXq35btGjRaK4UoW5s5CdzDNlhgjRo4MGhIigo6Hxi0uXfTHWlKAraQCLp
+hyiOBfVfMH9e27Dw8LiPPvxwUHp6WnsAqDPbecgeIPrVr+cJpA2QJQMrWPMYugHnp0yZKnjttf/A
+corVXCmnuhynNati+IS93tXMa1yqOH/iAA+4kvVvvy1Wq9VijUYgNAWu7BjaS5eSVC8uX5bj5uZ2
+sqio6OPyiso/IM81BFMSqf4AxWhEHu3atvbr1q17lwEDBw5/883/9b97504zKGBECFF7c6G2CFO+
+RTmydPWuNWDK/T7oRmPgHkdHas3qXW7kIQcHhyRnZ+dCqVTqp1Qqiyorlblqtaq0urq6FN5H0AlB
+ErFYLJdIJHJ47V1eXu4DcA148621zrVBlYVoUmKCZunSJWWw6XqzZoE7bt+5+x3k9e36nj9V85II
+otoORT4jRzwa1KZt226lpaXx3323vfe169dkIc1DhJDstioXXV5WXolNnS9fZK1gBtao6kWxbaeo
+1Wteuu9YrX3fA0TzevTs+eWvv/6+C176QiqAhFGIlAC7KnY/cJD48OsEyX3Txo99Fy9+oXNSUuJo
+uC7RnTt39l6//h0XZVWVFL8XVlsjQFHoRJcsfqEQgJ3l7OxysapK+Q2AdB98troh503OlNRUAYrV
+Rxh1yHvlyhUxISEh/d995+2+KSkpkVCgSO3Rhdq6O+VjEHtLu8XGcqdckFs7hGVYWPjdS5ev/Bu+
+8xcm/qYdRo8a6bdv394+AMoekNqoVKqO8HsOwmrrZUuXqMDF5rm7u9/Iz8//08/P71hyStpZOE6e
+Oc6fnCmpKQEUFxiVyG/G9KdbNW/eHKMq9Nn900893N3dvFq2bOVAHYr4Kz5GObI3cQM5oBpj/KlC
+oRDt37/PqR4PHNjWmgVpR1m5YueIEcMDDx44MAG+y5xlCUuw9uluQECzX2/cvLUT9r2Sk5MjqE9H
+I3KmpKYOUVm7tm2Cevfu3a13nz6D33rzf708PDyDPT09a8L6NWWA2oIzbWqdjhrzmLru1Fozy3CO
+mwnpbUjrzPCxXpCGQAoUiUTHSssqzjHQNbvImZLsGaL4sCiP6tA+cNgjw/qVlBSP//rrrd0SkxJd
+m9txO6i9iU8gZWVtV2qtdlOusCNSzRCZhIT7Q2Ys9XvhhPLDsZ6qiIjI0kuXkszx0fmQtuOKWq02
+qxMlmJKaCkg9YqKjQkaNGjWkuLh4zLFjx7q0a9fetam7UAJpw90TytrBGdgZZKzZTos9evG3gpGR
+sLoXgYq9ey0xHRsbIAKkksvlqWfOnkuwJPgIpiRS3RB1bhES3GzR8wsH3LuXO2ndurWx0TExrps2
+fUIAtUHxzZHWNWWZPYjbqxd/MwhydhwqO6G4OaHKdaUikSgLHOQOWD1ra/nmQD9Xkp1AVAIpePmy
+pcMVCsVrmzZtfCu4efMBcXH9XK3R3kOyjCvlk7jRjuxZbESkQg7k2KD47HdnoyWx75vJlSqcnJzO
+pqSmf8sdAmMrog5IJFuHKD4Qek+c8GS7uH79Hnvn7fXjvby8Ajw9ZUKqzjVO+07f5N1YUz62kzZG
+x6PGOn5tASm40ZLMMXSGOVa1UCi8BjD9V0VFxQ5b/B1RNS/JZp0oQnTY0PgQgGj8qVMnJ9y5cyey
+VatQCUHUNCG0+NSjl48gJT3oXM01dRtbxevo6FjcvHnzg5cuX91ja22lBFOSLQIUa1IwZq7P9Ken
+hUdFRQ++devmMPhBtomMbO1EELV9EUgNqzF69BqCZW1Tt5kipoq32s/P7yaA9GsAaYWtXh+CKYnv
+AHVkAOo1NH6Il5+/XxsoVPqfPHmi/7Zt34ZEx8RINn3yKUHUjlwySb8ao0cvVuUagqWhqdvq4UqL
+XF1dj8Gmc7Z8fQimJL5C1C0yIsx/yOBBETEdO0ZGdegQm5aWFgVP5uE3btxwbtGipQATuVH7cqW2
+4AybghCUbGcjQ1Owcat7TXWnzLRnNSH+/P39r165en1bQ2PjNraoAxKJTwDFdlBZdHQHv549enb7
+5Zefh+Xn5/eCbc3wwQ+fgptSzFxrqrE7IdlK9S46w8bqgIQaGj+kBuh79x2wWlVvXcJq52XLlpgU
+1IET7Qjj4n4CaZWt/4bImZIaG6AiWHhGdWjvO3BA/5aDhwyJLS0pGfjVV192ge1uLEBRBFHLqTE7
+IVE7qfFqjKpeY1RbdbA+V8oMqdGIRKJcb2+fkzk52TZ/bQimpMaCKLaD+j3x+Pjg1q1b9ygpKel/
+69bNmJMnTwSQC206IpA2PXHHlUql0qTklNRTttqDl2BKaiyAYrOCZ7u2rf2nTnmqS//+/eMvXUrq
+8fPPu1vitGcA1fv7EkQbB2zWrOolkNZPjdGr1wLCcaU4ETcGaMi1h+tCMCVZzYm2aR3ZfPTo0YNK
+S0sf/f777/pcv3HdAwPOU9B5fsiaVb18Buk/kY74CSq+VvUaI7aKFxxpSatWoUcuXEzYaw+ulGBK
+soYT9QCIBjw1eVLHgoL8Ce+//95AcKEebdu2I4A2YQfMZ0fKxt/lUycfe3GnbBVvUFBQOoB0F4C0
+3F7ua4IpyRIQremVG9u9q3/vPn37lJWVjvjhhx29YmJiZBTmj/+gs2RVry1V7b7+2n8EcVaeHcYU
+d4o9exH8jQ39eow3VeXl5aUJbHxcKcGUZEmI4mz23tOmTYls3bpNn9zcewM//ujD+71yP6GA87yX
+pat6+QxStnqXdX66PVO57/MFqHyo7jU2GhJbxevk5FTSsmXLRNhUQDAlkR6EqFtYaMtmTz7xeEy/
+/v37nTxxYuh327e3hLck1CuX3Cn3c/kMUrZ6lwtSLkD5PP1aY1f3GuNO2dCBQUFBKRcuJmJbaTXB
+lET6x4k2e/Xfr/QqL694bPfun/pA8oJtDgRRcqe6IOWjK2VhaQik3O3cJV/Etp3y3Z1yxpaW5eTk
+nIHlcXv73RBMSfVyorDwWr58Wdf27duP+/bbb4YVFhZ4AUCFFGCB3Kk+N8pXkOrCEiGgC1jU6jUv
+CY7E/9ng6cbMLbaqlw+qzZ2yHY/EYnGuv3/AQVsOaG9IFE6QZApEPdu0jmwW1y8utmuXrr3Xrl37
+SFpaaiD8gBzIhdqfGhpikO/DX3TdKBeiXAfKjcfLx6EojT3Pqr585Tp8bhxed3f3ozm5edPhnJMJ
+pqSmBlC8R9zDw0IDR48ZPeC77d+NvHcvtw9uo6pcAqotulFdYKLr1N3GdaBsPFxzTIRtCfEpXi87
+cTgKY/W2aNGCBakGXGmWXC7fkJKa/gbAVEMwJTUlkDq1bdu61eDBg/v8+MMP4zHoPADUjapymx5Q
+UXVBlc8Q1edG64Ko7t/xOUACH90pPmxPmTKVDR1Y4eHhsTc7597zcK4p9vg7IZiS9EEUg8/7LXp+
+YZevv946u6ysbICAGd7yKQ1vIahyoMrtocv3YS/cNlB0cXVBlAsqvrpSPsEUq3OxbRTdKQNQViqh
+UHhFKpX+R6FQ7LDX3wfBlMSFKC58Ro8eGTFgwMDRGz54f7yPj28LT09PMTlRki5U+Q5QQyDltofW
+BUhbcKV8gCm3XRRPAxJOZIEP5TgzTLpcLv8oNS3jHThPhb3+LsRGFK5SJjlAwslbFZAhVVSk2BVE
+8dq6t2vbOuCpKVPHJiYkPpmTnd02LCxcSgAl6crWgtPrgtQYh2moMxJJvxtNSkzQAEhLHB0dr7q7
+u9/Ly8vDTHOD16WhoaEHLlxM/MyeQWoQpkzhKl+48NlmN2/caBUWHtFcKnV0LC8rL7969Wry0GHD
+bu7atTvLnuIqNlGI4kOSz6OPPhIcERHRubi4ePgvP/8cFxkZ6UEQJdm6dCMaGeNEdZ0s36t3Gxuk
+jBtVODg4JLu4uBwNCwvbFRLSoveePb9gBlbJ5V4XAaQb7WVmGJNgigXs5MkTW7Zp3WbErZu3Rhw+
+fDgKEg7ExyphtPA5HTpE/fn5Z59tg32PwesCe+yZZccAxQWOE/Vb+Nyz7SIiIwfBA9PAPw4ebI3T
+oG3ctIkgSrILkLKu0hQgEkiNd6OXkhLVK1e8mCeXy08DTL9KS888BCzwSUpKmgu7iUDJSmXlN7Dt
+dFPIF6GuI1258sWOu3bufPbu3btj0J1i1+YWLVre3yc5+S6kZE3fvnGXFr3wwsbhwx/9ETZnE1B5
+D1EMPu8ZExPl371b9269+/QZ/Ob/3hjg6enp7+kpw7YNahMl2Y1wuIixTtQaIGVdsqOjo0IsEqkc
+MAmFGomjY6V2D41QLJZUOTgIq6uqVBKNptpBqVRKNRqNUK1WiwVQuqqr1WJYF2mqNQ7VGo3DP647
+7n6bqSWHx3AhumTJ4kKhUHgnMDDo91t/3/4Kjs82pPvAd3zS0VE6zsXF+VxyStrapuBK9cHUq327
+Notv3779HLz0QJBi93Hs3sxq69avamZTAKAKhgyJvz1w0KBPvtiyZevFhMRMAiovIYq/Mp+nJk+K
+bN26da/Nmz+Pz8rK6gou1JXGiJJIDztZUyGsD5o1hSvAUiwWKyUSsbJvn955Mpksr6Ki4g5AshAg
+WSbQ1vTdQ5IKtJ11iiBhfxQP5C7+biGJwfW5wWc5AGw94LM84LUzJKfCwkJXeF/2x6HD8oED+jvq
+1D6ZHaLYLrpq1cpieAC/kpube9jZ2XlffkHRSSj3K3XKHCfm3EvhvcKmcg89UM3700+7Qtzc3DoY
+AimKfY1A3b9/Xyik+R06ROGmzZCJufYy0asdQBRvaN9nnpnZJioqKv7UqZM4DVoYQFQSGdmaIEoi
+6QGpKZ2TdIXQhM/BnqzF/v7+RRUVihKlsjJHoVBkw7aTmVk5J2GZyUDG6CDvZeUKCWN8sIcsArSm
+Uyh8RitYdnp0+COxsOwIyY95z6wgZdpFldguGhoaeijp0pVP4K3zaJ70lfdMR6O0pnYf6Q6NwfqB
+VyANWAMgZQc16xPXoQ4YMPD6c88t3PDI8OHfQkbm0c+zUSGKwef9XnhhUUdwokPfeXv9ULncK4SG
+t5BIpoGUC00AidrR0bFSJBKp+vTuWca4SQSiIqBZs8pKhQL+KTLAed6Gbdfgd4hTjGVByodUaMla
+OziWD3z+Y4GBgRMyMjL6m6OqV8eNlsi9vM5XlJdvyc65t7spuc16O9OYmI7Vd+/eqS4qKqrzD7kO
+9dChP1prNJoFkKrhwm7HG4iqfK0OUM/OnWK8J0x4ImrQoMGDf93zyyMnTxwPaNmylQMBlETSL7aN
+tCaQPQNPBKezk1M5vIfVlyU+vr4lQMqC8vLyFLVaXQzbMK4sVsdifWr2nTvJWFWL7YI5UO7dY9yZ
+1b4Dc8xNf9++exXWd8N5e9a3qlenXbQY8iI9PDz8ZELipc+xIxHVPBoJ01On/yodOeLR0gMH9tc4
+Tvbm0nZCalErUA8fPtQGWLrAQSQSDxs27Du4mFmU8RaHqHtkRHjApIkTOnXp2hWHtvT8adeuTnfu
+3HEHiJILJZHqcKUcqCIc8/38/HMqKsoLSkpKrgi07ZnXUlPTryMoBdqOlpV6YMaXr3QsJCTk15SU
+lImmzG/KAhSrKS9dvqR8cfmyPA8PjzsA0pNyufwAgPQUudG6JeQUzJItWzYP3fz5Z6vPnj3bQxea
+T0EyBFWs8v1669aanr5t2rRNfu65hR+COfoSb0Z7mwC2keEpYh6A0Il6//e/r8d99OGGUcwAaRk7
+BRpBlEQyytEJGHd5x8XF9W55edkR+I0dgtcZtjqrCZx/Pzj33/Dr1eZOWYCikpISq5cuWVwqEoly
+nZ2dr3v7+Pxx7dqNffDWFfgsNd0pJsAUM33evLmRv+7ZsyInJ3uyQNuT7CEZ244aERH5d7/+/bdc
+v37tx08//RyDGpdTtW+9fxwOzPXwGT9+XIuKigqf9u3at+oQFdXjv6+/NsRTJvOiwPMkkumuFKt4
+g4KDj6Snpb0Jv7NzUEZl20F54QTfYw+sDsS2U0NKSkyoXrp0iUIikeS5ubunlRQXJwJEj969m4Jj
+RTPoDqk/TKXNAvxmFRYWroCXQaz7xKpeU2DKBSr8bV5UVNThqKjonUKh8Pxnn2/GxvhietIxyYV6
+xQ8Z3MrFxSU4fujQAe+9+87AlJSUANjuAS5UTC6URGqQKy2B39kYWP/Dzr7eUEjvQ2oGCXv1s815
+aFXLHR0dCz08PfNKS0pu+Pv7H7t2/SZO2Hrb3sP9WVpsJnsHBgVFA0yD2CExKLa3rinitKN6JyUl
+PQZpQPfusadWrHhx797ff7swceKkjM1bvsDG+lKqAtYLUbwm3mPGjArr1rXbgJs3b4zNysoKh8zD
+WVtE2BZKLpREarjCwsMRokfs8KvthbTEQSQa7SSVBoklEjlurFIqcyoqKm6GhoUlXLiQgG3Ct6AM
+LqK+LeaFqYNYLEbHWBUX10+C3cRZd9oQoDLtqF5//XV6OKT+sCnN01N2YdHzCw9WqapOAThS8emQ
+3Op9J+o94ckn2nTt1i0+KTFx1N7ff8cQf444LpQASiKZR0zHo+pLl658DWWPyk6/5i9lZRUIVQwF
+68ZswyE6edeuXhUQQM0vtprXMcDfd3ZRUdFKeBnIdjjSAvGrmqpbQ0Ec6hLbOQnFhCLE1aJu3buf
+6tGj5y9OTk6nX331P3cE2hi/TQ6qTIQi33Fjx7ToHhs7ZNPGjY9nZWVGYnAFqsYlkcwvBiRZ8Nvr
+BOtZlCMkc8JUGtjMf2pBQQHCtJW+HY1pL60HWEv7DxhwuU+fvjtTUpL3bNr06d9wc1c0EYhiNBO/
+eXPntG3Xvn38B++/NyQ1NTUcg80TREkky7nSofGDi11cXD7Lyy9cSh0jSeYSW80bGBYW1vPs2bMh
+ljwYulrW2TJgdbtz+3bs4UOH2rZp06bbp59+8iVA5i+BNuiD3c2ZCt8NH16wysV31coVXcMjIoYf
+Pnxo4BdfbAnE9tBWrUIJoiSSBQUgVfv6+v6ckpr+GoGUZAmYespkcqxbF7GzxHCqZGuqeEP0jC81
+B1iZ3r8e165dG7djx/etC/ILdkocJYcBPH/DbhiasNzWOyoxnYq8evXsERgVHdW5V6/eQ3bu/HHQ
+3bt3fXBsKLZRE0RJpjosriw1U4gd5tk1AOnrUKYUUI6QLAHT/Pz8PBxbpICC3Qmrc7Gt9LXX/vOQ
+o7SEW0WBSxUm373b4V//eqn1sEcemeju7n701KmTh3x9/S4DjDIZt1ppQwDF4NQYlNp78qSJQVFR
+UQOysrIeuXDhfPRXX37pDBAVEERJ9YUoGwaPVW1jCgm296t3s0Qi0X+gHLlKdxLJUjBNv3r1Kk7g
+OgScYri1T4LrUgGqkqtXroT//ttveB7jBg0afPWdt98+6uTsdAgAxYb4sngQCCZ6CAZMwKpZDeuO
+mapaNnIULkWchFW47nF9e7v07tXTr0fPnm1iYmJ6X7x4ocuPP/6AVeiOCFFqEyU1AKJ435dDYsO7
+4UMbzlZS5ufnp1SD8vLyJMx27GlTM8PIsWMnJCq1CufDFKtUaok5YGto9hQ+QRzPUSKRVEL+pDs4
+OHxSWlaxg3qykiyh+x2QggIDJoM9xQ5I4fpgh261hZmreg1JT0el6mHDHkl+dMSIwydOHN9XUFBw
+ZufOn9LNNciYGZaChY4zu1y1aoX7tm+3ubq7u0ngeJW5ubl4LI2Tk5PEzc1NjFnnKfN09Pfzc/X2
+9nb39JS5R0ZGhgYFBbV54403Wty6dRODK/iyvXJZEURJ9YEVwADvv1xPT8/MkpKSy9XV1QkC7awl
+eHNhleVtuI9xhhIF/C5wPkxPgXZYhC+TPBwdHb1wTkxHR4lfYWEh3ue4nzs+VB86/KdEra4W1UxE
+bYQchMLqIUMGCZlzwF74CHns56BiQI7BAkS6jtlacMW8wxleBg8akOXk5HxOoajAeOHbaGw7ydIw
+bdGzR/eXL168OF3w8LRsNTJHb96GgJXThpsTHhHxW0R4xC6ZTHZ185YvsF0VZ3JQ1vXEybhKEfNj
+x+T23HMLZAcPHMC2y6CIiMgWvj4+/jK5vNnu3T+F7fnlF2/GvVcxbkDFAFfCcfbOTHKBz3DggpPg
+SWqgCxUw912aVCpNqqys3A/3MAYauFufDno4MYJAOyemF/w9ArYdpNZCodAVPt9HLBa7QwLgikX3
+7t2T6ikrVPDgWAXABZZXV8Amh+pqtQJel2o0GjWcXy5Oeg0Qkzk7O7coLS31ZdyxB5Nc9FVHmxOw
+mHeO4EQHDOiXCQ+9t+AcdjIQzac7i2QNmDbv2SN2xcWLF2YK9EwuW98xphaEKj4F5/Ts1etMXFy/
+k8ePH0uIje2R/tprr2PBg/Wz+BRfil8Nx65ila2Hu6sPPKE2DwsL9W7ePMTbz89PHg46cGB/l4MH
+D+JwIB/4nq7Y+ao2JSQmCIoKCwVsdS2Bk2QhiOJ9nAFu8oRSqdwG9/ARjFZjieMy8Z89mYfCGujB
+sXwE2mYOtjkF18thXzyHSuY35sBZR3eK0XSqmf4CAbAewrjjdhKJJAoefqNyc3PZB1SELDaLSLiA
+bUh1s5NUWt6vX98MJyenSwqFYhecx36KM0uyNkwlUR3ajUtPT19VUVERzQIUhW6wsVxpbVDVnpu2
+ChhW80aOGpU6btxjGfAkmluQn591/caN66dOnrgV169/zkcffSwA5z0CnPcE2DeYKTCcGZcqYHsw
+PzVlSp0PDMuWLREkJiQSOElmUSI8nBUWFnEhWoL3s4uLy5Xy8nKsmsQ2vjJb/57MnLsd4Lv0YCDq
+7erq2qGsrCxQoK2qxpB3rgBWoTFgZQGKO8fHD8YMzIQHjwvw4PEjHOsg9dYlNQpMmZvdv0vnjouu
+XLkyD59S1zDwxB691m4zrQ9YOXBlX2IBlAbO9RpAUvn9d9912b9/XygXnqyMgSiJZAmIah/OErD5
+IBOcW3ZhYeE5WD8Jv8dfAQi59pwH8B3RvWKh0kkoFHb28PCIKioqCoLX/uhcWcfKhapOR6xMuVye
+WVBQcALW98DnHbOHBw+SjcMUBU923VQq1fLq6upHAS7OLLBQfHKn9YTrfdnCdyE1GYgWODk53VAo
+FFtxLk2AwY2mmC9MVXMofP/B4MpHgitvz7hVJ4Dq/c4QGHQBFrkA0WSA6Hb4u99pqAuJdzDF4ALN
+AvwGw9PhAo1G04O5mWuqQvnqTusDV4IpqZEhim2M96RS6U14eD3+9PTpP3z+2WcXKZful0N+AMiR
+sNrZ2dm5uaNU2kwikTgKobhSKCryS0pKfoN9fiaIkngLU+ZGFvn7+UTBk/IT4FDj4Mde0zkHjast
+ApUrnAGHz9XWJLuHaLmXl1cm/LYSKioqDs6ePefAu++9f8ceQ2eaEazYYQkT9nNA95oJ+ZVKOUPi
+mx4aU8bM3HIRbuLrcX17hyUmJg5Tq9WTAarRR4786dD3SJzNti+G1LSVtrhfdU1AJVkLot7e3pku
+Li5nV6xY9cNzCxceEmgjelVv2rSRMqsW4ZRhAm1YURLJtmDKuYlx9pZLANXbIc2DNLm5ucvj4vr5
+YQg8WxVn4vL7QMWp5lowkCWRzA1RuVye4ezsfGb16pd2z5s/H3vU5FGAdRLJ/iSqawcATxUUBhpw
+p5EXLpwPk8lkQlsGakxMDEb1ryn0sGcgxiAuKirSjhuVyeiOIDUIpLNmPSNYv25tmVJZlSIUCg6t
+Xr3mg527ftrQrVu3cwDR8teZeNckEqmJOFOu0tIzL0eEh/6RlpbWMTk5uRl24rFlJ8cJrl/TKYlc
+KqkhLpTViheXF929ezdTKpWeXbly5a7nFj6P1bkF5ERJJPuX0IR9IyAthjRpzZqXPOylNywzBdz9
+ITTUOYnAaKyYqlzsPFTk7u6eXVlZeeTlf73y05IlS0/CthKCKIlEzlSfbkokki/UanVwSmrKMICP
+2B6AY8ilElCbFkQZMGI0rSImaXQeNtkZWFA1Yfa8vb3zPTw87pSVlZ1ZvvzFfUuXLT+LQQPWrF5F
+GUsikTM1LBw2I5d5zFcoFGvAnfrZ21hNbvxfbBemal/7d57Lly9VJly8iPFlK9zc3FKUSuUxSDgj
+SxXnYRN/Jzjm2peBLEJVvWHDh2dmPjPrDKxn0PAWEolgaqpGQHoFHF0Xe3Vv3Kpfqva1K+fJToSA
+4FO4u3sUVVerUysqKtKrq6uT17z08h+rV6+5iB2FKOdIJJKlYdoS0rOQpgFovAE0QgIqiW/OUywW
+VUkkEuWiRc+Xnz93Tunp6VmoUChwGrMsgXZi7dx33n0vYe7ceX/D+j0AqIpykUQiWROmqNaQ5kKa
+AKDxJ6CSGgOcDg5CtaOjtFIqlVYsmD+v6ty5szXVte7u7gpwmjkAz0y1Wo09y/Le/2BD0qxZs88K
+tB2DKBNJJBIvYMo61PmMQ/VrKlW+OPWapyeNR20sxyl1dFQsWbK48M6d20UAzHulpaV3VCpVikDb
+aQhnWUn/5pttOWPHjctGxwmpiuBJIpH4DFPWoT7POFRZU3CoOC1UfSYwJpkOT5FIpFq2dLHiwoUL
+2IZZ6ubmVlJVVXVTqVSe++zzzYmTJk2+CdsxTquCgEkikRpT4gb+/XVIH4NTq/7hhx2jhUJhwKrV
+a8T2BlRuGEIs7GNiosmdWgiiy5Yt0SQmJGS7u7vf02g0WRUVFeg670K6uXbd+ptPPz0dAVozhnPm
+jOmUcSQSyS6caY0qFMrg0aNGTjx8+NDUiRMntZ40+SmJPQ4pYWedgUIdADuFgGpGkGIYPoBopUwm
+S65UKre+8cb//pgzZy62d+bQsBMSidQkYMoAVdazR/dxSUlJc9RqdTS4OSd7a0fF6t5ly5YKigoL
+qbrXjG50+bKlqoSEi3mOjo4XV61a/fmLK1buBYAWUw6RSKQmB1MGqE6REWHD0tLSntVoND0BqC72
+BtSh8UMER478Se60gQBFvbh8qeLixYu5Tk5O2Ilo/4gRI7/7dtv22zRMhUQi2ZrE5vwwKAQVANSf
+mwX4lRUXFz8PTq4vbPawJ6BGx0QLEgAIy5YuEURHx5A7NRGkTHWuAl5micXiBAcHh73z5s3/479v
+/A8nyVZSRyISidTknSnHoYr8/Xxji4uLFsDLYeBQ5U9NmSq0l3ZU1p1SVa/JIMXORTkikei0RqPZ
+NXz4o/u+3/FDFjMhPYlEIpEz1XGoWDiegFTo6emZu2PHjlHgUgMBqlIKfND0IFrTLrp8qTIlOeWu
+s7PL/3Xo0OGrI0ePpcB9Uk1OlEQiEUzr1pWs7Ny3hj8y9PLhw4fHA1C7gBeWP/XUVAcKIN80QDp7
+1izsXJQpkUiurF69ZvOLK1b+jp2LCKIkEolgappLzahQKD/39fE+JRQKpn3/3Xejt371VQi4VEdy
+qfbtRl9cvqz8779vXXFycvpi/PjH9wBI06hzEYlEIpjWH6g4T2QSQPXNgQP6XTt9+vQUcKkdYZs7
+X9pSMboRO0G4PrHnWAOKokK6c2qF6NLKixcvYtvoX88++9ym/7351nGcieXrr7dSJpFIJLuU0NoH
+BKBKmgcHxt67d28mvBwGyX/NmpeEjTE3KhegX2/96v7E4PqEUZBwflNmKi9BdEyM4NNPP6vp0dvU
+4VlzIwkFmuXLllWkpqZkVVZWXi0vL98TGxu7+49Df2YyD1MkEolEztSMLhWj2RyDlC7QBiKfBkDz
+RahZy52yENUFqNZ9tjT4N7NnzbwP37Vr1zcJkOqbVBvBKRZLlEsWL1IycXNLXF1di5RK5TVwob/M
+n7/gCGzLxo5o1DZKIpEIppbVHUifQ/IBoD2JnLV0G6oeiFZAKsVjw3Hd8PhsHF59YsMJoiuVyTzt
+GpgODsJqCQBz8eJF5efPn8epzdhJtVUAzhJ1dXWmsrIyE15j7Nxrb7751o2Zz8zCa1qOcXPpp0Ui
+kQim1tM1X1/fHSUlJW0Bbt0AaA6Wqu5FiCIMGYgqAAjYpneurKzsskajiZ06ddpAAKnImM/iqytF
+KOLDiKGoTA9UywoEGgeRSC2RSCpfWLSwEoCJDxYKmUxWIRQKlSqVukyprMwCt4lWHKczy4OEIf7K
+AJypAE4EaRE7RvTZZxfUJBKJRCKYNoJSUtNPRUe133Pz5s1QS1X3ckCqdnV1yxGLRWd69uz5885d
+u/fC21k+3vIFWVlZnWA/H0PHZl1tY7lSfe6RK4TjsmVL1dNnzFB27dqtykEofMAdisRi1YL58xVn
+z55BYFYCMCuUyqpChaIiQ61W5zAOM2vDhx9lPvbY+Hx0mJBwWarb5kngJJFIpIfK4MaXm5tb54qK
+itVQqI9as+YlsbncqU61bqlYLL4+ePCQHTt3/bQNAHGXs+ujkF6BY3c1dGy2itfSUY8MQZPp+IRQ
+w6pWtsoV3WQl4yYrqqqqiiorK3NUKlU+uG3dmVZKGYeZtW37d9mjR4/B9uoixnFWUtsmiUQi2bAz
+ReXey78c2Mx/X0FBQReAXwtzuFOOG1W6uLhkeXh4HPHy9v4KQHoMwFHB3bdDh6jc5OS7uXxwmWxv
+YZCKSZWMSyyG71FYXa3JViorM6urq7HKNQ1Szocffpwx7rHH8PxxW4FAO1m2wR60E558gu58EolE
+sjeYQsFf6ebm/qdIJOoL8AuGTaL6dkbScaNlDg4O53v16r3t51/2/ATHSdfnwM6cPZffv1/fPGtB
+lANMVhoGmmWQCsGpl6BjBKdZoFRWZWo01dhueW3t2vV/z5g5E6tki7jxbCdPngj/0c1MIpFITRqm
+WneadzvA3/dwUVFRT4BgK9gkNAWoOhCtBBeX4+7ucUwiEX8GID1axwTTOMtNiVAoRDfnYGgnPBdT
+2ku5DhSgrl66dLE64eJFBGeV4J9q2lIcVqJSqVKUSuUtjUZzft36t69Pm/Y0VsMiVMtYcC5YMK8m
+kUgkEolgasidYjvgr3K5PEhRWTkDgBiEDhUDJRiKkKQn6ALCsEAodLjYs2evHb/s+fVnQ25UR6UF
+QD2hgwNWqzoaOg4Om9HXi1c3eAH2kIWkXPT8wtKzZ8+WuLu7V8AbxWqVqtTJyQmYqcyrrq7GP8Bq
+2ltr1667PX3GzFQB09ln7pzZAkwkEolEsg0J+XZCFQpl4CPD4icfP358YlVVVRhscgeICZ/SM/6T
+AaiGcXgFALAMcICHwJV+m5GZnWTs1F5wTLGX3HPhpMlPrVm2bLlcF9xs56M14JRHjhp1H5xikahK
+DNB8YdHzFefPn8Mq2go4drG6ujpNWVmZDS7zJmy7/s232zLHjh2HbZnljCMtoRi1JBKJRLI0UN06
+dOgQ7+zs/KlUKr2A5lCg7YmKQEJo4eTS2Ds13dHR8bxU6vQNrD8fG9ujO/5tfY7ZvHnzEa6urmcA
+mBr4jAcSboNdNAB1TadOnbCTzy03N7cLsP9ekUj0Jbx+DdJ0SPEbN25qC38jg+RAV5JEIpFIfICq
+PD5+aG9YnQXpJaFQ+K5YLP4/gOxPEkdHjJq+eMDAgT1hP08zHCuoU6fO/501a3butes374MU1xGi
+Au1wlAxImyE9vnnLFzHwfjNIUkhCulokEolEshW4CiE5Q/KC5GqBQ7SB9PGs2bOzDx8+UnEI0vTp
+M7ATUDZA/Di44OWwLqcrQSKRSCSuyFE9rChIYxmwYv5gtfLdyMjIQwmJl87rjlElkUgkEolEIpFI
+JFID9f8CDABC8Gneo7Pn/gAAAABJRU5ErkJggg==" transform="matrix(0.4792 0 0 0.4794 307.2051 422)">
+			</image>
+		</g>
+	</g>
+</g>
+<text transform="matrix(1 0 0 1 416.127 525.5)"><tspan x="0" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">2</tspan><tspan x="4.797" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">0 </tspan><tspan x="11.685" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">s</tspan><tspan x="15.484" y="0" st [...]
+<text transform="matrix(1 0 0 1 421.5322 536.501)"><tspan x="0" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">ea</tspan><tspan x="9.357" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">c</tspan><tspan x="13.585" y="0" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:9.5; -webkit-user-select:none;">h </tspan><tspan x="20.871" y="0 [...]
+<text transform="matrix(1 0 0 1 421.1016 547.5)" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">(</text>
+<a xlink:href="../02g-STG-Stretches.html#p_63-01" target="_top"><text transform="matrix(1 0 0 1 423.6035 547.5)"><tspan x="0" y="0" style="fill:#10137F; font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">p</tspan><tspan x="5.075" y="0" style="fill:#10137F; font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">a</tspan><tspan x="9.345" y="0" style="fill:#10137F; font-family:'MyriadPro-Regula [...]
+<text transform="matrix(1 0 0 1 452.8203 547.5)" style="font-family:'MyriadPro-Regular'; -webkit-user-select:none; font-size:8.75; -webkit-user-select:none;">)</text>
+<g>
+	<defs>
+		<rect id="SVGID_37_" x="-12" y="-30" width="612" height="783"/>
+	</defs>
+	<clipPath id="SVGID_38_">
+		<use xlink:href="#SVGID_37_"  style="overflow:visible;"/>
+	</clipPath>
+	<path style="clip-path:url(#SVGID_38_);fill:none;stroke:#FFFFFF;stroke-width:0.5;" d="M408.827,493.93h-8.694l-0.988,8.143c0.644-0.092,1.195-0.139,2.001-0.139c2.967,0,4.163,0.76,4.163,2.116
+		c0,1.403-1.495,1.863-2.761,1.863c-1.334,0-2.76-0.391-3.427-0.69l-0.689,3.082c0.874,0.438,2.461,0.828,4.347,0.828
+		c4.37,0,6.785-2.576,6.785-5.312c0-1.68-0.575-2.898-1.68-3.703c-1.104-0.828-2.714-1.196-4.255-1.196
+		c-0.275,0-0.528,0-0.851,0.023l0.207-1.61h5.842V493.93z"/>
+</g>
+<path style="fill:#1B4787;" d="M408.825,497.337h-5.841l-0.207,1.609c0.322-0.023,0.575-0.023,0.851-0.023c1.541,0,3.15,0.368,4.254,1.196
+	c1.104,0.805,1.679,2.023,1.679,3.702c0,2.736-2.414,5.312-6.783,5.312c-1.886,0-3.473-0.391-4.346-0.828l0.689-3.081
+	c0.667,0.299,2.093,0.69,3.426,0.69c1.265,0,2.76-0.46,2.76-1.863c0-1.356-1.195-2.115-4.162-2.115
+	c-0.805,0-1.356,0.046-2.001,0.138l0.989-8.14h8.692V497.337z"/>
+<polygon style="fill:#FFFFFF;" points="409.625,430.75 414.875,423.75 390,421.75 390.875,439.375 395.375,444.25 408.5,444.875 
+	407.875,438.5 406.375,432.5 "/>
+<g>
+	<defs>
+		<rect id="SVGID_39_" x="-12" y="-30" width="612" height="783"/>
+	</defs>
+	<clipPath id="SVGID_40_">
+		<use xlink:href="#SVGID_39_"  style="overflow:visible;"/>
+	</clipPath>
+	<line style="clip-path:url(#SVGID_40_);fill:none;stroke:#1B4787;stroke-width:24;stroke-miterlimit:10;" x1="-12" y1="12" x2="97.898" y2="12"/>
+</g>
+<text transform="matrix(1 0 0 1 51 20)"><tspan x="0" y="0" style="fill:#FFFFFF; font-family:'LithosPro-Black'; -webkit-user-select:none; font-size:20; -webkit-user-select:none;">BE</tspan><tspan x="26.12" y="0" style="fill:#FFFFFF; font-family:'LithosPro-Black'; -webkit-user-select:none; font-size:20; -webkit-user-select:none;">D</tspan></text>
+<text transform="matrix(1 0 0 1.05 51 37.5)"><tspan x="0" y="0" style="fill:#1B4787; font-family:'LithosPro-Bold'; -webkit-user-select:none; font-size:10; -webkit-user-select:none;">A</tspan><tspan x="8.16" y="0" style="fill:#1B4787; font-family:'LithosPro-Bold'; -webkit-user-select:none; font-size:10; -webkit-user-select:none;">PP</tspan><tspan x="21.08" y="0" style="fill:#1B4787; font-family:'LithosPro-Bold'; -webkit-user-select:none; font-size:10; -webkit-user-select:none;">R</tspan>< [...]
+<text transform="matrix(1 0 0 1.05 110.6899 37.5)" style="fill:#1B4787; font-family:'LithosPro-Bold'; -webkit-user-select:none; font-size:10; -webkit-user-select:none;">A</text>
+<path style="fill:#1B4787;" d="M120.659,37.5c0.03-0.273,0.04-2.415,0.04-3.769v-2.268c-0.75,0-2.169,0.052-2.479,0.084v-1.459
+	c0.45,0.063,2.818,0.105,2.928,0.105h0.87c0.19,0,2.369-0.042,2.858-0.105v1.459c-0.19-0.032-2.039-0.084-2.479-0.084v2.436
+	c0,1.512,0.05,3.391,0.07,3.601H120.659z M130.037,37.605c-0.27,0-3.638-0.105-4.028-0.105c0.03-0.557,0.03-2.803,0.03-3.044v-1.407
+	c0-0.168-0.02-2.698-0.03-2.96c0.43,0,3.488-0.158,3.828-0.189l0.04,1.354c-0.34,0-1.989,0.052-2.159,0.052v1.911
+	c0.19,0,1.37-0.053,1.829-0.095l0.03,1.323c-0.24,0-1.649-0.042-1.859-0.042v1.795c0.25,0,1.669,0.021,2.279-0.031L130.037,37.605z
+	 M135.807,37.605c-0.2,0-3.458-0.105-4.038-0.105c0.05-0.557,0.05-2.803,0.05-3.055v-1.396c0-0.168-0.02-2.761-0.04-2.96h1.799
+	c-0.02,0.242-0.06,2.362-0.06,3.685v2.352c0.24,0,1.419,0,2.279-0.042L135.807,37.605z M138.159,37.5
+	c0.01-0.241,0.05-1.354,0.05-1.491v-0.598c0-1.365-0.59-2.446-1.289-3.087c-0.4-0.367-0.86-0.65-1.27-0.798l0.669-1.606
+	c0.61,0.284,1.29,0.714,1.699,1.155c0.41,0.462,0.87,1.123,1.1,1.932h0.06c0.25-0.745,0.64-1.323,1.149-1.869
+	c0.46-0.494,1.18-0.998,1.839-1.218l0.549,1.606c-0.529,0.137-1.179,0.504-1.679,1.019c-0.63,0.641-1.14,1.638-1.14,2.855v0.809
+	c0,0.146,0.03,1.081,0.05,1.291H138.159z M146.01,36.439c0.88,0.074,2.549-0.294,2.549-1.302c0-0.829-1.359-1.028-1.889-1.039
+	l-0.04-0.714c0.58-0.021,1.769-0.367,1.769-1.187c0-0.734-1.189-1.018-2.059-1.018l0.13-1.292c1.819,0.053,3.708,0.672,3.708,1.963
+	c0,0.766-0.74,1.459-1.319,1.711v0.042c0.839,0.21,1.539,0.714,1.539,1.554c0,1.459-1.969,2.551-4.317,2.593L146.01,36.439z"/>
+<text transform="matrix(1 0 0 1.05 153.7798 37.5)" style="fill:#1B4787; font-family:'LithosPro-Bold'; -webkit-user-select:none; font-size:10; -webkit-user-select:none;">M</text>
+<text transform="matrix(1 0 0 1.05 164.5 37.5)"><tspan x="0" y="0" style="fill:#1B4787; font-family:'LithosPro-Bold'; -webkit-user-select:none; font-size:10; -webkit-user-select:none;">I</tspan><tspan x="4.01" y="0" style="fill:#1B4787; font-family:'LithosPro-Bold'; -webkit-user-select:none; font-size:10; -webkit-user-select:none;">N</tspan><tspan x="12.96" y="0" style="fill:#1B4787; font-family:'LithosPro-Bold'; -webkit-user-select:none; font-size:10; -webkit-user-select:none;">U</tspan [...]
+<path d="M60.688,61v-0.311c0.656-0.069,0.725-0.149,0.725-0.886v-1.91c0-0.943-0.368-1.38-1.082-1.38
+	c-0.403,0-0.828,0.195-1.127,0.552v2.738c0,0.725,0.058,0.805,0.713,0.886V61h-2.52v-0.311c0.725-0.081,0.794-0.149,0.794-0.897
+	v-5.764c-0.61-0.069-1.208-0.081-2.244-0.081h-0.748v5.592c0,0.978,0.092,1.058,1.127,1.127V61h-3.302v-0.333
+	c0.989-0.069,1.093-0.15,1.093-1.127v-5.592h-0.667c-1.024,0-1.231,0.104-1.404,0.38c-0.138,0.207-0.253,0.483-0.379,1.012h-0.357
+	c0.058-0.713,0.115-1.484,0.138-2.105h0.23c0.173,0.253,0.311,0.288,0.633,0.288h4.775c0.943,0,1.104-0.069,1.104-0.288v-0.161
+	c0.264-0.046,0.69-0.161,1.012-0.276v3.843c0.414-0.438,1.001-0.806,1.599-0.817c0.978-0.012,1.623,0.598,1.623,1.944v2.025
+	c0,0.771,0.08,0.828,0.748,0.897V61H60.688z M63.892,61v-0.311c0.713-0.069,0.794-0.126,0.794-0.92V57.41
+	c0-0.713-0.046-0.771-0.702-0.874V56.26c0.598-0.104,1.185-0.241,1.714-0.449v3.958c0,0.782,0.069,0.851,0.806,0.92V61H63.892z
+	 M64.501,54.247c0-0.368,0.288-0.645,0.633-0.645c0.333,0,0.61,0.276,0.61,0.645c0,0.333-0.276,0.621-0.622,0.621
+	C64.789,54.868,64.501,54.58,64.501,54.247z M70.068,57.353c-0.23-0.69-0.621-1.151-1.185-1.151c-0.426,0-0.725,0.322-0.725,0.76
+	c0,0.483,0.426,0.759,0.955,0.978c0.886,0.368,1.473,0.783,1.473,1.6c0,1.07-0.989,1.599-1.933,1.599
+	c-0.587,0-1.139-0.219-1.334-0.38c-0.081-0.161-0.196-0.955-0.196-1.404l0.311-0.046c0.219,0.76,0.736,1.45,1.427,1.45
+	c0.426,0,0.794-0.311,0.794-0.782s-0.299-0.748-0.909-1.024c-0.667-0.311-1.449-0.713-1.449-1.611c0-0.828,0.702-1.519,1.783-1.519
+	c0.495,0,0.805,0.104,1.047,0.207c0.092,0.253,0.219,0.966,0.253,1.243L70.068,57.353z M73.805,61v-0.311
+	c0.713-0.069,0.794-0.126,0.794-0.92V57.41c0-0.713-0.046-0.771-0.702-0.874V56.26c0.599-0.104,1.185-0.241,1.714-0.449v3.958
+	c0,0.782,0.069,0.851,0.805,0.92V61H73.805z M74.415,54.247c0-0.368,0.288-0.645,0.632-0.645c0.334,0,0.61,0.276,0.61,0.645
+	c0,0.333-0.276,0.621-0.621,0.621C74.702,54.868,74.415,54.58,74.415,54.247z M79.981,57.353c-0.23-0.69-0.622-1.151-1.185-1.151
+	c-0.426,0-0.725,0.322-0.725,0.76c0,0.483,0.426,0.759,0.955,0.978c0.886,0.368,1.473,0.783,1.473,1.6
+	c0,1.07-0.989,1.599-1.933,1.599c-0.587,0-1.139-0.219-1.335-0.38c-0.081-0.161-0.195-0.955-0.195-1.404l0.311-0.046
+	c0.219,0.76,0.736,1.45,1.427,1.45c0.426,0,0.794-0.311,0.794-0.782s-0.299-0.748-0.909-1.024c-0.667-0.311-1.45-0.713-1.45-1.611
+	c0-0.828,0.702-1.519,1.783-1.519c0.495,0,0.806,0.104,1.047,0.207c0.092,0.253,0.218,0.966,0.253,1.243L79.981,57.353z
+	 M87.376,61.138c-0.195,0-0.437-0.104-0.563-0.23c-0.15-0.15-0.23-0.311-0.288-0.495c-0.449,0.311-1.001,0.725-1.323,0.725
+	c-0.84,0-1.415-0.702-1.415-1.416c0-0.563,0.299-0.909,0.92-1.127c0.69-0.242,1.53-0.541,1.795-0.76v-0.218
+	c0-0.817-0.368-1.277-0.92-1.277c-0.208,0-0.38,0.081-0.495,0.219c-0.138,0.161-0.241,0.414-0.333,0.771
+	c-0.058,0.207-0.184,0.288-0.368,0.288c-0.23,0-0.541-0.23-0.541-0.506c0-0.173,0.138-0.311,0.379-0.483
+	c0.334-0.241,1.104-0.667,1.749-0.805c0.368,0,0.713,0.104,0.978,0.311c0.414,0.345,0.529,0.829,0.529,1.438v2.094
+	c0,0.518,0.196,0.679,0.403,0.679c0.138,0,0.288-0.046,0.403-0.115L88.4,60.54L87.376,61.138z M86.502,58.239
+	c-0.242,0.126-0.725,0.345-0.967,0.46c-0.425,0.207-0.667,0.414-0.667,0.84c0,0.598,0.449,0.874,0.794,0.874
+	c0.276,0,0.632-0.172,0.84-0.368V58.239z M96.439,56.053c-0.092,0.184-0.322,0.506-0.506,0.61l-0.656-0.046
+	c0.207,0.253,0.333,0.598,0.333,1.001c0,1.231-1.047,1.829-2.048,1.829c-0.184,0-0.391-0.035-0.575-0.058
+	c-0.149,0.104-0.311,0.299-0.311,0.449c0,0.219,0.207,0.449,0.725,0.449c0.403,0,0.806-0.011,1.185-0.011
+	c0.713,0,1.668,0.218,1.668,1.357c0,1.185-1.369,2.29-2.899,2.29c-1.323,0-2.013-0.748-2.025-1.404c0-0.253,0.104-0.472,0.288-0.644
+	c0.242-0.23,0.667-0.552,0.943-0.759c-0.426-0.127-0.702-0.392-0.851-0.633c-0.104-0.173-0.15-0.38-0.138-0.506
+	c0.483-0.184,0.851-0.483,1.035-0.702c-0.552-0.23-1.024-0.771-1.024-1.542c0-1.3,1.174-1.91,2.083-1.91h0.012
+	c0.391,0,0.771,0.104,1.127,0.299c0.563-0.023,1.15-0.092,1.576-0.161L96.439,56.053z M92.78,61.391
+	c-0.276,0.242-0.483,0.529-0.483,0.84c0,0.61,0.645,1.093,1.507,1.093c1.059,0,1.611-0.541,1.611-1.231
+	c0-0.391-0.207-0.679-0.541-0.805c-0.288-0.115-0.61-0.138-1.104-0.138C93.229,61.149,92.976,61.219,92.78,61.391z M92.654,57.548
+	c0,0.875,0.414,1.519,1.024,1.519c0.495-0.012,0.909-0.46,0.909-1.358c0-0.875-0.391-1.519-1.035-1.519
+	C93.091,56.191,92.654,56.663,92.654,57.548z M98.76,57.054c0.357-0.61,0.84-1.231,1.369-1.231c0.415,0,0.69,0.311,0.69,0.598
+	c0,0.265-0.161,0.518-0.403,0.621c-0.138,0.058-0.241,0.035-0.311-0.034c-0.172-0.161-0.311-0.23-0.506-0.23
+	c-0.276,0-0.621,0.299-0.863,0.921v2.105c0,0.748,0.058,0.816,0.943,0.886V61h-2.738v-0.311c0.69-0.069,0.783-0.138,0.783-0.886
+	v-2.405c0-0.725-0.058-0.771-0.69-0.863V56.26c0.575-0.092,1.116-0.23,1.703-0.46v1.254H98.76z M105.305,59.999
+	c-0.713,0.92-1.519,1.139-1.91,1.139c-1.427,0-2.255-1.151-2.255-2.451c0-0.806,0.299-1.519,0.771-2.025
+	c0.483-0.518,1.104-0.84,1.691-0.84h0.012c0.978,0,1.749,0.863,1.749,1.76c0,0.242-0.057,0.345-0.276,0.38
+	c-0.196,0.034-1.622,0.149-2.957,0.195c0.023,1.507,0.886,2.151,1.691,2.151c0.46,0,0.897-0.184,1.312-0.563L105.305,59.999z
+	 M102.187,57.675c0.61,0,1.22-0.011,1.853-0.034c0.195,0,0.265-0.058,0.265-0.23c0.011-0.598-0.357-1.15-0.967-1.15
+	C102.832,56.26,102.348,56.755,102.187,57.675z M109.652,61.138c-0.196,0-0.438-0.104-0.564-0.23
+	c-0.149-0.15-0.23-0.311-0.288-0.495c-0.449,0.311-1.001,0.725-1.323,0.725c-0.84,0-1.415-0.702-1.415-1.416
+	c0-0.563,0.299-0.909,0.92-1.127c0.69-0.242,1.53-0.541,1.795-0.76v-0.218c0-0.817-0.368-1.277-0.92-1.277
+	c-0.207,0-0.38,0.081-0.495,0.219c-0.138,0.161-0.242,0.414-0.333,0.771c-0.058,0.207-0.184,0.288-0.368,0.288
+	c-0.23,0-0.541-0.23-0.541-0.506c0-0.173,0.138-0.311,0.38-0.483c0.333-0.241,1.104-0.667,1.749-0.805
+	c0.368,0,0.713,0.104,0.978,0.311c0.414,0.345,0.529,0.829,0.529,1.438v2.094c0,0.518,0.195,0.679,0.403,0.679
+	c0.138,0,0.288-0.046,0.402-0.115l0.115,0.311L109.652,61.138z M108.777,58.239c-0.242,0.126-0.725,0.345-0.966,0.46
+	c-0.426,0.207-0.667,0.414-0.667,0.84c0,0.598,0.449,0.874,0.794,0.874c0.276,0,0.633-0.172,0.84-0.368V58.239z M113.228,60.988
+	c-0.195,0.104-0.368,0.15-0.472,0.15c-0.759,0-1.185-0.449-1.185-1.381v-3.325H110.8l-0.058-0.127l0.322-0.345h0.506v-0.829
+	l0.852-0.794l0.161,0.035v1.588h1.266c0.115,0.126,0.092,0.379-0.069,0.472h-1.196v2.934c0,0.92,0.391,1.082,0.667,1.082
+	c0.276,0,0.518-0.092,0.69-0.172l0.104,0.311L113.228,60.988z M119.334,60.988c-0.196,0.104-0.368,0.15-0.472,0.15
+	c-0.759,0-1.185-0.449-1.185-1.381v-3.325h-0.771l-0.058-0.127l0.322-0.345h0.506v-0.829l0.851-0.794l0.161,0.035v1.588h1.266
+	c0.115,0.126,0.092,0.379-0.069,0.472h-1.197v2.934c0,0.92,0.391,1.082,0.667,1.082c0.276,0,0.518-0.092,0.69-0.172l0.104,0.311
+	L119.334,60.988z M120.748,61v-0.311c0.713-0.069,0.794-0.126,0.794-0.92V57.41c0-0.713-0.046-0.771-0.702-0.874V56.26
+	c0.598-0.104,1.185-0.241,1.714-0.449v3.958c0,0.782,0.069,0.851,0.805,0.92V61H120.748z M121.357,54.247
+	c0-0.368,0.288-0.645,0.633-0.645c0.334,0,0.61,0.276,0.61,0.645c0,0.333-0.276,0.621-0.621,0.621
+	C121.645,54.868,121.357,54.58,121.357,54.247z M130.376,61v-0.311c0.645-0.069,0.759-0.126,0.759-0.92v-1.921
+	c0-0.84-0.311-1.3-0.978-1.3c-0.379,0-0.782,0.208-1.208,0.552c0.023,0.138,0.035,0.276,0.035,0.483v2.255
+	c0,0.713,0.104,0.782,0.713,0.852V61h-2.497v-0.311c0.679-0.069,0.771-0.126,0.771-0.863v-2.002c0-0.84-0.311-1.277-0.967-1.277
+	c-0.425,0-0.851,0.276-1.185,0.552v2.727c0,0.725,0.092,0.793,0.633,0.863V61h-2.485v-0.311c0.736-0.069,0.84-0.126,0.84-0.875
+	v-2.393c0-0.713-0.035-0.782-0.679-0.886V56.26c0.506-0.092,1.127-0.241,1.68-0.472v0.932c0.242-0.173,0.483-0.368,0.817-0.575
+	c0.311-0.184,0.586-0.322,0.943-0.322c0.575,0,1.059,0.356,1.289,0.943c0.333-0.242,0.656-0.46,0.932-0.644
+	c0.253-0.161,0.553-0.299,0.875-0.299c0.92,0,1.484,0.644,1.484,1.772v2.232c0,0.748,0.069,0.782,0.725,0.863V61H130.376z
+	 M137.528,59.999c-0.713,0.92-1.519,1.139-1.91,1.139c-1.427,0-2.255-1.151-2.255-2.451c0-0.806,0.299-1.519,0.771-2.025
+	c0.483-0.518,1.104-0.84,1.691-0.84h0.012c0.978,0,1.749,0.863,1.749,1.76c0,0.242-0.057,0.345-0.276,0.38
+	c-0.196,0.034-1.622,0.149-2.957,0.195c0.023,1.507,0.886,2.151,1.691,2.151c0.46,0,0.897-0.184,1.312-0.563L137.528,59.999z
+	 M134.41,57.675c0.61,0,1.22-0.011,1.853-0.034c0.195,0,0.265-0.058,0.265-0.23c0.011-0.598-0.357-1.15-0.967-1.15
+	C135.055,56.26,134.571,56.755,134.41,57.675z M143.07,60.988c-0.195,0.104-0.368,0.15-0.472,0.15c-0.759,0-1.185-0.449-1.185-1.381
+	v-3.325h-0.771l-0.057-0.127l0.322-0.345h0.506v-0.829l0.852-0.794l0.161,0.035v1.588h1.265c0.115,0.126,0.092,0.379-0.069,0.472
+	h-1.196v2.934c0,0.92,0.391,1.082,0.667,1.082c0.276,0,0.518-0.092,0.69-0.172l0.104,0.311L143.07,60.988z M149.305,58.4
+	c0,1.852-1.346,2.738-2.52,2.738c-1.623,0-2.554-1.266-2.554-2.542c0-1.898,1.473-2.773,2.577-2.773
+	C148.246,55.823,149.305,56.985,149.305,58.4z M145.404,58.216c0,1.45,0.587,2.531,1.507,2.531c0.656,0,1.219-0.483,1.219-2.083
+	c0-1.392-0.518-2.451-1.484-2.451C145.991,56.214,145.404,56.904,145.404,58.216z M155.652,57.353
+	c-0.23-0.69-0.622-1.151-1.185-1.151c-0.426,0-0.725,0.322-0.725,0.76c0,0.483,0.426,0.759,0.955,0.978
+	c0.886,0.368,1.473,0.783,1.473,1.6c0,1.07-0.989,1.599-1.933,1.599c-0.587,0-1.139-0.219-1.335-0.38
+	c-0.081-0.161-0.195-0.955-0.195-1.404l0.311-0.046c0.219,0.76,0.736,1.45,1.427,1.45c0.426,0,0.794-0.311,0.794-0.782
+	s-0.299-0.748-0.909-1.024c-0.667-0.311-1.45-0.713-1.45-1.611c0-0.828,0.702-1.519,1.783-1.519c0.495,0,0.806,0.104,1.047,0.207
+	c0.092,0.253,0.218,0.966,0.253,1.243L155.652,57.353z M159.125,60.988c-0.196,0.104-0.368,0.15-0.472,0.15
+	c-0.759,0-1.185-0.449-1.185-1.381v-3.325h-0.771l-0.058-0.127l0.322-0.345h0.506v-0.829l0.851-0.794l0.161,0.035v1.588h1.266
+	c0.115,0.126,0.092,0.379-0.069,0.472h-1.197v2.934c0,0.92,0.391,1.082,0.667,1.082c0.276,0,0.518-0.092,0.69-0.172l0.104,0.311
+	L159.125,60.988z M162.356,57.054c0.356-0.61,0.84-1.231,1.369-1.231c0.415,0,0.69,0.311,0.69,0.598
+	c0,0.265-0.161,0.518-0.402,0.621c-0.138,0.058-0.242,0.035-0.311-0.034c-0.172-0.161-0.311-0.23-0.506-0.23
+	c-0.276,0-0.622,0.299-0.863,0.921v2.105c0,0.748,0.058,0.816,0.944,0.886V61h-2.738v-0.311c0.69-0.069,0.782-0.138,0.782-0.886
+	v-2.405c0-0.725-0.058-0.771-0.69-0.863V56.26c0.575-0.092,1.116-0.23,1.703-0.46v1.254H162.356z M168.9,59.999
+	c-0.713,0.92-1.519,1.139-1.91,1.139c-1.426,0-2.255-1.151-2.255-2.451c0-0.806,0.299-1.519,0.771-2.025
+	c0.483-0.518,1.104-0.84,1.691-0.84h0.011c0.978,0,1.749,0.863,1.749,1.76c0,0.242-0.058,0.345-0.276,0.38
+	c-0.195,0.034-1.622,0.149-2.957,0.195c0.023,1.507,0.886,2.151,1.691,2.151c0.46,0,0.897-0.184,1.312-0.563L168.9,59.999z
+	 M165.782,57.675c0.61,0,1.22-0.011,1.853-0.034c0.195,0,0.265-0.058,0.265-0.23c0.011-0.598-0.357-1.15-0.966-1.15
+	C166.427,56.26,165.943,56.755,165.782,57.675z M171.89,60.988c-0.196,0.104-0.368,0.15-0.472,0.15c-0.76,0-1.185-0.449-1.185-1.381
+	v-3.325h-0.771l-0.058-0.127l0.322-0.345h0.506v-0.829l0.851-0.794l0.161,0.035v1.588h1.266c0.115,0.126,0.092,0.379-0.069,0.472
+	h-1.197v2.934c0,0.92,0.391,1.082,0.667,1.082c0.276,0,0.518-0.092,0.69-0.172l0.104,0.311L171.89,60.988z M177.387,59.953
+	c-0.518,0.679-1.277,1.185-1.956,1.185c-1.473,0-2.347-1.174-2.347-2.405c0-0.886,0.403-1.657,1.162-2.243
+	c0.621-0.483,1.323-0.667,1.76-0.667h0.012c0.46,0,0.84,0.149,1.024,0.299c0.149,0.126,0.184,0.23,0.184,0.368
+	c0,0.253-0.265,0.518-0.403,0.518c-0.069,0-0.126-0.035-0.219-0.126c-0.368-0.345-0.771-0.495-1.162-0.495
+	c-0.702,0-1.334,0.598-1.334,1.817c0,1.576,1.093,2.105,1.714,2.105c0.483,0,0.852-0.138,1.357-0.609L177.387,59.953z M180.94,61
+	v-0.311c0.644-0.069,0.725-0.138,0.725-0.875v-1.921c0-0.943-0.368-1.38-1.07-1.38c-0.414,0-0.828,0.195-1.127,0.541v2.761
+	c0,0.725,0.058,0.805,0.702,0.875V61h-2.497l0.012-0.311c0.679-0.069,0.771-0.126,0.771-0.886v-5.465
+	c0-0.725-0.034-0.759-0.759-0.828v-0.288c0.564-0.081,1.277-0.242,1.772-0.391v3.808c0.403-0.403,1.012-0.817,1.622-0.817
+	c0.943,0,1.588,0.598,1.588,1.956v2.037c0,0.748,0.081,0.805,0.736,0.875V61H180.94z M190.762,59.999
+	c-0.713,0.92-1.519,1.139-1.91,1.139c-1.427,0-2.255-1.151-2.255-2.451c0-0.806,0.299-1.519,0.771-2.025
+	c0.483-0.518,1.104-0.84,1.691-0.84h0.012c0.978,0,1.749,0.863,1.749,1.76c0,0.242-0.057,0.345-0.276,0.38
+	c-0.196,0.034-1.622,0.149-2.957,0.195c0.023,1.507,0.886,2.151,1.691,2.151c0.46,0,0.897-0.184,1.312-0.563L190.762,59.999z
+	 M187.644,57.675c0.61,0,1.22-0.011,1.853-0.034c0.195,0,0.265-0.058,0.265-0.23c0.011-0.598-0.357-1.15-0.967-1.15
+	C188.289,56.26,187.805,56.755,187.644,57.675z M196.627,56.271c-0.598,0.081-0.702,0.195-1.001,0.852
+	c-0.391,0.874-0.989,2.289-1.645,4.003h-0.334c-0.529-1.392-1.047-2.704-1.599-4.038c-0.253-0.633-0.356-0.725-0.955-0.817v-0.311
+	h2.439v0.311c-0.61,0.081-0.633,0.172-0.46,0.644c0.299,0.806,0.759,2.014,1.059,2.761c0.368-0.874,0.736-1.91,0.989-2.669
+	c0.173-0.529,0.104-0.656-0.541-0.736v-0.311h2.048V56.271z M200.801,59.999c-0.713,0.92-1.519,1.139-1.91,1.139
+	c-1.427,0-2.255-1.151-2.255-2.451c0-0.806,0.299-1.519,0.771-2.025c0.483-0.518,1.104-0.84,1.691-0.84h0.012
+	c0.978,0,1.749,0.863,1.749,1.76c0,0.242-0.058,0.345-0.276,0.38c-0.196,0.034-1.623,0.149-2.957,0.195
+	c0.023,1.507,0.886,2.151,1.691,2.151c0.46,0,0.897-0.184,1.312-0.563L200.801,59.999z M197.684,57.675
+	c0.61,0,1.22-0.011,1.853-0.034c0.195,0,0.265-0.058,0.265-0.23c0.011-0.598-0.357-1.15-0.967-1.15
+	C198.328,56.26,197.845,56.755,197.684,57.675z M203.192,57.054c0.357-0.61,0.84-1.231,1.369-1.231c0.414,0,0.69,0.311,0.69,0.598
+	c0,0.265-0.161,0.518-0.403,0.621c-0.138,0.058-0.242,0.035-0.311-0.034c-0.172-0.161-0.311-0.23-0.506-0.23
+	c-0.276,0-0.621,0.299-0.863,0.921v2.105c0,0.748,0.058,0.816,0.943,0.886V61h-2.738v-0.311c0.69-0.069,0.783-0.138,0.783-0.886
+	v-2.405c0-0.725-0.058-0.771-0.69-0.863V56.26c0.575-0.092,1.116-0.23,1.703-0.46v1.254H203.192z M211.187,56.271
+	c-0.598,0.092-0.702,0.184-1.013,0.828c-0.288,0.61-0.644,1.565-1.426,3.417c-0.771,1.841-1.013,2.508-1.185,3.129
+	c-0.069,0.23-0.207,0.288-0.38,0.288c-0.322,0-0.679-0.288-0.679-0.586c0-0.184,0.092-0.288,0.299-0.426
+	c0.38-0.23,0.61-0.495,0.863-0.99c0.207-0.356,0.288-0.575,0.333-0.725c0.058-0.172,0.046-0.333-0.023-0.529
+	c-0.483-1.369-1.013-2.807-1.334-3.566c-0.242-0.61-0.357-0.759-0.967-0.84v-0.311h2.417l0.011,0.311
+	c-0.529,0.092-0.598,0.195-0.449,0.61l1.013,2.83c0.322-0.771,0.793-2.083,1.024-2.796c0.138-0.425,0.057-0.552-0.587-0.644v-0.311
+	h2.083V56.271z M219.501,60.701c-0.253,0.046-1.162,0.196-1.875,0.438v-0.736l-0.702,0.425c-0.426,0.253-0.702,0.311-0.84,0.311
+	c-0.932,0-2.175-0.84-2.175-2.462c0-1.587,1.392-2.853,3.003-2.853c0.149,0,0.449,0.035,0.713,0.115V54.35
+	c0-0.725-0.058-0.771-0.863-0.829v-0.299c0.621-0.081,1.415-0.242,1.875-0.391v6.822c0,0.61,0.081,0.667,0.518,0.713l0.345,0.035
+	V60.701z M217.626,56.858c-0.265-0.403-0.713-0.587-1.127-0.587c-0.483,0-1.438,0.414-1.438,2.094c0,1.381,0.84,2.025,1.542,2.025
+	c0.379,0,0.748-0.161,1.024-0.356V56.858z M223.698,61.138c-0.195,0-0.437-0.104-0.563-0.23c-0.149-0.15-0.23-0.311-0.288-0.495
+	c-0.449,0.311-1.001,0.725-1.323,0.725c-0.84,0-1.415-0.702-1.415-1.416c0-0.563,0.299-0.909,0.92-1.127
+	c0.69-0.242,1.53-0.541,1.795-0.76v-0.218c0-0.817-0.368-1.277-0.92-1.277c-0.207,0-0.38,0.081-0.495,0.219
+	c-0.138,0.161-0.241,0.414-0.333,0.771c-0.058,0.207-0.184,0.288-0.368,0.288c-0.23,0-0.541-0.23-0.541-0.506
+	c0-0.173,0.138-0.311,0.379-0.483c0.334-0.241,1.104-0.667,1.749-0.805c0.368,0,0.713,0.104,0.978,0.311
+	c0.414,0.345,0.529,0.829,0.529,1.438v2.094c0,0.518,0.195,0.679,0.402,0.679c0.138,0,0.288-0.046,0.403-0.115l0.115,0.311
+	L223.698,61.138z M222.824,58.239c-0.242,0.126-0.725,0.345-0.967,0.46c-0.425,0.207-0.667,0.414-0.667,0.84
+	c0,0.598,0.449,0.874,0.794,0.874c0.276,0,0.633-0.172,0.84-0.368V58.239z M230.047,56.271c-0.599,0.092-0.702,0.184-1.013,0.828
+	c-0.288,0.61-0.645,1.565-1.427,3.417c-0.771,1.841-1.012,2.508-1.185,3.129c-0.069,0.23-0.207,0.288-0.379,0.288
+	c-0.322,0-0.679-0.288-0.679-0.586c0-0.184,0.092-0.288,0.299-0.426c0.38-0.23,0.61-0.495,0.863-0.99
+	c0.208-0.356,0.288-0.575,0.334-0.725c0.057-0.172,0.046-0.333-0.023-0.529c-0.483-1.369-1.013-2.807-1.335-3.566
+	c-0.241-0.61-0.356-0.759-0.966-0.84v-0.311h2.416l0.012,0.311c-0.529,0.092-0.598,0.195-0.449,0.61l1.012,2.83
+	c0.322-0.771,0.794-2.083,1.024-2.796c0.138-0.425,0.058-0.552-0.586-0.644v-0.311h2.083V56.271z M229.746,60.437
+	c0-0.392,0.288-0.69,0.679-0.69s0.679,0.299,0.679,0.69c0,0.425-0.288,0.702-0.69,0.702
+	C230.033,61.138,229.746,60.862,229.746,60.437z M243.987,61v-0.311c0.656-0.069,0.725-0.149,0.725-0.886v-1.91
+	c0-0.943-0.368-1.38-1.082-1.38c-0.402,0-0.828,0.195-1.127,0.552v2.738c0,0.725,0.058,0.805,0.713,0.886V61h-2.52v-0.311
+	c0.725-0.081,0.794-0.149,0.794-0.897v-5.764c-0.61-0.069-1.208-0.081-2.244-0.081h-0.748v5.592c0,0.978,0.092,1.058,1.127,1.127V61
+	h-3.302v-0.333c0.989-0.069,1.093-0.15,1.093-1.127v-5.592h-0.667c-1.024,0-1.231,0.104-1.404,0.38
+	c-0.138,0.207-0.253,0.483-0.379,1.012h-0.357c0.058-0.713,0.115-1.484,0.138-2.105h0.23c0.173,0.253,0.311,0.288,0.633,0.288h4.775
+	c0.943,0,1.104-0.069,1.104-0.288v-0.161c0.265-0.046,0.69-0.161,1.012-0.276v3.843c0.414-0.438,1.001-0.806,1.599-0.817
+	c0.978-0.012,1.623,0.598,1.623,1.944v2.025c0,0.771,0.081,0.828,0.748,0.897V61H243.987z M251.149,59.999
+	c-0.713,0.92-1.519,1.139-1.91,1.139c-1.426,0-2.255-1.151-2.255-2.451c0-0.806,0.299-1.519,0.771-2.025
+	c0.483-0.518,1.104-0.84,1.691-0.84h0.011c0.978,0,1.749,0.863,1.749,1.76c0,0.242-0.058,0.345-0.276,0.38
+	c-0.195,0.034-1.622,0.149-2.957,0.195c0.023,1.507,0.886,2.151,1.691,2.151c0.46,0,0.897-0.184,1.312-0.563L251.149,59.999z
+	 M248.031,57.675c0.61,0,1.22-0.011,1.853-0.034c0.196,0,0.265-0.058,0.265-0.23c0.011-0.598-0.357-1.15-0.966-1.15
+	C248.675,56.26,248.192,56.755,248.031,57.675z M254.897,57.353c-0.23-0.69-0.622-1.151-1.185-1.151
+	c-0.426,0-0.725,0.322-0.725,0.76c0,0.483,0.426,0.759,0.955,0.978c0.886,0.368,1.473,0.783,1.473,1.6
+	c0,1.07-0.989,1.599-1.933,1.599c-0.587,0-1.139-0.219-1.335-0.38c-0.081-0.161-0.195-0.955-0.195-1.404l0.311-0.046
+	c0.219,0.76,0.736,1.45,1.427,1.45c0.426,0,0.794-0.311,0.794-0.782s-0.299-0.748-0.909-1.024c-0.667-0.311-1.45-0.713-1.45-1.611
+	c0-0.828,0.702-1.519,1.783-1.519c0.495,0,0.806,0.104,1.047,0.207c0.092,0.253,0.218,0.966,0.253,1.243L254.897,57.353z
+	 M260.303,59.999c-0.713,0.92-1.519,1.139-1.91,1.139c-1.427,0-2.255-1.151-2.255-2.451c0-0.806,0.299-1.519,0.771-2.025
+	c0.483-0.518,1.104-0.84,1.691-0.84h0.011c0.978,0,1.749,0.863,1.749,1.76c0,0.242-0.058,0.345-0.276,0.38
+	c-0.195,0.034-1.622,0.149-2.957,0.195c0.023,1.507,0.886,2.151,1.691,2.151c0.46,0,0.897-0.184,1.312-0.563L260.303,59.999z
+	 M257.185,57.675c0.61,0,1.219-0.011,1.852-0.034c0.196,0,0.265-0.058,0.265-0.23c0.012-0.598-0.356-1.15-0.966-1.15
+	C257.829,56.26,257.346,56.755,257.185,57.675z M266.57,57.353c-0.23-0.69-0.621-1.151-1.185-1.151c-0.426,0-0.725,0.322-0.725,0.76
+	c0,0.483,0.426,0.759,0.955,0.978c0.886,0.368,1.473,0.783,1.473,1.6c0,1.07-0.989,1.599-1.933,1.599
+	c-0.587,0-1.139-0.219-1.334-0.38c-0.081-0.161-0.196-0.955-0.196-1.404l0.311-0.046c0.219,0.76,0.736,1.45,1.427,1.45
+	c0.426,0,0.794-0.311,0.794-0.782s-0.299-0.748-0.909-1.024c-0.667-0.311-1.449-0.713-1.449-1.611c0-0.828,0.702-1.519,1.783-1.519
+	c0.495,0,0.805,0.104,1.047,0.207c0.092,0.253,0.219,0.966,0.253,1.243L266.57,57.353z M270.042,60.988
+	c-0.196,0.104-0.368,0.15-0.472,0.15c-0.759,0-1.185-0.449-1.185-1.381v-3.325h-0.771l-0.057-0.127l0.322-0.345h0.506v-0.829
+	l0.852-0.794l0.161,0.035v1.588h1.265c0.115,0.126,0.092,0.379-0.069,0.472h-1.196v2.934c0,0.92,0.391,1.082,0.667,1.082
+	c0.276,0,0.518-0.092,0.69-0.172l0.104,0.311L270.042,60.988z M273.273,57.054c0.357-0.61,0.84-1.231,1.369-1.231
+	c0.414,0,0.69,0.311,0.69,0.598c0,0.265-0.161,0.518-0.402,0.621c-0.138,0.058-0.241,0.035-0.311-0.034
+	c-0.173-0.161-0.311-0.23-0.507-0.23c-0.275,0-0.621,0.299-0.862,0.921v2.105c0,0.748,0.058,0.816,0.943,0.886V61h-2.738v-0.311
+	c0.69-0.069,0.782-0.138,0.782-0.886v-2.405c0-0.725-0.058-0.771-0.69-0.863V56.26c0.576-0.092,1.116-0.23,1.703-0.46v1.254H273.273
+	z M279.818,59.999c-0.713,0.92-1.519,1.139-1.91,1.139c-1.427,0-2.255-1.151-2.255-2.451c0-0.806,0.3-1.519,0.771-2.025
+	c0.482-0.518,1.104-0.84,1.69-0.84h0.012c0.979,0,1.749,0.863,1.749,1.76c0,0.242-0.058,0.345-0.276,0.38
+	c-0.195,0.034-1.622,0.149-2.957,0.195c0.023,1.507,0.887,2.151,1.691,2.151c0.46,0,0.897-0.184,1.312-0.563L279.818,59.999z
+	 M276.7,57.675c0.61,0,1.22-0.011,1.853-0.034c0.195,0,0.265-0.058,0.265-0.23c0.012-0.598-0.356-1.15-0.967-1.15
+	C277.345,56.26,276.861,56.755,276.7,57.675z M282.808,60.988c-0.195,0.104-0.368,0.15-0.472,0.15c-0.76,0-1.186-0.449-1.186-1.381
+	v-3.325h-0.771l-0.058-0.127l0.322-0.345h0.506v-0.829l0.852-0.794l0.161,0.035v1.588h1.266c0.115,0.126,0.092,0.379-0.069,0.472
+	h-1.196v2.934c0,0.92,0.392,1.082,0.667,1.082c0.276,0,0.519-0.092,0.69-0.172l0.104,0.311L282.808,60.988z M288.306,59.953
+	c-0.518,0.679-1.277,1.185-1.956,1.185c-1.473,0-2.347-1.174-2.347-2.405c0-0.886,0.402-1.657,1.162-2.243
+	c0.621-0.483,1.322-0.667,1.76-0.667h0.012c0.46,0,0.84,0.149,1.023,0.299c0.15,0.126,0.185,0.23,0.185,0.368
+	c0,0.253-0.265,0.518-0.402,0.518c-0.069,0-0.127-0.035-0.219-0.126c-0.368-0.345-0.771-0.495-1.162-0.495
+	c-0.702,0-1.335,0.598-1.335,1.817c0,1.576,1.093,2.105,1.715,2.105c0.482,0,0.851-0.138,1.357-0.609L288.306,59.953z M291.858,61
+	v-0.311c0.645-0.069,0.725-0.138,0.725-0.875v-1.921c0-0.943-0.368-1.38-1.069-1.38c-0.414,0-0.829,0.195-1.128,0.541v2.761
+	c0,0.725,0.058,0.805,0.702,0.875V61h-2.497l0.012-0.311c0.679-0.069,0.771-0.126,0.771-0.886v-5.465
+	c0-0.725-0.034-0.759-0.759-0.828v-0.288c0.563-0.081,1.276-0.242,1.771-0.391v3.808c0.402-0.403,1.013-0.817,1.622-0.817
+	c0.943,0,1.588,0.598,1.588,1.956v2.037c0,0.748,0.081,0.805,0.736,0.875V61H291.858z M298.966,59.999
+	c-0.713,0.92-1.519,1.139-1.909,1.139c-1.427,0-2.256-1.151-2.256-2.451c0-0.806,0.3-1.519,0.771-2.025
+	c0.483-0.518,1.104-0.84,1.691-0.84h0.011c0.979,0,1.749,0.863,1.749,1.76c0,0.242-0.058,0.345-0.276,0.38
+	c-0.195,0.034-1.622,0.149-2.956,0.195c0.022,1.507,0.886,2.151,1.69,2.151c0.461,0,0.897-0.184,1.312-0.563L298.966,59.999z
+	 M295.848,57.675c0.61,0,1.22-0.011,1.853-0.034c0.196,0,0.265-0.058,0.265-0.23c0.012-0.598-0.356-1.15-0.966-1.15
+	C296.492,56.26,296.009,56.755,295.848,57.675z M302.715,57.353c-0.23-0.69-0.622-1.151-1.186-1.151
+	c-0.426,0-0.725,0.322-0.725,0.76c0,0.483,0.426,0.759,0.955,0.978c0.886,0.368,1.473,0.783,1.473,1.6
+	c0,1.07-0.989,1.599-1.933,1.599c-0.587,0-1.14-0.219-1.335-0.38c-0.081-0.161-0.195-0.955-0.195-1.404l0.311-0.046
+	c0.219,0.76,0.736,1.45,1.427,1.45c0.426,0,0.794-0.311,0.794-0.782s-0.3-0.748-0.909-1.024c-0.667-0.311-1.45-0.713-1.45-1.611
+	c0-0.828,0.702-1.519,1.783-1.519c0.495,0,0.806,0.104,1.048,0.207c0.092,0.253,0.218,0.966,0.253,1.243L302.715,57.353z
+	 M314.113,56.271c-0.575,0.092-0.668,0.219-0.909,0.84c-0.368,0.943-0.874,2.451-1.403,4.015h-0.346
+	c-0.46-1.208-0.932-2.335-1.392-3.509c-0.438,1.139-0.897,2.266-1.347,3.509h-0.356c-0.426-1.38-0.862-2.738-1.334-4.107
+	c-0.208-0.598-0.3-0.679-0.84-0.748v-0.311h2.462v0.311c-0.69,0.104-0.748,0.184-0.587,0.679c0.265,0.863,0.541,1.749,0.816,2.6
+	h0.023c0.426-1.093,0.84-2.244,1.3-3.532h0.334c0.426,1.173,0.897,2.358,1.369,3.566h0.022c0.242-0.748,0.564-1.772,0.76-2.566
+	c0.138-0.563,0.069-0.644-0.667-0.748v-0.311h2.094V56.271z M314.559,61v-0.311c0.713-0.069,0.793-0.126,0.793-0.92V57.41
+	c0-0.713-0.046-0.771-0.701-0.874V56.26c0.598-0.104,1.185-0.241,1.714-0.449v3.958c0,0.782,0.069,0.851,0.806,0.92V61H314.559z
+	 M315.168,54.247c0-0.368,0.287-0.645,0.633-0.645c0.334,0,0.609,0.276,0.609,0.645c0,0.333-0.275,0.621-0.621,0.621
+	C315.455,54.868,315.168,54.58,315.168,54.247z M317.709,61v-0.311c0.713-0.081,0.806-0.138,0.806-0.897v-5.419
+	c0-0.771-0.069-0.794-0.782-0.863v-0.288c0.621-0.069,1.357-0.242,1.794-0.391v6.96c0,0.759,0.093,0.828,0.817,0.897V61H317.709z
+	 M320.883,61v-0.311c0.714-0.081,0.806-0.138,0.806-0.897v-5.419c0-0.771-0.069-0.794-0.782-0.863v-0.288
+	c0.621-0.069,1.357-0.242,1.795-0.391v6.96c0,0.759,0.092,0.828,0.816,0.897V61H320.883z M328.394,57.054
+	c0.356-0.61,0.84-1.231,1.369-1.231c0.414,0,0.69,0.311,0.69,0.598c0,0.265-0.161,0.518-0.403,0.621
+	c-0.138,0.058-0.241,0.035-0.311-0.034c-0.172-0.161-0.311-0.23-0.506-0.23c-0.276,0-0.621,0.299-0.863,0.921v2.105
+	c0,0.748,0.058,0.816,0.943,0.886V61h-2.738v-0.311c0.69-0.069,0.783-0.138,0.783-0.886v-2.405c0-0.725-0.058-0.771-0.69-0.863
+	V56.26c0.575-0.092,1.115-0.23,1.702-0.46v1.254H328.394z M334.938,59.999c-0.713,0.92-1.519,1.139-1.909,1.139
+	c-1.427,0-2.255-1.151-2.255-2.451c0-0.806,0.299-1.519,0.771-2.025c0.483-0.518,1.104-0.84,1.691-0.84h0.012
+	c0.978,0,1.748,0.863,1.748,1.76c0,0.242-0.058,0.345-0.275,0.38c-0.196,0.034-1.623,0.149-2.957,0.195
+	c0.022,1.507,0.886,2.151,1.691,2.151c0.46,0,0.897-0.184,1.312-0.563L334.938,59.999z M331.82,57.675
+	c0.609,0,1.22-0.011,1.852-0.034c0.196,0,0.265-0.058,0.265-0.23c0.012-0.598-0.356-1.15-0.966-1.15
+	C332.464,56.26,331.981,56.755,331.82,57.675z M335.35,61v-0.311c0.714-0.081,0.806-0.138,0.806-0.897v-5.419
+	c0-0.771-0.069-0.794-0.782-0.863v-0.288c0.621-0.069,1.357-0.242,1.795-0.391v6.96c0,0.759,0.092,0.828,0.816,0.897V61H335.35z
+	 M342.103,61.138c-0.196,0-0.438-0.104-0.564-0.23c-0.149-0.15-0.229-0.311-0.287-0.495c-0.449,0.311-1.001,0.725-1.323,0.725
+	c-0.84,0-1.415-0.702-1.415-1.416c0-0.563,0.299-0.909,0.92-1.127c0.69-0.242,1.53-0.541,1.795-0.76v-0.218
+	c0-0.817-0.368-1.277-0.92-1.277c-0.207,0-0.38,0.081-0.495,0.219c-0.138,0.161-0.241,0.414-0.334,0.771
+	c-0.057,0.207-0.184,0.288-0.367,0.288c-0.23,0-0.541-0.23-0.541-0.506c0-0.173,0.138-0.311,0.38-0.483
+	c0.333-0.241,1.104-0.667,1.748-0.805c0.368,0,0.714,0.104,0.979,0.311c0.414,0.345,0.529,0.829,0.529,1.438v2.094
+	c0,0.518,0.195,0.679,0.402,0.679c0.138,0,0.288-0.046,0.402-0.115l0.115,0.311L342.103,61.138z M341.228,58.239
+	c-0.241,0.126-0.725,0.345-0.966,0.46c-0.426,0.207-0.668,0.414-0.668,0.84c0,0.598,0.449,0.874,0.794,0.874
+	c0.276,0,0.633-0.172,0.84-0.368V58.239z M346.472,61v-0.311c0.472-0.069,0.563-0.161,0.368-0.472l-0.806-1.289
+	c-0.253,0.368-0.494,0.793-0.713,1.173c-0.207,0.38-0.173,0.495,0.391,0.587V61h-2.151v-0.311c0.702-0.092,0.84-0.196,1.277-0.748
+	c0.322-0.391,0.621-0.851,0.967-1.346l-1.001-1.588c-0.346-0.552-0.483-0.656-1.116-0.736v-0.311h2.37v0.311
+	c-0.472,0.069-0.518,0.172-0.311,0.483l0.655,1.035c0.23-0.345,0.449-0.69,0.645-1.047c0.195-0.345,0.127-0.414-0.368-0.472v-0.311
+	h2.105v0.311c-0.69,0.081-0.84,0.138-1.242,0.61c-0.242,0.288-0.518,0.679-0.909,1.242l1.128,1.714
+	c0.414,0.645,0.575,0.759,1.242,0.852V61H346.472z M356.984,56.271c-0.599,0.092-0.702,0.184-1.013,0.828
+	c-0.288,0.61-0.645,1.565-1.427,3.417c-0.771,1.841-1.013,2.508-1.185,3.129c-0.069,0.23-0.208,0.288-0.38,0.288
+	c-0.322,0-0.679-0.288-0.679-0.586c0-0.184,0.092-0.288,0.299-0.426c0.38-0.23,0.609-0.495,0.863-0.99
+	c0.207-0.356,0.287-0.575,0.333-0.725c0.058-0.172,0.046-0.333-0.022-0.529c-0.483-1.369-1.013-2.807-1.335-3.566
+	c-0.241-0.61-0.356-0.759-0.967-0.84v-0.311h2.416l0.012,0.311c-0.529,0.092-0.598,0.195-0.448,0.61l1.013,2.83
+	c0.321-0.771,0.793-2.083,1.023-2.796c0.138-0.425,0.058-0.552-0.587-0.644v-0.311h2.083V56.271z M362.078,58.4
+	c0,1.852-1.346,2.738-2.52,2.738c-1.622,0-2.554-1.266-2.554-2.542c0-1.898,1.473-2.773,2.577-2.773
+	C361.021,55.823,362.078,56.985,362.078,58.4z M358.179,58.216c0,1.45,0.586,2.531,1.507,2.531c0.656,0,1.22-0.483,1.22-2.083
+	c0-1.392-0.518-2.451-1.484-2.451C358.765,56.214,358.179,56.904,358.179,58.216z M368.266,60.724
+	c-0.265,0.035-0.587,0.104-0.909,0.185c-0.311,0.08-0.621,0.161-0.851,0.23l-0.081-0.069v-0.793
+	c-0.253,0.195-0.483,0.379-0.806,0.563c-0.333,0.196-0.586,0.299-0.908,0.299c-0.806,0-1.438-0.495-1.438-1.703v-2.278
+	c0-0.587-0.092-0.656-0.38-0.725l-0.311-0.069v-0.276c0.253-0.012,0.553-0.046,0.875-0.081c0.322-0.035,0.655-0.092,0.862-0.126
+	c-0.034,0.379-0.034,0.932-0.034,1.68v1.576c0,0.978,0.472,1.254,0.978,1.254c0.392,0,0.794-0.161,1.162-0.518v-2.704
+	c0-0.61-0.104-0.667-0.46-0.736l-0.402-0.069v-0.276c0.311-0.012,0.713-0.046,1.058-0.092c0.334-0.023,0.622-0.081,0.817-0.115v3.82
+	c0,0.586,0.092,0.667,0.529,0.702l0.299,0.011V60.724z M370.726,57.054c0.356-0.61,0.84-1.231,1.369-1.231
+	c0.414,0,0.689,0.311,0.689,0.598c0,0.265-0.161,0.518-0.402,0.621c-0.138,0.058-0.241,0.035-0.311-0.034
+	c-0.173-0.161-0.311-0.23-0.506-0.23c-0.276,0-0.622,0.299-0.863,0.921v2.105c0,0.748,0.058,0.816,0.943,0.886V61h-2.738v-0.311
+	c0.69-0.069,0.782-0.138,0.782-0.886v-2.405c0-0.725-0.058-0.771-0.69-0.863V56.26c0.575-0.092,1.116-0.23,1.703-0.46v1.254H370.726
+	z M378.086,55.961c0.218-0.092,0.367-0.138,0.518-0.138c1.266,0,2.289,1.082,2.289,2.427c0,1.68-1.346,2.888-2.911,2.888
+	c-0.506,0-1.093-0.115-1.748-0.415v-6.362c0-0.702-0.035-0.782-0.748-0.84v-0.288c0.541-0.069,1.288-0.242,1.76-0.402v3.498
+	L378.086,55.961z M377.245,59.677c0,0.173,0.023,0.288,0.069,0.403c0.069,0.219,0.402,0.61,0.955,0.61
+	c0.909,0.011,1.496-0.794,1.496-2.14c0-1.334-0.783-2.059-1.703-2.059c-0.288,0-0.609,0.08-0.817,0.184V59.677z M386.758,58.4
+	c0,1.852-1.347,2.738-2.52,2.738c-1.622,0-2.555-1.266-2.555-2.542c0-1.898,1.473-2.773,2.577-2.773
+	C385.699,55.823,386.758,56.985,386.758,58.4z M382.857,58.216c0,1.45,0.587,2.531,1.507,2.531c0.656,0,1.22-0.483,1.22-2.083
+	c0-1.392-0.518-2.451-1.484-2.451C383.444,56.214,382.857,56.904,382.857,58.216z M393.141,60.701
+	c-0.253,0.046-1.162,0.196-1.876,0.438v-0.736l-0.701,0.425c-0.426,0.253-0.702,0.311-0.84,0.311c-0.933,0-2.175-0.84-2.175-2.462
+	c0-1.587,1.393-2.853,3.003-2.853c0.149,0,0.448,0.035,0.713,0.115V54.35c0-0.725-0.057-0.771-0.862-0.829v-0.299
+	c0.621-0.081,1.415-0.242,1.875-0.391v6.822c0,0.61,0.081,0.667,0.518,0.713l0.346,0.035V60.701z M391.265,56.858
+	c-0.265-0.403-0.713-0.587-1.127-0.587c-0.483,0-1.438,0.414-1.438,2.094c0,1.381,0.84,2.025,1.542,2.025
+	c0.38,0,0.748-0.161,1.023-0.356V56.858z M398.648,56.271c-0.598,0.092-0.701,0.184-1.012,0.828
+	c-0.288,0.61-0.645,1.565-1.427,3.417c-0.771,1.841-1.013,2.508-1.186,3.129c-0.068,0.23-0.207,0.288-0.38,0.288
+	c-0.321,0-0.679-0.288-0.679-0.586c0-0.184,0.093-0.288,0.3-0.426c0.379-0.23,0.609-0.495,0.862-0.99
+	c0.207-0.356,0.288-0.575,0.334-0.725c0.058-0.172,0.046-0.333-0.023-0.529c-0.482-1.369-1.012-2.807-1.334-3.566
+	c-0.242-0.61-0.356-0.759-0.967-0.84v-0.311h2.416l0.012,0.311c-0.529,0.092-0.599,0.195-0.448,0.61l1.012,2.83
+	c0.322-0.771,0.794-2.083,1.024-2.796c0.138-0.425,0.058-0.552-0.587-0.644v-0.311h2.082V56.271z"/>
+<text transform="matrix(1 0 0 1 51 74.501)"><tspan x="0" y="0" style="font-family:'MinionPro-Medium'; -webkit-user-select:none; font-size:11.5; -webkit-user-select:none;">a</tspan><tspan x="5.29" y="0" style="font-family:'MinionPro-Medium'; -webkit-user-select:none; font-size:11.5; -webkit-user-select:none;">n</tspan><tspan x="11.431" y="0" style="font-family:'MinionPro-Medium'; -webkit-user-select:none; font-size:11.5; -webkit-user-select:none;">d</tspan><tspan x="17.491" y="0" style="f [...]
+<text transform="matrix(1 0 0 1 312.9697 74.501)"><tspan x="0" y="0" style="font-family:'MinionPro-MediumIt'; -webkit-user-select:none; font-size:11.5; -webkit-user-select:none;">f</tspan><tspan x="3.048" y="0" style="font-family:'MinionPro-MediumIt'; -webkit-user-select:none; font-size:11.5; -webkit-user-select:none;">e</tspan><tspan x="7.693" y="0" style="font-family:'MinionPro-MediumIt'; -webkit-user-select:none; font-size:11.5; -webkit-user-select:none;">el</tspan></text>
+<text transform="matrix(1 0 0 1 328.2188 74.501)"><tspan x="0" y="0" style="font-family:'MinionPro-Medium'; -webkit-user-select:none; font-size:11.5; -webkit-user-select:none;"> </tspan><tspan x="2.587" y="0" style="font-family:'MinionPro-Medium'; -webkit-user-select:none; font-size:11.5; -webkit-user-select:none;">t</tspan><tspan x="6.405" y="0" style="font-family:'MinionPro-Medium'; -webkit-user-select:none; font-size:11.5; -webkit-user-select:none;">h</tspan><tspan x="12.408" y="0" st [...]
+<text transform="matrix(1 0 0 1 51 88.002)"><tspan x="0" y="0" style="font-family:'MinionPro-Medium'; -webkit-user-select:none; font-size:11.5; -webkit-user-select:none;">b</tspan><tspan x="5.876" y="0" style="font-family:'MinionPro-Medium'; -webkit-user-select:none; font-size:11.5; -webkit-user-select:none;">e</tspan><tspan x="10.683" y="0" style="font-family:'MinionPro-Medium'; -webkit-user-select:none; font-size:11.5; -webkit-user-select:none;">i</tspan><tspan x="13.938" y="0" style=" [...]
+<text transform="matrix(1 0 0 1.25 17.3315 15.4556)"><tspan x="0" y="0" style="fill:#FFFFFF; font-family:'LithosPro-Black'; -webkit-user-select:none; font-size:7.2; -webkit-user-select:none;">B</tspan><tspan x="4.846" y="0" style="fill:#FFFFFF; font-family:'LithosPro-Black'; -webkit-user-select:none; font-size:7.2; -webkit-user-select:none;">E</tspan><tspan x="8.906" y="0" style="fill:#FFFFFF; font-family:'LithosPro-Black'; -webkit-user-select:none; font-size:7.2; -webkit-user-select:non [...]
+</svg>
diff --git a/src/test/resources/30/single/svg/valid/issue222.xhtml b/src/test/resources/30/single/svg/valid/issue222.xhtml
new file mode 100755
index 0000000..9f5b692
--- /dev/null
+++ b/src/test/resources/30/single/svg/valid/issue222.xhtml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:svg="http://www.w3.org/2000/svg">
+<head>
+<title>Part page</title>
+</head>
+<body>
+<div class="partpage">
+<svg:svg version="1.1" width="6in" height="9in" baseProfile="tiny" viewBox="0 0 4320 6480" preserveAspectRatio="xMidYMid">
+  <svg:g transform="scale(10)">
+      <svg:g fill="none" stroke="green" stroke-width="1"><svg:line x1="0" y1="0" x2="431" y2="0" /><svg:line x1="431" y1="0" x2="431" y2="647" /><svg:line x1="431" y1="647" x2="0" y2="647" /><svg:line x1="0" y1="647" x2="0" y2="0" /></svg:g>
+      <svg:foreignObject x="0" y="148" width="432" height="300" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
+          <body>
+            <div class="pp_partnum" xmlns="http://www.w3.org/1999/xhtml">Part I:</div>
+          </body>
+        </svg:foreignObject>
+  </svg:g>
+</svg:svg>
+</div> 
+</body> 
+</html>
\ No newline at end of file
diff --git a/src/test/resources/30/single/svg/valid/rect.svg b/src/test/resources/30/single/svg/valid/rect.svg
new file mode 100644
index 0000000..960f4f5
--- /dev/null
+++ b/src/test/resources/30/single/svg/valid/rect.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-svg-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-svg-30.sch"?>
+<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
+    xmlns="http://www.w3.org/2000/svg" version="1.1"
+    xmlns:x="http://www.w3.org/1999/xhtml">
+    <desc>Example rect01 - rectangle with sharp corners </desc>
+    
+    <rect x="1" y="1" width="1198" height="398"
+        fill="none" stroke="blue" stroke-width="2"/>
+    
+    <rect x="400" y="100" width="400" height="200"
+        fill="yellow" stroke="navy" stroke-width="10"  />
+    
+    <foreignObject width="123" height="123" requiredExtensions="http://www.idpf.org/2007/ops">        
+        <x:p></x:p>
+    </foreignObject>
+</svg>
\ No newline at end of file
diff --git a/src/test/resources/30/single/xhtml/invalid/canvas-fallback.xhtml b/src/test/resources/30/single/xhtml/invalid/canvas-fallback.xhtml
new file mode 100644
index 0000000..b564d9d
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/invalid/canvas-fallback.xhtml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ssml="http://www.w3.org/2001/10/synthesis" xml:lang="en" lang="en" ssml:alphabet="x-SAMPA">
+    <head>
+        <title>ssml</title>
+    </head>
+    <body>
+<canvas id="example" width="200" height="200">
+<object type="bla/sibla">
+<canvas id="example2" width="200" height="200"/>
+</object>
+
+</canvas>
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/invalid/doctype-1.xhtml b/src/test/resources/30/single/xhtml/invalid/doctype-1.xhtml
new file mode 100644
index 0000000..38f7fbb
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/invalid/doctype-1.xhtml
@@ -0,0 +1,24 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
+	 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+    <head>
+        <title></title>
+    </head>
+    <body>
+    <p> </p>
+        <math xmlns="http://www.w3.org/1998/Math/MathML">
+            <semantics>
+                <mfrac>
+                    <msqrt>
+                        <mtext>a</mtext>
+                    </msqrt>
+                    <mi>b</mi>
+                </mfrac>
+                <annotation-xml encoding="application/xhtml+xml" name="alternate-representation">
+                    <span xmlns="http://www.w3.org/1999/xhtml">square root of a divided by the value
+                        of b</span>
+                </annotation-xml>
+            </semantics>
+        </math>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/30/single/xhtml/invalid/http-equiv-1.xhtml b/src/test/resources/30/single/xhtml/invalid/http-equiv-1.xhtml
new file mode 100644
index 0000000..10aaed3
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/invalid/http-equiv-1.xhtml
@@ -0,0 +1,16 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
+   <head>
+	<!-- Encoding declaration state not allowed in xhtml docs -->
+      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+      <title>TOC</title>
+   </head>
+   <body>
+      <nav epub:type="toc" id="toc">
+         <ol>
+            <li>
+               <a href="navigation.xhtml#toc">TOC</a>
+            </li>
+         </ol>
+      </nav>
+   </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/invalid/issue153.xhtml b/src/test/resources/30/single/xhtml/invalid/issue153.xhtml
new file mode 100755
index 0000000..635a24f
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/invalid/issue153.xhtml
@@ -0,0 +1,21 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+    <head>
+        <title></title>
+    </head>
+    <body>
+        <math xmlns="http://www.w3.org/1998/Math/MathML">
+            <semantics>
+                <mfrac>
+                    <msqrt>
+                        <mtext>a</mtext>
+                    </msqrt>
+                    <mi>b</mi>
+                </mfrac>
+                <annotation-xml encoding="application/xml+xhtml" name="alternate-representation">
+                    <span xmlns="http://www.w3.org/1999/xhtml">square root of a divided by the value
+                        of b</span>
+                </annotation-xml>
+            </semantics>
+        </math>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/30/single/xhtml/invalid/issue230.xhtml b/src/test/resources/30/single/xhtml/invalid/issue230.xhtml
new file mode 100644
index 0000000..648417e
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/invalid/issue230.xhtml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
+    <head>
+        <title>ssml</title>
+    </head>
+	<body>
+		<div epub:type="acknowledgements">
+			<p>Test</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/invalid/link.xhtml b/src/test/resources/30/single/xhtml/invalid/link.xhtml
new file mode 100644
index 0000000..85b2a7d
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/invalid/link.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ssml="http://www.w3.org/2001/10/synthesis" xml:lang="en" lang="en" ssml:alphabet="x-SAMPA">
+    <head>
+           <link rel="stylesheet" href="horizontal.css" class="horizontal invalid vertical"/>
+    </head>
+    <body>
+
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/invalid/md.xhtml b/src/test/resources/30/single/xhtml/invalid/md.xhtml
new file mode 100644
index 0000000..b214710
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/invalid/md.xhtml
@@ -0,0 +1,11 @@
+<html xmlns="http://www.w3.org/1999/xhtml" prefix="foaf: http://xmlns.com/foaf/0.1/ dc: http://purl.org/dc/terms/ xsd: http://www.w3.org/2001/XMLSchema# bibo: http://purl.org/ontology/bibo/">
+  <head>
+    <title>Page 7</title>
+  </head>
+  <body>
+<a itemprop="foo">no href attribute</a>
+<object type="text/html" itemprop="foo">no data attribute</object>
+
+
+   </body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/30/single/xhtml/invalid/ops-mathml-001.xhtml b/src/test/resources/30/single/xhtml/invalid/ops-mathml-001.xhtml
new file mode 100644
index 0000000..e3956b4
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/invalid/ops-mathml-001.xhtml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <title>MathML invalid 001</title>
+    </head>
+    <body>
+        <h1>MathML invalid 001</h1>
+        <section>
+            <h2>Content MathML at block level</h2>
+            <p>...</p>
+            <math xmlns="http://www.w3.org/1998/Math/MathML" alttext="formula">
+                <apply><csymbol cd="arith1">times</csymbol>
+                    <apply><csymbol cd="arith1">plus</csymbol>
+                        <ci>F</ci>
+                        <ci>G</ci>
+                    </apply>
+                    <ci>x</ci>
+                </apply>
+            </math>
+            <p>...</p>
+        </section>
+        <section>
+            <h2>Content MathML at phrasing level</h2>
+            <p>... <math xmlns="http://www.w3.org/1998/Math/MathML" alttext="formula">
+                <cn type="complex-polar"> 2 <sep/> 3.1415 </cn>
+                </math> ... </p>
+        </section>
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/invalid/ops-mathml-002.xhtml b/src/test/resources/30/single/xhtml/invalid/ops-mathml-002.xhtml
new file mode 100644
index 0000000..ed41484
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/invalid/ops-mathml-002.xhtml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" 
+    xmlns:x="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <title>MathML 002 - annotations</title>
+    </head>
+    <body>        
+        <section>
+            <math xmlns="http://www.w3.org/1998/Math/MathML">
+                <semantics>
+                    <mrow>
+                        <mrow><mo>(</mo><mi>a</mi> <mo>+</mo> <mi>b</mi><mo>)</mo></mrow>
+                        <mo>&#x2062;<!--INVISIBLE TIMES--></mo>
+                        <mrow><mo>(</mo><mi>c</mi> <mo>+</mo> <mi>d</mi><mo>)</mo></mrow>
+                    </mrow>
+                    <annotation-xml encoding="MathML-Content">
+                        <apply><and/>
+                            <apply><xor/><ci>a</ci> <ci>b</ci></apply>
+                            <apply><xor/><ci>c</ci> <ci>d</ci></apply>
+                        </apply>
+                    </annotation-xml>
+                </semantics>
+            </math>
+        </section>
+        <section>
+            <math xmlns="http://www.w3.org/1998/Math/MathML">
+                <semantics>
+                    <mrow>
+                        <mrow>
+                            <mi>sin</mi>
+                            <mo>&#x2061;<!--FUNCTION APPLICATION--></mo>
+                            <mfenced><mi>x</mi></mfenced>
+                        </mrow>
+                        <mo>+</mo>
+                        <mn>5</mn>
+                    </mrow>
+                    <annotation-xml cd="mathmlkeys" name="contentequiv" encoding="MathML-Content">
+                        <apply>
+                            <plus/>
+                            <apply><sin/><ci>x</ci></apply>
+                            <cn>5</cn>
+                        </apply>
+                    </annotation-xml>
+                    <annotation encoding="application/x-tex">
+                        \sin x + 5
+                    </annotation>
+                    <annotation-xml encoding="application/xhtml+xml" name="alternate-representation">
+                        <x:p>This annotation cannot contain math (sch test)</x:p>
+                        <apply>
+                            <plus/>
+                            <apply><sin/><ci>x</ci></apply>
+                            <cn>5</cn>
+                        </apply>
+                    </annotation-xml>
+                </semantics>
+            </math>
+        </section>    
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/invalid/prefixes-001.xhtml b/src/test/resources/30/single/xhtml/invalid/prefixes-001.xhtml
new file mode 100644
index 0000000..a6bde73
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/invalid/prefixes-001.xhtml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ssml="http://www.w3.org/2001/10/synthesis" xml:lang="en" lang="en" ssml:alphabet="x-SAMPA"
+xmlns:epub="http://www.idpf.org/2007/ops"
+		epub:prefix="foaf: http://xmlns.com/foaf/spec/
+				dbp:    http://dbpedia.org/ontology/"
+>
+    <head>
+        <title>ssml</title>
+    </head>
+    <body epub:type="bodymatter foaf:valid bdp:invalid invalid">
+        <p ssml:ph="[pra'h-fessah]">Prof.</p>
+        <section ssml:alphabet="ipa">
+            <p ssml:ph="ldskdlklsd">Prof.</p>
+        </section>
+		
+		<ol>
+ <li data-length="2m11s">Beyond The Sea</li>
+</ol>
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/invalid/sch-001.xhtml b/src/test/resources/30/single/xhtml/invalid/sch-001.xhtml
new file mode 100644
index 0000000..22603ee
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/invalid/sch-001.xhtml
@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+    xmlns:epub="http://www.idpf.org/2007/ops" xmlns:ssml="http://www.w3.org/2001/10/synthesis">
+    <head>
+        <title>SCH invalid 001</title>
+        <meta charset="utf-8"/>
+        <meta charset="utf-8"/>
+        <link rel="foo" sizes="any"/>
+    </head>
+    <body id="body">
+        <figure aria-describedby="na1">
+            <p>...</p>
+            <figcaption id="desc"></figcaption>
+        </figure>
+        <div aria-flowto="na2">
+            <p id="flowto">...</p>
+        </div>
+        <div aria-labelledby="na3">
+            <p id="label">...</p>
+        </div>
+        <div aria-owns="na4">
+            <p id="owned">...</p>
+        </div>
+        <div aria-controls="na5">
+            <p id="owned">...</p>
+        </div>
+        <p contextmenu="na6">...</p>
+        <p contextmenu="body">...</p>
+        <menu id="menu"></menu>
+        <label for="na7">...</label>
+        <label for="btn">...</label>
+        <p id="btn">...</p>
+        <label for="inp">...</label>
+        <input id="inp" type="hidden" />
+        <output for="o1">...</output>
+        <p id="o1na">...</p>
+        <output for="o2 o3">...</output>
+        <p id="o2na">...</p>
+        <p id="o3na">...</p>
+        <output for="o4 o5 o6">...</output>
+        <p id="o4">...</p>
+        <p id="o5">...</p>
+        <p id="o6na">...</p>
+        <input list="datalist" />
+        <datalist id="datalistna">...</datalist>
+        <input form="form1" />
+        <form id="form1na"></form>
+        <table>
+            <tr>
+                <th colspan="2" id="th1">...</th>
+            </tr>
+            <tr>
+                <th id="th2">...</th>
+                <th id="th3">...</th>
+            </tr>
+            <tr>
+                <td headers="th2na th1na"></td>
+            </tr>
+            <tr>
+                <td headers="th3na"></td>
+            </tr>
+        </table>
+        <table>
+            <tr>
+                <td headers="th1 th2"></td>
+            </tr>
+        </table>
+        <form>
+            <form></form>
+        </form>
+        <progress>
+            <progress></progress>
+        </progress>
+        <meter value="10">
+            <meter value="10"></meter>
+        </meter>
+        <dfn>
+            <dfn>...</dfn>
+        </dfn>
+        <time>
+            <time>...</time>
+        </time>
+        <bdo>...</bdo>
+        <table>
+            <caption>
+                <table></table>
+            </caption>
+        </table>
+        <header>
+            <header>...</header>
+        </header>
+        <header>
+            <footer>...</footer>
+        </header>
+        <footer>
+            <footer>...</footer>
+        </footer>
+        <footer>
+            <header>...</header>
+        </footer>
+        <a>
+            <a></a>
+        </a>
+        <map name="map1"></map>
+        <area shape="default" />
+        <map name="map1"></map>
+        <p lang="en" xml:lang="de"></p>
+        <select>
+            <option selected="selected"></option>
+            <option selected="selected"></option>
+        </select>
+        <video src="video.avi">
+            <track src="te" label="label" default="default"></track>
+            <track src="st" label="" default="default"></track>
+        </video>
+        <p ssml:ph="...">
+            <span ssml:ph="...">...</span>
+            <span ssml:ph="...">...</span>
+        </p>
+        <aside epub:type="practice">...</aside>
+        
+        
+        <!-- xref -->
+        <math xmlns="http://www.w3.org/1998/Math/MathML">
+            <semantics>
+                <mrow id="E">
+                    <mrow id="E.1">
+                        <mo id="E.1.1">(</mo>
+                        <mi id="E.1.2">a</mi>
+                        <mo id="E.1.3">+</mo>
+                        <mi id="E.1.4">b</mi>
+                        <mo id="E.1.5">)</mo>
+                    </mrow>
+                    <mo id="E.2">&#x2062;<!--INVISIBLE TIMES--></mo>
+                    <mrow id="E.3">
+                        <mo id="E.3.1">(</mo>
+                        <mi id="E.3.2">c</mi>
+                        <mo id="E.3.3">+</mo>
+                        <mi id="E.3.4">d</mi>
+                        <mo id="E.3.5">)</mo>
+                    </mrow>
+                </mrow>
+
+                <annotation-xml encoding="MathML-Content">
+                    <apply xref="Ena">
+                        <and xref="E.2"></and>
+                        <apply xref="E.1">
+                            <xor xref="E.1.3"></xor>
+                            <ci xref="E.1.2na">a</ci>
+                            <ci xref="E.1.4">b</ci>
+                        </apply>
+                        <apply xref="E.3">
+                            <xor xref="E.3.3"></xor>
+                            <ci xref="E.3.2">c</ci>
+                            <ci xref="E.3.4na">d</ci>
+                        </apply>
+                    </apply>
+                </annotation-xml>
+            </semantics>
+        </math>
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/invalid/ssml-empty-ph.xhtml b/src/test/resources/30/single/xhtml/invalid/ssml-empty-ph.xhtml
new file mode 100644
index 0000000..6344456
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/invalid/ssml-empty-ph.xhtml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ssml="http://www.w3.org/2001/10/synthesis" xml:lang="en" lang="en" ssml:alphabet="x-SAMPA">
+    <head>
+        <title>ssml: empty ph and whitespace only ph</title>
+    </head>
+    <body>
+        <p ssml:alphabet="ipa">The title of the movie is: 
+    <span ssml:ph=" "></span>
+    <!-- 
+    "&#x02C8;l&#x0251; &#x02C8;vi&#x02D0;&#x027E;&#x0259;
+     &#x02C8;&#x0294;e&#x026A; &#x02C8;b&#x025B;l&#x0259;" --> 
+    (Life is beautiful), which is directed by 
+    <span ssml:ph="">Roberto Benigni</span>.
+    <!-- 
+    "&#x0279;&#x0259;&#x02C8;b&#x025B;&#x02D0;&#x0279;&#x027E;o&#x028A;
+     b&#x025B;&#x02C8;ni&#x02D0;nji" --> </p>
+        
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/invalid/style-001.xhtml b/src/test/resources/30/single/xhtml/invalid/style-001.xhtml
new file mode 100644
index 0000000..6bc6c90
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/invalid/style-001.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <title>Style 001</title>
+        <style>
+            body {:black;}
+        </style>        
+    </head>
+    <body>
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/invalid/styleAttr001.xhtml b/src/test/resources/30/single/xhtml/invalid/styleAttr001.xhtml
new file mode 100644
index 0000000..aa5763d
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/invalid/styleAttr001.xhtml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+    </head>
+    <body>
+    <p style="blue">BLUE</p>
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/invalid/svg-001.xhtml b/src/test/resources/30/single/xhtml/invalid/svg-001.xhtml
new file mode 100644
index 0000000..7dfda2f
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/invalid/svg-001.xhtml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <!-- no svg descendants of svg:title, value of foreignObject at requiredExtensions -->
+    <head>
+        <title>SVG 001 - OPS content model injections</title>
+    </head>
+    <body>
+        <section>
+            <p>...</p>
+            <svg xmlns="http://www.w3.org/2000/svg" width="12cm" height="4cm" viewBox="0 0 1200 400" version="1.1">                
+                <title>Title <svg></svg></title>    
+                <desc>Example rect01 - rectangle with sharp corners</desc>
+                    <!-- Show outline of canvas using 'rect' element -->
+                    <rect x="1" y="1" width="1198" height="398"
+                        fill="none" stroke="blue" stroke-width="2"/>
+                    <rect x="400" y="100" width="400" height="200"
+                        fill="yellow" stroke="navy" stroke-width="10"  />                
+            </svg>
+            <svg width="12cm" height="4cm" viewBox="0 0 1200 400" xmlns="http://www.w3.org/2000/svg" version="1.1" >
+                <desc>Example rect02 - rounded rectangles</desc>
+                <!-- Show outline of canvas using 'rect' element -->
+                <rect x="1" y="1" width="1198" height="398"
+                    fill="none" stroke="blue" stroke-width="2"/>
+                <rect x="100" y="100" width="400" height="200" rx="50"
+                    fill="green" />
+                <g transform="translate(700 210) rotate(-30)">
+                    <rect x="0" y="0" width="400" height="200" rx="50"
+                        fill="none" stroke="purple" stroke-width="30" />
+                </g>
+                <foreignObject width="123" height="123" requiredExtensions="http://example.com">
+                    
+                </foreignObject>
+            </svg>
+            <p>...</p>
+        </section>
+        
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/invalid/switch-001.xhtml b/src/test/resources/30/single/xhtml/invalid/switch-001.xhtml
new file mode 100644
index 0000000..e2a5926
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/invalid/switch-001.xhtml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+    xmlns:epub="http://www.idpf.org/2007/ops">
+    <head>
+        <title>switch invalid</title>
+    </head>
+    <body>
+        <epub:switch id="mathmlSwitch">
+            <epub:case required-namespace="http://www.w3.org/1998/Math/MathML">
+                <math xmlns="http://www.w3.org/1998/Math/MathML" alttext="formula">
+                    <mrow>
+                        <mn>2</mn>
+                        <mo>xxxxx</mo>
+                        <mi>x</mi>
+                    </mrow>
+                    <mrow>
+                        <mo>+</mo>
+                        <mi>y</mi>
+                        <mo>-</mo>
+                        <mi>z</mi>
+                    </mrow>
+                </math>
+            </epub:case>
+        </epub:switch>
+        
+        <epub:switch id="cmlSwitch">
+            <epub:default>
+                <p>H<sub>2</sub>SO<sub>4</sub></p>
+            </epub:default>
+        </epub:switch>
+        
+        <p>
+            <epub:switch id="inline">
+                <epub:case required-namespace="http://www.example.org/inline"
+                    xmlns:foo="http://www.example.org/inline"> foo <foo:span>bar</foo:span> <em>baz</em> </epub:case>
+                <epub:default
+                    > foo <span>bar</span> <em>baz</em> </epub:default>
+                <epub:default
+                    > foo <span>bar</span> <em>baz</em> </epub:default>
+            </epub:switch>
+        </p>
+        
+        <p>
+            <epub:switch id="inline">
+                <epub:default
+                    > foo <span>bar</span> <em>baz</em> </epub:default>                
+                <epub:case required-namespace="http://www.example.org/inline"
+                    xmlns:foo="http://www.example.org/inline"> foo <foo:span>bar</foo:span> <em>baz</em> </epub:case>
+            </epub:switch>
+        </p>
+        
+        <p>
+            <epub:switch id="inline">
+                <epub:case 
+                    xmlns:foo="http://www.example.org/inline"> foo <foo:span>bar</foo:span> <em>baz</em> </epub:case>
+                <epub:default
+                    > foo <span>bar</span> <em>baz</em> </epub:default>
+            </epub:switch>
+        </p>
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/invalid/trigger.xhtml b/src/test/resources/30/single/xhtml/invalid/trigger.xhtml
new file mode 100644
index 0000000..09c12d7
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/invalid/trigger.xhtml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml"
+    xmlns:epub="http://www.idpf.org/2007/ops"    
+    xmlns:ev="http://www.w3.org/2001/xml-events">
+    <head>
+        <epub:trigger ev:observer="pause" ev:event="click" action="pause" ref="natest"/>
+        <epub:trigger ev:observer="naresume" ev:event="click" action="resume" ref="test"/>
+        <epub:trigger ev:observer="mute" ev:event="click" action="mute" ref="test"/>
+        <epub:trigger ev:observer="mute" ev:event="click" action="show" ref="muted"/>
+        <epub:trigger ev:observer="unmute" ev:event="click" action="unmute" ref="test"/>
+        <epub:trigger ev:observer="unmute" ev:event="click" action="hide" ref="muted"/>
+    </head>
+    <body>
+        <video id="test" src="birds.mp4" width="320" height="240" poster="test.jpg"/>
+        <p>
+            <span class="button" id="resume">Play/Resume</span>
+            <span class="button" id="pause">Pause</span>
+            <span class="button" id="mute">Mute</span>
+            <span class="button" id="unmute">Unmute</span>
+            <span id="muted">MUTED</span>
+        </p>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/30/single/xhtml/invalid/xml11.xhtml b/src/test/resources/30/single/xhtml/invalid/xml11.xhtml
new file mode 100644
index 0000000..687fe45
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/invalid/xml11.xhtml
@@ -0,0 +1,7 @@
+<?xml version="1.1"?>
+<!-- elements are in the HTML namespace, in this case by default -->
+<html xmlns='http://www.w3.org/1999/xhtml'>
+  <head><title>Frobnostication</title></head>
+  <body><p>Moved to 
+    <a href='http://frob.example.com'>here</a>.</p></body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/30/single/xhtml/valid/aria-describedAt.xhtml b/src/test/resources/30/single/xhtml/valid/aria-describedAt.xhtml
new file mode 100644
index 0000000..d469654
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/aria-describedAt.xhtml
@@ -0,0 +1,8 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <title>aria-describedAt</title>
+  </head>
+  <body>
+	<div aria-describedat="http://example.com"></div>
+   </body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/30/single/xhtml/valid/canvas.xhtml b/src/test/resources/30/single/xhtml/valid/canvas.xhtml
new file mode 100644
index 0000000..347eac6
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/canvas.xhtml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ssml="http://www.w3.org/2001/10/synthesis" xml:lang="en" lang="en" ssml:alphabet="x-SAMPA">
+    <head>
+        <title>ssml</title>
+    </head>
+    <body>
+<canvas id="example" width="200" height="200">
+<object type="bla/sibla">
+<canvas id="example2" width="200" height="200"/>
+</object>
+This text is displayed if your browser does not support HTML5 Canvas.
+</canvas>
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/custom-ns-attrs.xhtml b/src/test/resources/30/single/xhtml/valid/custom-ns-attrs.xhtml
new file mode 100644
index 0000000..5c1fc6c
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/custom-ns-attrs.xhtml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:foo="http://www.example.org/2001/10/#" xml:lang="en" lang="en">
+    <head>
+        <title>3.0.1 custom attributes</title>
+    </head>
+    <body>
+        <p foo:bar="baz">custom attribute!</p>
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/data.xhtml b/src/test/resources/30/single/xhtml/valid/data.xhtml
new file mode 100644
index 0000000..eaf6663
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/data.xhtml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ssml="http://www.w3.org/2001/10/synthesis" xml:lang="en" lang="en" ssml:alphabet="x-SAMPA">
+    <head>
+        <title>ssml</title>
+    </head>
+    <body>
+        <p ssml:ph="[pra'h-fessah]">Prof.</p>
+        <section ssml:alphabet="ipa">
+            <p ssml:ph="ldskdlklsd">Prof.</p>
+        </section>
+		
+		<ol>
+ <li data-length="2m11s">Beyond The Sea</li>
+</ol>
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/doctype-1.xhtml b/src/test/resources/30/single/xhtml/valid/doctype-1.xhtml
new file mode 100644
index 0000000..9c52530
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/doctype-1.xhtml
@@ -0,0 +1,23 @@
+<!DOCTYPE html>	 
+<html xmlns="http://www.w3.org/1999/xhtml">
+    <head>
+        <title></title>
+    </head>
+    <body>
+    
+        <math xmlns="http://www.w3.org/1998/Math/MathML">
+            <semantics>
+                <mfrac>
+                    <msqrt>
+                        <mtext>a</mtext>
+                    </msqrt>
+                    <mi>b</mi>
+                </mfrac>
+                <annotation-xml encoding="application/xhtml+xml" name="alternate-representation">
+                    <span xmlns="http://www.w3.org/1999/xhtml">square root of a divided by the value
+                        of b</span>
+                </annotation-xml>
+            </semantics>
+        </math>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/30/single/xhtml/valid/doctype-2.xhtml b/src/test/resources/30/single/xhtml/valid/doctype-2.xhtml
new file mode 100644
index 0000000..3eaf24e
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/doctype-2.xhtml
@@ -0,0 +1,23 @@
+<!DOCTYPE html SYSTEM "about:legacy-compat">	 
+<html xmlns="http://www.w3.org/1999/xhtml">
+    <head>
+        <title></title>
+    </head>
+    <body>
+    
+        <math xmlns="http://www.w3.org/1998/Math/MathML">
+            <semantics>
+                <mfrac>
+                    <msqrt>
+                        <mtext>a</mtext>
+                    </msqrt>
+                    <mi>b</mi>
+                </mfrac>
+                <annotation-xml encoding="application/xhtml+xml" name="alternate-representation">
+                    <span xmlns="http://www.w3.org/1999/xhtml">square root of a divided by the value
+                        of b</span>
+                </annotation-xml>
+            </semantics>
+        </math>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/30/single/xhtml/valid/edits-001.xhtml b/src/test/resources/30/single/xhtml/valid/edits-001.xhtml
new file mode 100644
index 0000000..75fa977
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/edits-001.xhtml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <title>Forms 001</title>
+    </head>
+    <body>
+        <aside>
+            <ins>
+                <p> I like fruit. </p>
+            </ins>
+        </aside>
+        <aside>
+            <ins>
+                Apples are <em>tasty</em>.
+            </ins>
+            <ins>
+                So are pears.
+            </ins>
+        </aside>
+        <aside>
+            <ins datetime="2005-03-16T00:00Z">
+                <p> I like fruit. </p>
+            </ins>
+            <ins datetime="2005-03-16T00:00Z">
+                Apples are <em>tasty</em>.
+            </ins>
+            <ins datetime="2007-12-19T00:00Z">
+                So are pears.
+            </ins>
+        </aside>
+        <h1>To Do</h1>
+        <ul>
+            <li>Empty the dishwasher</li>
+            <li><del datetime="2009-10-11T01:25-07:00">Watch Walter Lewin's lectures</del></li>
+            <li><del datetime="2009-10-10T23:38-07:00">Download more tracks</del></li>
+            <li>Buy a printer</li>
+        </ul>
+        <section>
+            <ins>
+                <p>
+                    This is a paragraph that was inserted.
+                </p>
+                This is another paragraph whose first sentence was inserted
+                at the same time as the paragraph above.
+            </ins>
+            This is a second sentence, which was there all along.
+        </section>
+        <section>
+            <p>This is the first paragraph. <del>This sentence was
+                deleted.</del></p>
+            <p><del>This sentence was deleted too.</del> That
+                sentence needed a separate <del> element.</p>
+        </section>
+        <h1>Stop-ship bugs</h1>
+        <ol>
+            <li><ins datetime="2008-02-12T15:20Z">Bug 225:
+                Rain detector doesn't work in snow</ins></li>
+            <li><del datetime="2008-03-01T20:22Z"><ins datetime="2008-02-14T12:02Z">Bug 228:
+                Water buffer overflows in April</ins></del></li>
+            <li><ins datetime="2008-02-16T13:50Z">Bug 230:
+                Water heater doesn't use renewable fuels</ins></li>
+            <li><del datetime="2008-02-20T21:15Z"><ins datetime="2008-02-16T14:25Z">Bug 232:
+                Carbon dioxide emissions detected after startup</ins></del></li>
+        </ol>
+        <h1>List of <del>fruits</del><ins>colors</ins></h1>
+        <ul>
+            <li><del>Lime</del><ins>Green</ins></li>
+            <li><del>Apple</del></li>
+            <li>Orange</li>
+            <li><del>Pear</del></li>
+            <li><ins>Teal</ins></li>
+            <li><del>Lemon</del><ins>Yellow</ins></li>
+            <li>Olive</li>
+            <li><ins>Purple</ins></li>
+        </ul>
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/embed-001.xhtml b/src/test/resources/30/single/xhtml/valid/embed-001.xhtml
new file mode 100644
index 0000000..42e6c7c
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/embed-001.xhtml
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <title>Forms 001</title>
+    </head>
+    <body>
+        <p>I lived in <img src="carouge.svg" alt="" /> Carouge.</p>
+        <p><img src="carouge.svg" alt="The coat of arms depicts a lion, sitting in front of a tree."
+             /></p>
+        <h1>Pick your color</h1>
+        <ul>
+            <li><a href="green.html"><img src="green.jpeg" alt="Green" /></a></li>
+            <li><a href="blue.html"><img src="blue.jpeg" alt="Blue" /></a></li>
+            <li><a href="red.html"><img src="red.jpeg" alt="Red" /></a></li>
+        </ul>
+        <article>
+            <h1>I got my own magazine!</h1>
+            <p>After much effort, I've finally found a publisher, and so now I have my own magazine!
+                Isn't that awesome?! The first issue will come out in September, and we have
+                articles about getting food, and about getting in boxes, it's going to be great!</p>
+            <footer>
+                <p>Written by <a href="/users/cap">cap</a>. <time pubdate=""
+                        >2009-08-21T23:32Z</time></p>
+            </footer>
+            <article>
+                <footer> At <time pubdate="">2009-08-21T23:35Z</time>, <a href="/users/ch">ch</a>
+                    writes: </footer>
+                <iframe seamless="seamless" sandbox=""
+                    srcdoc="<p>did you get a cover picture yet?</p>"></iframe>
+            </article>
+            <article>
+                <footer> At <time pubdate="">2009-08-21T23:44Z</time>, <a href="/users/cap">cap</a>
+                    writes: </footer>
+                <iframe seamless="seamless" sandbox=""
+                    srcdoc="<p>Yeah, you can see it <a href="/gallery?mode=cover&amp;page=1">in my gallery</a>."
+                ></iframe>
+            </article>
+            <article>
+                <footer> At <time pubdate="">2009-08-21T23:58Z</time>, <a href="/users/ch">ch</a>
+                    writes: </footer>
+                <iframe seamless="seamless" sandbox=""
+                    srcdoc="<p>hey that's earl's table.
+                    <p>you should get earl&amp;me on the next cover."
+                ></iframe>
+            </article>
+        </article>
+        <embed src="catgame.swf"></embed>
+        <figure>
+            <object type="application/x-java-applet">
+                <param name="code" value="MyJavaClass" />
+                <p>You do not have Java available, or it is disabled.</p>
+            </object>
+            <figcaption>My Java Clock</figcaption>
+        </figure>
+        <p>Look at my video: <object type="application/x-shockwave-flash">
+                <param name="movie" value="http://video.example.com/library/watch.swf" />
+                <param name="allowfullscreen" value="true" />
+                <param name="flashvars" value="http://video.example.com/vids/315981" />
+                <video controls="controls" src="http://video.example.com/vids/315981" poster="test.jpg">
+                    <a href="http://video.example.com/vids/315981">View video</a>. </video>
+            </object>
+        </p>
+        <p><video src="tgif.vid" autoplay="autoplay" controls="controls" onerror="failed(event)" poster="test.jpg"
+            ></video></p>
+        <p><a href="tgif.vid">Download the video file</a>.</p>
+        <video controls="controls" autoplay="autoplay" poster="test.jpg">
+            <source src="video.mp4" type="video/mp4; codecs="avc1.42E01E, mp4a.40.2""></source>
+            <source src="video.ogv" type="video/ogg; codecs="theora, vorbis""
+                onerror="fallback(parentNode)"></source> ... </video>
+        <video src="brave.webm" poster="test.jpg">
+            <track kind="subtitles" src="brave.en.vtt" srclang="en" label="English"></track>
+            <track kind="captions" src="brave.en.vtt" srclang="en"
+                label="English for the Hard of Hearing"></track>
+            <track kind="subtitles" src="brave.fr.vtt" srclang="fr" label="Français"></track>
+            <track kind="subtitles" src="brave.de.vtt" srclang="de" label="Deutsch"></track>
+        </video>
+        <video src="adverts.cgi?kind=video" controls="controls" autoplay="autoplay" loop="loop"
+            muted="" poster="test.jpg"></video>
+        <map name="nav"></map>
+        <p> Please select a shape: <img src="shapes.png" usemap="#shapes"
+                alt="Four shapes are available: a red hollow box, a green circle, a blue triangle, and a yellow four-pointed star." />
+            <map name="shapes">
+                <area shape="rect" coords="50,50,100,100" />
+                <!-- the hole in the red box -->
+                <area shape="rect" coords="25,25,125,125" href="red.html" alt="Red box." />
+                <area shape="circle" coords="200,75,50" href="green.html" alt="Green circle." />
+                <area shape="poly" coords="325,25,262,125,388,125" href="blue.html"
+                    alt="Blue triangle." />
+                <area shape="poly" coords="450,25,435,60,400,75,435,90,450,125,465,90,500,75,465,60"
+                    href="yellow.html" alt="Yellow star." />
+            </map>
+        </p>
+        <audio src="a.wav">
+            Your System doesn't support audio!
+        </audio>
+        <video src="foo.ogg" muted="muted" poster="test.jpg"></video>
+        
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/forms-001.xhtml b/src/test/resources/30/single/xhtml/valid/forms-001.xhtml
new file mode 100644
index 0000000..a1f779f
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/forms-001.xhtml
@@ -0,0 +1,363 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <title>Forms 001</title>
+    </head>
+    <body>
+        <form>
+            <p><label>Customer name: <input /></label></p>
+            <p><label>Telephone: <input type="tel" /></label></p>
+            <p><label>E-mail address: <input type="email" /></label></p>
+            <fieldset>
+                <legend> Pizza Size </legend>
+                <p><label>
+                        <input type="radio" name="size" /> Small </label></p>
+                <p><label>
+                        <input type="radio" name="size" /> Medium </label></p>
+                <p><label>
+                        <input type="radio" name="size" /> Large </label></p>
+            </fieldset>
+            <fieldset>
+                <legend> Pizza Toppings </legend>
+                <p><label>
+                        <input type="checkbox" /> Bacon </label></p>
+                <p><label>
+                        <input type="checkbox" /> Extra Cheese </label></p>
+                <p><label>
+                        <input type="checkbox" /> Onion </label></p>
+                <p><label>
+                        <input type="checkbox" /> Mushroom </label></p>
+            </fieldset>
+            <p><label>Preferred delivery time: <input type="time" min="11:00" max="21:00" step="900"
+                     /></label></p>
+            <p><label>Delivery instructions: <textarea></textarea></label></p>
+            <p><button>Submit order</button></p>
+        </form>
+        
+        <form method="post" enctype="application/x-www-form-urlencoded"
+            action="https://pizza.example.com/order.cgi">
+            <p><label>Customer name: <input name="custname" required="required" /></label></p>
+            <p><label>Telephone: <input type="tel" name="custtel" /></label></p>
+            <p><label>E-mail address: <input type="email" name="custemail" /></label></p>
+            <fieldset>
+                <legend> Pizza Size </legend>
+                <p><label>
+                        <input type="radio" name="size" value="small" /> Small </label></p>
+                <p><label>
+                        <input type="radio" name="size" value="medium" /> Medium </label></p>
+                <p><label>
+                        <input type="radio" name="size" value="large" /> Large </label></p>
+            </fieldset>
+            <fieldset>
+                <legend> Pizza Toppings </legend>
+                <p><label>
+                        <input type="checkbox" name="topping" value="bacon" /> Bacon </label></p>
+                <p><label>
+                        <input type="checkbox" name="topping" value="cheese" /> Extra Cheese
+                    </label></p>
+                <p><label>
+                        <input type="checkbox" name="topping" value="onion" /> Onion </label></p>
+                <p><label>
+                        <input type="checkbox" name="topping" value="mushroom" /> Mushroom
+                    </label></p>
+            </fieldset>
+            <p><label>Preferred delivery time: <input type="time" min="11:00" max="21:00" step="900"
+                        name="delivery" required="required" /></label></p>
+            <p><label>Delivery instructions: <textarea name="comments" maxlength="1000"
+                    ></textarea></label></p>
+            <p><button>Submit order</button></p>
+        </form>
+        <form action="http://www.google.com/search" method="get">
+            <label>Google: <input type="search" name="q" /></label>
+            <input type="submit" value="Search..." />
+        </form>
+        <form action="http://www.bing.com/search" method="get">
+            <label>Bing: <input type="search" name="q" /></label>
+            <input type="submit" value="Search..." />
+        </form>
+        <fieldset name="clubfields" disabled="disabled">
+            <legend>
+                <label>
+                    <input type="checkbox" name="club"
+                        onchange="form.clubfields.disabled = !checked" /> Use Club Card </label>
+            </legend>
+            <p><label>Name on card: <input name="clubname" required="required" /></label></p>
+            <fieldset name="numfields">
+                <legend>
+                    <label>
+                        <input type="radio" checked="checked" name="clubtype"
+                            onchange="form.numfields.disabled = !checked" /> My card has numbers on
+                        it </label>
+                </legend>
+                <p><label>Card number: <input name="clubnum" required="required" pattern="[-0-9]+"
+                         /></label></p>
+            </fieldset>
+            <fieldset name="letfields" disabled="disabled">
+                <legend>
+                    <label>
+                        <input type="radio" name="clubtype"
+                            onchange="form.letfields.disabled = !checked" /> My card has letters on
+                        it </label>
+                </legend>
+                <p><label>Card code: <input name="clublet" required="required" pattern="[A-Za-z]+"
+                         /></label></p>
+            </fieldset>
+        </fieldset>
+        <p><label>Full name: <input name="fn" />
+                <small>Format: First Last</small></label></p>
+        <p><label>Age: <input name="age" type="number" min="0" /></label></p>
+        <p><label>Post code: <input name="pc" />
+                <small>Format: AB12 3CD</small></label></p>
+        <input type="url" name="location" list="urls" />
+        <datalist id="urls">
+            <option label="MIME: Format of Internet Message Bodies"
+                value="http://tools.ietf.org/html/rfc2045"></option>
+            <option label="HTML 4.01 Specification" value="http://www.w3.org/TR/html4/"></option>
+            <option label="Form Controls"
+                value="http://www.w3.org/TR/xforms/slice8.html#ui-commonelems-hint"></option>
+            <option label="Scalable Vector Graphics (SVG) 1.1 Specification"
+                value="http://www.w3.org/TR/SVG/"></option>
+            <option label="Feature Sets - SVG 1.1 - 20030114"
+                value="http://www.w3.org/TR/SVG/feature.html"></option>
+            <option label="The Single UNIX Specification, Version 3"
+                value="http://www.unix-systems.org/version3/"></option>
+        </datalist>
+        <input type="range" min="-100" max="100" value="0" step="10" name="power" list="powers" />
+        <datalist id="powers">
+            <option value="0"></option>
+            <option value="-30"></option>
+            <option value="30"></option>
+            <option value="+50"></option>
+        </datalist>
+        <p>
+            <label> Enter a breed: <input type="text" name="breed" list="breeds" />
+            </label>
+            <datalist id="breeds">
+                <label> or select one from the list: <select name="breed">
+                        <option value=""> (none selected)</option>
+                        <option>Abyssinian</option>
+                        <option>Alpaca</option>
+                        <!-- ... -->
+                    </select>
+                </label>
+            </datalist>
+        </p>
+        <form action="products.cgi" method="post" enctype="multipart/form-data">
+            <table>
+                <tr>
+                    <th> Product ID</th>
+                    <th> Product name </th>
+                    <th> Price </th>
+                    <th> Action</th>
+                </tr>
+                <tr>
+                    <td>
+                        <input readonly="readonly" name="1.pid" value="H412" /></td>
+                    <td>
+                        <input required="required" name="1.pname" value="Floor lamp Ulke" />
+                    </td>
+                    <td> $<input required="required" type="number" min="0" step="0.01"
+                            name="1.pprice" value="49.99" /></td>
+                    <td>
+                        <button formnovalidate="formnovalidate" name="action" value="delete:1"
+                            >Delete</button></td>
+                </tr>
+                <tr>
+                    <td>
+                        <input readonly="readonly" name="2.pid" value="FG28" /></td>
+                    <td>
+                        <input required="required" name="2.pname" value="Table lamp Ulke" /></td>
+                    <td> $<input required="required" type="number" min="0" step="0.01"
+                            name="2.pprice" value="24.99" /></td>
+                    <td>
+                        <button formnovalidate="formnovalidate" name="action" value="delete:2"
+                            >Delete</button></td>
+                </tr>
+                <tr>
+                    <td>
+                        <input required="required" name="3.pid" value="" pattern="[A-Z0-9]+" /></td>
+                    <td>
+                        <input required="required" name="3.pname" value="" /></td>
+                    <td> $<input required="required" type="number" min="0" step="0.01"
+                            name="3.pprice" value="23" /></td>
+                    <td>
+                        <button formnovalidate="formnovalidate" name="action" value="delete:3"
+                            >Delete</button></td>
+                </tr>
+            </table>
+            <p>
+                <button formnovalidate="formnovalidate" name="action" value="add">Add</button>
+            </p>
+            <p>
+                <button name="action" value="update">Save</button>
+            </p>
+        </form>
+        <fieldset>
+            <legend>Mail Account</legend>
+            <p><label>Name: <input type="text" name="fullname" placeholder="John Ratzenberger"
+                     /></label></p>
+            <p><label>Address: <input type="email" name="address" placeholder="john at example.net"
+                     /></label></p>
+            <p><label>Password: <input type="password" name="password" /></label></p>
+            <p><label>Description: <input type="text" name="desc" placeholder="My Email Account"
+                     /></label></p>
+        </fieldset>
+        <button type="button"
+            onclick="alert('This 15-20 minute piece was composed by George Gershwin.')"> Show hint </button>
+        <p>
+            <label for="allowedunits">Select unit types to enable on this map:</label>
+            <select id="allowedunits" name="allowedunits" multiple="multiple">
+                <option value="1" selected="selected"> Miner </option>
+                <option value="2" selected="selected"> Puffer </option>
+                <option value="3" selected="selected"> Snipey </option>
+                <option value="4" selected="selected"> Max </option>
+                <option value="5" selected="selected"> Firebot </option>
+            </select>
+        </p>
+        <form action="courseselector.dll" method="get">
+            <p>Which course would you like to watch today?</p>
+            <p><label>Course: <select name="c">
+                        <optgroup label="8.01 Physics I: Classical Mechanics">
+                            <option value="8.01.1">Lecture 01: Powers of Ten</option>
+                            <option value="8.01.2">Lecture 02: 1D Kinematics</option>
+                            <option value="8.01.3">Lecture 03: Vectors</option>
+                        </optgroup>
+                        <optgroup label="8.02 Electricity and Magnestism">
+                            <option value="8.02.1">Lecture 01: What holds our world
+                                together?</option>
+                            <option value="8.02.2">Lecture 02: Electric Field</option>
+                            <option value="8.02.3">Lecture 03: Electric Flux</option>
+                        </optgroup>
+                        <optgroup label="8.03 Physics III: Vibrations and Waves">
+                            <option value="8.03.1">Lecture 01: Periodic Phenomenon</option>
+                            <option value="8.03.2">Lecture 02: Beats</option>
+                            <option value="8.03.3">Lecture 03: Forced Oscillations with
+                                Damping</option>
+                        </optgroup>
+                    </select>
+                </label></p>
+            <p><input type="submit" value="▶ Play" /></p>
+        </form>
+        <p>If you have any comments, please let us know (you may use either English or Hebrew for
+            your comments): <textarea cols="80" name="comments" dirname="comments.dir"
+            ></textarea></p>
+        <p>If you have any comments, please let us know (you may use either English or Hebrew for
+            your comments): <textarea cols="80" wrap="hard" name="comments" dirname="comments.dir"
+                ></textarea></p>
+        
+        <textarea cols="80"  wrap="hard" rows="10" name="comments"></textarea>
+        
+        <form action="processkey.cgi" method="post" enctype="multipart/form-data">
+            <p><keygen name="key"></keygen></p>
+            <p><input type="submit" value="Submit key..." /></p>
+        </form>
+        <form onsubmit="return false" oninput="o.value = a.valueAsNumber + b.valueAsNumber">
+            <input name="a" type="number" step="any"/> +
+                <input name="b" type="number" step="any"/> =
+                <output name="o"></output>
+        </form>
+        <section>
+            <h2>Task Progress</h2>
+            <p>Progress: <progress id="p" max="100"><span>0</span>%</progress></p>
+        </section>
+        <dl>
+            <dt>Radius:</dt>
+            <dd>
+                <meter min="0" max="20" value="12" title="centimeters">12cm</meter></dd>
+            <dt>Height:</dt>
+            <dd>
+                <meter min="0" max="10" value="2" title="centimeters">2cm</meter></dd>
+        </dl>
+        <form action="/find.cgi" method="post" enctype="multipart/form-data">
+            <input type="text" name="t" />
+            <input type="search" name="q" />
+            <input type="submit" />
+        </form>
+        <section class="progress window">
+            <h1>Copying "Really Achieving Your Childhood Dreams"</h1>
+            <details>
+                <summary>Copying... <progress max="375505392" value="97543282"></progress>
+                    25%</summary>
+                <dl>
+                    <dt>Transfer rate:</dt>
+                    <dd>452KB/s</dd>
+                    <dt>Local filename:</dt>
+                    <dd>/home/rpausch/raycd.m4v</dd>
+                    <dt>Remote filename:</dt>
+                    <dd>/var/www/lectures/raycd.m4v</dd>
+                    <dt>Duration:</dt>
+                    <dd>01:16:27</dd>
+                    <dt>Color profile:</dt>
+                    <dd>SD (6-1-6)</dd>
+                    <dt>Dimensions:</dt>
+                    <dd>320×240</dd>
+                </dl>
+            </details>
+            <details>
+                <summary><label for="fn">Name & Extension:</label></summary>
+                <p><input type="text" id="fn" name="fn" value="Pillar Magazine.pdf" /></p>
+                <p><label><input type="checkbox" name="ext" checked="checked" /> Hide
+                        extension</label></p>
+            </details>
+            <menu type="toolbar">
+                <command type="radio" radiogroup="alignment" checked="checked" label="Left"
+                    icon="icons/alL.png" onclick="setAlign('left')"></command>
+                <command type="radio" radiogroup="alignment" label="Center" icon="icons/alC.png"
+                    onclick="setAlign('center')"></command>
+                <command type="radio" radiogroup="alignment" label="Right" icon="icons/alR.png"
+                    onclick="setAlign('right')"></command>
+                <hr />
+                <command type="command" disabled="disabled" label="Publish" icon="icons/pub.png"
+                    onclick="publish()"></command>
+            </menu>
+            
+            <menu type="toolbar">
+                <li>
+                    <menu label="File">
+                        <button type="button" onclick="fnew()">New...</button>
+                        <button type="button" onclick="fopen()">Open...</button>
+                        <button type="button" onclick="fsave()">Save</button>
+                        <button type="button" onclick="fsaveas()">Save as...</button>
+                    </menu>
+                </li>
+                <li>
+                    <menu label="Edit">
+                        <button type="button" onclick="ecopy()">Copy</button>
+                        <button type="button" onclick="ecut()">Cut</button>
+                        <button type="button" onclick="epaste()">Paste</button>
+                    </menu>
+                </li>
+                <li>
+                    <menu label="Help">
+                        <li><a href="help.html">Help</a></li>
+                        <li><a href="about.html">About</a></li>
+                    </menu>
+                </li>
+            </menu>
+            
+            <form action="redirect.cgi">
+                <menu type="toolbar">
+                    <label for="goto">Go to...</label>
+                    <menu label="Go">
+                        <select id="goto">
+                            <option value="" selected="selected"> Select site: </option>
+                            <option value="http://www.apple.com/"> Apple </option>
+                            <option value="http://www.mozilla.org/"> Mozilla </option>
+                            <option value="http://www.opera.com/"> Opera </option>
+                        </select>
+                        <span><input type="submit" value="Go"/></span>
+                    </menu>
+                </menu>
+            </form>
+            <form name="npc">
+                <label>Character name: <input name="char" type="text" contextmenu="namemenu" required="required"/></label>
+                    <menu type="context" id="namemenu">
+                        <command label="Pick random name" onclick="document.forms.npc.elements.char.value = getRandomName()"/>
+                        <command label="Prefill other fields based on name" onclick="prefillFields(document.forms.npc.elements.char.value)"/>
+                    </menu>
+            </form>
+        </section>
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/global-attrs-001.xhtml b/src/test/resources/30/single/xhtml/valid/global-attrs-001.xhtml
new file mode 100644
index 0000000..abe35f3
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/global-attrs-001.xhtml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <title>Global Attributes 001</title>
+        <script>
+ function labelButton(button) {
+   if (button.accessKeyLabel)
+     button.value += ' (' + button.accessKeyLabel + ')';
+ }
+ var inputs = document.getElementsByTagName('input');
+ for (var i = 0; i < inputs.length; i += 1) {
+   if (inputs[i].type == "submit")
+     labelButton(inputs[i]);
+ }
+</script>
+    </head>
+    <body>
+        <nav>
+            <p accesskey="k">
+                <a title="Consortium Activities" accesskey="A" href="/Consortium/activities"
+                    >Activities</a> | <a title="Technical Reports and Recommendations" accesskey="T"
+                    href="/TR/">Technical Reports</a> | <a title="Alphabetical Site Index"
+                    accesskey="S" href="/Consortium/siteindex">Site Index</a> | <a
+                    title="About This Site" accesskey="B" href="/Consortium/">About Consortium</a> |
+                    <a title="Contact Consortium" accesskey="C" href="/Consortium/contact"
+                    >Contact</a>
+            </p>
+        </nav>
+        <form action="/search">
+            <label>Search: <input type="search" name="q" accesskey="s 0" /></label>
+            <input type="submit" />
+        </form>
+        <input type="submit" accesskey="N @ 1" value="Compose" />
+        <p>My sweat suit is <span style="color: green; background:
+            transparent">green</span> and my eyes are <span style="color: blue;
+                background: transparent">blue</span>.</p>
+        <p contenteditable="true" dir="ltr" draggable="true" dropzone="copy" hidden="hidden" id="c" spellcheck="false" style="color:black" tabindex="1" title="k">...</p>
+        <p>My logs show that there was some interest in <abbr title="Hypertext
+            Transport Protocol">HTTP</abbr> today.</p>
+        
+        <figure role="img" aria-labelledby="fish-caption"> 
+            <pre>o</pre>
+            <figcaption id="fish-caption">
+                Joan G. Stark, "<cite>fish</cite>".
+                October 1997. ASCII on electrons. 28×8.
+            </figcaption> 
+        </figure> 
+        
+        
+        
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/http-equiv-1.xhtml b/src/test/resources/30/single/xhtml/valid/http-equiv-1.xhtml
new file mode 100644
index 0000000..935910e
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/http-equiv-1.xhtml
@@ -0,0 +1,16 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
+   <head>	
+      <meta http-equiv="Default-Style" content="foo" />
+	  <meta http-equiv="Refresh" content="300" />
+      <title>TOC</title>
+   </head>
+   <body>
+      <nav epub:type="toc" id="toc">
+         <ol>
+            <li>
+               <a href="navigation.xhtml#toc">TOC</a>
+            </li>
+         </ol>
+      </nav>
+   </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/issue153.xhtml b/src/test/resources/30/single/xhtml/valid/issue153.xhtml
new file mode 100755
index 0000000..9726613
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/issue153.xhtml
@@ -0,0 +1,21 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+    <head>
+        <title></title>
+    </head>
+    <body>
+        <math xmlns="http://www.w3.org/1998/Math/MathML">
+            <semantics>
+                <mfrac>
+                    <msqrt>
+                        <mtext>a</mtext>
+                    </msqrt>
+                    <mi>b</mi>
+                </mfrac>
+                <annotation-xml encoding="application/xhtml+xml" name="alternate-representation">
+                    <span xmlns="http://www.w3.org/1999/xhtml">square root of a divided by the value
+                        of b</span>
+                </annotation-xml>
+            </semantics>
+        </math>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/30/single/xhtml/valid/issue204.xhtml b/src/test/resources/30/single/xhtml/valid/issue204.xhtml
new file mode 100755
index 0000000..cf385bc
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/issue204.xhtml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<title>external-links.xhtml</title>
+		<link href="css/external-hyperlinks.css" rel="stylesheet" type="text/css"/>
+		<link href="css//external-links_pgt.css" rel="stylesheet" type="text/css"/>
+	</head>
+	<body id="external-links" xml:lang="en-US">
+		<div class="layout1">
+			<a id="page-anchor-1-1"/>
+			<div class="F234_below image">
+				<div class="F234_below_pos">
+					<img class="F234_below_img" src="image/234.svg" alt="234.svg"/>
+				</div>
+			</div>
+			<p class="Basic-Paragraph para-style-override-1"><span> </span></p>
+			<p class="Basic-Paragraph"><span class="char-style-override-1">External HTTP Links</span><span> </span></p>
+			<p class="Basic-Paragraph"><span> </span></p>
+			<p class="Basic-Paragraph"><a href="http://en.wikipedia.org/wiki/File:Cutest_Koala.jpg"><span>Cutest Koala</span></a><span>, external link to file on the Internet: http://en.wikipedia.org/wiki/File:Cutest_Koala.jpg</span></p>
+			<p class="Basic-Paragraph"><span> </span></p>
+			<p class="Basic-Paragraph"><a href="http://en.wikipedia.org/wiki/Wallaby%23Natural_range_and_habitat"><span>Wallaby Natural range and habitat</span></a><span>, external link, section identifier: http://en.wikipedia.org/wiki/Wallaby%23Natural_range_and_habitat</span></p>
+			<p class="Basic-Paragraph"><span> </span></p>
+			<p class="Basic-Paragraph"><span> </span></p>
+			<p class="Basic-Paragraph"><span>Blue Wren </span><a href="http://www.youtube.com/watch%3Fv%3DqD5aNev4284"><span>Video </span><div><img src="image/male-blue-wren_fmt.jpeg" alt="male-blue-wren.jpeg"/></div><span>, image </span></a><span>is associated with external link to video on youtube, query: http://www.youtube.com/watch%3Fv%3DqD5aNev4284</span></p>
+			<p class="Basic-Paragraph"><span> </span></p>
+			<p class="Basic-Paragraph"><a href="http://www.weather.com/weather/today/Seattle%2BWA%2B98103"><span>Seattle Weather</span></a><span>, contains + in the URL: http://www.weather.com/weather/today/Seattle+WA+USWA0395</span></p>
+			<p class="Basic-Paragraph"><span> </span></p>
+			<p class="Basic-Paragraph"><a href="http://www.weather.com/weather/today/USCA0993:1:US"><span>San Jose Weather</span></a><span>, contains, in URL: http://www.weather.com/weather/today/USCA0993:1:US</span></p>
+			<p class="Basic-Paragraph"><span> </span></p>
+			<p class="Basic-Paragraph"><span class="char-style-override-1">External NAVTO Link </span><span> </span></p>
+			<p class="Basic-Paragraph"><span> </span></p>
+			<p class="Basic-Paragraph"><span>Link to </span><a href="navto://cover_stack"><span>cover-stack</span></a><span>, navto scheme:  navto://cover_stack</span></p>
+			<p class="Basic-Paragraph"><span> </span></p>
+			<p class="Basic-Paragraph"><span> </span></p>
+			<p class="Basic-Paragraph"><span> </span></p>
+			<p class="Basic-Paragraph"><span class="char-style-override-1">Broken External Links</span></p>
+			<p class="Basic-Paragraph"><span class="char-style-override-1"> </span></p>
+			<p class="Basic-Paragraph"><a href="http://maps.google.com/maps%3Fhl%3Den%26gs_upl%3D4776l5935l0l6196l8l5l0l2l2l0l266l824l1.3.1l6l0%26bav%3Don.2%2Cor.r_gc.r_pw.%2Ccf.osb%26biw%3D1600%26bih%3D787%26um%3D1%26ie%3DUTF-8%26q%3Dsunshine%26fb%3D1%26gl%3Dus%26hq%3Dsunshine%26hnear%3D0x808fcae48af93ff5:0xb99d8c0aca9f717b%2CSan%2BJose%2C%2BCA%26ei%3DWkzMTuuoGKatiALc4KGRAw%26sa%3DX%26oi%3Dlocal_group%26ct%3Dimage%26ved%3D0CAUQtgM"><span>Map of Tasmania</span></a><span>, external link, google gu [...]
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/issue230.xhtml b/src/test/resources/30/single/xhtml/valid/issue230.xhtml
new file mode 100644
index 0000000..5042da0
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/issue230.xhtml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
+    <head>
+        <title>ssml</title>
+    </head>
+	<body>
+		<div epub:type="acknowledgments">
+			<p>Test</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/issue248.xhtml b/src/test/resources/30/single/xhtml/valid/issue248.xhtml
new file mode 100644
index 0000000..6b5290e
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/issue248.xhtml
@@ -0,0 +1,22 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<title>WDTemplate_CS5_5_v01_list.html</title>
+		<link href="template.css" rel="stylesheet" type="text/css"/>
+	</head>
+	<body>
+				<p class="bod2">This is running text with a paragraph indent. This is running text with a paragraph indent. This is running text with a paragraph indent. This is running text with a paragraph indent. This is running text with a paragraph indent. This is running text with a paragraph indent. This is running text with a paragraph indent. This is running text with a paragraph indent.</p>
+				<ol>
+					<li>This is a numbered list in regular text.</li>
+					<li>This is a numbered list in regular text.</li>
+					<li>This is a numbered list in regular text.</li>
+					<li>This is a numbered list in regular text.</li>
+					<li>This is a numbered list in regular text.</li>
+					<li>This is a numbered list in regular text.</li>
+					<li>This is a numbered list in regular text.</li>
+					<li>This is a numbered list in regular text.</li>
+					<li>This is a numbered list in regular text.</li>
+					<li value="20">This is a numbered list in regular text. This list item has value="20" and does not validate in EPUBCheck 3.</li>
+				</ol>
+				<p class="bod2">This is running text with a paragraph indent. This is running text with a paragraph indent. This is running text with a paragraph indent. This is running text with a paragraph indent. This is running text with a paragraph indent. This is running text with a paragraph indent. This is running text with a paragraph indent. This is running text with a paragraph indent.</p>
+	</body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/link.xhtml b/src/test/resources/30/single/xhtml/valid/link.xhtml
new file mode 100644
index 0000000..ca932b8
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/link.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ssml="http://www.w3.org/2001/10/synthesis" xml:lang="en" lang="en" ssml:alphabet="x-SAMPA">
+    <head>
+           <link rel="stylesheet" href="horizontal.css" class="horizontal"/>
+    </head>
+    <body>
+
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/md.xhtml b/src/test/resources/30/single/xhtml/valid/md.xhtml
new file mode 100644
index 0000000..23007de
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/md.xhtml
@@ -0,0 +1,37 @@
+<html xmlns="http://www.w3.org/1999/xhtml" prefix="foaf: http://xmlns.com/foaf/0.1/ dc: http://purl.org/dc/terms/ xsd: http://www.w3.org/2001/XMLSchema# bibo: http://purl.org/ontology/bibo/">
+  <head>
+    <title>Page 7</title>
+    <link itemprop="bar" href="bar" />
+	<meta itemprop="foo" content="bar"/>
+  </head>
+  <body>
+<section itemscope="" itemtype="http://example.org/animals#cat">
+ <h1 itemprop="name http://example.com/fn">Hedral</h1>
+ <p itemprop="desc">Hedral is a male american domestic
+ shorthair, with a fluffy <span
+ itemprop="http://example.com/color">black</span> fur with <span
+ itemprop="http://example.com/color">white</span> paws and belly.</p>
+ <img itemprop="img" src="hedral.jpeg" alt="" title="Hedral, age 18 months"/>
+</section>
+
+<dl itemscope="" itemtype="http://md.example.com/loco
+                        http://md.example.com/lighting">
+ <dt>Name:</dt>
+ <dd itemprop="name">Tank Locomotive (DB 80)</dd>
+ <dt>Product code:</dt>
+ <dd itemprop="product-code">33041</dd>
+ <dt>Scale:</dt>
+ <dd itemprop="scale">HO</dd>
+ <dt>Digital:</dt>
+ <dd itemprop="digital">Delta</dd>
+</dl>
+
+<a itemprop="foo" href="bar">bar</a>
+
+<div>
+<link itemprop="bar" href="bar" />
+<meta itemprop="foo" content="bar"/>
+</div>
+
+   </body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/30/single/xhtml/valid/ops-001.xhtml b/src/test/resources/30/single/xhtml/valid/ops-001.xhtml
new file mode 100644
index 0000000..da7d871
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/ops-001.xhtml
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <title>Test 001</title>
+        
+        <base href="." target="."/>
+        
+        <link href="" rel="next" media="all" hreflang="en"/>
+        <link href="" rel="icon" sizes="any"/>
+        <meta name="description" content="test 001" />
+        <style type="text/css">
+            * {
+                font-family: verdana;
+                
+                }</style>
+        <script>
+            
+        </script>
+    </head>
+    <body id="sec1" >
+        <hgroup>
+            <h1>h1</h1>
+        </hgroup>
+        <p>para <a>asdjhasd</a></p>
+        <img src="./img/foo1.png" />           
+        <section>
+            <h2>Tables</h2>
+            <table>
+                <caption>caption</caption>
+                <tr>
+                    <th id="a">1</th>
+                    <th>2</th>
+                </tr>
+                <tr>
+                    <td headers="a">3</td>
+                    <td>4</td>
+                </tr>
+            </table>            
+            <table>
+                <caption>Specification values: <b>Steel</b>, <b>Castings</b>, Ann. A.S.T.M. A27-16,
+                    Class B;* P max. 0.06; S max. 0.05.</caption>
+                <thead>
+                    <tr>
+                        <th rowspan="2">Grade.</th>
+                        <th rowspan="2">Yield Point.</th>
+                        <th colspan="2">Ultimate tensile strength</th>
+                        <th rowspan="2">Per cent elong. 50.8mm or 2 in.</th>
+                        <th rowspan="2">Per cent reduct. area.</th>
+                    </tr>
+                    <tr>
+                        <th>kg/mm<sup>2</sup></th>
+                        <th>lb/in<sup>2</sup></th>
+                    </tr>
+                </thead>
+                <tbody>
+                    <tr>
+                        <td>Hard</td>
+                        <td>0.45 ultimate</td>
+                        <td>56.2</td>
+                        <td>80,000</td>
+                        <td>15</td>
+                        <td>20</td>
+                    </tr>
+                    <tr>
+                        <td>Medium</td>
+                        <td>0.45 ultimate</td>
+                        <td>49.2</td>
+                        <td>70,000</td>
+                        <td>18</td>
+                        <td>25</td>
+                    </tr>
+                    <tr>
+                        <td>Soft</td>
+                        <td>0.45 ultimate</td>
+                        <td>42.2</td>
+                        <td>60,000</td>
+                        <td>22</td>
+                        <td>30</td>
+                    </tr>
+                </tbody>
+            </table>
+        </section>
+        <section>
+            <h1>h1</h1>
+            <p>para</p>
+            <p>para</p>
+            <section>
+                <h2>h1</h2>
+                <p>para</p>
+                <p>para</p>
+                <section>
+                    <h3>h1</h3>
+                    <p>para</p>
+                    <p>para</p>
+                    <section>
+                        <h4>h1</h4>
+                        <p>para</p>
+                        <p>para</p>
+                        <section>
+                            <h5>h1</h5>
+                            <p>para</p>
+                            <p>para</p>
+                            <section>
+                                <h6>h1</h6>
+                                <p>para</p>
+                                <p>para</p>
+                            </section>
+                        </section>
+                    </section>
+                </section>
+            </section>
+        </section>
+        <object type="text/plain"  data="/foo.txt">
+        	<video src="video.mp4" width="640" height="360" controls="controls" poster="test.jpg" />
+        </object>
+        <script>
+            
+        </script>
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/ops-mathml-001.xhtml b/src/test/resources/30/single/xhtml/valid/ops-mathml-001.xhtml
new file mode 100644
index 0000000..db22841
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/ops-mathml-001.xhtml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <title>MathML 001 - OPS content model injections</title>
+    </head>
+    <body>
+        <section>
+            <h2>Presentation MathML at block level</h2>
+            <p>...</p>
+            <math xmlns="http://www.w3.org/1998/Math/MathML" alttext="formula">
+                <mrow>
+                    <mrow>
+                        <mi>f</mi>
+                        <mo>&#x2061;<!--FUNCTION APPLICATION--></mo>
+                        <mo>(</mo>
+                        <mi>x</mi>
+                        <mo>)</mo>
+                    </mrow>
+                    <mo id="eq1-equals">=</mo>
+                    <mrow>
+                        <msup>
+                            <mrow>
+                                <mo>(</mo>
+                                <mrow>
+                                    <mi>x</mi>
+                                    <mo>+</mo>
+                                    <mn>1</mn>
+                                </mrow>
+                                <mo>)</mo>
+                            </mrow>
+                            <mn>4</mn>
+                        </msup>
+                        <mo linebreak="newline" linebreakstyle="before" indentalign="id"
+                            indenttarget="eq1-equals">=</mo>
+                        <mrow>
+                            <msup>
+                                <mi>x</mi>
+                                <mn>4</mn>
+                            </msup>
+                            <mo id="eq1-plus">+</mo>
+                            <mrow>
+                                <mn>4</mn>
+                                <mo>&#x2062;<!--INVISIBLE TIMES--></mo>
+                                <msup>
+                                    <mi>x</mi>
+                                    <mn>3</mn>
+                                </msup>
+                            </mrow>
+                            <mo>+</mo>
+                            <mrow>
+                                <mn>6</mn>
+                                <mo>&#x2062;<!--INVISIBLE TIMES--></mo>
+                                <msup>
+                                    <mi>x</mi>
+                                    <mn>2</mn>
+                                </msup>
+                            </mrow>
+
+                            <mo linebreak="newline" linebreakstyle="before" indentalignlast="id"
+                                indenttarget="eq1-plus">+</mo>
+                            <mrow>
+                                <mn>4</mn>
+                                <mo>&#x2062;<!--INVISIBLE TIMES--></mo>
+                                <mi>x</mi>
+                            </mrow>
+                            <mo>+</mo>
+                            <mn>1</mn>
+                        </mrow>
+                    </mrow>
+                </mrow>
+            </math>
+            <p>...</p>
+        </section>
+        <section>
+            <h2>Presentation MathML at phrasing level</h2>
+            <p>... <math xmlns="http://www.w3.org/1998/Math/MathML" alttext="formula">
+                    <mfrac>
+                        <mo> &#x2146;<!--DOUBLE-STRUCK ITALIC SMALL D--></mo>
+                        <mrow>
+                            <mo> &#x2146;<!--DOUBLE-STRUCK ITALIC SMALL D--></mo>
+                            <mi> x </mi>
+                        </mrow>
+                    </mfrac>
+                </math> ... </p>
+        </section>
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/ops-mathml-002.xhtml b/src/test/resources/30/single/xhtml/valid/ops-mathml-002.xhtml
new file mode 100644
index 0000000..7c63fb3
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/ops-mathml-002.xhtml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" 
+    xmlns:x="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <title>MathML 002 - annotations</title>
+    </head>
+    <body>        
+        <section>
+            <math xmlns="http://www.w3.org/1998/Math/MathML">
+                <semantics>
+                    <mrow>
+                        <mrow><mo>(</mo><mi>a</mi> <mo>+</mo> <mi>b</mi><mo>)</mo></mrow>
+                        <mo>&#x2062;<!--INVISIBLE TIMES--></mo>
+                        <mrow><mo>(</mo><mi>c</mi> <mo>+</mo> <mi>d</mi><mo>)</mo></mrow>
+                    </mrow>
+                    <annotation-xml encoding="MathML-Content">
+                        <apply><and/>
+                            <apply><xor/><ci>a</ci> <ci>b</ci></apply>
+                            <apply><xor/><ci>c</ci> <ci>d</ci></apply>
+                        </apply>
+                    </annotation-xml>
+                </semantics>
+            </math>
+        </section>
+        <section>
+            <math xmlns="http://www.w3.org/1998/Math/MathML">
+                <semantics>
+                    <mrow>
+                        <mrow>
+                            <mi>sin</mi>
+                            <mo>&#x2061;<!--FUNCTION APPLICATION--></mo>
+                            <mfenced><mi>x</mi></mfenced>
+                        </mrow>
+                        <mo>+</mo>
+                        <mn>5</mn>
+                    </mrow>
+                    <annotation-xml cd="mathmlkeys" name="contentequiv" encoding="MathML-Content">
+                        <apply>
+                            <plus/>
+                            <apply><sin/><ci>x</ci></apply>
+                            <cn>5</cn>
+                        </apply>
+                    </annotation-xml>
+                    <annotation encoding="application/x-tex">
+                        \sin x + 5
+                    </annotation>
+                </semantics>
+            </math>
+        </section>    
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/ops-svg-001.xhtml b/src/test/resources/30/single/xhtml/valid/ops-svg-001.xhtml
new file mode 100644
index 0000000..8754286
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/ops-svg-001.xhtml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:x="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <title>SVG 001 - OPS content model injections</title>
+    </head>
+    <body>
+        <section>
+            <p>...</p>
+            <svg xmlns="http://www.w3.org/2000/svg" width="12cm" height="4cm" viewBox="0 0 1200 400" version="1.1">                
+                    <desc>Example rect01 - rectangle with sharp corners</desc>
+                    <!-- Show outline of canvas using 'rect' element -->
+                    <rect x="1" y="1" width="1198" height="398"
+                        fill="none" stroke="blue" stroke-width="2"/>
+                    <rect x="400" y="100" width="400" height="200"
+                        fill="yellow" stroke="navy" stroke-width="10"  />                
+            </svg>
+            <svg width="12cm" height="4cm" viewBox="0 0 1200 400" xmlns="http://www.w3.org/2000/svg" version="1.1" >
+                <desc>Example rect02 - rounded rectangles</desc>
+                <!-- Show outline of canvas using 'rect' element -->
+                <rect x="1" y="1" width="1198" height="398"
+                    fill="none" stroke="blue" stroke-width="2"/>
+                <rect x="100" y="100" width="400" height="200" rx="50"
+                    fill="green" />
+                <g transform="translate(700 210) rotate(-30)">
+                    <rect x="0" y="0" width="400" height="200" rx="50"
+                        fill="none" stroke="purple" stroke-width="30" />
+                </g>
+                <foreignObject width="123" height="123" requiredExtensions="http://www.idpf.org/2007/ops">
+                    <x:p></x:p>                    
+                </foreignObject>
+            </svg>
+            <p>...</p>
+        </section>
+        
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/ops-svg-002.xhtml b/src/test/resources/30/single/xhtml/valid/ops-svg-002.xhtml
new file mode 100644
index 0000000..a9f489e
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/ops-svg-002.xhtml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:x="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+    <head>
+        <title>SVG 001 - OPS content model injections</title>
+    </head>
+    <body>
+        <section>
+            <p>...</p>
+            <svg xmlns="http://www.w3.org/2000/svg" epub:type="titlepage" width="12cm" height="4cm" viewBox="0 0 1200 400" version="1.1">                
+                    <desc>Example rect01 - rectangle with sharp corners</desc>
+                    <!-- Show outline of canvas using 'rect' element -->
+                    <rect x="1" y="1" width="1198" height="398"
+                        fill="none" stroke="blue" stroke-width="2"/>
+                    <rect x="400" y="100" width="400" height="200"
+                        fill="yellow" stroke="navy" stroke-width="10"  />                
+            </svg>
+            <svg width="12cm" height="4cm" viewBox="0 0 1200 400" xmlns="http://www.w3.org/2000/svg" version="1.1" >
+                <desc>Example rect02 - rounded rectangles</desc>
+                <!-- Show outline of canvas using 'rect' element -->
+                <rect x="1" y="1" width="1198" height="398"
+                    fill="none" stroke="blue" stroke-width="2"/>
+                <rect x="100" y="100" width="400" height="200" rx="50"
+                    fill="green" />
+                <g transform="translate(700 210) rotate(-30)">
+                    <rect x="0" y="0" width="400" height="200" rx="50"
+                        fill="none" stroke="purple" stroke-width="30" />
+                </g>
+                <foreignObject width="123" height="123" requiredExtensions="http://www.idpf.org/2007/ops">
+                    <x:p></x:p>                    
+                </foreignObject>
+            </svg>
+            <p>...</p>
+        </section>
+        
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/prefixes-001.xhtml b/src/test/resources/30/single/xhtml/valid/prefixes-001.xhtml
new file mode 100644
index 0000000..98b308b
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/prefixes-001.xhtml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ssml="http://www.w3.org/2001/10/synthesis" xml:lang="en" lang="en" ssml:alphabet="x-SAMPA"
+xmlns:epub="http://www.idpf.org/2007/ops"
+		epub:prefix="foaf: http://xmlns.com/foaf/spec/
+				dbp:    http://dbpedia.org/ontology/"
+>
+    <head>
+        <title>ssml</title>
+    </head>
+    <body epub:type="bodymatter foaf:valid">
+        <p ssml:ph="[pra'h-fessah]">Prof.</p>
+        <section ssml:alphabet="ipa">
+            <p ssml:ph="ldskdlklsd">Prof.</p>
+        </section>
+		
+		<ol>
+ <li data-length="2m11s">Beyond The Sea</li>
+</ol>
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/rdfa.xhtml b/src/test/resources/30/single/xhtml/valid/rdfa.xhtml
new file mode 100644
index 0000000..e32d927
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/rdfa.xhtml
@@ -0,0 +1,74 @@
+<html xmlns="http://www.w3.org/1999/xhtml" prefix="foaf: http://xmlns.com/foaf/0.1/ dc: http://purl.org/dc/terms/ xsd: http://www.w3.org/2001/XMLSchema# bibo: http://purl.org/ontology/bibo/">
+  <head>
+    <title>Page 7</title>
+    <meta name="author" content="Mark Birbeck" />
+    <link rel="prev" href="page6.html" />
+    <link rel="next" href="page8.html" />
+    <meta property="http://purl.org/dc/terms/creator" content="Mark Birbeck" />
+    <link rel="http://xmlns.com/foaf/0.1/topic" href="http://www.example.com/#us" />
+    <meta property="dc:creator" content="Mark Birbeck" />
+    <link rel="foaf:topic" href="http://www.example.com/#us" />
+    <link rel="foaf:topic" resource="http://www.example.com/#us" />
+  </head>
+  <body>
+  <h1 property="dc:title">My home-page</h1>
+ <p>This document is licensed under the <a prefix="cc: http://creativecommons.org/ns#"
+   rel="cc:license"
+   href="http://creativecommons.org/licenses/by-nc-nd/3.0/"
+   >Creative Commons By-NC-ND License</a>.</p>
+   <p>Last modified: <span property="dc:modified"
+            content="2015-09-16T16:00:00-05:00"
+            datatype="xsd:dateTime">16 September 2015</span>.</p>
+            
+            
+             <p>I think White's book
+    '<span about="urn:ISBN:0091808189" 
+           property="dc:title">Canteen Cuisine</span>'
+    is well worth getting since although it's quite advanced stuff, he
+    makes it pretty easy to follow. You might also like
+    <span 
+     about="urn:ISBN:1596913614" 
+     property="dc:description"
+     >White's autobiography</span>.</p>
+            
+   <p>I think White's book
+    '<span about="urn:ISBN:0091808189" typeof="bibo:Book"
+           property="dc:title">Canteen Cuisine</span>'
+    is well worth getting since although it's quite advanced stuff, he
+    makes it pretty easy to follow. You might also like
+    <span 
+     about="urn:ISBN:1596913614"
+     typeof="bibo:Book"
+     property="dc:description"
+     >White's autobiography</span>.</p>
+     
+     <p>I think White's book
+    '<span
+     about="urn:ISBN:0091808189"
+     typeof="http://purl.org/ontology/bibo/Book"
+     property="http://purl.org/dc/terms/title"
+     >Canteen Cuisine</span>'
+    is well worth getting since although it's quite advanced stuff, he
+    makes it pretty easy to follow. You might also like
+    <span
+     about="urn:ISBN:1596913614"
+     typeof="http://purl.org/ontology/bibo/Book"
+     property="http://purl.org/dc/terms/description"
+     >White's autobiography</span>.</p>
+     
+     <div vocab="http://xmlns.com/foaf/0.1/" about="#me">
+   My name is <span property="name">John Doe</span> and my blog is called
+   <a rel="homepage" href="http://example.org/blog/">Understanding Semantics</a>.
+</div>
+
+<div vocab="http://xmlns.com/foaf/0.1/" about="#me">
+   My name is <span property="name">John Doe</span> and my blog is called
+   <a property="homepage" href="http://example.org/blog/">Understanding Semantics</a>.
+</div>
+   
+   <link property="http://purl.org/dc/terms/description" href="foo"/>
+   <meta property="http://purl.org/dc/terms/description" content="foo"/>
+   <link property="foaf:topic" resource="http://www.example.com/#us" />
+   
+   </body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/30/single/xhtml/valid/ruby-001.xhtml b/src/test/resources/30/single/xhtml/valid/ruby-001.xhtml
new file mode 100644
index 0000000..c76f484
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/ruby-001.xhtml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <title>Ruby 001</title>
+    </head>
+    <body>
+        <h1>Ruby</h1>
+        <section>
+            <h2>Ruby without <code>rp</code></h2>
+            <p>
+                <ruby lang="ja" xml:lang="ja"> 攻殻<rt>こうかく</rt>機動隊<rt>きどうたい</rt>
+                </ruby>
+            </p>
+        </section>
+        <section>
+            <h2>Ruby with <code>rp</code></h2>
+            <p><ruby lang="ja" xml:lang="ja"
+                        >攻殻<rp>(</rp><rt>こうかく</rt><rp>)</rp>機動隊<rp>(</rp><rt>きどうたい</rt><rp>)</rp></ruby></p>
+        </section>
+        <section>
+            <dl>
+                <dt>Mono ruby</dt>
+                <dd><ruby> 東 <rt> とう </rt></ruby><ruby> 京 <rt> きょう </rt></ruby></dd>
+                <dt>Group ruby</dt>
+                <dd><ruby> 東京 <rt> とうきょう </rt></ruby></dd>
+                <dt>Jukugo ruby</dt>
+                <dd><ruby> 東 <rt> とう </rt> 京 <rt> きょう </rt></ruby></dd>
+            </dl>
+        </section>
+        <section>
+            <h2>PĪNYĪN</h2>
+            <p>The <b>Grass mud horse</b> — <ruby>草泥馬<rp>(</rp><rt>Cǎo Ní Mǎ</rt><rp>)</rp></ruby> —
+                is … characterised as “lively, intelligent and tenacious”. However, their existence
+                is said to be threatened by the “river crabs” — <ruby class="styled">河蟹<rp>
+                        (</rp><rt>héxiè</rt><rp>) </rp></ruby> — which are invading their
+                habitat.</p>
+        </section>
+        <section>
+            <h2>ZHÙYĪN FÚHÀO</h2>
+            <p><ruby><ruby>世<rp>(</rp><rt>ㄕˋ</rt><rp>)</rp>上<rp>(</rp><rt>ㄕㄤˋ</rt><rp>)</rp>無<rp>(</rp><rt>ㄨˊ</rt><rp>)</rp>難<rp>(</rp><rt>ㄋㄢˊ</rt><rp>)</rp>事<rp>(</rp><rt>ㄕˋ</rt><rp>)</rp>只<rp>(</rp><rt>ㄓˇ</rt><rp>)</rp>怕<rp>(</rp><rt>ㄆㄚˋ</rt><rp>)</rp>有<rp>(</rp><rt>ㄧㄡˇ</rt><rp>)</rp>心<rp>(</rp><rt>ㄒㄧㄣ</rt><rp>)</rp>人<rp>(</rp><rt>ㄖㄣˊ</rt><rp>)</rp></ruby><rp>
+                        (</rp><rt>Anything can be done with enough
+                    perseverance</rt><rp>)</rp></ruby></p>
+        </section>
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/sch-001.xhtml b/src/test/resources/30/single/xhtml/valid/sch-001.xhtml
new file mode 100644
index 0000000..1d69c21
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/sch-001.xhtml
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:ssml="http://www.w3.org/2001/10/synthesis" 
+    xmlns:epub="http://www.idpf.org/2007/ops">
+    <head>
+        <title>SCH valid 001</title>
+        <meta charset="utf-8"/>
+        <link rel="icon" sizes="any" href="icon.png"/>
+    </head>
+    <body>        
+        <figure aria-describedby="desc">
+            <p>...</p>
+            <figcaption id="desc"></figcaption>
+        </figure>
+        <div aria-flowto="flowto">
+            <p id="flowto">...</p>
+        </div>
+        <div aria-labelledby="label" epub:type="rearnote">
+            <p id="label">...</p>
+        </div>
+        <div aria-owns="owned">
+            <p id="owned">...</p>
+        </div>
+        <div aria-controls="ctrl">
+            <p id="ctrl">...</p>
+        </div>
+        <p contextmenu="menu">...</p>
+        <menu id="menu"></menu>
+        
+        <label for="btn">...</label>
+        <button id="btn">...</button>
+        
+        <label for="inp">...</label>
+        <input id="inp" type="email"/>
+        
+        <output for="o1">...</output>
+        <p id="o1">...</p>
+        
+        <output for="o2 o3">...</output>
+        <p id="o2">...</p>
+        <p id="o3">...</p>
+        
+        <input list="datalist"/>
+        <datalist id="datalist">...</datalist>
+        
+        <input form="form1"/>
+        <form id="form1"></form>
+        
+        <table>
+            <tr><th colspan="2" id="th1">...</th></tr>
+            <tr><th id="th2">...</th><th id="th3">...</th></tr>
+            <tr><td headers="th2 th1"></td></tr>
+            <tr><td headers="th3"></td></tr>
+        </table>
+        
+        <meter value="10"></meter>
+        
+        <bdo dir="auto">...</bdo>
+        
+        <table>
+            <caption>...</caption>
+        </table>
+        
+        <header>
+            <p>...</p>
+        </header>
+        
+        <footer>
+            <p>...</p>
+        </footer>
+        
+        <map name="amap">
+            <area shape="default"/>
+        </map>
+        <map name="map2"></map>
+        
+        <p lang="en" xml:lang="en">...</p>
+        
+        <select>
+            <option selected="selected"></option>
+            <option></option>
+        </select>
+        
+        <select multiple="multiple">
+            <option selected="selected"></option>
+            <option selected="selected"></option>
+        </select>
+        
+        <video src="video.avi" poster="test.jpg">
+            <track src="te" label="label" default="default"/>
+            <track src="st" label="label"/>
+        </video>
+        
+        <p ssml:ph="...">
+            <span>...</span>
+            <span>...</span>
+        </p>
+        
+        <aside epub:type="practice">...</aside>
+        
+        
+        <!-- xref -->
+        <math xmlns="http://www.w3.org/1998/Math/MathML">
+            <semantics>
+                <mrow id="E">
+                    <mrow id="E.1">
+                        <mo id="E.1.1">(</mo>
+                        <mi id="E.1.2">a</mi>
+                        <mo id="E.1.3">+</mo>
+                        <mi id="E.1.4">b</mi>
+                        <mo id="E.1.5">)</mo>
+                    </mrow>
+                    <mo id="E.2">&#x2062;<!--INVISIBLE TIMES--></mo>
+                    <mrow id="E.3">
+                        <mo id="E.3.1">(</mo>
+                        <mi id="E.3.2">c</mi>
+                        <mo id="E.3.3">+</mo>
+                        <mi id="E.3.4">d</mi>
+                        <mo id="E.3.5">)</mo>
+                    </mrow>
+                </mrow>
+                
+                <annotation-xml encoding="MathML-Content">
+                    <apply xref="E">
+                        <and xref="E.2"/>
+                        <apply xref="E.1">
+                            <xor xref="E.1.3"/><ci xref="E.1.2">a</ci><ci xref="E.1.4">b</ci>
+                        </apply>
+                        <apply xref="E.3">
+                            <xor xref="E.3.3"/><ci xref="E.3.2">c</ci><ci xref="E.3.4">d</ci>
+                        </apply>
+                    </apply>
+                </annotation-xml>
+            </semantics>
+        </math>
+        
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/sections-001.xhtml b/src/test/resources/30/single/xhtml/valid/sections-001.xhtml
new file mode 100644
index 0000000..763e7e2
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/sections-001.xhtml
@@ -0,0 +1,328 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <title>Sections 001</title>
+        <script>
+   function update(online) {
+     document.getElementById('status').textContent =
+       online ? 'Online' : 'Offline';
+   }
+  </script>
+    </head>
+    <body ononline="update(true)"
+        onoffline="update(false)"
+        onload="update(navigator.onLine)">
+        
+        
+        <header>
+            <h1>Wake up sheeple!</h1>
+            <p><a href="news.html">News</a> -
+                <a href="blog.html">Blog</a> -
+                <a href="forums.html">Forums</a></p>
+            <p>Last Modified: <time>2009-04-01</time></p>
+            <nav>
+                <h1>Navigation</h1>
+                <ul>
+                    <li><a href="articles.html">Index of all articles</a></li>
+                    <li><a href="today.html">Things sheeple need to wake up for today</a></li>
+                    <li><a href="successes.html">Sheeple we have managed to wake</a></li>
+                </ul>
+            </nav>
+        </header>
+        <div>
+            <article>
+                <header>
+                    <h1>My Day at the Beach</h1>
+                </header>
+                <div>
+                    <p>Today I went to the beach and had a lot of fun.</p>
+                    ...more content...
+                </div>
+                <footer>
+                    <p>Posted <time pubdate="" datetime="2009-10-10T14:36-08:00">Thursday</time>.</p>
+                </footer>
+            </article>
+            ...more blog posts...
+        </div>
+        
+        
+        <p>You are: <span id="status">(Unknown)</span></p>        
+        
+        
+        <article>
+            <hgroup>
+                <h1>Apples</h1>
+                <h2>Tasty, delicious fruit!</h2>
+            </hgroup>
+            <p>The apple is the pomaceous fruit of the apple tree.</p>
+            <section>
+                <h1>Red Delicious</h1>
+                <p>These bright red apples are the most common found in many
+                    supermarkets.</p>
+            </section>
+            <section>
+                <h1>Granny Smith</h1>
+                <p>These juicy, green apples make a great filling for
+                    apple pies.</p>
+            </section>
+        </article>
+        
+        
+        <h1>The Wiki Center Of Exampland</h1>
+        <nav>
+            <ul>
+                <li><a href="/">Home</a></li>
+                <li><a href="/events">Current Events</a></li>
+            </ul>
+        </nav>
+        <article>
+            <header>
+                <h1>Demos in Exampland</h1>
+                <p>Written by A. N. Other.</p>
+            </header>
+            <nav>
+                <ul>
+                    <li><a href="#public">Public demonstrations</a></li>
+                    <li><a href="#destroy">Demolitions</a></li>
+                </ul>
+            </nav>
+            <div>
+                <section id="public">
+                    <h1>Public demonstrations</h1>
+                    <p>...more...</p>
+                </section>
+                <section id="destroy">
+                    <h1>Demolitions</h1>
+                    <p>...more...</p>
+                </section>
+                ...more...
+            </div></article>
+        
+        <aside>
+            <h1>Switzerland</h1>
+            <p>Switzerland, a land-locked country in the middle of geographic
+                Europe, has not joined the geopolitical European Union, though it is
+                a signatory to a number of European treaties.</p>
+        </aside>
+        
+        <p>He later joined a large company, continuing on the same work.
+            <q>I love my job. People ask me what I do for fun when I'm not at
+                work. But I'm paid to do my hobby, so I never know what to
+                answer. Some people wonder what they would do if they didn't have to
+                work... but I know what I would do, because I was unemployed for a
+                year, and I filled that time doing exactly what I do now.</q></p>
+        
+        <aside>
+            <q> People ask me what I do for fun when I'm not at work. But I'm
+                paid to do my hobby, so I never know what to answer. </q>
+        </aside>
+        
+        <p>Of course his work — or should that be hobby? —
+            isn't his only passion. He also enjoys other pleasures.</p>
+        
+        <hgroup>
+            <h1>The reality dysfunction</h1>
+            <h2>Space is not the only void</h2>
+        </hgroup>
+        <hgroup>
+            <h1>Dr. Strangelove</h1>
+            <h2>Or: How I Learned to Stop Worrying and Love the Bomb</h2>
+        </hgroup>
+        
+        <footer>
+            <p>Copyright © 2006 The Example Company</p>
+            <p><a href="about.html">About</a> -
+                <a href="policy.html">Privacy Policy</a> -
+                <a href="contact.html">Contact Us</a></p>
+        </footer>
+        
+        <article>
+            <h1><a href="http://bacon.example.com/?blog=109431">Bacon on a crowbar</a></h1>
+            <article>
+                <header><strong>t3yw</strong> 12 points 1 hour ago</header>
+                <p>I bet a narwhal would love that.</p>
+                <footer><a href="?pid=29578">permalink</a></footer>
+                <article>
+                    <header><strong>greg</strong> 8 points 1 hour ago</header>
+                    <blockquote><p>I bet a narwhal would love that.</p></blockquote>
+                    <p>Dude narwhals don't eat bacon.</p>
+                    <footer><a href="?pid=29579">permalink</a></footer>
+                    <article>
+                        <header><strong>t3yw</strong> 15 points 1 hour ago</header>
+                        <blockquote>
+                            <blockquote><p>I bet a narwhal would love that.</p></blockquote>
+                            <p>Dude narwhals don't eat bacon.</p>
+                        </blockquote>
+                        <p>Next thing you'll be saying they don't get capes and wizard
+                            hats either!</p>
+                        <footer><a href="?pid=29580">permalink</a></footer>
+                        <article>
+                            <article>
+                                <header><strong>boing</strong> -5 points 1 hour ago</header>
+                                <p>narwhals are worse than ceiling cat</p>
+                                <footer><a href="?pid=29581">permalink</a></footer>
+                            </article>
+                        </article>
+                    </article>
+                </article>
+                <article>
+                    <header><strong>fred</strong> 1 points 23 minutes ago</header>
+                    <blockquote><p>I bet a narwhal would love that.</p></blockquote>
+                    <p>I bet they'd love to peel a banana too.</p>
+                    <footer><a href="?pid=29582">permalink</a></footer>
+                </article>
+            </article>
+        </article>
+        <figure>
+            <figcaption>The top 10 movies of all time</figcaption>
+            <ol>
+                <li value="10"><cite>Josie and the Pussycats</cite>, 2001</li>
+                <li value="9"><cite lang="sh">Црна мачка, бели мачор</cite>, 1998</li>
+                <li value="8"><cite>A Bug's Life</cite>, 1998</li>
+                <li value="7"><cite>Toy Story</cite>, 1995</li>
+                <li value="6"><cite>Monsters, Inc</cite>, 2001</li>
+                <li value="5"><cite>Cars</cite>, 2006</li>
+                <li value="4"><cite>Toy Story 2</cite>, 1999</li>
+                <li value="3"><cite>Finding Nemo</cite>, 2003</li>
+                <li value="2"><cite>The Incredibles</cite>, 2004</li>
+                <li value="1"><cite>Ratatouille</cite>, 2007</li>
+            </ol>
+        </figure>
+        <figure>
+            <figcaption>The top 10 movies of all time</figcaption>
+            <ol reversed="reversed">
+                <li><cite>Josie and the Pussycats</cite>, 2001</li>
+                <li><cite lang="sh">Црна мачка, бели мачор</cite>, 1998</li>
+                <li><cite>A Bug's Life</cite>, 1998</li>
+                <li><cite>Toy Story</cite>, 1995</li>
+                <li><cite>Monsters, Inc</cite>, 2001</li>
+                <li><cite>Cars</cite>, 2006</li>
+                <li><cite>Toy Story 2</cite>, 1999</li>
+                <li><cite>Finding Nemo</cite>, 2003</li>
+                <li><cite>The Incredibles</cite>, 2004</li>
+                <li><cite>Ratatouille</cite>, 2007</li>
+            </ol>
+        </figure>
+        <dl>
+            <dt lang="en-US"> <dfn>color</dfn> </dt>
+            <dt lang="en-GB"> <dfn>colour</dfn> </dt>
+            <dd> A sensation which (in humans) derives from the ability of
+                the fine structure of the eye to distinguish three differently
+                filtered analyses of a view. </dd>
+        </dl>
+        <dl>
+            <dt> Last modified time </dt>
+            <dd> 2004-12-23T23:33Z </dd>
+            <dt> Recommended update interval </dt>
+            <dd> 60s </dd>
+            <dt> Authors </dt>
+            <dt> Editors </dt>
+            <dd> Robert Rothman </dd>
+            <dd> Daniel Jackson </dd>
+        </dl>
+        <p>Determine the victory points as follows (use the
+            first matching case):</p>
+        <dl>
+            <dt> If you have exactly five gold coins </dt>
+            <dd> You get five victory points </dd>
+            <dt> If you have one or more gold coins, and you have one or more silver coins </dt>
+            <dd> You get two victory points </dd>
+            <dt> If you have one or more silver coins </dt>
+            <dd> You get one victory point </dd>
+            <dt> Otherwise </dt>
+            <dd> You get no victory points </dd>
+        </dl>
+        <dl>
+            <dt><dfn>Apartment</dfn>, n.</dt>
+            <dd>An execution context grouping one or more threads with one or
+                more COM objects.</dd>
+            <dt><dfn>Flat</dfn>, n.</dt>
+            <dd>A deflated tire.</dd>
+            <dt><dfn>Home</dfn>, n.</dt>
+            <dd>The user's login directory.</dd>
+        </dl>
+        <article>
+            <h1>FAQ</h1>
+            <dl>
+                <dt>What do we want?</dt>
+                <dd>Our data.</dd>
+                <dt>When do we want it?</dt>
+                <dd>Now.</dd>
+                <dt>Where is it?</dt>
+                <dd>We are not sure.</dd>
+            </dl>
+        </article>
+        <dl>
+            <dt><dfn>happiness</dfn></dt>
+            <dd class="pronunciation">/'hæ p. nes/</dd>
+            <dd class="part-of-speech"><i><abbr>n.</abbr></i></dd>
+            <dd>The state of being happy.</dd>
+            <dd>Good fortune; success. <q>Oh <b>happiness</b>! It worked!</q></dd>
+            <dt><dfn>rejoice</dfn></dt>
+            <dd class="pronunciation">/ri jois'/</dd>
+            <dd><i class="part-of-speech"><abbr>v.intr.</abbr></i> To be delighted oneself.</dd>
+            <dd><i class="part-of-speech"><abbr>v.tr.</abbr></i> To cause one to be delighted.</dd>
+        </dl>
+        <p>In <a href="#l4">listing 4</a> we see the primary core interface
+            API declaration.</p>
+        <figure id="l4">
+            <figcaption>Listing 4. The primary core interface API declaration.</figcaption>
+            <pre><code>interface PrimaryCore {
+ boolean verifyDataLine();
+ void sendData(in sequence<byte> data);
+ void initSelfDestruct();
+}</code></pre>
+        </figure>
+        <p>The API is designed to use UTF-8.</p>
+        <figure>
+            <img src="bubbles-work.jpeg"
+                alt="Bubbles, sitting in his office chair, works on his
+                latest project intently."/>
+                <figcaption>Bubbles at work</figcaption>
+        </figure>
+        <h2>Malinko's comics</h2>
+        
+        <p>This case centered on some sort of "intellectual property"
+            infringement related to a comic (see Exhibit A). The suit started
+            after a trailer ending with these words:</p>
+            
+            <blockquote>
+                <img src="promblem-packed-action.png" alt="ROUGH COPY! Promblem-Packed Action!"/>
+            </blockquote>
+            
+            <p>...was aired. A lawyer, armed with a Bigger Notebook, launched a
+                preemptive strike using snowballs. A complete copy of the trailer is
+                included with Exhibit B.</p>
+                
+                <figure>
+                    <img src="ex-a.png" alt="Two squiggles on a dirty piece of paper."/>
+                        <figcaption>Exhibit A. The alleged <cite>rough copy</cite> comic.</figcaption>
+                </figure>
+                
+                <figure>
+                    <video poster="test.jpg" src="ex-b.mov"/>
+                    <p>..</p>
+                    <figcaption>Exhibit B. The <cite>Rough Copy</cite> trailer.</figcaption>                    
+                </figure>
+        
+        <article lang="en-US">
+            <h1>My use of language and my cats</h1>
+            <p>My cat's behavior hasn't changed much since her absence, except
+                that she plays her new physique to the neighbors regularly, in an
+                attempt to get pets.</p>
+            <div lang="en-GB">
+                <p>My other cat, coloured black and white, is a sweetie. He followed
+                    us to the pool today, walking down the pavement with us. Yesterday
+                    he apparently visited our neighbours. I wonder if he recognises that
+                    their flat is a mirror image of ours.</p>
+                <p>Hm, I just noticed that in the last paragraph I used British
+                    English. But I'm supposed to write in American English. So I
+                    shouldn't say "pavement" or "flat" or "colour"...</p>
+            </div>
+            <p>I should say "sidewalk" and "apartment" and "color"!</p>
+        </article>
+        
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/ssml.xhtml b/src/test/resources/30/single/xhtml/valid/ssml.xhtml
new file mode 100644
index 0000000..93fdf0e
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/ssml.xhtml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ssml="http://www.w3.org/2001/10/synthesis" xml:lang="en" lang="en" ssml:alphabet="x-SAMPA">
+    <head>
+        <title>ssml</title>
+    </head>
+    <body>
+        <p ssml:alphabet="ipa">The title of the movie is: 
+    <span ssml:ph="ˈlɑ ˈviːɾə ˈʔeɪ ˈbɛlə">"La vita è bella"</span>
+    <!-- 
+    "&#x02C8;l&#x0251; &#x02C8;vi&#x02D0;&#x027E;&#x0259;
+     &#x02C8;&#x0294;e&#x026A; &#x02C8;b&#x025B;l&#x0259;" --> 
+    (Life is beautiful), which is directed by 
+    <span ssml:ph="ɹəˈbɛːɹɾoʊ bɛˈniːnji">Roberto Benigni</span>.
+    <!-- 
+    "&#x0279;&#x0259;&#x02C8;b&#x025B;&#x02D0;&#x0279;&#x027E;o&#x028A;
+     b&#x025B;&#x02C8;ni&#x02D0;nji" --> </p>
+        
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/style-001.xhtml b/src/test/resources/30/single/xhtml/valid/style-001.xhtml
new file mode 100644
index 0000000..5c9265c
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/style-001.xhtml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <title>Style 001</title>
+        <style>
+            body {color:black;}
+        </style>        
+    </head>
+    <body style="color:black">
+        <section>
+            <style scoped="">
+                
+            </style>
+            <h2>section</h2>
+            <p>...</p>
+        </section>
+        <section>
+            <style scoped="">
+                
+            </style>
+            <style scoped="">
+                
+            </style>
+            <h2>section</h2>
+            <p>...</p>
+        </section>
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/styleAttr001.xhtml b/src/test/resources/30/single/xhtml/valid/styleAttr001.xhtml
new file mode 100644
index 0000000..4c3cc42
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/styleAttr001.xhtml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+    </head>
+    <body>
+    	<p style="color:blue">BLUE</p>
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/svg-rdf-001.xhtml b/src/test/resources/30/single/xhtml/valid/svg-rdf-001.xhtml
new file mode 100644
index 0000000..1276e16
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/svg-rdf-001.xhtml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:x="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <title>SVG 001 - OPS content model injections</title>
+    </head>
+    <body>
+        <section>
+            <p>...</p>
+            <svg xmlns="http://www.w3.org/2000/svg" width="12cm" height="4cm" viewBox="0 0 1200 400" version="1.1">                
+                    <desc>Example rect01 - rectangle with sharp corners</desc>
+                    <metadata>
+      <rdf:RDF
+           xmlns:rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+           xmlns:rdfs = "http://www.w3.org/2000/01/rdf-schema#"
+           xmlns:dc = "http://purl.org/dc/elements/1.1/" >
+        <rdf:Description about="http://example.org/myfoo"
+             dc:title="MyFoo Financial Report"
+             dc:description="$three $bar $thousands $dollars $from 1998 $through 2000"
+             dc:publisher="Example Organization"
+             dc:date="2000-04-11"
+             dc:format="image/svg+xml"
+             dc:language="en" >
+          <dc:creator>
+            <rdf:Bag>
+              <rdf:li>Irving Bird</rdf:li>
+              <rdf:li>Mary Lambert</rdf:li>
+            </rdf:Bag>
+          </dc:creator>
+        </rdf:Description>
+      </rdf:RDF>
+    </metadata>
+                    <!-- Show outline of canvas using 'rect' element -->
+                    <rect x="1" y="1" width="1198" height="398"
+                        fill="none" stroke="blue" stroke-width="2"/>
+                    <rect x="400" y="100" width="400" height="200"
+                        fill="yellow" stroke="navy" stroke-width="10"  />                
+            </svg>
+            <svg width="12cm" height="4cm" viewBox="0 0 1200 400" xmlns="http://www.w3.org/2000/svg" version="1.1" >
+                <desc>Example rect02 - rounded rectangles</desc>
+                <!-- Show outline of canvas using 'rect' element -->
+                <rect x="1" y="1" width="1198" height="398"
+                    fill="none" stroke="blue" stroke-width="2"/>
+                <rect x="100" y="100" width="400" height="200" rx="50"
+                    fill="green" />
+                <g transform="translate(700 210) rotate(-30)">
+                    <rect x="0" y="0" width="400" height="200" rx="50"
+                        fill="none" stroke="purple" stroke-width="30" />
+                </g>
+                <foreignObject width="123" height="123" requiredExtensions="http://www.idpf.org/2007/ops">
+                    <x:p></x:p>                    
+                </foreignObject>
+            </svg>
+            <p>...</p>
+        </section>
+        
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/switch-001.xhtml b/src/test/resources/30/single/xhtml/valid/switch-001.xhtml
new file mode 100644
index 0000000..ba6f593
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/switch-001.xhtml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+    xmlns:epub="http://www.idpf.org/2007/ops">
+    <head>
+        <title>switch</title>
+    </head>
+    <body>
+        <epub:switch id="mathmlSwitch">
+            <epub:case required-namespace="http://www.w3.org/1998/Math/MathML">
+                <math xmlns="http://www.w3.org/1998/Math/MathML" alttext="formula">
+                    <mrow>
+                        <mn>2</mn>
+                        <mo>xxxxx</mo>
+                        <mi>x</mi>
+                    </mrow>
+                    <mrow>
+                        <mo>+</mo>
+                        <mi>y</mi>
+                        <mo>-</mo>
+                        <mi>z</mi>
+                    </mrow>
+                </math>
+            </epub:case>
+            <epub:default>
+                <p>2x + y - z</p>
+            </epub:default>
+        </epub:switch>
+        
+        <epub:switch id="cmlSwitch">
+            <epub:case required-namespace="http://www.xml-cml.org/schema">
+                <cml xmlns="http://www.xml-cml.org/schema">
+                    <molecule id="sulfuric-acid">
+                        <formula id="f1" concise="H 2 S 1 O 4"></formula>
+                    </molecule>
+                </cml>
+            </epub:case>
+
+            <epub:default>
+                <p>H<sub>2</sub>SO<sub>4</sub></p>
+            </epub:default>
+        </epub:switch>
+        
+        <p>
+            <epub:switch id="inline">
+                <epub:case required-namespace="http://www.example.org/inline"
+                    xmlns:foo="http://www.example.org/inline"> foo <foo:span>bar</foo:span> <em>baz</em> </epub:case>
+                <epub:default
+                    > foo <span>bar</span> <em>baz</em> </epub:default>
+            </epub:switch>
+        </p>
+        
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/tables-001.xhtml b/src/test/resources/30/single/xhtml/valid/tables-001.xhtml
new file mode 100644
index 0000000..d928707
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/tables-001.xhtml
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <title>Tables 001</title>
+    </head>
+    <body>
+        <p>In the following table, characteristics are given in the second column, with the negative
+            side in the left column and the positive side in the right column.</p>
+        <table>
+            <caption>Characteristics with positive and negative sides</caption>
+            <thead>
+                <tr>
+                    <th id="n"> Negative</th>
+                    <th> Characteristic</th>
+                    <th> Positive</th>
+                </tr>
+            </thead>
+            <tbody>
+                <tr>
+                    <td headers="n r1"> Sad</td>
+                    <th id="r1"> Mood</th>
+                    <td> Happy</td>
+                </tr>
+                <tr>
+                    <td headers="n r2"> Failing</td>
+                    <th id="r2"> Grade</th>
+                    <td> Passing</td>
+                </tr>
+            </tbody>
+        </table>
+        <table>
+            <caption>
+                <strong>Characteristics with positive and negative sides.</strong>
+                <p>Characteristics are given in the second column, with the negative side in the
+                    left column and the positive side in the right column.</p>
+            </caption>
+            <thead>
+                <tr>
+                    <th id="nx"> Negative</th>
+                    <th> Characteristic</th>
+                    <th> Positive</th>
+                </tr>
+            </thead>
+            <tbody>
+                <tr>
+                    <td headers="nx r1x"> Sad</td>
+                    <th id="r1x"> Mood</th>
+                    <td> Happy</td>
+                </tr>
+                <tr>
+                    <td headers="nx r2x"> Failing</td>
+                    <th id="r2x"> Grade</th>
+                    <td> Passing</td>
+                </tr>
+            </tbody>
+        </table>
+        <table>
+            <caption>
+                <strong>Characteristics with positive and negative sides.</strong>
+                <details>
+                    <summary>Help</summary>
+                    <p>Characteristics are given in the second column, with the negative side in the
+                        left column and the positive side in the right column.</p>
+                </details>
+            </caption>
+        </table>
+        <table>
+            <caption>Specification values: <b>Steel</b>, <b>Castings</b>, Ann. A.S.T.M. A27-16,
+                Class B;* P max. 0.06; S max. 0.05.</caption>
+            <thead>
+                <tr>
+                    <th rowspan="2">Grade.</th>
+                    <th rowspan="2">Yield Point.</th>
+                    <th colspan="2">Ultimate tensile strength</th>
+                    <th rowspan="2">Per cent elong. 50.8mm or 2 in.</th>
+                    <th rowspan="2">Per cent reduct. area.</th>
+                </tr>
+                <tr>
+                    <th>kg/mm<sup>2</sup></th>
+                    <th>lb/in<sup>2</sup></th>
+                </tr>
+            </thead>
+            <tbody>
+                <tr>
+                    <td>Hard</td>
+                    <td>0.45 ultimate</td>
+                    <td>56.2</td>
+                    <td>80,000</td>
+                    <td>15</td>
+                    <td>20</td>
+                </tr>
+                <tr>
+                    <td>Medium</td>
+                    <td>0.45 ultimate</td>
+                    <td>49.2</td>
+                    <td>70,000</td>
+                    <td>18</td>
+                    <td>25</td>
+                </tr>
+                <tr>
+                    <td>Soft</td>
+                    <td>0.45 ultimate</td>
+                    <td>42.2</td>
+                    <td>60,000</td>
+                    <td>22</td>
+                    <td>30</td>
+                </tr>
+            </tbody>
+        </table>
+            
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/text-001.xhtml b/src/test/resources/30/single/xhtml/valid/text-001.xhtml
new file mode 100644
index 0000000..f78ac2a
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/text-001.xhtml
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <title>Forms 001</title>
+    </head>
+    <body>
+        <nav>
+            <ul>
+                <li>
+                    <a href="/">Home</a>
+                </li>
+                <li>
+                    <a href="/news">News</a>
+                </li>
+                <li>
+                    <a>Examples</a>
+                </li>
+                <li>
+                    <a href="/legal">Legal</a>
+                </li>
+            </ul>
+        </nav>
+        <aside class="advertising">
+            <h1>Advertising</h1>
+            <a href="http://ad.example.com/?adid=1929&pubid=1422">
+                <section>
+                    <h1>Mellblomatic 9000!</h1>
+                    <p>Turn all your widgets into mellbloms!</p>
+                    <p>Only $9.99 plus shipping and handling.</p>
+                </section>
+            </a>
+            <a href="http://ad.example.com/?adid=375&pubid=1422">
+                <section>
+                    <h1>The Mellblom Browser</h1>
+                    <p>Web browsing at the speed of light.</p>
+                    <p>No other browser goes faster!</p>
+                </section>
+            </a>
+        </aside>
+        <p><em>Cats are <em>cute</em> animals!</em></p>
+        <p><strong>Warning.</strong> This dungeon is dangerous. <strong>Avoid the ducks.</strong>
+            Take any gold you find. <strong><strong>Do not take any of the diamonds</strong>, they
+                are explosive and <strong>will destroy anything within ten meters.</strong></strong>
+            You have been warned.</p>
+        <dl>
+            <dt>Single room</dt>
+            <dd>199 € <small>breakfast included, VAT not included</small></dd>
+            <dt>Double room</dt>
+            <dd>239 € <small>breakfast included, VAT not included</small></dd>
+        </dl>
+        <p><s>Recommended retail price: $3.99 per bottle</s></p>
+        <p>My favorite book is <cite>The Reality Dysfunction</cite> by Peter F. Hamilton. My
+            favorite comic is <cite>Pearls Before Swine</cite> by Stephan Pastis. My favorite track
+            is <cite>Jive Samba</cite> by the Cannonball Adderley Sextet.</p>
+        <p>The man said <q>Things that are impossible just take longer</q>. I disagreed with
+            him.</p>
+        <p>The W3C page <cite>About W3C</cite> says the W3C's mission is <q
+                cite="http://www.w3.org/Consortium/">To lead the World Wide Web to its full
+                potential by developing protocols and guidelines that ensure long-term growth for
+                the Web</q>. I disagree with this mission.</p>
+        <p>The <dfn><abbr title="Garage Door Opener">GDO</abbr></dfn> is a device that allows
+            off-world teams to open the iris.</p>
+        <!-- ... later in the document: -->
+        <p>Teal'c activated his <abbr title="Garage Door Opener">GDO</abbr> and so Hammond ordered
+            the iris to be opened.</p>
+        <p>The <dfn id="gdo"><abbr title="Garage Door Opener">GDO</abbr></dfn> is a device that
+            allows off-world teams to open the iris.</p>
+        <!-- ... later in the document: -->
+        <p>Teal'c activated his <a href="#gdo"><abbr title="Garage Door Opener">GDO</abbr></a> and
+            so Hammond ordered the iris to be opened.</p>
+        <p>The <dfn id="whatwg"><abbr title="Web Hypertext Application Technology Working Group"
+                    >WHATWG</abbr></dfn> is a loose unofficial collaboration of Web browser
+            manufacturers and interested parties who wish to develop new technologies designed to
+            allow authors to write and deploy Applications over the World Wide Web.</p>
+        <p>The <dfn id="whatwg2">Web Hypertext Application Technology Working Group</dfn> (<abbr
+                title="Web Hypertext Application Technology Working Group">WHATWG</abbr>) is a loose
+            unofficial collaboration of Web browser manufacturers and interested parties who wish to
+            develop new technologies designed to allow authors to write and deploy Applications over
+            the World Wide Web.</p>
+        <p>The <abbr title="Web Hypertext Application Technology Working Group">WHATWG</abbr>
+            started working on HTML5 in 2004.</p>
+        <p>Two <abbr title="Working Group">WG</abbr>s worked on this specification: the
+                <abbr>WHATWG</abbr> and the <abbr>HTMLWG</abbr>.</p>
+        <div class="vevent">
+            <a class="url" href="http://www.web2con.com/">http://www.web2con.com/</a>
+            <span class="summary">Web 2.0 Conference</span>: <time class="dtstart"
+                datetime="2007-10-05">October 5</time> - <time class="dtend" datetime="2007-10-20"
+                >19</time>, at the <span class="location">Argent Hotel, San Francisco, CA</span>
+        </div>
+        <p>I usually have a snack at <time>16:00</time>.</p>
+        <article>
+            <h1>Small tasks</h1>
+            <footer>Published <time pubdate="" datetime="2009-08-30">today</time>.</footer>
+            <p>I put a bike bell on his bike.</p>
+        </article>
+        <article>
+            <h1>Small tasks</h1>
+            <footer>Published <time pubdate="" datetime="2009-08-30T07:13Z"></time>.</footer>
+            <p>I put a bike bell on his bike.</p>
+        </article>
+        <p>The <code>code</code> element represents a fragment of computer code.</p>
+        <p>When you call the <code>activate()</code> method on the <code>robotSnowman</code> object,
+            the eyes glow.</p>
+        <p>The example below uses the <code>begin</code> keyword to indicate the start of a
+            statement block. It is paired with an <code>end</code> keyword, which is followed by the
+                <code>.</code> punctuation character (full stop) to indicate the end of the
+            program.</p>
+        <pre><code class="language-pascal">var i: Integer;
+begin
+   i := 1;
+   end.</code></pre>
+        <p>If there are <var>n</var> pipes leading to the ice cream factory then I expect at
+                <em>least</em>
+            <var>n</var> flavors of ice cream to be available for purchase!</p>
+        <pre><samp><span class="prompt">jdoe at mowmow:~$</span> <kbd>ssh demo.example.com</kbd>
+Last login: Tue Apr 12 09:10:17 2005 from mowmow.example.com on pts/1
+Linux demo 2.6.10-grsec+gg3+e+fhs6b+nfs+gr0501+++p3+c4a+gr2b-reslog-v6.189 #1 SMP Tue Feb 1 11:22:36 PST 2005 i686 unknown
+
+<span class="prompt">jdoe at demo:~$</span> <span class="cursor">_</span></samp></pre>
+        <p>To make George eat an apple, select <kbd><kbd><samp>File</samp></kbd>|<kbd><samp>Eat
+                        Apple...</samp></kbd></kbd>
+        </p>
+        <p>The coordinate of the <var>i</var>th point is (<var>x<sub><var>i</var></sub></var>,
+                        <var>y<sub><var>i</var></sub></var>). For example, the 10th point has
+            coordinate (<var>x<sub>10</sub></var>, <var>y<sub>10</sub></var>).</p>
+        <var>E</var>=<var>m</var><var>c</var><sup>2</sup> f(<var>x</var>, <var>n</var>) =
+            log<sub>4</sub><var>x</var><sup><var>n</var></sup>
+        <p>Raymond tried to sleep.</p>
+        <p><i>The ship sailed away on Thursday</i>, he dreamt. <i>The ship had many people aboard,
+                including a beautiful princess called Carey. He watched her, day-in, day-out, hoping
+                she would notice him, but she never did.</i></p>
+        <p><i>Finally one night he picked up the courage to speak with her—</i></p>
+        <p>Raymond woke with a start as the fire alarm rang out.</p>
+        <p>You enter a small room. Your <b>sword</b> glows brighter. A <b>rat</b> scurries past the
+            corner wall.</p>
+        <p lang="en-US">Consider the following quote:</p>
+        <blockquote lang="en-GB">
+            <p>Look around and you will find, no-one's really <mark>colour</mark> blind.</p>
+        </blockquote>
+        <p lang="en-US">As we can tell from the <em>spelling</em> of the word, the person writing
+            this quote is clearly not American.</p>
+        <article>
+            <style scoped="scoped">
+                blockquote mark,
+                q mark {
+                    font : inherit;
+                    font-style : italic;
+                    text-decoration : none;
+                    background : transparent;
+                    color : inherit;
+                }
+                .bubble em {
+                    font : inherit;
+                    font-size : larger;
+                    text-decoration : underline;
+                }</style>
+            <h1>She knew</h1>
+            <p>Did you notice the subtle joke in the joke on panel 4?</p>
+            <blockquote>
+                <p class="bubble">I didn't <em>want</em> to believe. <mark>Of course on some level I
+                        realized it was a known-plaintext attack.</mark> But I couldn't admit it
+                    until I saw for myself.</p>
+            </blockquote>
+            <p>(Emphasis mine.) I thought that was great. It's so pedantic, yet it explains
+                everything neatly.</p>
+        </article>
+        <ul>
+            <li>User <bdi>jcranmer</bdi>: 12 posts.</li>
+            <li>User <bdi>hober</bdi>: 5 posts.</li>
+            <li>User <bdi>إيان</bdi>: 3 posts.</li>
+        </ul>
+        
+        <pre><code class="lang-c"><span class="keyword">for</span> (<span class="ident">j</span> = 0; <span class="ident">j</span> < 256; <span class="ident">j</span>++) {
+  <span class="ident">i_t3</span> = (<span class="ident">i_t3</span> & 0x1ffff) | (<span class="ident">j</span> << 17);
+  <span class="ident">i_t6</span> = (((((((<span class="ident">i_t3</span> >> 3) ^ <span class="ident">i_t3</span>) >> 1) ^ <span class="ident">i_t3</span>) >> 8) ^ <span class="ident">i_t3</span>) >> 5) & 0xff;
+  <span class="keyword">if</span> (<span class="ident">i_t6</span> == <span class="ident">i_t1</span>)
+    <span class="keyword">break</span>;
+    }</code></pre>
+        
+        <p><a>34 comments.</a><br/>
+            <a>Add a comment.</a></p>
+        <p><label>Name: <input name="name"/></label><br/>
+            <label>Address: <input name="address"/></label></p>
+        
+        <p>So then he pointed at the tiger and screamed
+            "there<wbr/>is<wbr/>no<wbr/>way<wbr/>you<wbr/>are<wbr/>ever<wbr/>going<wbr/>to<wbr/>catch<wbr/>me"!</p>
+        
+    </body>
+</html>
diff --git a/src/test/resources/30/single/xhtml/valid/trigger.xhtml b/src/test/resources/30/single/xhtml/valid/trigger.xhtml
new file mode 100644
index 0000000..b320b9b
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/trigger.xhtml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml"
+    xmlns:epub="http://www.idpf.org/2007/ops"
+    xmlns:ev="http://www.w3.org/2001/xml-events">
+    <head>
+        <epub:trigger ev:observer="pause" ev:event="click" action="pause" ref="test"/>
+        <epub:trigger ev:observer="resume" ev:event="click" action="resume" ref="test"/>
+        <epub:trigger ev:observer="mute" ev:event="click" action="mute" ref="test"/>
+        <epub:trigger ev:observer="mute" ev:event="click" action="show" ref="muted"/>
+        <epub:trigger ev:observer="unmute" ev:event="click" action="unmute" ref="test"/>
+        <epub:trigger ev:observer="unmute" ev:event="click" action="hide" ref="muted"/>
+    </head>
+    <body>
+        <video id="test" src="birds.mp4" width="320" height="240" poster="test.jpg"/>
+        <p>
+            <span class="button" id="resume">Play/Resume</span>
+            <span class="button" id="pause">Pause</span>
+            <span class="button" id="mute">Mute</span>
+            <span class="button" id="unmute">Unmute</span>
+            <span id="muted">MUTED</span>
+        </p>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/30/single/xhtml/valid/video.xhtml b/src/test/resources/30/single/xhtml/valid/video.xhtml
new file mode 100644
index 0000000..9c44071
--- /dev/null
+++ b/src/test/resources/30/single/xhtml/valid/video.xhtml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?oxygen RNGSchema="../../../src/schema/epub-xhtml-30.rnc" type="compact"?>
+<?oxygen SCHSchema="../../../src/schema/epub-xhtml-30.sch"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ssml="http://www.w3.org/2001/10/synthesis" xml:lang="en" lang="en" ssml:alphabet="x-SAMPA">
+    <head>
+        <title>ssml</title>
+    </head>
+    <body>
+        <p ssml:ph="[pra'h-fessah]">Prof.</p>
+        <section ssml:alphabet="ipa">
+            <p ssml:ph="ldskdlklsd">Prof.</p>
+        </section>
+		
+<video src="video.mp4" width="640" height="360" controls="controls" poster="test.jpg" />
+
+    </body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/AreYouReadyV3.xml b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/AreYouReadyV3.xml
new file mode 100644
index 0000000..ea435cf
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/AreYouReadyV3.xml
@@ -0,0 +1,698 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!DOCTYPE dtbook PUBLIC "-//NISO//DTD dtbook 2005-3//EN" "http://www.daisy.org/z3986/2005/dtbook-2005-3.dtd">
+<?xml-stylesheet href="dtbookbasic.css" type="text/css"?>
+<dtbook xmlns="http://www.daisy.org/z3986/2005/dtbook/" version="2005-2" xml:lang="en-IN">
+	<head>
+		<meta content="1.0" name="dt:version" />
+		<meta name="dtb:uid" content="AUTO-UID-4767990567747899000" />
+		<meta content="ARE YOU READY?" name="dc:Title" />
+		<meta content="WikiHow" name="dc:Creator" />
+		<meta content="2009-04-26" name="dc:Date" />
+		<meta content="DAISY India" name="dc:Publisher" />
+		<meta name="dc:Subject" content="A Short Manual for Disaster Management" />
+		<meta content="5078727220897727718" name="dc:Identifier" />
+		<meta name="dc:Language" content="en-IN" />
+	</head>
+	<book showin="blp">
+		<frontmatter>
+			<doctitle id="dtb1" smilref="speechgen0001.smil#tcp1">ARE YOU READY?</doctitle>
+			<docauthor id="dtb2" smilref="speechgen0001.smil#tcp2">WikiHow</docauthor>
+		</frontmatter>
+		<bodymatter id="bodymatter_0001">
+			<level1>
+				<h1 id="dtb3" smilref="speechgen0002.smil#tcp3">A SHORT MANUAL ON DISASTER PREPAREDNESS</h1>
+                <a external="true" href="http://barnesandnoble.com">Barnes and Noble</a>
+                <a external="true" href="waka://barnesandnoble.com">Bad Scheme</a>
+				<blockquote id="dtb4" smilref="speechgen0002.smil#tcs1"><p><sent id="dtb5" smilref="speechgen0002.smil#tcp4">"Articles provided by wikiHow, a wiki building the world's largest, highest quality how-to manual. </sent><sent smilref="speechgen0002.smil#tcp5" id="dtb6">Please edit these article and find author credits at wikiHow.com. </sent><sent smilref="speechgen0002.smil#tcp6" id="dtb7">Content on wikiHow can be shared under a Creative Commons License."</sent></p></blockquote>
+				<p><imggroup><img id="rId51" src="image1.jpg" alt="WikiHow Logo" smilref="speechgen0002.smil#tcp7" /></imggroup>
+				</p>
+				<p><imggroup><img smilref="speechgen0002.smil#tcp8" alt="Creative Commons logo" id="rId62" src="image2.jpg" /></imggroup>
+				</p>
+				<p smilref="speechgen0002.smil#tcp9" id="dtb8">Compiled by</p>
+				<author id="dtb9" smilref="speechgen0002.smil#tcp10" xml:lang="en-IN">Prashant Ranjan Verma
+</author>
+				<p smilref="speechgen0002.smil#tcp11" id="dtb10">www.daisyindia.org</p>
+				<pagenum id="page1" page="normal" smilref="speechgen0002.smil#tcp12">1</pagenum>
+				<level2>
+					<h2 id="dtb11" smilref="speechgen0003.smil#tcp13">CONTENTS
+</h2>
+					<table border="1" id="dtb12" smilref="speechgen0003.smil#tcs2">
+						<col align="right" span="1" />
+						<tbody>
+							<tr id="dtb13" smilref="speechgen0003.smil#tcs3">
+								<td rowspan="1" colspan="1"><p id="dtb14" smilref="speechgen0003.smil#tcp14">Chapter</p></td>
+								<td colspan="1" rowspan="1"><p id="dtb15" smilref="speechgen0003.smil#tcp15">Page</p></td>
+							</tr>
+							<tr id="dtb16" smilref="speechgen0003.smil#tcs4">
+								<td colspan="1" rowspan="1"><p><sent><strong smilref="speechgen0003.smil#tcp16" id="dtb17">1. How to Make a Disaster Plan for Your Family</strong></sent></p>
+								</td>
+								<td rowspan="1" colspan="1"><p><strong id="dtb18" smilref="speechgen0003.smil#tcp17">3</strong></p>
+								</td>
+							</tr>
+							<tr id="dtb19" smilref="speechgen0003.smil#tcs5">
+								<td colspan="1" rowspan="1"><p><sent><strong id="dtb20" smilref="speechgen0003.smil#tcp18">2. How to Create a Home First Aid Kit</strong></sent></p>
+								</td>
+								<td colspan="1" rowspan="1"><p><strong id="dtb21" smilref="speechgen0003.smil#tcp19">6</strong></p>
+								</td>
+							</tr>
+							<tr id="dtb22" smilref="speechgen0003.smil#tcs6">
+								<td rowspan="1" colspan="1"><p><sent><strong id="dtb23" smilref="speechgen0003.smil#tcp20">3. How to Administer Adult CPR (Cardiopulmonary Resuscitation)</strong></sent></p>
+								</td>
+								<td rowspan="1" colspan="1"><p><strong id="dtb24" smilref="speechgen0003.smil#tcp21">9</strong></p>
+								</td>
+							</tr>
+							<tr smilref="speechgen0003.smil#tcs7" id="dtb25">
+								<td colspan="1" rowspan="1"><p><sent><strong smilref="speechgen0003.smil#tcp22" id="dtb26">4. How to Pack an Emergency Kit for the House</strong></sent></p>
+								</td>
+								<td rowspan="1" colspan="1"><p><strong smilref="speechgen0003.smil#tcp23" id="dtb27">11</strong></p>
+								</td>
+							</tr>
+							<tr smilref="speechgen0003.smil#tcs8" id="dtb28">
+								<td colspan="1" rowspan="1"><p><sent><strong smilref="speechgen0003.smil#tcp24" id="dtb29">5. How to Avoid Danger During Civil Unrest</strong></sent></p>
+								</td>
+								<td rowspan="1" colspan="1"><p><strong id="dtb30" smilref="speechgen0003.smil#tcp25">17</strong></p>
+								</td>
+							</tr>
+							<tr id="dtb31" smilref="speechgen0003.smil#tcs9">
+								<td colspan="1" rowspan="1"><p><sent><strong smilref="speechgen0003.smil#tcp26" id="dtb32">6. How to Be Safe During a Landslide</strong></sent></p>
+								</td>
+								<td rowspan="1" colspan="1"><p><strong id="dtb33" smilref="speechgen0003.smil#tcp27">18</strong></p>
+								</td>
+							</tr>
+							<tr id="dtb34" smilref="speechgen0003.smil#tcs10">
+								<td rowspan="1" colspan="1">
+									<p><sent><strong><em id="dtb35" smilref="speechgen0003.smil#tcp28">7. How to React During an Earthquake</em></strong>
+									</sent></p>
+								</td>
+								<td rowspan="1" colspan="1"><p><strong smilref="speechgen0003.smil#tcp29" id="dtb36">19</strong></p>
+								</td>
+							</tr>
+						</tbody>
+					</table>
+					<pagenum id="page2" page="normal" smilref="speechgen0003.smil#tcp30">2</pagenum>
+				</level2>
+				<level2>
+					<h2><sent id="dtb37" smilref="speechgen0004.smil#tcp31">1. </sent><sent smilref="speechgen0004.smil#tcp32" id="dtb38">How to Make a Disaster Plan for Your Family
+</sent></h2>
+					<p><sent id="dtb39" smilref="speechgen0004.smil#tcp33">Disasters, whether natural (hurricanes, tornadoes, and floods, for example) or man-made (i.e. fires, nuclear accidents, or terrorist attacks) can strike at any time, whether we're ready for them or not. </sent><sent smilref="speechgen0004.smil#tcp34" id="dtb40">Even with advance warning, a disaster can be overwhelming, and it's not always possible to communicate with family members who may be at work or school when an emergency  [...]
+					<level3>
+						<h3 smilref="speechgen0005.smil#tcp36" id="dtb42">Steps
+</h3>
+						<list id="dtb43" type="ol" smilref="speechgen0005.smil#tcs11">
+							<li><p><sent smilref="speechgen0005.smil#tcp37" id="dtb44">Determine what disasters your area is susceptible to. </sent><sent smilref="speechgen0005.smil#tcp38" id="dtb45">If you live in Kansas, you don't need to prepare for a hurricane, but you'd better be ready for tornadoes. </sent><sent smilref="speechgen0005.smil#tcp39" id="dtb46">While some disasters, such as fire, can happen anywhere, the hazards you might encounter vary widely from place to place. </sent><sent id="dtb47" s [...]
+							<li><p><sent id="dtb48" smilref="speechgen0005.smil#tcp41">Find out what you should do in case a disaster strikes. </sent><sent id="dtb49" smilref="speechgen0005.smil#tcp42">The organizations above will likely be able to advise you what to do in an emergency. </sent><sent smilref="speechgen0005.smil#tcp43" id="dtb50">They may be able to provide you with evacuation maps and information about local warning systems and emergency plans. </sent><sent id="dtb51" smilref="speechgen0005.s [...]
+							</li>
+							<li><p><sent id="dtb54" smilref="speechgen0005.smil#tcp47">Pick a meeting spot and a way to get in contact with your family members. </sent><sent id="dtb55" smilref="speechgen0005.smil#tcp48">There's a good chance that all your family members won't be in the same place when disaster strikes, so it's important to have a predetermined rendezvous point. </sent><sent id="dtb56" smilref="speechgen0005.smil#tcp49">Choose a spot that will likely be safe and that is well away from your ne [...]
+							<li><p><sent id="dtb57" smilref="speechgen0005.smil#tcp50">Designate a friend or relative as a contact person that you, your spouse, and your children can call if you can't meet up. </sent><sent smilref="speechgen0005.smil#tcp51" id="dtb58">In order to minimize the chance that the contact person will also be affected by the disaster, choose someone who lives in a distant town or in a different state. </sent><sent smilref="speechgen0005.smil#tcp52" id="dtb59">Make sure that all you [...]
+							<li><p><sent id="dtb60" smilref="speechgen0005.smil#tcp53">Discuss disaster scenarios with your family and make sure everyone knows what to do in all the likely emergency scenarios. </sent><sent smilref="speechgen0005.smil#tcp54" id="dtb61">It's important to educate yourself on how to respond to likely hazards, but what happens to your family if they are away from you or if you're killed or injured? </sent><sent smilref="speechgen0005.smil#tcp55" id="dtb62">It's not enough for one [...]
+							<li>
+								<p><sent smilref="speechgen0005.smil#tcp56" id="dtb63">Fix potential hazards in your home. </sent><sent smilref="speechgen0005.smil#tcp57" id="dtb64">Once you've identified potential disaster scenarios, thoroughly inspect your house and try to make it as safe as possible. </sent><sent smilref="speechgen0005.smil#tcp58" id="dtb65">Here are just a few examples:</sent></p>
+								<pagenum page="normal" smilref="speechgen0005.smil#tcp59" id="page3">3</pagenum>
+							</li>
+							<li><p><sent smilref="speechgen0005.smil#tcp60" id="dtb66">Every home should have smoke detectors and fire extinguishers. </sent><sent id="dtb67" smilref="speechgen0005.smil#tcp61">Test smoke detectors at least once a month, and replace their batteries yearly or as needed. </sent><sent id="dtb68" smilref="speechgen0005.smil#tcp62">Fire extinguishers should be recharged according to the manufacturer's instructions, and family members should learn how to use them. </sent><sent id="d [...]
+							<li><p id="dtb70" smilref="speechgen0005.smil#tcp64">If you live in an area prone to earthquakes, you wouldn't want a tall, heavy bookcase sitting right next to the baby's crib, as it could be knocked over in a quake. </p></li>
+							<li><p smilref="speechgen0005.smil#tcp65" id="dtb71">If you live near woods with the possibility of forest fires, you should clear your property of brush and high grass to create a buffer zone between your home and the fire. </p></li>
+							<li><p><sent smilref="speechgen0005.smil#tcp66" id="dtb72">Teach your family basic life-saving techniques. </sent><sent smilref="speechgen0005.smil#tcp67" id="dtb73">Everyone who can learn CPR and first aid should take a certification class and keep their certification current. </sent><sent id="dtb74" smilref="speechgen0005.smil#tcp68">Adults and older children should know how to turn off gas, electricity and water if the house is damaged, and everyone should know how to detect a  [...]
+							<li><p><sent id="dtb76" smilref="speechgen0005.smil#tcp70">Assemble a disaster kit. </sent><sent smilref="speechgen0005.smil#tcp71" id="dtb77">Be prepared for emergencies with at least a three-day supply of non-perishable food and potable water, prescription medications, first aid supplies, and other things you might need if you have no utilities and no way to purchase supplies. </sent><sent id="dtb78" smilref="speechgen0005.smil#tcp72">Keep a smaller kit in the trunk of your car. [...]
+							<li><p><sent id="dtb81" smilref="speechgen0005.smil#tcp75">Practice your plan. </sent><sent smilref="speechgen0005.smil#tcp76" id="dtb82">Practice makes perfect, and in a life-or-death situation, you want to respond perfectly. </sent><sent smilref="speechgen0005.smil#tcp77" id="dtb83">Periodically go over your emergency plans with your family, and update them as needed. </sent><sent id="dtb84" smilref="speechgen0005.smil#tcp78">Quiz and drill your family on important safety concep [...]
+							<li><p><sent smilref="speechgen0005.smil#tcp81" id="dtb87">Have contingency plans. </sent><sent smilref="speechgen0005.smil#tcp82" id="dtb88">In the event your emergency site is unavailable or other things change, it's a good idea to have an alternate already identified. </sent></p></li>
+						</list>
+					</level3>
+					<level3>
+						<h3 id="dtb89" smilref="speechgen0006.smil#tcp83">Tips
+</h3>
+						<list id="dtb90" smilref="speechgen0006.smil#tcs12" type="ul">
+							<li><p><sent id="dtb91" smilref="speechgen0006.smil#tcp84">If your workplace, school, or town hasn't developed an emergency plan, take the initiative to start planning one. </sent><sent id="dtb92" smilref="speechgen0006.smil#tcp85">Go to meetings of local officials and request assistance, and collaborate with your neighbors and coworkers to help make your whole community safer. </sent></p></li>
+							<li>
+								<p><sent smilref="speechgen0006.smil#tcp86" id="dtb93">It is a good idea to pick two or three emergency contacts, one who lives outside of your local area code in addition to one who lives within and also someone who can receive text messages. </sent><sent id="dtb94" smilref="speechgen0006.smil#tcp87">In major disasters one can often call a number outside your area code but not within. </sent><sent id="dtb95" smilref="speechgen0006.smil#tcp88">In extreme cases, people have had to [...]
+								<pagenum page="normal" id="page4" smilref="speechgen0006.smil#tcp90">4</pagenum>
+							</li>
+							<li><p><sent id="dtb97" smilref="speechgen0006.smil#tcp91">Besides the resources mentioned above, you might also want to check with your insurance company for ways to make your house safer. </sent><sent id="dtb98" smilref="speechgen0006.smil#tcp92">Insurers have an interest in minimizing the risk of injury or damage to your home in the event of a disaster, so they will usually be happy to provide you with information. </sent><sent smilref="speechgen0006.smil#tcp93" id="dtb99">Many [...]
+							<li><p><sent smilref="speechgen0006.smil#tcp94" id="dtb100">Be serious about your emergency planning, but be careful not to irrationally frighten children or to become obsessed with disaster yourself. </sent><sent id="dtb101" smilref="speechgen0006.smil#tcp95">Planning makes you safer, and it should make you and your family feel safer, too. </sent></p></li>
+							<li><p><sent id="dtb102" smilref="speechgen0006.smil#tcp96">If you are having difficulty with any of these steps, there are many resources on the internet to assist in this process. </sent><sent id="dtb103" smilref="speechgen0006.smil#tcp97">Check out these sites: Ready.gov, operated by the US Department of Homeland Security and Prepare.org, operated by the American Red Cross. </sent></p></li>
+							<li>
+								<p><sent smilref="speechgen0006.smil#tcp98" id="dtb104">Purchase and use "Self Powered Radios" and "Self Powered" flashlights. </sent><sent id="dtb105" smilref="speechgen0006.smil#tcp99">These do <strong>not</strong> use batteries and are <em>safer</em> than candles. </sent><sent smilref="speechgen0006.smil#tcp100" id="dtb106">Some of these models can also charge your cell phone. </sent></p>
+							</li>
+						</list>
+					</level3>
+					<level3>
+						<h3 smilref="speechgen0007.smil#tcp101" id="dtb107">Warnings
+</h3>
+						<p><sent smilref="speechgen0007.smil#tcp102" id="dtb108">This is not intended to be a complete guide to disaster preparation. </sent><sent id="dtb109" smilref="speechgen0007.smil#tcp103">You will need to assess the unique set of potential hazards in your area and prepare for them accordingly. </sent></p>
+						<pagenum id="page5" smilref="speechgen0007.smil#tcp104" page="normal">5</pagenum>
+					</level3>
+				</level2>
+				<level2>
+					<h2><sent id="dtb110" smilref="speechgen0008.smil#tcp105">2. </sent><sent id="dtb111" smilref="speechgen0008.smil#tcp106">How to Create a Home First Aid Kit
+</sent></h2>
+					<p><imggroup><img alt="Putting together a first kit at home" smilref="speechgen0008.smil#tcp107" src="image3.jpg" id="rId83" /></imggroup>
+					</p>
+					<p><sent smilref="speechgen0008.smil#tcp108" id="dtb112">Emergencies happen. you can prepare for one by making a first aid kit. </sent><sent id="dtb113" smilref="speechgen0008.smil#tcp109">A first aid kit can be prepared by following the steps given below.</sent></p>
+					<level3>
+						<h3 smilref="speechgen0009.smil#tcp110" id="dtb114">Steps
+</h3>
+						<list id="dtb115" smilref="speechgen0009.smil#tcs13" type="ol">
+							<li><p><sent id="dtb116" smilref="speechgen0009.smil#tcp111">Choose a nice sized container. </sent><sent id="dtb117" smilref="speechgen0009.smil#tcp112">It needs to be large enough to store the materials. </sent></p></li>
+							<li><p><sent smilref="speechgen0009.smil#tcp113" id="dtb118">Store it an easily accessed locale in your home. </sent><sent id="dtb119" smilref="speechgen0009.smil#tcp114">Teach your children and frequent house guests where the first aid kit is stored. </sent></p></li>
+							<li>
+								<p id="dtb120" smilref="speechgen0009.smil#tcp115">Fill the box with the following <strong>sterile</strong> and/or <strong>newly-bought</strong> items: </p>
+								<list type="ol" enum="a" smilref="speechgen0009.smil#tcs14" id="dtb121">
+									<li><p smilref="speechgen0009.smil#tcp116" id="dtb122">Adhesive dressings, of varied size and shape, from regular Band-Aid shapes to small squares to large </p></li>
+									<li><p smilref="speechgen0009.smil#tcp117" id="dtb123">Small (but sharp) scissors </p></li>
+									<li><p><sent id="dtb124" smilref="speechgen0009.smil#tcp118">A package of gauze pads. </sent><sent smilref="speechgen0009.smil#tcp119" id="dtb125">They can be large, because you can always cut them if necessary. </sent></p></li>
+									<li><p smilref="speechgen0009.smil#tcp120" id="dtb126">Adhesive tape (Not like cellophane tape) </p></li>
+									<li><p id="dtb127" smilref="speechgen0009.smil#tcp121">Cotton Balls, large and small, or tampons </p></li>
+									<li>
+										<p><span class="normalized" smilref="speechgen0009.smil#tcp122" id="dtb128">Rubbing non-Alcohol wipes for <strong><em>cleaning external surfaces only</em></strong> (i.e. cleaning dirt off of <em>unbroken</em>skin, or wiping down a surface) </span> </p>
+									</li>
+									<li><p smilref="speechgen0009.smil#tcp123" id="dtb129">Antibiotic Ointment, for keeping the infection out of cuts, scrapes, etc. </p></li>
+									<li><p smilref="speechgen0009.smil#tcp124" id="dtb130">A thermometer </p></li>
+									<li><p id="dtb131" smilref="speechgen0009.smil#tcp125">Tweezers for pulling out splinter </p></li>
+									<li><p smilref="speechgen0009.smil#tcp126" id="dtb132">Non-latex gloves, in case of blood,body fluids and dangerous waste </p></li>
+									<li><p id="dtb133" smilref="speechgen0009.smil#tcp127">keep two pairs for the smallest kit </p></li>
+									<li><p smilref="speechgen0009.smil#tcp128" id="dtb134">A bee sting kit </p></li>
+									<li><p id="dtb135" smilref="speechgen0009.smil#tcp129">Insect Repellant </p></li>
+									<li><p id="dtb136" smilref="speechgen0009.smil#tcp130">sterile dressings(a sterile pad attached to a roller bandage) </p></li>
+									<li><p id="dtb137" smilref="speechgen0009.smil#tcp131">roller bandages </p></li>
+									<li><p smilref="speechgen0009.smil#tcp132" id="dtb138">triangular bandages </p></li>
+									<li><p smilref="speechgen0009.smil#tcp133" id="dtb139">sterile saline </p></li>
+									<li><p id="dtb140" smilref="speechgen0009.smil#tcp134">safety pins and bandage clips </p></li>
+								</list>
+							</li>
+						</list>
+						<pagenum smilref="speechgen0009.smil#tcp135" id="page6" page="normal">6</pagenum>
+						<p id="dtb141" smilref="speechgen0009.smil#tcp136">You can use these items, if you have no supplies in an emergency: </p>
+						<list type="ul" smilref="speechgen0009.smil#tcs15" id="dtb142">
+							<li><p smilref="speechgen0009.smil#tcp137" id="dtb143">sticks for splints </p></li>
+							<li><p smilref="speechgen0009.smil#tcp138" id="dtb144">cloth for bleeding,slings. </p></li>
+							<li><p smilref="speechgen0009.smil#tcp139" id="dtb145">Water,to clean wounds and eyes. </p></li>
+						</list>
+					</level3>
+					<level3>
+						<h3 smilref="speechgen0010.smil#tcp140" id="dtb146">Tips
+</h3>
+						<list id="dtb147" smilref="speechgen0010.smil#tcs16" type="ol">
+							<li><p id="dtb148" smilref="speechgen0010.smil#tcp141">You can also use a store bought kit and and add other items like alcohol or hydrogen peroxide, cotton balls,extra bandages and a thermometer. </p></li>
+							<li><p smilref="speechgen0010.smil#tcp142" id="dtb149">Cotton swabs are optional </p></li>
+							<li><p id="dtb150" smilref="speechgen0010.smil#tcp143">For antibiotic ointment, Neosporin is recommended, because it does not sting the cut. </p></li>
+						</list>
+						<p><imggroup><img smilref="speechgen0010.smil#tcp144" src="image4.jpg" alt="CPR breathing masks" id="rId94" /></imggroup>
+						</p>
+						<p><sent id="dtb151" smilref="speechgen0010.smil#tcp145">You could save a life by learning first aid. </sent><sent smilref="speechgen0010.smil#tcp146" id="dtb152">Go to Your local red cross or other organisation. </sent></p>
+						<list type="ul" id="dtb153" smilref="speechgen0010.smil#tcs17"><li><p id="dtb154" smilref="speechgen0010.smil#tcp147">Blue items are available for kitcens ECT. </p></li>
+						</list>
+						<p><imggroup><img alt="sketch showing a person pressing the chest of another person lying on the floor" smilref="speechgen0010.smil#tcp148" id="rId105" src="image5.jpg" /></imggroup>
+						</p>
+						<pagenum id="page7" smilref="speechgen0010.smil#tcp149" page="normal">7</pagenum>
+					</level3>
+					<level3>
+						<h3 id="dtb155" smilref="speechgen0011.smil#tcp150">Warnings
+</h3>
+						<list smilref="speechgen0011.smil#tcs18" id="dtb156" type="ol">
+							<li><p smilref="speechgen0011.smil#tcp151" id="dtb157">Wash tweezers, scissors, and thermometer after each use. </p></li>
+							<li><p smilref="speechgen0011.smil#tcp152" id="dtb158">Be aware of what you use and don't let supplies get low! </p></li>
+							<li><p smilref="speechgen0011.smil#tcp153" id="dtb159">Be sure everyone who would potentially use the kit is not allergic to any of the ingredients. </p></li>
+							<li><p smilref="speechgen0011.smil#tcp154" id="dtb160">Do not store prescriptions in the first aid kit,items such as an epipen are all right though </p></li>
+							<li><p smilref="speechgen0011.smil#tcp155" id="dtb161">Don't use any products containing natural rubber latex (NRL), someone could be allergic. </p></li>
+						</list>
+						<pagenum id="page8" page="normal" smilref="speechgen0011.smil#tcp156">8</pagenum>
+					</level3>
+				</level2>
+				<level2>
+					<h2><sent id="dtb162" smilref="speechgen0012.smil#tcp157">3. </sent><sent smilref="speechgen0012.smil#tcp158" id="dtb163">How to Administer Adult CPR (Cardiopulmonary Resuscitation)
+</sent></h2>
+					<p><imggroup><img alt="showing Adult CPR " src="image11.jpg" id="rId1611" smilref="speechgen0012.smil#tcp159" /></imggroup>
+					</p>
+					<p><sent smilref="speechgen0012.smil#tcp160" id="dtb164">Let's hope you never have to be put in the situation where someone is in need of CPR. </sent><sent id="dtb165" smilref="speechgen0012.smil#tcp161">In case you are, it would be helpful to be informed on how to perform this technique. </sent><sent id="dtb166" smilref="speechgen0012.smil#tcp162">You may end up saving a person's life. </sent><sent smilref="speechgen0012.smil#tcp163" id="dtb167">These instructions are for an adult  [...]
+					<level3>
+						<h3 smilref="speechgen0013.smil#tcp166" id="dtb170">Steps
+</h3>
+						<list id="dtb171" smilref="speechgen0013.smil#tcs19" type="ol">
+							<li><p smilref="speechgen0013.smil#tcp167" id="dtb172"><strong>Perform</strong> CPR only if certified. </p>
+							</li>
+							<li>
+								<p><sent><strong id="dtb173" smilref="speechgen0013.smil#tcp168">Check the scene for safety</strong>. </sent><sent smilref="speechgen0013.smil#tcp169" id="dtb174">Is there a car exhaust running? </sent><sent smilref="speechgen0013.smil#tcp170" id="dtb175">A gas stove? </sent><sent smilref="speechgen0013.smil#tcp171" id="dtb176">Is there a fire? </sent></p>
+								<list enum="a" id="dtb177" type="ol" smilref="speechgen0013.smil#tcs20">
+									<li><p><sent smilref="speechgen0013.smil#tcp172" id="dtb178">If there is anything that could endanger you or the victim, see if there is something you can do to counteract it. </sent><sent id="dtb179" smilref="speechgen0013.smil#tcp173">Open a window, turn off the stove, or put out the fire if possible. </sent><sent smilref="speechgen0013.smil#tcp174" id="dtb180">Anything you can do to counteract the danger. </sent></p></li>
+									<li><p><sent id="dtb181" smilref="speechgen0013.smil#tcp175">However, if there is nothing you can do to counteract the danger, move the victim. </sent><sent smilref="speechgen0013.smil#tcp176" id="dtb182">The best way to move the victim is by placing a blanket or a coat underneath their back and pulling on the coat or blanket. </sent></p></li>
+								</list>
+							</li>
+							<li>
+								<p><sent smilref="speechgen0013.smil#tcp177" id="dtb183">Now that the scene is safe, <strong>check the victim for consciousness</strong> by shaking or tapping their shoulder and saying in a loud, clear voice, "Are you okay? </sent><sent id="dtb184" smilref="speechgen0013.smil#tcp178">Are you okay?" </sent></p>
+								<list smilref="speechgen0013.smil#tcs21" enum="a" type="ol" id="dtb185">
+									<li><p><sent id="dtb186" smilref="speechgen0013.smil#tcp179">If they respond, they are conscious. </sent><sent id="dtb187" smilref="speechgen0013.smil#tcp180">They may have just been sleeping, or they could have been unconscious. </sent><sent id="dtb188" smilref="speechgen0013.smil#tcp181">If it still appears to be an emergency situation (<abbr title="for example">e.g.</abbr> they are having trouble breathing, they appear to be fading in between consciousness and unconsciousness [...]
+									<li><p id="dtb190" smilref="speechgen0013.smil#tcp183">If they do not respond, continue on to the next step. </p></li>
+								</list>
+							</li>
+							<li>
+								<p><sent><strong id="dtb191" smilref="speechgen0013.smil#tcp184">Send for help</strong>. </sent><sent smilref="speechgen0013.smil#tcp185" id="dtb192">The more people available for this step the better, however, it can be done alone. </sent><sent id="dtb193" smilref="speechgen0013.smil#tcp186">Send someone to call the Emergency Medical Services (<acronym pronounce="no" title="European Monetary System">EMS</acronym>). </sent><sent id="dtb194" smilref="speechgen0013.smil#tcp187">Cal [...]
+							</li>
+							<li>
+								<p><strong id="dtb199" smilref="speechgen0013.smil#tcp192">Check for signs of life: </strong></p>
+								<list id="dtb200" smilref="speechgen0013.smil#tcs22" enum="a" type="ol"><li><p><sent id="dtb201" smilref="speechgen0013.smil#tcp193">Place your hand on the victims forehead and two fingers on their chin and tilt the head back slightly to open the airway. </sent><sent smilref="speechgen0013.smil#tcp194" id="dtb202">Place your cheek above their mouth and stare at their chest (you cheeks have a lot of nerves in it, so it's easier to feel the patients breath). </sent><sent smilref="s [...]
+								</list>
+							</li>
+							<li><p id="dtb206" smilref="speechgen0013.smil#tcp198">If there are no signs of life, <strong>place a breathing barrier</strong> over the victim's mouth. </p>
+							</li>
+							<li><p><sent smilref="speechgen0013.smil#tcp199" id="dtb207"><strong>Give two rescue breaths</strong> Keeping the airway open, take the fingers that were on the forehead and pinch the victim's nose closed. </sent><sent smilref="speechgen0013.smil#tcp200" id="dtb208">Make a seal with your mouth over the victim's mouth and breathe out for about one second. </sent><sent id="dtb209" smilref="speechgen0013.smil#tcp201">Make sure you breath slowly, as this will make sure the air goes in [...]
+							</li>
+							<li><p><sent id="dtb215" smilref="speechgen0013.smil#tcp207">Place your hands on top of each other and place them in the center of the chest (on the <strong>breastbone</strong>) between the two nipples. </sent><sent id="dtb216" smilref="speechgen0013.smil#tcp208">Your ring finger should be on top of the nipple (this will lower the chances of breaking a rib or ribs). </sent></p>
+							</li>
+							<li><p><sent smilref="speechgen0013.smil#tcp209" id="dtb217">Compress the chest by pushing straight down approximately two inches deep. </sent><sent id="dtb218" smilref="speechgen0013.smil#tcp210">Do thirty of these compressions, and do them fast, approximately 30 compressions in 30 seconds. </sent></p></li>
+							<li><p id="dtb219" smilref="speechgen0013.smil#tcp211">Repeat Steps 6 through 8 for one minute, delivering two rescue breaths every 30 seconds/compressions. </p></li>
+							<li><p id="dtb220" smilref="speechgen0013.smil#tcp212">Recheck for signs of life. </p></li>
+							<li><p smilref="speechgen0013.smil#tcp213" id="dtb221">Continue CPR until someone takes over for you, emergency personnel arrive, you are too exhausted to continue or an AED is available for immediate use, or pulse and breathing return. </p></li>
+						</list>
+						<pagenum page="normal" id="page9" smilref="speechgen0013.smil#tcp214">9</pagenum>
+					</level3>
+					<level3>
+						<h3 id="dtb222" smilref="speechgen0014.smil#tcp215">Tips
+</h3>
+						<list id="dtb223" type="ol" smilref="speechgen0014.smil#tcs23">
+							<li><p id="dtb224" smilref="speechgen0014.smil#tcp216">Don't forget to place your hands in the middle of the breastbone at the level of the nipples. </p></li>
+							<li><p smilref="speechgen0014.smil#tcp217" id="dtb225">When moving the victim, try to disturb the body as little as possible. </p></li>
+							<li><p id="dtb226" smilref="speechgen0014.smil#tcp218">ALWAYS call the Emergency Medical Services. </p></li>
+							<li><p><sent smilref="speechgen0014.smil#tcp219" id="dtb227">Get trained! </sent><sent id="dtb228" smilref="speechgen0014.smil#tcp220">You get to learn and practice your skills under the supervision of a trained instructor with the help of a video presentation and CPR training mannequin ("dummy"). </sent></p></li>
+							<li><p id="dtb229" smilref="speechgen0014.smil#tcp221">If you feel the area is unsafe to enter, and it is not safe to move the victim, stay where you are and either send someone to call Emergency Medical Services, or do so yourself and stay with the victim! </p></li>
+							<li><p smilref="speechgen0014.smil#tcp222" id="dtb230">Remember that if a person can talk in full sentences, they are breathing, and if they are breathing, they probably have a pulse. </p></li>
+							<li><p id="dtb231" smilref="speechgen0014.smil#tcp223">Even "bad" CPR is better than no CPR! </p></li>
+						</list>
+					</level3>
+					<level3>
+						<h3 smilref="speechgen0015.smil#tcp224" id="dtb232">Warnings
+</h3>
+						<list id="dtb233" smilref="speechgen0015.smil#tcs24" type="ol">
+							<li><p><sent smilref="speechgen0015.smil#tcp225" id="dtb234">You should learn this at a certified CPR class. </sent><sent id="dtb235" smilref="speechgen0015.smil#tcp226">Training organizations such as the American Heart Association, American Red Cross and other societies in many countries offer such classes. </sent><sent id="dtb236" smilref="speechgen0015.smil#tcp227">If you have no knowledge of CPR, go to one of the classes. </sent><sent smilref="speechgen0015.smil#tcp228" id="dt [...]
+							<li><p smilref="speechgen0015.smil#tcp229" id="dtb238">Be sure to survey the scene for danger before you attempt to administer CPR. </p></li>
+							<li><p id="dtb239" smilref="speechgen0015.smil#tcp230">Remember that CPR is different for adults, children and infants; this CPR is meant to be administered to an adult. </p></li>
+							<li><p id="dtb240" smilref="speechgen0015.smil#tcp231">Always practice CPR with a breathing barrier to prevent disease transmission. </p></li>
+							<li><p smilref="speechgen0015.smil#tcp232" id="dtb241">Don't worry if you break ribs - these can be fixed, being dead can't. </p></li>
+							<li><p id="dtb242" smilref="speechgen0015.smil#tcp233">Do not move the patient unless they are in immediate danger or are in a place that is life threatening. </p></li>
+							<li><p smilref="speechgen0015.smil#tcp234" id="dtb243">Always wear gloves and use a face shield or some other sort of barrier when possible. </p></li>
+						</list>
+						<pagenum page="normal" smilref="speechgen0015.smil#tcp235" id="page10">10</pagenum>
+					</level3>
+				</level2>
+				<level2>
+					<h2><sent id="dtb244" smilref="speechgen0016.smil#tcp236">4. </sent><sent smilref="speechgen0016.smil#tcp237" id="dtb245">How to Pack an Emergency Kit for the House
+</sent></h2>
+					<p><imggroup><img smilref="speechgen0016.smil#tcp238" alt="collecting items for emergency kit" src="image12.jpg" id="rId1712" /></imggroup>
+					</p>
+					<p><sent smilref="speechgen0016.smil#tcp239" id="dtb246">In case an emergency happens in your area, you want to be ready. </sent><sent smilref="speechgen0016.smil#tcp240" id="dtb247">Here are some tips on how to create an emergency kit for your home. </sent><sent id="dtb248" smilref="speechgen0016.smil#tcp241">Remember to also prepare a kit in the event that you may need to evacuate.</sent></p>
+					<level3>
+						<h3 smilref="speechgen0017.smil#tcp242" id="dtb249">Steps</h3>
+						<list type="ol" id="dtb250" smilref="speechgen0017.smil#tcs25">
+							<li><p smilref="speechgen0017.smil#tcp243" id="dtb251"><strong>Look at the Things You'll Need</strong> to see what your kit should contain.</p>
+							</li>
+							<li><p><sent smilref="speechgen0017.smil#tcp244" id="dtb252"><strong>Make a first aid kit</strong> if you don't already have a one.In an emergency you or a loved one could be cut, burned or injured in some other way. </sent><sent smilref="speechgen0017.smil#tcp245" id="dtb253">If you have these basic supplies you are better prepared to help your loved ones when they are hurt. </sent></p>
+							</li>
+							<li><p><sent id="dtb254" smilref="speechgen0017.smil#tcp246"><strong>Determine what hazards exist</strong> in your local area. </sent><sent smilref="speechgen0017.smil#tcp247" id="dtb255">Contact your local emergency manager and ask. </sent><sent smilref="speechgen0017.smil#tcp248" id="dtb256">If your locale does not have an emergency manager, check with your county or state emergency management official for assistance. </sent></p>
+							</li>
+							<li>
+								<p id="dtb257" smilref="speechgen0017.smil#tcp249"><strong>Write a plan</strong> based on the hazards, <strong>then</strong> build a kit to support the plan. </p>
+							</li>
+							<li>
+								<p><sent smilref="speechgen0017.smil#tcp250" id="dtb258"><strong>Purchase</strong> "Self Powered Flashlights" <strong>and</strong> "Self Powered Radios". </sent><sent smilref="speechgen0017.smil#tcp251" id="dtb259">In the event of a disaster, power will be out and batteries will be unavailable, sold out. </sent><sent smilref="speechgen0017.smil#tcp252" id="dtb260">The latest models have the "Weatherband/Emergency Band" and will also charge your <em>cell phone</em>, thus if your c [...]
+							</li>
+							<li>
+								<p><sent><strong smilref="speechgen0017.smil#tcp253" id="dtb261">Pack according to location</strong><strong>.</strong> </sent><sent id="dtb262" smilref="speechgen0017.smil#tcp254">Depending on where you live, you might need different things in an emergency such as flood, hurricane, tornado. </sent><sent smilref="speechgen0017.smil#tcp255" id="dtb263">Of course there are a few things that you should have regardless of location. </sent></p>
+							</li>
+							<li><p><sent id="dtb264" smilref="speechgen0017.smil#tcp256"><strong>Pack a map</strong> in your kit. </sent><sent id="dtb265" smilref="speechgen0017.smil#tcp257">These are especially helpful if you must evacuate and emergency routes may involve detours. </sent></p>
+							</li>
+							<li><p id="dtb266" smilref="speechgen0017.smil#tcp258"><strong>Gather together the items on the list</strong> that you already have at home. </p>
+							</li>
+							<li>
+								<p><sent><strong smilref="speechgen0017.smil#tcp259" id="dtb267">Keep a running list</strong><strong>.</strong> </sent><sent id="dtb268" smilref="speechgen0017.smil#tcp260">If you can't pick up everything at once you should add an item or two to each shopping trip. </sent></p>
+							</li>
+							<li>
+								<p><sent smilref="speechgen0017.smil#tcp261" id="dtb269"><strong>Designate a first aid kit</strong> for emergency or disaster and one for everyday use. </sent><sent smilref="speechgen0017.smil#tcp262" id="dtb270">Your first aid kit should contain: </sent></p>
+								<list smilref="speechgen0017.smil#tcs26" type="ol" id="dtb271" enum="a">
+									<li>
+										<p><sent smilref="speechgen0017.smil#tcp263" id="dtb272"><strong>A minimum of two pairs of Latex gloves</strong> for the smallest kit. </sent><sent id="dtb273" smilref="speechgen0017.smil#tcp264">Remember, it may be a stranger who needs your help and having a latex barrier will help prevent infection. </sent></p>
+										<pagenum smilref="speechgen0017.smil#tcp265" page="normal" id="page11">11</pagenum>
+									</li>
+									<li><p><sent><strong id="dtb274" smilref="speechgen0017.smil#tcp266">Use vinyl gloves if you or a family member is allergic to Latex</strong>. </sent><sent id="dtb275" smilref="speechgen0017.smil#tcp267">Latex allergies can be severe. </sent></p>
+									</li>
+									<li><p><sent smilref="speechgen0017.smil#tcp268" id="dtb276"><strong>Keep more pairs in your disaster kit</strong> that will evacuate with you. </sent><sent id="dtb277" smilref="speechgen0017.smil#tcp269">You may go through several pairs in one emergency. </sent></p>
+									</li>
+									<li><p><sent id="dtb278" smilref="speechgen0017.smil#tcp270"><strong>Check the integrity of the gloves</strong> if they've been stored in changing temperatures. </sent><sent smilref="speechgen0017.smil#tcp271" id="dtb279">They may become brittle. </sent><sent id="dtb280" smilref="speechgen0017.smil#tcp272">Sometimes gloves deeper in a box may still be good so don't toss the box because the first few pairs are bad. </sent><sent smilref="speechgen0017.smil#tcp273" id="dtb281">Look [...]
+									</li>
+									<li><p><sent smilref="speechgen0017.smil#tcp274" id="dtb282"><strong>Sterile dressings</strong> to stop bleeding. </sent><sent id="dtb283" smilref="speechgen0017.smil#tcp275">(Look for bulky dressings called surgi pads in health supply stores) </sent></p>
+									</li>
+									<li><p id="dtb284" smilref="speechgen0017.smil#tcp276"><strong>Cleansing agent/soap</strong> and antibiotic towelettes to disinfect. </p>
+									</li>
+									<li><p smilref="speechgen0017.smil#tcp277" id="dtb285"><strong>Antibiotic ointment</strong> to prevent infection. </p>
+									</li>
+									<li><p smilref="speechgen0017.smil#tcp278" id="dtb286"><strong>Burn ointment</strong> to relieve pain. </p>
+									</li>
+									<li><p id="dtb287" smilref="speechgen0017.smil#tcp279"><strong>Adhesive bandages</strong> in a variety of sizes </p>
+									</li>
+									<li><p><strong id="dtb288" smilref="speechgen0017.smil#tcp280">Gauze pads </strong></p>
+									</li>
+									<li>
+										<p>
+											<strong id="dtb289" smilref="speechgen0017.smil#tcp281">Micropore</strong>
+											<strong smilref="speechgen0017.smil#tcp282" id="dtb290"> tape </strong>
+										</p>
+									</li>
+									<li><p><strong smilref="speechgen0017.smil#tcp283" id="dtb291">Tweezers </strong></p>
+									</li>
+									<li><p><strong smilref="speechgen0017.smil#tcp284" id="dtb292">Scissors </strong></p>
+									</li>
+									<li><p><sent smilref="speechgen0017.smil#tcp285" id="dtb293"><strong>Eye wash</strong> solution to flush the eyes or sterile saline as general decontaminate. </sent><sent id="dtb294" smilref="speechgen0017.smil#tcp286">Sterile saline is available in liter bottles in health supply stores. </sent></p>
+									</li>
+									<li><p><strong smilref="speechgen0017.smil#tcp287" id="dtb295">Thermometer </strong></p>
+									</li>
+									<li><p id="dtb296" smilref="speechgen0017.smil#tcp288"><strong>Prescription medications</strong> you take every day such as insulin, heart medicine and asthma inhalers. </p>
+									</li>
+									<li><p id="dtb297" smilref="speechgen0017.smil#tcp289"><strong>You should periodically rotate medicines</strong> to account for expiration dates and have a plan for refrigerated insulin. </p>
+									</li>
+									<li><p id="dtb298" smilref="speechgen0017.smil#tcp290"><strong>Over the counter pain medicine</strong> (Like Tylenol and Advil) and an antihistamine (Like Benadryl). </p>
+									</li>
+									<li><p smilref="speechgen0017.smil#tcp291" id="dtb299"><strong>Prescribed medical supplies</strong> such as glucose and blood pressure monitoring equipment and supplies. </p>
+									</li>
+								</list>
+							</li>
+							<li>
+								<p id="dtb300" smilref="speechgen0017.smil#tcp292"><strong>Go to the store</strong> to buy the items you don't already have. </p>
+								<pagenum page="normal" id="page12" smilref="speechgen0017.smil#tcp293">12</pagenum>
+							</li>
+							<li>
+								<p><sent><strong id="dtb301" smilref="speechgen0017.smil#tcp294">Obtain a waterproof box</strong><strong>.</strong> </sent><sent smilref="speechgen0017.smil#tcp295" id="dtb302">This does not have to be expensive. </sent><sent id="dtb303" smilref="speechgen0017.smil#tcp296">Just a large waterproof box with a lid. </sent><sent id="dtb304" smilref="speechgen0017.smil#tcp297">These are available in the storage sections of most discount stores. </sent></p>
+								<list enum="a" type="ol" id="dtb305" smilref="speechgen0017.smil#tcs27">
+									<li><p><sent id="dtb306" smilref="speechgen0017.smil#tcp298"><strong>It should be small</strong> enough so that in an emergency, you can roll it into your car, yard, or home in just a few minutes. </sent><sent id="dtb307" smilref="speechgen0017.smil#tcp299">Look for something with wheels and/or handles. </sent></p>
+									</li>
+									<li><p id="dtb308" smilref="speechgen0017.smil#tcp300"><strong>Consider placing kits</strong> in your home, car, and workplace. </p>
+									</li>
+									<li><p><em smilref="speechgen0017.smil#tcp301" id="dtb309">You never know where you'll be when an emergency strikes.</em></p>
+									</li>
+									<li><p smilref="speechgen0017.smil#tcp302" id="dtb310"><strong>Use backpacks</strong> or plastic tool boxes for jump and run bags. </p>
+									</li>
+									<li><p smilref="speechgen0017.smil#tcp303" id="dtb311"><strong>Keep everything sorted</strong> with clear zip sandwich, quart or gallon bags. </p>
+									</li>
+									<li><p id="dtb312" smilref="speechgen0017.smil#tcp304"><strong>For worker/s in large urban areas</strong> keep a back pack under your desk which contains water, energy bars, flashlight, spare socks and good walking shoes in case public transportation is disrupted. </p>
+									</li>
+								</list>
+							</li>
+							<li>
+								<p><sent><strong smilref="speechgen0017.smil#tcp305" id="dtb313">Stay hydrated</strong><strong smilref="speechgen0017.smil#tcp306" id="dtb314">!</strong> </sent><sent id="dtb315" smilref="speechgen0017.smil#tcp307">Water is the most essential life sustaining resource. </sent><sent smilref="speechgen0017.smil#tcp308" id="dtb316">Keeping water (in clean plastic bottles) in your home, car trunk, and workplace will keep you hydrated when you're under stress. </sent></p>
+								<list id="dtb317" type="ol" smilref="speechgen0017.smil#tcs28" enum="a">
+									<li><p id="dtb318" smilref="speechgen0017.smil#tcp309"><strong>You may need more water</strong> for children, nursing mothers, the elderly or if you live in a warm climate. </p>
+									</li>
+									<li><p smilref="speechgen0017.smil#tcp310" id="dtb319"><strong>You may need to add electrolyte</strong> replacement drinks (gatorade or powerade) to replace valuable minerals in warm or humid weather or if you will be very active. </p>
+									</li>
+								</list>
+							</li>
+							<li><p id="dtb320" smilref="speechgen0017.smil#tcp311"><strong>Keep at least a three-day supply</strong> of the items listed in the "Things You'll Need" section (below) in the box. </p>
+							</li>
+							<li><p smilref="speechgen0017.smil#tcp312" id="dtb321"><strong>Consider other things</strong> you might need--especially things such as medication, bandages, or other things according to age, location, or health. </p>
+							</li>
+							<li>
+								<p>
+									<strong smilref="speechgen0017.smil#tcp313" id="dtb322">Don't forget to pack </strong>
+									<strong smilref="speechgen0017.smil#tcp314" id="dtb323">nonperishable</strong>
+									<strong smilref="speechgen0017.smil#tcp315" id="dtb324"> food into your kit </strong>
+								</p>
+							</li>
+						</list>
+					</level3>
+					<level3>
+						<h3 smilref="speechgen0018.smil#tcp316" id="dtb325">Tips
+</h3>
+						<list type="ol" id="dtb326" smilref="speechgen0018.smil#tcs29">
+							<li><p smilref="speechgen0018.smil#tcp317" id="dtb327">Make sure that if space is limited, everything you bring is essential. </p></li>
+							<li><p><sent id="dtb328" smilref="speechgen0018.smil#tcp318">Cell phones are optional, but are highly useful in emergencies. </sent><sent smilref="speechgen0018.smil#tcp319" id="dtb329">Pack two methods for charging or powering your cell phone. </sent><sent smilref="speechgen0018.smil#tcp320" id="dtb330">External battery packs or a car charger are examples. </sent></p></li>
+							<li>
+								<p><sent smilref="speechgen0018.smil#tcp321" id="dtb331">Purchase Self Powered Radios <strong>AND</strong> Self Powered Flashlights. </sent><sent><span smilref="speechgen0018.smil#tcp322" class="normalized" id="dtb332">Batteries will be unavailable in a emergency and some models will also charge your <strong><em>cell </em></strong><strong><em>phones</em></strong>Some of these devices are solar powered as well as using a "crank generator". </span>.</sent><sent id="dtb333" smilref= [...]
+							</li>
+							<li>
+								<p><sent smilref="speechgen0018.smil#tcp324" id="dtb334">Glowsticks. </sent><sent id="dtb335" smilref="speechgen0018.smil#tcp325">Candles are a safety hazard, especially if there is gas leaks going on, explosive, flammable gas is in the area. </sent><sent id="dtb336" smilref="speechgen0018.smil#tcp326">Using candles can cause a fire, even a explosion. </sent></p>
+								<pagenum id="page13" page="normal" smilref="speechgen0018.smil#tcp327">13</pagenum>
+							</li>
+							<li><p smilref="speechgen0018.smil#tcp328" id="dtb337">Family Radio System (FRS) radios can be useful in keeping in touch with your friends or family in a small area when telephones are out. </p></li>
+							<li><p><sent id="dtb338" smilref="speechgen0018.smil#tcp329">Consider becoming an amateur radio operator. </sent><sent smilref="speechgen0018.smil#tcp330" id="dtb339">This allows one to communicate over greater distances, even to other states and countries. </sent></p></li>
+							<li><p><sent id="dtb340" smilref="speechgen0018.smil#tcp331">Practice emergency drills with your family. </sent><sent id="dtb341" smilref="speechgen0018.smil#tcp332">Fire drills are important to teach your family, in case there ever were to be a fire. </sent></p></li>
+							<li><p id="dtb342" smilref="speechgen0018.smil#tcp333">Power inverters (Converts DC power to AC power) for cars are handy for charging cell phones, powering your TV, radios, running refrigerators, etc. </p></li>
+							<li><p><sent id="dtb343" smilref="speechgen0018.smil#tcp334">Keep old prescription glasses when you get new glasses. </sent><sent id="dtb344" smilref="speechgen0018.smil#tcp335">An old pair of glasses is better than none at all. </sent></p></li>
+							<li><p smilref="speechgen0018.smil#tcp336" id="dtb345">Make your kit portable, in the event that you would need to evacuate. </p></li>
+							<li><p><sent smilref="speechgen0018.smil#tcp337" id="dtb346">Remember, many injuries are not life threatening and do not require immediate medical attention. </sent><sent smilref="speechgen0018.smil#tcp338" id="dtb347">Knowing how to treat minor injuries can make a difference in an emergency. </sent><sent id="dtb348" smilref="speechgen0018.smil#tcp339">Consider [Community Emergency Response Team] training. </sent><sent smilref="speechgen0018.smil#tcp340" id="dtb349">Students may b [...]
+							<li><p id="dtb350" smilref="speechgen0018.smil#tcp341">Make sure you include an original prescription bottle with dosage information in case you need to get medicines refilled during an event. </p></li>
+							<li>
+								<p><sent id="dtb351" smilref="speechgen0018.smil#tcp342">In deciding what food to put in your emergency kit, remember to choose food your family will actually eat. </sent><sent smilref="speechgen0018.smil#tcp343" id="dtb352">Good choices include: </sent></p>
+								<list id="dtb353" type="ol" enum="a" smilref="speechgen0018.smil#tcs30">
+									<li><p id="dtb354" smilref="speechgen0018.smil#tcp344">Ready-to-eat canned meats, fruits and vegetables </p></li>
+									<li><p smilref="speechgen0018.smil#tcp345" id="dtb355">Protein or fruit bars </p></li>
+									<li><p id="dtb356" smilref="speechgen0018.smil#tcp346">Dry cereal or granola </p></li>
+									<li><p smilref="speechgen0018.smil#tcp347" id="dtb357">Peanut butter </p></li>
+									<li><p id="dtb358" smilref="speechgen0018.smil#tcp348">Dried fruit </p></li>
+									<li><p smilref="speechgen0018.smil#tcp349" id="dtb359">Nuts </p></li>
+									<li><p smilref="speechgen0018.smil#tcp350" id="dtb360">Crackers </p></li>
+									<li><p id="dtb361" smilref="speechgen0018.smil#tcp351">Canned juices </p></li>
+									<li><p id="dtb362" smilref="speechgen0018.smil#tcp352">Non-perishable pasteurized milk </p></li>
+									<li><p id="dtb363" smilref="speechgen0018.smil#tcp353">High energy foods </p></li>
+									<li><p smilref="speechgen0018.smil#tcp354" id="dtb364">Vitamins </p></li>
+									<li><p id="dtb365" smilref="speechgen0018.smil#tcp355">Food for infants </p></li>
+									<li><p smilref="speechgen0018.smil#tcp356" id="dtb366">Comfort/stress foods </p></li>
+								</list>
+							</li>
+						</list>
+						<pagenum page="normal" smilref="speechgen0018.smil#tcp357" id="page14">14</pagenum>
+					</level3>
+					<level3>
+						<h3 id="dtb367" smilref="speechgen0019.smil#tcp358">Warnings
+</h3>
+						<list type="ol" id="dtb368" smilref="speechgen0019.smil#tcs31">
+							<li><p smilref="speechgen0019.smil#tcp359" id="dtb369">Bring only what you need. </p></li>
+							<li><p><sent id="dtb370" smilref="speechgen0019.smil#tcp360">Consider temperatures where you store your kits - heat can significantly degrade the quality of supplies in a few months. </sent><sent smilref="speechgen0019.smil#tcp361" id="dtb371">Try to store supplies in an area constantly below 80 degrees F and out of direct sunlight. </sent></p></li>
+							<li><p id="dtb372" smilref="speechgen0019.smil#tcp362">Avoid putting salty foods in your emergency kit, as they will only make you thirsty. <sup>[1]</sup> </p>
+							</li>
+						</list>
+					</level3>
+					<level3>
+						<h3 smilref="speechgen0020.smil#tcp363" id="dtb373">Things You'll Need
+</h3>
+						<list type="ol" id="dtb374" smilref="speechgen0020.smil#tcs32">
+							<li><p><sent id="dtb375" smilref="speechgen0020.smil#tcp364">Sleeping bag or warm blankets. </sent><sent smilref="speechgen0020.smil#tcp365" id="dtb376">Make sure you have at least one good sleeping bag or heavy blanket for each family member. </sent></p></li>
+							<li><p><sent id="dtb377" smilref="speechgen0020.smil#tcp366">Water, if the water supply is contaminated or declared undrinkable, you should have several gallons on hand. </sent><sent smilref="speechgen0020.smil#tcp367" id="dtb378">A good guide is one gallon of water per person per day, for 3 days.[2] </sent></p></li>
+							<li><p><sent id="dtb379" smilref="speechgen0020.smil#tcp368">Food for your family for three days -- canned, non-perishable foods that last a long time. </sent><sent id="dtb380" smilref="speechgen0020.smil#tcp369">Don't forget to include a manual can-opener. </sent></p></li>
+							<li><p id="dtb381" smilref="speechgen0020.smil#tcp370">First aid kit </p></li>
+							<li><p id="dtb382" smilref="speechgen0020.smil#tcp371">Flashlight(s) and extra batteries </p></li>
+							<li><p><sent id="dtb383" smilref="speechgen0020.smil#tcp372">Self powered flashlights which are available in the local Walmart and Radio Shack, and also online, as are glow sticks. </sent><sent smilref="speechgen0020.smil#tcp373" id="dtb384">These types of lights are safer than candles, and do not use batteries, which will be unavailable in a emergency </sent></p></li>
+							<li><p><sent smilref="speechgen0020.smil#tcp374" id="dtb385">Wrench, or whatever you would need to turn off utilities in your house. </sent><sent smilref="speechgen0020.smil#tcp375" id="dtb386">Other emergency tools are also a good idea. </sent></p></li>
+							<li><p smilref="speechgen0020.smil#tcp376" id="dtb387">Extra clothing for warmth </p></li>
+							<li><p smilref="speechgen0020.smil#tcp377" id="dtb388">Waterproof matches, or lighter </p></li>
+							<li><p id="dtb389" smilref="speechgen0020.smil#tcp378">Unique family needs -- medication you may need such as heart medications, prescription glasses, etc., infant formula and diapers etc. </p></li>
+							<li><p><sent id="dtb390" smilref="speechgen0020.smil#tcp379">Weather radio with tone alert to get updates about severe weather conditions. </sent><sent id="dtb391" smilref="speechgen0020.smil#tcp380">In the U.S., NOAA weather radios are the best way to stay informed about National Weather Service weather warnings and watches. </sent><sent smilref="speechgen0020.smil#tcp381" id="dtb392">The radio should be battery-operated and have a tone-alert feature that automatically notifies y [...]
+							<li><p><sent id="dtb394" smilref="speechgen0020.smil#tcp383">Self powered radio -- available from your local discount or electronics store, this will save you money on batteries, and batteries will not be available in a emergency. </sent><sent smilref="speechgen0020.smil#tcp384" id="dtb395">The "Eton" radio, a "Self Powered" radio is a Weather Radio as seen above, only it does NOT use batteries, has a LED flashlight built into it, a RED LED "ALERT" light built into it,a "ALERT" si [...]
+							<li><p smilref="speechgen0020.smil#tcp386" id="dtb397">An extra set of car keys and cash and/or a credit card. </p></li>
+							<li><p smilref="speechgen0020.smil#tcp387" id="dtb398">Pet food and water </p></li>
+							<li><p smilref="speechgen0020.smil#tcp388" id="dtb399">Whistle to signal for help </p></li>
+							<li><p id="dtb400" smilref="speechgen0020.smil#tcp389">Dust mask for filtering contaminated air and plastic sheeting and duct tape to shelter in place </p></li>
+							<li><p smilref="speechgen0020.smil#tcp390" id="dtb401">moist towelettes, garbage bags and plastic ties for personal sanitation </p></li>
+							<li><p id="dtb402" smilref="speechgen0020.smil#tcp391">Local maps </p></li>
+						</list>
+						<pagenum page="normal" id="page15" smilref="speechgen0020.smil#tcp392">15</pagenum>
+					</level3>
+					<level3>
+						<h3 smilref="speechgen0021.smil#tcp393" id="dtb403">Other Items to Consider
+</h3>
+						<list id="dtb404" type="ol" smilref="speechgen0021.smil#tcs33">
+							<li><p id="dtb405" smilref="speechgen0021.smil#tcp394">Cash or traveler's checks and change </p></li>
+							<li><p smilref="speechgen0021.smil#tcp395" id="dtb406">Emergency reference material such as a first aid book </p></li>
+							<li><p><sent id="dtb407" smilref="speechgen0021.smil#tcp396">Complete change of clothing including a long sleeved shirt, long pants and sturdy shoes. </sent><sent smilref="speechgen0021.smil#tcp397" id="dtb408">Consider additional clothing if you live in a cold-weather climate. </sent></p></li>
+							<li><p><sent smilref="speechgen0021.smil#tcp398" id="dtb409">Household chlorine bleach and medicine dropper – When diluted nine parts water to one part bleach, bleach can be used as a disinfectant. </sent><sent id="dtb410" smilref="speechgen0021.smil#tcp399">Or in an emergency, you can use it to treat water by using 16 drops of regular household liquid bleach per gallon of water. </sent><sent id="dtb411" smilref="speechgen0021.smil#tcp400">Do not use scented, color safe or bleache [...]
+							<li><p smilref="speechgen0021.smil#tcp401" id="dtb412">Fire Extinguisher </p></li>
+							<li><p id="dtb413" smilref="speechgen0021.smil#tcp402">Feminine supplies and personal hygiene items </p></li>
+							<li><p id="dtb414" smilref="speechgen0021.smil#tcp403">Mess kits, paper cups, plates and plastic utensils, paper towels </p></li>
+							<li><p id="dtb415" smilref="speechgen0021.smil#tcp404">Activities for<strong> children</strong> (books, games, puzzles etc.) </p>
+							</li>
+						</list>
+						<pagenum smilref="speechgen0021.smil#tcp405" id="page16" page="normal">16</pagenum>
+					</level3>
+				</level2>
+				<level2>
+					<h2><sent smilref="speechgen0022.smil#tcp406" id="dtb416">5. </sent><sent smilref="speechgen0022.smil#tcp407" id="dtb417">How to Avoid Danger During Civil Unrest
+</sent></h2>
+					<p><sent smilref="speechgen0022.smil#tcp408" id="dtb418">Each year thousands of people around the world are killed or injured in riots or other forms of civil unrest. </sent><sent id="dtb419" smilref="speechgen0022.smil#tcp409">As recent riots in places as varied as Dubai, Paris, and San Bernardino, California, suggest, civil unrest can occur just about anywhere where there are enough people. </sent><sent id="dtb420" smilref="speechgen0022.smil#tcp410">The best way to stay safe duri [...]
+					<level3>
+						<h3 smilref="speechgen0023.smil#tcp411" id="dtb421">Steps
+</h3>
+						<list type="ol" smilref="speechgen0023.smil#tcs34" id="dtb422">
+							<li>
+								<p><sent><strong id="dtb423" smilref="speechgen0023.smil#tcp412">Make preparations in advance</strong><strong>.</strong> </sent><sent smilref="speechgen0023.smil#tcp413" id="dtb424">Should civil instability erupt, especially if you're traveling abroad, you may need to be evacuated. </sent><sent id="dtb425" smilref="speechgen0023.smil#tcp414">Make an evacuation plan that includes where you can go to be evacuated (usually an embassy or an airport) and where you can go if you are un [...]
+								<list smilref="speechgen0023.smil#tcs35" id="dtb427" type="ol" enum="a">
+									<li><p id="dtb428" smilref="speechgen0023.smil#tcp416">Know the locations of police stations, hospitals, embassies and airports in the area. </p></li>
+									<li><p><sent smilref="speechgen0023.smil#tcp417" id="dtb429">Keep a backpack filled with emergency rations and supplies. </sent><sent smilref="speechgen0023.smil#tcp418" id="dtb430">Keep a small amount of non-perishable food and some bottled water in a backpack. </sent><sent id="dtb431" smilref="speechgen0023.smil#tcp419">The total weight should not exceed 10 pounds, so you or a family member can easily carry it. </sent></p></li>
+									<li><p><sent smilref="speechgen0023.smil#tcp420" id="dtb432">Keep an emergency credit card, a small supply of cash, and some traveler's checks with your passport. </sent><sent id="dtb433" smilref="speechgen0023.smil#tcp421">Make sure you know where your passport and other papers you may need are, and make sure that you can easily get to them. </sent><sent id="dtb434" smilref="speechgen0023.smil#tcp422">During civil unrest, money can sometimes buy you out of bad situations (a bri [...]
+								</list>
+							</li>
+							<li>
+								<p><sent><strong id="dtb435" smilref="speechgen0023.smil#tcp423">Know before you go</strong><strong>.</strong> </sent><sent smilref="speechgen0023.smil#tcp424" id="dtb436">While riots can happen anywhere, they're most common in places that are experiencing palpable tension or upheaval, where the smallest spark can ignite violence. </sent><sent id="dtb437" smilref="speechgen0023.smil#tcp425">Before you travel abroad, research conditions in the place you'll be visiting by reading n [...]
+							</li>
+							<li>
+								<p><sent><strong smilref="speechgen0023.smil#tcp428" id="dtb440">Contact your embassy and notify them of your presence</strong><strong>.</strong> </sent><sent smilref="speechgen0023.smil#tcp429" id="dtb441">If you're traveling abroad in an unstable country, call your embassy to register and let them know where you are. </sent></p>
+							</li>
+							<li>
+								<p><sent><strong id="dtb442" smilref="speechgen0023.smil#tcp430">Pay attention to what's going on around you, and get out of an area if warned</strong><strong>.</strong> </sent><sent smilref="speechgen0023.smil#tcp431" id="dtb443">In the weeks, days, or hours preceding a riot, residents of an area can often tell that something big is about to happen. </sent><sent smilref="speechgen0023.smil#tcp432" id="dtb444">If you're a traveler and local people, police, or consulate staff warn [...]
+							</li>
+							<li>
+								<p><sent><strong smilref="speechgen0023.smil#tcp433" id="dtb445">Avoid large groups of people, especially demonstrations. You need a lot of people to make a mob, so riots are most common in urban areas</strong><strong>.</strong> </sent><sent id="dtb446" smilref="speechgen0023.smil#tcp434">The more people you get together in one place, the larger the chance of a riot becomes. </sent><sent smilref="speechgen0023.smil#tcp435" id="dtb447">Stay away from demonstrations--peaceful prote [...]
+							</li>
+						</list>
+						<pagenum smilref="speechgen0023.smil#tcp436" page="normal" id="page17">17</pagenum>
+					</level3>
+					<level3>
+						<h3 smilref="speechgen0024.smil#tcp437" id="dtb448">Tips
+</h3>
+						<list id="dtb449" smilref="speechgen0024.smil#tcs36" type="ol">
+							<li><p><sent smilref="speechgen0024.smil#tcp438" id="dtb450">If you know civil unrest is occurring, the best thing you can do is stay far away from it. </sent><sent id="dtb451" smilref="speechgen0024.smil#tcp439">Do not venture into a riot to gawk or to find out what it's about. </sent></p></li>
+							<li><p><sent id="dtb452" smilref="speechgen0024.smil#tcp440">Avoid public transportation, especially bus and train stations. </sent><sent smilref="speechgen0024.smil#tcp441" id="dtb453">These places may become hopelessly--and dangerously--crowded if there is a threat of impending civil unrest. </sent><sent id="dtb454" smilref="speechgen0024.smil#tcp442">Even airports can become swamped, potentially dangerous places, so it's best to call the airport or your embassy in advance to ch [...]
+							<li><p><sent smilref="speechgen0024.smil#tcp443" id="dtb455">Secure your home and business if rioting is imminent. </sent><sent smilref="speechgen0024.smil#tcp444" id="dtb456">Rioting often brings looting, and looters can pillage and destroy your property. </sent><sent smilref="speechgen0024.smil#tcp445" id="dtb457">Make sure your doors are locked, and board up all your windows. </sent><sent smilref="speechgen0024.smil#tcp446" id="dtb458">Remove small valuables to a safer place if [...]
+						</list>
+					</level3>
+					<level3>
+						<h3 smilref="speechgen0025.smil#tcp447" id="dtb459">Warnings
+</h3>
+						<p><sent id="dtb460" smilref="speechgen0025.smil#tcp448">During episodes of civil unrest, many people fail to heed warnings to evacuate so that they can protect their homes or businesses. </sent><sent id="dtb461" smilref="speechgen0025.smil#tcp449">Consider this decision carefully, as it may put you in grave danger. </sent><sent smilref="speechgen0025.smil#tcp450" id="dtb462">It's important to remember that if looters strike you will likely be outnumbered, and your attackers may be [...]
+						<pagenum id="page18" page="normal" smilref="speechgen0025.smil#tcp452">18</pagenum>
+					</level3>
+				</level2>
+				<level2>
+					<h2><sent smilref="speechgen0026.smil#tcp453" id="dtb464">6. </sent><sent smilref="speechgen0026.smil#tcp454" id="dtb465">How to Be Safe During a Landslide
+</sent></h2>
+					<p><imggroup><img src="image13.jpg" alt="A landslide" smilref="speechgen0026.smil#tcp455" id="rId1813" /></imggroup>
+					</p>
+					<p><sent smilref="speechgen0026.smil#tcp456" id="dtb466">Emotions can be running very high during periods of emergency such as landslides, earthquakes, hurricanes or tornadoes. </sent><sent id="dtb467" smilref="speechgen0026.smil#tcp457">Follow these steps and you will be able to keep yourself safe during a landslide.</sent></p>
+					<level3>
+						<h3 id="dtb468" smilref="speechgen0027.smil#tcp458">Steps
+</h3>
+						<list id="dtb469" type="ol" smilref="speechgen0027.smil#tcs37">
+							<li>
+								<p><sent><strong id="dtb470" smilref="speechgen0027.smil#tcp459">Stay alert and awake</strong><strong>.</strong> </sent><sent id="dtb471" smilref="speechgen0027.smil#tcp460">Many debris-flow fatalities occur when people are sleeping. </sent><sent smilref="speechgen0027.smil#tcp461" id="dtb472">Listen to a NOAA Weather Radio or portable, battery-powered radio or television for warnings of intense rainfall. </sent><sent id="dtb473" smilref="speechgen0027.smil#tcp462">Be aware that  [...]
+							</li>
+							<li>
+								<p><sent><strong id="dtb474" smilref="speechgen0027.smil#tcp463">If you are in areas susceptible to landslides and debris flows, consider leaving if it is safe to do so</strong><strong>.</strong> </sent><sent smilref="speechgen0027.smil#tcp464" id="dtb475">Remember that driving during an intense storm can be hazardous. </sent><sent id="dtb476" smilref="speechgen0027.smil#tcp465">If you remain at home, move to a second story if possible. </sent><sent id="dtb477" smilref="speechgen [...]
+							</li>
+							<li><p><sent><strong id="dtb478" smilref="speechgen0027.smil#tcp467">Listen for any unusual sounds that might indicate moving debris, such as trees cracking or boulders knocking together.</strong> </sent><sent id="dtb479" smilref="speechgen0027.smil#tcp468">A trickle of flowing or falling mud or debris may precede larger landslides. </sent><sent smilref="speechgen0027.smil#tcp469" id="dtb480">Moving debris can flow quickly and sometimes without warning. </sent></p>
+							</li>
+							<li><p><sent><strong smilref="speechgen0027.smil#tcp470" id="dtb481">If you are near a stream or channel, be alert for any sudden increase or decrease in water flow and for a change from clear to muddy water.</strong> </sent><sent id="dtb482" smilref="speechgen0027.smil#tcp471">Such changes may indicate landslide activity upstream, so be prepared to move quickly. </sent><sent id="dtb483" smilref="speechgen0027.smil#tcp472">Don't delay! </sent><sent id="dtb484" smilref="speechgen00 [...]
+							</li>
+							<li>
+								<p><sent><strong id="dtb485" smilref="speechgen0027.smil#tcp474">Be especially alert when driving</strong><strong>.</strong> </sent><sent id="dtb486" smilref="speechgen0027.smil#tcp475">Embankments along roadsides are particularly susceptible to landslides. </sent><sent smilref="speechgen0027.smil#tcp476" id="dtb487">Watch the road for collapsed pavement, mud, fallen rocks, and other indications of possible debris flows. </sent></p>
+							</li>
+						</list>
+					</level3>
+					<level3>
+						<h3 id="dtb488" smilref="speechgen0028.smil#tcp477">Tips
+</h3>
+						<list smilref="speechgen0028.smil#tcs38" id="dtb489" type="ol">
+							<li><p><sent id="dtb490" smilref="speechgen0028.smil#tcp478">If you suspect danger of a landslide contact your local fire, police, or public works department. </sent><sent id="dtb491" smilref="speechgen0028.smil#tcp479">Local officials are the best persons able to assess potential danger. </sent></p></li>
+							<li><p smilref="speechgen0028.smil#tcp480" id="dtb492">Curl into a tight ball and protect your head if escape is not possible. </p></li>
+						</list>
+					</level3>
+					<level3>
+						<h3 id="dtb493" smilref="speechgen0029.smil#tcp481">Warnings
+</h3>
+						<p><sent id="dtb494" smilref="speechgen0029.smil#tcp482">Landslides are extremely dangerous and nothing to played around with. </sent><sent smilref="speechgen0029.smil#tcp483" id="dtb495">Evacuate immediately if you suspect imminent danger. </sent></p>
+						<pagenum id="page19" smilref="speechgen0029.smil#tcp484" page="normal">19</pagenum>
+					</level3>
+				</level2>
+				<level2>
+					<h2><sent smilref="speechgen0030.smil#tcp485" id="dtb496">7. </sent><sent smilref="speechgen0030.smil#tcp486" id="dtb497">How to React During an Earthquake
+</sent></h2>
+					<p><imggroup><img id="rId1914" alt="showing earthquake devastation" smilref="speechgen0030.smil#tcp487" src="image14.jpg" /></imggroup>
+					</p>
+					<p><sent smilref="speechgen0030.smil#tcp488" id="dtb498">Unlike hurricanes or floods, earthquakes come without warning and are usually followed by similar aftershocks. </sent><sent id="dtb499" smilref="speechgen0030.smil#tcp489">Learn how to prepare your house for earthquake safety and how to react if one does occur.</sent></p>
+					<level3>
+						<h3 smilref="speechgen0031.smil#tcp490" id="dtb500">Steps
+</h3>
+						<list id="dtb501" type="ol" smilref="speechgen0031.smil#tcs39">
+							<li>
+								<p><sent><strong id="dtb502" smilref="speechgen0031.smil#tcp491">Avoid unstable items and buildings</strong><strong>.</strong> </sent><sent smilref="speechgen0031.smil#tcp492" id="dtb503">Injuries and deaths during earthquakes are caused by falling objects and collapsing structures, and are largely avoidable. </sent><sent id="dtb504" smilref="speechgen0031.smil#tcp493">Take extra care in your home to ensure minimal damage or injury. </sent></p>
+							</li>
+							<li>
+								<p><sent><strong id="dtb505" smilref="speechgen0031.smil#tcp494">Secure heavy items</strong><strong>.</strong> </sent><sent smilref="speechgen0031.smil#tcp495" id="dtb506">Since falling objects pose the greatest danger during an earthquake, all tall or heavy furniture should be secured to the wall to prevent it from toppling over. </sent><sent smilref="speechgen0031.smil#tcp496" id="dtb507">TVs, stereos, heavy paintings, pots and plants should be tied down or placed on safety man [...]
+							</li>
+							<li>
+								<p><sent><strong id="dtb509" smilref="speechgen0031.smil#tcp498">Be fire aware</strong><strong>.</strong> </sent><sent id="dtb510" smilref="speechgen0031.smil#tcp499">Ensuing fires after an earthquake can cause havoc. </sent><sent smilref="speechgen0031.smil#tcp500" id="dtb511">Make sure you know where to switch off the gas supply to your apartment or building. </sent><sent smilref="speechgen0031.smil#tcp501" id="dtb512">Know the emergency exits in your building and make sure the [...]
+							</li>
+							<li>
+								<p><sent><strong smilref="speechgen0031.smil#tcp504" id="dtb515">Prepare an escape bag</strong><strong>.</strong> </sent><sent id="dtb516" smilref="speechgen0031.smil#tcp505">Include in it a Self powered radio, self powered flashlights, spare batteries, solid fuel for a cooker, candles, money and ID documents. </sent><sent id="dtb517" smilref="speechgen0031.smil#tcp506">Stock up at least 3 days of water and food. </sent><sent id="dtb518" smilref="speechgen0031.smil#tcp507">Keep a [...]
+							</li>
+							<li>
+								<p><sent><strong id="dtb519" smilref="speechgen0031.smil#tcp508">Protect your most vulnerable areas</strong><strong>.</strong> </sent><sent smilref="speechgen0031.smil#tcp509" id="dtb520">In the event of an earthquake, take all measures necessary to protect your head and neck, the most vulnerable parts of your body. </sent></p>
+							</li>
+							<li>
+								<p><sent><strong id="dtb521" smilref="speechgen0031.smil#tcp510">Assume the "earthquake position"</strong><strong>.</strong> </sent><sent id="dtb522" smilref="speechgen0031.smil#tcp511">If you are indoors, drop down to the floor in the "earthquake position". </sent><sent id="dtb523" smilref="speechgen0031.smil#tcp512">Make yourself small, with your knees on the floor, and your head tucked down toward the floor. </sent><sent id="dtb524" smilref="speechgen0031.smil#tcp513">Take cov [...]
+							</li>
+							<li>
+								<p><sent><strong id="dtb529" smilref="speechgen0031.smil#tcp518">Keep children and pets safe</strong><strong>.</strong> </sent><sent smilref="speechgen0031.smil#tcp519" id="dtb530">If you have children or pets, do everything possible to get them under the table with you. </sent><sent smilref="speechgen0031.smil#tcp520" id="dtb531">Make sure as much of their bodies are protected as possible. </sent></p>
+							</li>
+							<li>
+								<p><sent><strong smilref="speechgen0031.smil#tcp521" id="dtb532">Have shoes handy</strong><strong>.</strong> </sent><sent id="dtb533" smilref="speechgen0031.smil#tcp522">To avoid stepping on broken glass and other objects, keep a pair of shoes and flashlight in a plastic bag tied to a foot of your bed so you don't need to grope in the dark. </sent></p>
+							</li>
+							<li>
+								<p><strong smilref="speechgen0031.smil#tcp523" id="dtb534">Take precautions wherever you happen to be. </strong></p>
+								<list enum="a" smilref="speechgen0031.smil#tcs40" type="ol" id="dtb535">
+									<li><p id="dtb536" smilref="speechgen0031.smil#tcp524">If you are in a crowded area, take cover where you are. </p></li>
+									<li><p><sent id="dtb537" smilref="speechgen0031.smil#tcp525">If you are outside, get into the open, away from buildings and power lines. </sent><sent id="dtb538" smilref="speechgen0031.smil#tcp526">If you are at the beach, move quickly to higher ground or several hundred yards inland. </sent></p></li>
+									<li><p><sent smilref="speechgen0031.smil#tcp527" id="dtb539">If you are driving, stop if it is safe, but stay inside your car. </sent><sent id="dtb540" smilref="speechgen0031.smil#tcp528">Stay away from bridges, overpasses and tunnels. </sent><sent id="dtb541" smilref="speechgen0031.smil#tcp529">Move your car as far out of the normal traffic pattern as possible. </sent><sent id="dtb542" smilref="speechgen0031.smil#tcp530">If possible, avoid stopping under trees, light posts, pow [...]
+								</list>
+							</li>
+							<li>
+								<p><sent><strong smilref="speechgen0031.smil#tcp531" id="dtb543">Try to remain calm</strong><strong>.</strong> </sent><sent smilref="speechgen0031.smil#tcp532" id="dtb544">Wait for the earthquake to stop before moving from your spot. </sent></p>
+							</li>
+						</list>
+						<pagenum id="page20" smilref="speechgen0031.smil#tcp533" page="normal">20</pagenum>
+					</level3>
+					<level3>
+						<h3 smilref="speechgen0032.smil#tcp534" id="dtb545">Tips
+</h3>
+						<list id="dtb546" type="ol" smilref="speechgen0032.smil#tcs41">
+							<li>
+								<p><sent id="dtb547" smilref="speechgen0032.smil#tcp535">Have a first aid kit ready. </sent><sent smilref="speechgen0032.smil#tcp536" id="dtb548">Not just for earthquakes, it's always best to have one handy. </sent><sent smilref="speechgen0032.smil#tcp537" id="dtb549">Keep: </sent></p>
+								<list id="dtb550" type="ol" smilref="speechgen0032.smil#tcs42" enum="a">
+									<li><p id="dtb551" smilref="speechgen0032.smil#tcp538">A flashlight or two </p></li>
+									<li><p smilref="speechgen0032.smil#tcp539" id="dtb552">Batteries </p></li>
+									<li><p id="dtb553" smilref="speechgen0032.smil#tcp540">Self Powered Flashlight x2 and Self Powered Radio x2 <strong>Try to find batteries during this emergency</strong>. </p>
+									</li>
+									<li><p><sent smilref="speechgen0032.smil#tcp541" id="dtb554">Glowsticks. </sent><sent id="dtb555" smilref="speechgen0032.smil#tcp542">Candles are <strong>NOT</strong> to be used because of gas leaks, explosive matter, flammable matter in the area. </sent></p>
+									</li>
+									<li><p smilref="speechgen0032.smil#tcp543" id="dtb556">Gauze </p></li>
+									<li><p id="dtb557" smilref="speechgen0032.smil#tcp544">Adhesive dressings </p></li>
+									<li><p smilref="speechgen0032.smil#tcp545" id="dtb558">Tweezers </p></li>
+									<li><p id="dtb559" smilref="speechgen0032.smil#tcp546">Small scissors </p></li>
+									<li><p id="dtb560" smilref="speechgen0032.smil#tcp547">Rubbing alcohol </p></li>
+									<li><p id="dtb561" smilref="speechgen0032.smil#tcp548">and cotton balls. </p></li>
+								</list>
+							</li>
+							<li><p><sent id="dtb562" smilref="speechgen0032.smil#tcp549">You should always have sufficient water on hand to supply your family's needs for three to seven days. </sent><sent smilref="speechgen0032.smil#tcp550" id="dtb563">(Don't forget there are at least 30 gallons of water in your water heater.) </sent></p></li>
+							<li><p><sent smilref="speechgen0032.smil#tcp551" id="dtb564">Avoid using your phone. </sent><sent id="dtb565" smilref="speechgen0032.smil#tcp552">Leave circuits open for true emergencies. </sent><sent id="dtb566" smilref="speechgen0032.smil#tcp553">If you have a true emergency but get no dial tone, don't hang up. </sent><sent smilref="speechgen0032.smil#tcp554" id="dtb567">As long as you stay on the line you are in the queue for a circuit as they become available. </sent></p></li>
+							<li><p><sent smilref="speechgen0032.smil#tcp555" id="dtb568">It may help to keep pets in a basket or a cage, so that they can't wriggle away or scratch you from fear. </sent><sent id="dtb569" smilref="speechgen0032.smil#tcp556">Ask older children to mind the pets; the sense of responsibility for their pets will help to ease a little of their fear. </sent></p></li>
+						</list>
+					</level3>
+					<level3>
+						<h3 id="dtb570" smilref="speechgen0033.smil#tcp557">Warnings
+</h3>
+						<list id="dtb571" type="ol" smilref="speechgen0033.smil#tcs43">
+							<li><p><sent smilref="speechgen0033.smil#tcp558" id="dtb572">Stay out of moderately and heavily damaged buildings (err on the side of caution). </sent><sent smilref="speechgen0033.smil#tcp559" id="dtb573">The risks of injury during aftershocks is highest during the first few days following a large earthquake. </sent><sent id="dtb574" smilref="speechgen0033.smil#tcp560">Take the same protective actions during aftershocks. </sent></p></li>
+							<li><p smilref="speechgen0033.smil#tcp561" id="dtb575">If your shelter is damaged and the aftershock has passed, try to find another shelter, or if you can get to an undamaged area, get to it and stay there. </p></li>
+							<li><p><sent><strong id="dtb576" smilref="speechgen0033.smil#tcp562">If you smell gas, hear any "hissing" noises, especially near a gas line, do NOT use candles at all. In fact, GET OUT OF THAT AREA! </strong></sent></p>
+							</li>
+						</list>
+					</level3>
+					<level3>
+						<h3 id="dtb577" smilref="speechgen0034.smil#tcp563">Things You'll Need
+</h3>
+						<list type="ol" smilref="speechgen0034.smil#tcs44" id="dtb578">
+							<li><p id="dtb579" smilref="speechgen0034.smil#tcp564">Evacuation bag (see above) </p></li>
+							<li><p id="dtb580" smilref="speechgen0034.smil#tcp565">Wrench to turn off your gas if you smell it escaping </p></li>
+							<li><p id="dtb581" smilref="speechgen0034.smil#tcp566">Fire extinguisher </p></li>
+							<li><p><sent smilref="speechgen0034.smil#tcp567" id="dtb582">Self powered flashlights (crank flashlights or glow sticks) and self powered radios. </sent><sent id="dtb583" smilref="speechgen0034.smil#tcp568">It could be difficult to try and find batteries after a quake and candles could set off an explosion due to possible gas leaks. </sent><sent smilref="speechgen0034.smil#tcp569" id="dtb584">Power may also be out for weeks. </sent><sent id="dtb585" smilref="speechgen0034.smil#tcp [...]
+						</list>
+					</level3>
+				</level2>
+			</level1>
+		</bodymatter>
+	</book>
+</dtbook>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/content.opf
new file mode 100644
index 0000000..7d6a48e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/content.opf
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="2.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Epub2 marked as version 3</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="AreYouReadyV3.xml" media-type="application/x-dtbook+xml" />
+    <item href="dtbookbasic.css" id="opf-79" media-type="text/css"/>
+    <item href="image1.jpg" id="opf-36" media-type="image/jpeg"/>
+    <item href="image5.jpg" id="opf-37" media-type="image/jpeg"/>
+    <item href="image2.jpg" id="opf-38" media-type="image/jpeg"/>
+    <item href="image11.jpg" id="opf-39" media-type="image/jpeg"/>
+    <item href="image4.jpg" id="opf-45" media-type="image/jpeg"/>
+    <item href="image13.jpg" id="opf-51" media-type="image/jpeg"/>
+    <item href="image3.jpg" id="opf-60" media-type="image/jpeg"/>
+    <item href="image12.jpg" id="opf-63" media-type="image/jpeg"/>
+    <item href="image14.jpg" id="opf-70" media-type="image/jpeg"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/dtbookbasic.css b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/dtbookbasic.css
new file mode 100644
index 0000000..df56002
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/dtbookbasic.css
@@ -0,0 +1,621 @@
+/* ------------------------------------------------------------ */
+/* dtbook.2005.basic.css 
+
+   Created  10-13-1999 by M. Moodie from M. Hakkinen's template
+   Modified 03-16-2000 and 09/06-2000 by M. Brown
+   Modified 12-12-2002 by Guillaume du Bourguet (BrailleNet)
+   M Gylling 2003-11-04: additions, merging and fixing of
+                         Dtbvisv3.css,
+                         dtbook-std.css,
+                         dtbbase.css, into
+                         dtbook.basic.css 
+   version (2004-08-28, m gylling):                         
+		     --> dtbook.2004.basic.css <-- 		     
+   Changelist:
+   Added support for: 	bridgehead 
+     			hd
+  			poem 
+  			linegroup
+			dateline 
+			byline
+			epigraph
+			covertitle
+
+   version (2005-01-18, m gylling and brandon nelson)
+   		--> dtbook.2005.basic.css <-- 
+		Changelist latest version:
+			Misc updates for Z39.86.2005 version of dtbook                  
+
+   version (2006-08-18, b nelson)
+   		Changelist:
+   			Fixed inline pagenums
+
+   version (2006-09-28, m gylling)
+   		Changelist:
+   			Fixed new http reference in this comment
+
+   This CSS is supported and maintained by the Z39.86 committee.
+   You may modify and redistribute it, but please consider
+   donating enhancements back to the source.
+
+   Contact:
+       markus.gylling at tpb.se
+       z3986 at mail.daisy.org   
+   WWW: http://www.daisy.org/z3986/2005/
+
+   Note: if you want to apply local/specific rules,
+   the best way to do that is to associate another
+   stylesheet with the dtbook document via an
+   additional xml-stylesheet link.
+
+   In that additional stylesheet you can override
+   rules in or add rules to this stylesheet.
+
+   If the proximity rule works to your disadvantage,
+   use the !important syntax to force things to order.          */
+/* ------------------------------------------------------------ */
+
+/* The following strings are searchable
+   to go directly to subsection:
+
+  elements without display properties
+  base properties of whole doc
+  frontmatter
+  bodymatter
+  rearmatter
+  headings
+  pagenum, linenum
+  general block
+  general inlines
+  list.ul,list.ol
+  tables
+  images
+
+*/
+
+
+/* ------------------------------------------------------------- */
+/*             elements without display properties               */
+/* ------------------------------------------------------------- */
+
+dtbook {
+  display:block;
+  width: 100%;
+}
+
+head, head * {
+  display: none
+}
+
+
+
+/* ------------------------------------------------------------- */
+/*                  base properties of whole doc                 */
+/* ------------------------------------------------------------- */
+
+book {
+ display: block;
+ background-color: rgb(255,255,255);
+ color: rgb(0,0,0);
+ font-family: arial, verdana, sans-serif;
+ line-height: 1.5em;
+ margin-top: 4em;
+ margin-bottom: 2em;
+ margin-left: 6em;
+ margin-right: 6em;
+}
+
+/* ------------------------------------------------------------- */
+/*                          frontmatter                          */
+/* ------------------------------------------------------------- */
+
+frontmatter {
+  display: block;
+  margin-top: 1em;
+  margin-bottom: 1em;
+}
+
+doctitle, docauthor, covertitle {
+  display: block;
+  font-weight: bold;
+  text-align: center;
+}
+
+doctitle {
+  font-size: 2.0em;
+}
+
+covertitle {
+  font-size: 1.5em;
+}
+docauthor {
+  font-style: italic;
+  font-size: 1.5em;
+}
+
+
+
+/* ------------------------------------------------------------- */
+/*                          bodymatter                           */
+/* ------------------------------------------------------------- */
+
+bodymatter {
+  display: block;
+  margin-top: 1em;
+  margin-bottom: 1em;
+}
+
+
+/* ------------------------------------------------------------- */
+/*                          rearmatter                           */
+/* ------------------------------------------------------------- */
+
+rearmatter {
+  display: block;
+  margin-top: 1em;
+  margin-bottom: 1em;
+}
+
+/* ------------------------------------------------------------- */
+/*                          headings                             */
+/* ------------------------------------------------------------- */
+
+h1, h2, h3, h4, h5, h6, levelhd, bridgehead, hd {
+  display: block;
+  font-weight: bold;
+  margin-bottom: 0.5em;
+}
+
+h1, level levelhd {
+  font-size: 1.7em;
+  margin-top: 1.5em
+}
+h2, level level levelhd {
+  font-size: 1.5em;
+  margin-top: 1.2em
+}
+h3, level level level levelhd {
+  font-size: 1.4em;
+  margin-top: 1.0em
+}
+h4, level level level level levelhd {
+  font-size: 1.3em;
+  margin-top: 1.0em
+}
+h5, level level level level level levelhd {
+  font-size: 1.2em;
+  margin-top: 1.0em
+}
+h6, level level level level level level levelhd {
+  font-size: 1.0em;
+  margin-top: 1.0em
+}
+bridgehead, hd {
+  font-size: 1.0em;
+  margin-top: 0.8em	
+}
+
+/* ------------------------------------------------------------- */
+/*                       pagenum, linenum                        */
+/* ------------------------------------------------------------- */
+
+pagenum {
+  display: inline;
+  color: rgb(30,30,30);
+  padding: 0.2em 0.2em 0.2em 1em;
+  border: 1px solid rgb(200,200,250);
+  margin-top: 0.8em;
+  margin-bottom: 0.8em;
+}
+
+level > pagenum, level1 > pagenum, level2 > pagenum, level3 > pagenum, level4 > pagenum, level5 > pagenum, level6 > pagenum {
+  display: block;
+}
+
+linenum {
+  display: inline;
+}
+
+linenum:after {
+  content: " "
+}
+
+/* ------------------------------------------------------------- */
+/*                       general block                           */
+/* ------------------------------------------------------------- */
+
+div {
+  display: block;
+}
+
+p {
+  display: block;
+  margin-top: 0.7em;
+}
+
+prodnote, notice {
+  display: block;
+  padding: 0.2em;
+  margin: 0.3em;
+  border: 1px solid black;
+}
+
+/* sidebar content model block:
+frontmatter bodymatter rearmatter level level1 level2 level3 level4 level5 level6
+   sidebar content model inline:
+div prodnote sidebar note annotation blockquote dd li th td
+*/
+
+sidebar {
+  display: block;
+  padding: 0.5em;
+  margin-top: 1.5em;
+  margin-bottom: 1.5em;
+  border: 1px solid rgb(0,0,0);
+  background-color: rgb(250,250,250);
+}
+
+div sidebar, prodnote sidebar, sidebar sidebar, note sidebar, annotation sidebar, blockquote sidebar, dd sidebar, li sidebar, th sidebar, td sidebar {
+  float: right;
+  width: inherit;
+  clear: both;
+  margin-left: 1em;
+  margin-right: 1em;
+}
+
+frontmatter sidebar, bodymatter sidebar, rearmatter sidebar, level sidebar, level1 sidebar, level2 sidebar, level3 sidebar, level4 sidebar, level5 sidebar, level6 sidebar {
+  /*inline formatting, all inherited from generic sidebar selector*/
+}
+
+
+address {
+  display: block;
+  margin-top:1em;
+  margin-bottom:1em;
+}
+
+note {
+  display:block;
+  margin:  1.2em 1em 1.2em 1em;
+  padding: 0.5em 1em 0.5em 1em;
+  border-top: 1px solid black;
+  border-bottom: 1px solid black;
+}
+
+blockquote {
+  display: block;
+  margin-left: 2em;
+  margin-top: 0.6em;
+  margin-bottom: 0.6em;
+}
+
+line {
+  display: block;
+	margin: 0em;
+}
+
+poem {
+  display: block;
+  margin-left: 3em;
+  margin-top: 1em;
+  margin-bottom: 1em;
+}
+
+linegroup {
+  display: block;  
+  margin-top: 0.6em;
+}
+
+dateline, byline {
+  display: block;  
+}
+
+epigraph {
+ display: block;  
+ margin-top: 2em;
+ margin-bottom: 2em;
+ margin-left: 3em;
+ font-style: italic; 
+}
+
+/* ------------------------------------------------------------- */
+/*                      general inlines                          */
+/* ------------------------------------------------------------- */
+
+
+a {
+  display: inline;
+	text-decoration: underline;
+	color: rgb(0,0,255);
+}
+
+bdo {
+  display: inline;
+}
+
+em {
+  display: inline;
+  font-style: italic;
+}
+
+strong {
+  display: inline;
+  font-weight: bold;
+}
+
+kbd {
+  display: inline;
+  font-variant: small-caps;
+  font-size: 90%;
+  background: rgb(0,0,0);
+  color: rgb(255,255,255);
+  padding: 0.2em;
+}
+
+span {
+  display: inline;
+}
+
+sub {
+  display: inline;
+  vertical-align : sub;
+  font-size : 90%;
+  padding-left: 0.3em;
+  padding-right: 0.3em;
+}
+
+sup {
+  display: inline;
+  vertical-align : super;
+  font-size : 90%;
+  padding-left: 0.3em;
+  padding-right: 0.3em;
+}
+
+abbr, acronym {
+  display: inline;
+  border-bottom: 1px dotted gray;
+}
+
+dfn {
+  display: inline;
+  border-bottom: 1px dashed black;
+}
+
+code {
+  display: inline;
+  font-family: courier, verdana, arial, sans-serif;
+}
+
+samp {
+  display: inline;
+}
+
+cite {
+  display: inline;
+}
+
+cite title {
+  display: inline;
+  border-bottom: 1px solid grey
+}
+
+cite author {
+  display: inline;	
+}
+
+br {
+ display:block;
+}
+
+q {
+  display: inline;
+  font-style: italic;
+}
+
+noteref, annoref {
+  display: inline;
+  font-size: 0.7em;
+  vertical-align: super;
+  padding-left: 0.3em;
+  padding-right: 0.3em;
+  border: 1px solid rgb(210,210,210);
+}
+
+sent {
+  display:inline;
+  margin:0em;
+}
+
+w {
+  display:inline;
+  margin:0em;
+}
+
+
+/* ------------------------------------------------------------- */
+/*                      list.ul,list.ol                          */
+/*                                                               */
+/* <!ELEMENT list                                                */
+/* Contains:                                                     */
+/* (hd | prodnote | li | pagenum)+                               */
+/*                                                               */
+/* type (ol | ul) #IMPLIED                                       */
+/* enum (1 | a | U | i | X) #IMPLIED                             */
+/* ------------------------------------------------------------- */
+
+list {
+  display: block;
+  margin-top: 1em;
+  margin-bottom: 1em;
+  margin-left: 1em;
+}
+
+li {
+ display: list-item;
+ list-style-position: outside;
+}
+
+lic {
+  display: inline;
+}
+
+lic + lic {
+	margin-left: 1em;	
+}
+
+list[type="ol"][enum="1"] {
+  list-style-type: decimal;
+}
+
+list[type="ol"][enum="a"] {
+  list-style-type: lower-alpha;
+}
+
+list[type="ol"][enum="U"] {
+  list-style-type: upper-alpha;
+}
+
+list[type="ol"][enum="i"] {
+  list-style-type: lower-roman;
+}
+
+list[type="ol"][enum="X"] {
+  list-style-type: upper-roman;
+}
+
+list[type="ul"] {
+  list-style-type: disc;
+}
+
+list[type="pl"] {
+	list-style-type: none;	
+}
+
+list > li > list[type=ul] {
+  list-style-type: circle;
+}
+
+list > li > list[type=ol] {
+  list-style-type: lower-alpha;
+}
+
+
+list > li > list > li > list[type=ul] {
+  list-style-type: square;
+}
+
+
+list > li > list > li > list[type=ol] {
+  list-style-type: lower-roman;
+}
+
+list > li > list, list li list {
+  margin-top: 0em;
+  margin-bottom: 0em;
+}
+
+/* ------------------------------------------------------------- */
+/*                      definition list                          */
+/* ------------------------------------------------------------- */
+
+dl, dt, dd {
+  display: block;
+}
+
+dt {
+  font-weight: bold;
+  margin-top: 0.4em;
+}
+
+dd {
+  margin-left: 2em;
+}
+
+
+/* ------------------------------------------------------------- */
+/*                          tables                               */
+/* ------------------------------------------------------------- */
+
+
+table {
+  display: table;
+  border-spacing: 0px;
+  border-collapse: collapse;
+  margin-top: 0;
+  margin-bottom: 0;
+  /* -moz-box-sizing: border-box; */
+  text-indent: 0;
+  empty-cells: show;
+}
+
+table > caption {
+  display: table-caption;
+  text-align: center;
+  /* -moz-box-sizing: border-box; */
+}
+
+tr {
+  display: table-row;
+  vertical-align: inherit;
+}
+
+col {
+  display: table-column;
+}
+
+colgroup {
+  display: table-column-group;
+}
+
+tbody {
+  display: table-row-group;
+  vertical-align: middle;
+}
+
+thead {
+  display: table-header-group;
+  vertical-align: middle;
+}
+
+tfoot {
+  display: table-footer-group;
+  vertical-align: middle;
+}
+
+td {
+  display: table-cell;
+	border: 1px solid gray;
+	vertical-align: inherit;
+  text-align: inherit;
+  padding: 0.5em;
+}
+
+th {
+  display: table-cell;
+	/*border: 1px solid gray;*/
+	vertical-align: inherit;
+  font-weight: bold;
+  padding: 2px;
+}
+
+
+/* ------------------------------------------------------------- */
+/*                          images                               */
+/* ------------------------------------------------------------- */
+
+imggroup {
+ display: inline;
+}
+
+/*
+img:before {
+  content: url(attr(src));
+}
+*/
+
+imggroup > caption {
+  font-size: 80%;
+}
+
+ 
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image1.jpg b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image1.jpg
new file mode 100644
index 0000000..17fc23d
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image1.jpg differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image11.jpg b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image11.jpg
new file mode 100644
index 0000000..ac1c70c
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image11.jpg differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image12.jpg b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image12.jpg
new file mode 100644
index 0000000..5612aa0
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image12.jpg differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image13.jpg b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image13.jpg
new file mode 100644
index 0000000..d62cc5f
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image13.jpg differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image14.jpg b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image14.jpg
new file mode 100644
index 0000000..205fcf9
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image14.jpg differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image2.jpg b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image2.jpg
new file mode 100644
index 0000000..93d40df
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image2.jpg differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image3.jpg b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image3.jpg
new file mode 100644
index 0000000..3e874f4
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image3.jpg differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image4.jpg b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image4.jpg
new file mode 100644
index 0000000..aced971
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image4.jpg differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image5.jpg b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image5.jpg
new file mode 100644
index 0000000..d7d56cc
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/image5.jpg differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/page01.xhtml
new file mode 100644
index 0000000..e8531b5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/page01.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+        "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Sample page</title>
+</head>
+<body>
+  <div>
+    <h1>Epub 2</h1>
+
+    <p>This is an epub2 that has a dtbook formated page in it.</p>
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/toc.ncx
new file mode 100644
index 0000000..9a8eb11
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/OPS/toc.ncx
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Page 1</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+    <navPoint id="np-2" playOrder="2">
+          <navLabel>
+    	<text>Are You Ready?</text>
+          </navLabel>
+          <content src="AreYouReadyV3.xml"/>
+        </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/mimetype b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic_expected_results.json
new file mode 100644
index 0000000..fed79ca
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic_expected_results.json
@@ -0,0 +1,420 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/DTBook/Basic.epub",
+    "filename" : "Basic.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:21",
+    "elapsedTime" : 1431,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 1,
+    "nUsage" : 1
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Epub2 marked as version 3",
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 2,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "2.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 99,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 434,
+    "uncompressedSize" : 1370,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "bf7d26bb414c7436a1e3929a906eef4ee5cf6dcda28fb2f156192e056a196d7",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 334,
+    "uncompressedSize" : 724,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b7bd5d8e269562df5f13cc40b5f3679c5e1489731d6fcc9fc38d1f30dbcb",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml", "OPS/AreYouReadyV3.xml" ]
+  }, {
+    "id" : "opf-36",
+    "fileName" : "OPS/image1.jpg",
+    "media_type" : "image/jpeg",
+    "compressedSize" : 3149,
+    "uncompressedSize" : 3445,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "78cc47db10faa857220356b2ed60abd5e89842eeb135ba8f5c3c12baf31e",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "opf-37",
+    "fileName" : "OPS/image5.jpg",
+    "media_type" : "image/jpeg",
+    "compressedSize" : 6260,
+    "uncompressedSize" : 6589,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c1a0ae8da2d7b9768884cfb1d95d98abdda3d8fe48b2620a6368fc3a92540",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "opf-38",
+    "fileName" : "OPS/image2.jpg",
+    "media_type" : "image/jpeg",
+    "compressedSize" : 8396,
+    "uncompressedSize" : 8577,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "44242c2851168947304585bd1b74e8c221f1dff2fd23a8ec67bcaf444dd1237",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "opf-39",
+    "fileName" : "OPS/image11.jpg",
+    "media_type" : "image/jpeg",
+    "compressedSize" : 5445,
+    "uncompressedSize" : 5586,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "353e38b53f390d9153a78a9424b8399bcaaabc9a5ac8ceb266dd7ef27362aa",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "opf-45",
+    "fileName" : "OPS/image4.jpg",
+    "media_type" : "image/jpeg",
+    "compressedSize" : 4543,
+    "uncompressedSize" : 4720,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d2bb5deb583379d385ebf22a87d1b515575eb869ea877a23b723d415a9b2391b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "opf-51",
+    "fileName" : "OPS/image13.jpg",
+    "media_type" : "image/jpeg",
+    "compressedSize" : 12450,
+    "uncompressedSize" : 12586,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "149b423d4ba8a31bd67950a76d6f7631fab3bf076a18ae0a4b1f2dd536c318",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "opf-60",
+    "fileName" : "OPS/image3.jpg",
+    "media_type" : "image/jpeg",
+    "compressedSize" : 5803,
+    "uncompressedSize" : 5981,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "69f928f6789995d20f33d765fcdaf4bdeebc191b69c55131a3b4364623d",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "opf-63",
+    "fileName" : "OPS/image12.jpg",
+    "media_type" : "image/jpeg",
+    "compressedSize" : 4690,
+    "uncompressedSize" : 4826,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ba575480362f74dd2513d5ee87c88e7e6639509ac7afa107ae2283a62fe2437",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "opf-70",
+    "fileName" : "OPS/image14.jpg",
+    "media_type" : "image/jpeg",
+    "compressedSize" : 17455,
+    "uncompressedSize" : 17587,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "4fe64057a9508e872dd83719566984796802684f6d98f289ed97529f4a8be3",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "opf-79",
+    "fileName" : "OPS/dtbookbasic.css",
+    "media_type" : "text/css",
+    "compressedSize" : 2884,
+    "uncompressedSize" : 12181,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "60ecd6bb7fb8e4272c549990ef8c6c4717d21bd9b2cbefbdba5a8e528e531f1f",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 248,
+    "uncompressedSize" : 370,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "de5b657471926b8b9f33285f58174521c5d6ba9d6e5b8c597285f2f93bdea8",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/AreYouReadyV3.xml",
+    "media_type" : "application/x-dtbook+xml",
+    "compressedSize" : 23421,
+    "uncompressedSize" : 89409,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d8f1175d81204f68f9a12eeeeaa65eeff0ae6434d3e5c91fdd602938f296bd5",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/image11.jpg", "OPS/image12.jpg", "OPS/image3.jpg", "OPS/image1.jpg", "OPS/image13.jpg", "OPS/image2.jpg", "OPS/image5.jpg", "OPS/image4.jpg", "OPS/image14.jpg" ]
+  } ],
+  "messages" : [ {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-021",
+    "severity" : "WARNING",
+    "message" : "Use of non-registered URI scheme type in href: 'waka://barnesandnoble.com'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/AreYouReadyV3.xml",
+      "line" : 25,
+      "column" : 69,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic_expected_results.xml b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic_expected_results.xml
new file mode 100644
index 0000000..6217f15
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/DTBook/Basic_expected_results.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jhove xmlns="http://hul.harvard.edu/ois/xml/ns/jhove" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="epubcheck" release="4.0.0-alpha11-SNAPSHOT" date="2012-10-31">
+ <date>2014-09-05T03:16:22+02:00</date>
+ <repInfo uri="Basic.epub">
+  <created>2014-09-05T01:49:14Z</created>
+  <format>application/epub+zip</format>
+  <version>2.0</version>
+  <status>Well-formed</status>
+  <messages>
+   <message>OPF-021, WARN, [Use of non-registered URI scheme type in href: 'waka://barnesandnoble.com'.], OPS/AreYouReadyV3.xml (25-69)</message>
+   <message>HTM-010, HINT, [Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.], OPS/toc.ncx (2-68)</message>
+  </messages>
+  <mimeType>application/epub+zip</mimeType>
+  <properties>
+   <property>
+    <name>CharacterCount</name>
+    <values arity="Scalar" type="Long">
+     <value>99</value>
+    </values>
+   </property>
+   <property>
+    <name>Language</name>
+    <values arity="Scalar" type="String">
+     <value>en</value>
+    </values>
+   </property>
+   <property>
+    <name>Info</name>
+    <values arity="List" type="Property">
+     <property>
+      <name>Identifier</name>
+      <values arity="Scalar" type="String">
+       <value>000000000000000000</value>
+      </values>
+     </property>
+     <property>
+      <name>CreationDate</name>
+      <values arity="Scalar" type="Date">
+       <value>2014-09-05T01:49:14Z</value>
+      </values>
+     </property>
+     <property>
+      <name>Title</name>
+      <values arity="Scalar" type="String">
+       <value>Epub2 marked as version 3</value>
+      </values>
+     </property>
+    </values>
+   </property>
+  </properties>
+ </repInfo>
+</jhove>
diff --git a/src/test/resources/com/adobe/epubcheck/test/api/InputStream_Expected.txt b/src/test/resources/com/adobe/epubcheck/test/api/InputStream_Expected.txt
new file mode 100644
index 0000000..6233215
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/api/InputStream_Expected.txt
@@ -0,0 +1,2 @@
+WARNING: : Testing 123
+ERROR: EPUB/lorem.opf(13,63): Spine item with non-standard media-type 'font/opentype' has no fallback.
diff --git a/src/test/resources/com/adobe/epubcheck/test/api/PrintWriter_Expected.txt b/src/test/resources/com/adobe/epubcheck/test/api/PrintWriter_Expected.txt
new file mode 100644
index 0000000..a4ac9b6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/api/PrintWriter_Expected.txt
@@ -0,0 +1,2 @@
+WARNING: : 
+ERROR: EPUB/lorem.opf(13,63): Spine item with non-standard media-type 'font/opentype' has no fallback.
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/OPS/content.opf
new file mode 100644
index 0000000..71a8b80
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/OPS/content.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Transform Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" href="external_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="style_tag_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" href="inline_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="style" href="style.css" media-type="text/css"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/OPS/external_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/OPS/external_css.xhtml
new file mode 100644
index 0000000..8656762
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/OPS/external_css.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Rotate - External CSS</title>
+    <link rel="stylesheet" type="text/css" href="style.css"/>
+</head>
+<body>
+<div>
+<h1>Rotate specified in external css file</h1>
+    <div class="rotateX">Rotate X</div>
+    <div class="rotateY">Rotate Y</div>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/OPS/inline_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/OPS/inline_css.xhtml
new file mode 100644
index 0000000..aa4e2f3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/OPS/inline_css.xhtml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+        <!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Rotate - Inline CSS</title>
+</head>
+<body>
+<h1>Rotate - Inline CSS</h1>
+<div>
+<div style="-webkit-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px">Rotate 120° Chrome</div>
+<div style="-ms-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px">Rotate 120° IE</div>
+</div>
+<div>
+<div style="-moz-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px">Rotate 120° Firefox</div>
+<div style="-o-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px">Rotate 120° Opera</div>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/OPS/style.css b/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/OPS/style.css
new file mode 100644
index 0000000..ef85376
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/OPS/style.css
@@ -0,0 +1,10 @@
+.rotateY {
+    background-color:lightblue;
+    -webkit-transform:rotateY(180deg);
+}
+
+.rotateX {
+    background-color:lightblue;
+    -webkit-transform:rotateX(90deg);
+    position: fixed;
+}
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/OPS/style_tag_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/OPS/style_tag_css.xhtml
new file mode 100644
index 0000000..7cfbae1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/OPS/style_tag_css.xhtml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Transform - Style Tag</title>
+    <style type="text/css">
+        .rotateY {
+            background-color:yellow;
+            -webkit-transform:rotateY(180deg);
+        }
+
+        .rotateX {
+            background-color:yellow;
+            -webkit-transform:rotateX(180deg);
+        }
+    </style>
+</head>
+<body>
+<div>
+    <h1>Rotate - Style Tag</h1>
+
+    <div class="rotateX">Rotate X</div>
+    <div class="rotateY">Rotate Y</div>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/OPS/toc.ncx
new file mode 100644
index 0000000..b88cb96
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Transform Style Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Rotate - External CSS</text>
+      </navLabel>
+      <content src="external_css.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/OPS/toc.xhtml
new file mode 100644
index 0000000..27aaab4
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/OPS/toc.xhtml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="external_css.xhtml">External CSS</a></li>
+        <li><a href="style_tag_css.xhtml">Style Tag</a> </li>
+        <li><a href="inline_css.xhtml">Inline Style</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/mimetype b/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings_expected_results.json
new file mode 100644
index 0000000..b103c76
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/failonwarnings_expected_results.json
@@ -0,0 +1,376 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/command_line/failonwarnings.epub",
+    "filename" : "failonwarnings.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:32:18",
+    "elapsedTime" : 3687,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 1,
+    "nUsage" : 6
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Transform Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 3,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 648,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 416,
+    "uncompressedSize" : 1037,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "aebc85c8f66a9883315649a5d951663614ff385634bcbaae6f617e4505368a3",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 305,
+    "uncompressedSize" : 569,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "44c9adde7f138641ee9dcd4ccc218a1424d2599b9bff2d602aa39fcef1c3e",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/external_css.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/external_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 235,
+    "uncompressedSize" : 387,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "315d5d9ce6d29250e590cc3c714dc811fec88da5295d32de24dacf2cf5d367c",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/style.css" ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/style_tag_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 263,
+    "uncompressedSize" : 563,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a4d45bfbd24ab97ff2bdaa17276c1bc88aa8a5aadbf06f3b28b2f5db91612f6",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page03",
+    "fileName" : "OPS/inline_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 296,
+    "uncompressedSize" : 822,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "8d961afefd6889d6a3b3df1d0a159c6abad4f957874ffc4d774c342b20489c",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : 3,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style",
+    "fileName" : "OPS/style.css",
+    "media_type" : "text/css",
+    "compressedSize" : 108,
+    "uncompressedSize" : 188,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "989a113bf8a2f3113b1e6aa73e7c048b96060c96131774c1683b85afd7383de",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 272,
+    "uncompressedSize" : 474,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "757651f9ad2c519ab51d4fe19ee617ed850292badc94389d55ecfc38bff7e87",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/style_tag_css.xhtml", "OPS/inline_css.xhtml", "OPS/external_css.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "failonwarnings.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-013",
+    "severity" : "USAGE",
+    "message" : "Content file contains at least one inline style declaration.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 10,
+      "column" : 119,
+      "context" : "-webkit-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px"
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 11,
+      "column" : 115,
+      "context" : "-ms-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px"
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 14,
+      "column" : 116,
+      "context" : "-moz-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px"
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 15,
+      "column" : 114,
+      "context" : "-o-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px"
+    } ],
+    "suggestion" : "Inline styles are not compatible with accessibility settings and display personalization. Use CSS Styles instead."
+  }, {
+    "ID" : "CSS-006",
+    "severity" : "WARNING",
+    "message" : "CSS position:fixed property should not be used in EPUBs.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/style.css",
+      "line" : 9,
+      "column" : 5,
+      "context" : "position : fixed ;"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-009",
+    "severity" : "USAGE",
+    "message" : "Use of certain CSS such as Columns, Transforms, Transitions, box-sizing or KeyFrames can cause pagination issues.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/style.css",
+      "line" : 3,
+      "column" : 23,
+      "context" : "-webkit-transform : rotatey(180deg) ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 8,
+      "column" : 23,
+      "context" : "-webkit-transform : rotatex(90deg) ;"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 5,
+      "column" : 28,
+      "context" : ".rotateY {\n            background-color:yellow;\n            -webkit-transform:rotateY(180deg);\n        }\n\n        .rotateX {\n            background-color:yellow;\n            -webkit-transform:rotateX(180deg);\n        }"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 8,
+      "column" : 31,
+      "context" : "-webkit-transform : rotatey(180deg) ;"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 13,
+      "column" : 31,
+      "context" : "-webkit-transform : rotatex(180deg) ;"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/inline_css.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/style_tag_css.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/OPS/content.opf
new file mode 100644
index 0000000..71a8b80
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/OPS/content.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Transform Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" href="external_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="style_tag_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" href="inline_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="style" href="style.css" media-type="text/css"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/OPS/external_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/OPS/external_css.xhtml
new file mode 100644
index 0000000..8656762
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/OPS/external_css.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Rotate - External CSS</title>
+    <link rel="stylesheet" type="text/css" href="style.css"/>
+</head>
+<body>
+<div>
+<h1>Rotate specified in external css file</h1>
+    <div class="rotateX">Rotate X</div>
+    <div class="rotateY">Rotate Y</div>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/OPS/inline_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/OPS/inline_css.xhtml
new file mode 100644
index 0000000..aa4e2f3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/OPS/inline_css.xhtml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+        <!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Rotate - Inline CSS</title>
+</head>
+<body>
+<h1>Rotate - Inline CSS</h1>
+<div>
+<div style="-webkit-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px">Rotate 120° Chrome</div>
+<div style="-ms-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px">Rotate 120° IE</div>
+</div>
+<div>
+<div style="-moz-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px">Rotate 120° Firefox</div>
+<div style="-o-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px">Rotate 120° Opera</div>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/OPS/style.css b/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/OPS/style.css
new file mode 100644
index 0000000..cfd461f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/OPS/style.css
@@ -0,0 +1,9 @@
+.rotateY {
+    background-color:lightblue;
+    -webkit-transform:rotateY(180deg);
+}
+
+.rotateX {
+    background-color:lightblue;
+    -webkit-transform:rotateX(90deg);
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/OPS/style_tag_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/OPS/style_tag_css.xhtml
new file mode 100644
index 0000000..7cfbae1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/OPS/style_tag_css.xhtml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Transform - Style Tag</title>
+    <style type="text/css">
+        .rotateY {
+            background-color:yellow;
+            -webkit-transform:rotateY(180deg);
+        }
+
+        .rotateX {
+            background-color:yellow;
+            -webkit-transform:rotateX(180deg);
+        }
+    </style>
+</head>
+<body>
+<div>
+    <h1>Rotate - Style Tag</h1>
+
+    <div class="rotateX">Rotate X</div>
+    <div class="rotateY">Rotate Y</div>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/OPS/toc.ncx
new file mode 100644
index 0000000..b88cb96
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Transform Style Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Rotate - External CSS</text>
+      </navLabel>
+      <content src="external_css.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/OPS/toc.xhtml
new file mode 100644
index 0000000..27aaab4
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/OPS/toc.xhtml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="external_css.xhtml">External CSS</a></li>
+        <li><a href="style_tag_css.xhtml">Style Tag</a> </li>
+        <li><a href="inline_css.xhtml">Inline Style</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/mimetype b/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile_expected_results.json
new file mode 100644
index 0000000..0c63ee1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/jsonfile_expected_results.json
@@ -0,0 +1,364 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/command_line/jsonfile.epub",
+    "filename" : "jsonfile.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:27:51",
+    "elapsedTime" : 130,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 6
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Transform Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 3,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 648,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 416,
+    "uncompressedSize" : 1037,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "aebc85c8f66a9883315649a5d951663614ff385634bcbaae6f617e4505368a3",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 305,
+    "uncompressedSize" : 569,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "44c9adde7f138641ee9dcd4ccc218a1424d2599b9bff2d602aa39fcef1c3e",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/external_css.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/external_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 235,
+    "uncompressedSize" : 387,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "315d5d9ce6d29250e590cc3c714dc811fec88da5295d32de24dacf2cf5d367c",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/style.css" ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/style_tag_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 263,
+    "uncompressedSize" : 563,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a4d45bfbd24ab97ff2bdaa17276c1bc88aa8a5aadbf06f3b28b2f5db91612f6",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page03",
+    "fileName" : "OPS/inline_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 296,
+    "uncompressedSize" : 822,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "8d961afefd6889d6a3b3df1d0a159c6abad4f957874ffc4d774c342b20489c",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : 3,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style",
+    "fileName" : "OPS/style.css",
+    "media_type" : "text/css",
+    "compressedSize" : 89,
+    "uncompressedSize" : 168,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "fe2ec1a6557123bdc9ef17ee654387a6fa24167bf03b9f12183d446d4dc4e4",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 272,
+    "uncompressedSize" : 474,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "757651f9ad2c519ab51d4fe19ee617ed850292badc94389d55ecfc38bff7e87",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/style_tag_css.xhtml", "OPS/inline_css.xhtml", "OPS/external_css.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "jsonfile.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-013",
+    "severity" : "USAGE",
+    "message" : "Content file contains at least one inline style declaration.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 10,
+      "column" : 119,
+      "context" : "-webkit-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px"
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 11,
+      "column" : 115,
+      "context" : "-ms-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px"
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 14,
+      "column" : 116,
+      "context" : "-moz-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px"
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 15,
+      "column" : 114,
+      "context" : "-o-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px"
+    } ],
+    "suggestion" : "Inline styles are not compatible with accessibility settings and display personalization. Use CSS Styles instead."
+  }, {
+    "ID" : "CSS-009",
+    "severity" : "USAGE",
+    "message" : "Use of certain CSS such as Columns, Transforms, Transitions, box-sizing or KeyFrames can cause pagination issues.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/style.css",
+      "line" : 3,
+      "column" : 23,
+      "context" : "-webkit-transform : rotatey(180deg) ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 8,
+      "column" : 23,
+      "context" : "-webkit-transform : rotatex(90deg) ;"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 5,
+      "column" : 28,
+      "context" : ".rotateY {\n            background-color:yellow;\n            -webkit-transform:rotateY(180deg);\n        }\n\n        .rotateX {\n            background-color:yellow;\n            -webkit-transform:rotateX(180deg);\n        }"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 8,
+      "column" : 31,
+      "context" : "-webkit-transform : rotatey(180deg) ;"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 13,
+      "column" : 31,
+      "context" : "-webkit-transform : rotatex(180deg) ;"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/inline_css.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/style_tag_css.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/listSeverities_expected_results.txt b/src/test/resources/com/adobe/epubcheck/test/command_line/listSeverities_expected_results.txt
new file mode 100644
index 0000000..f62671b
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/listSeverities_expected_results.txt
@@ -0,0 +1,221 @@
+ID	Severity	Message	Suggestion
+ACC-001	USAGE	'img' or 'area' HTML element has no 'alt' attribute.	
+ACC-002	USAGE	'input' HTML element is not referenced by a corresponding label element.	
+ACC-003	SUPPRESSED	Non-text html elements should include a 'title' attribute for accessibility.	
+ACC-004	SUPPRESSED	Html 'a' element must have text.	
+ACC-005	SUPPRESSED	Table heading cells should be identified by 'th' elements for accessibility.	
+ACC-006	SUPPRESSED	Tables should include a 'thead' element for accessibility.	
+ACC-007	USAGE	Content Documents do not use 'epub:type' attributes for semantic inflection.	
+ACC-008	USAGE	Navigation Document has no 'landmarks nav' element.	
+ACC-009	WARNING	MathML should either have an alt text attribute or annotation-xml child element.	
+ACC-010	SUPPRESSED	Headings should not be used within blockquote and figure elements.	
+ACC-011	WARNING	Link elements within SVG should include an xlink:title attribute.	
+ACC-012	SUPPRESSED	Table elements should include a caption element.	
+ACC-013	USAGE	Content file contains at least one inline style declaration.	Inline styles are not compatible with accessibility settings and display personalization. Use CSS Styles instead.
+ACC-014	USAGE	CSS Selector font-size attribute value does not use a relative size.	Acceptable values include percentages, em multiples, 'larger', 'smaller', 'normal' or 'inherit'.
+ACC-015	USAGE	CSS Selector font line-height attribute value does not use a relative size.	Acceptable values include percentages, numeric multiples, em multiples, 'normal', or 'inherit'.
+ACC-016	USAGE	CSS Selector font-size attribute value should use a relative size.	Acceptable values include percentages, em multiples, 'larger', 'smaller', 'normal' or 'inherit'.
+ACC-017	USAGE	CSS Selector font line-height attribute value does not use a relative size.	Acceptable values include percentages, numeric multiples, em multiples, 'normal', or 'inherit'.
+CHK-001	ERROR	The custom message overrides file was not found.	
+CHK-002	ERROR	Unrecognized custom message id %1$s encountered in message overrides file '%2$s'.	
+CHK-003	ERROR	Unrecognized custom message severity '%1$s' encountered in message overrides file '%2$s'.	
+CHK-004	ERROR	The custom message contains too many parameters in message overrides file '%1$s'.	
+CHK-005	ERROR	The custom suggestion contains too many parameters in message overrides file '%1$s'.	
+CHK-006	ERROR	Unable to parse the custom format parameter in message overrides file '%1$s'.	
+CHK-007	ERROR	Error encountered while processing custom message file '%1$s': "%2$s".	
+CSS-001	ERROR	The '%1$s' property must not be included in an ePub Style Sheet.	
+CSS-002	ERROR	Empty or NULL reference found.	
+CSS-003	ERROR	Only UTF-8 and UTF-16 encodings are allowed, detected %1$s.	
+CSS-004	ERROR	Only UTF-8 and UTF-16 encodings are allowed, detected %1$s BOM.	
+CSS-005	ERROR	Conflicting alternate style attributes found: %1$s.	
+CSS-006	WARNING	CSS position:fixed property should not be used in EPUBs.	
+CSS-007	WARNING	Font-face reference %1$s refers to non-standard font type %2$s.	
+CSS-008	ERROR	An error occurred while parsing the CSS: %1$s.	
+CSS-009	USAGE	Use of certain CSS such as Columns, Transforms, Transitions, box-sizing or KeyFrames can cause pagination issues.	
+CSS-010	WARNING	Use of non-standard stylesheet.	
+CSS-011	SUPPRESSED	Excessive number of css files.	Consider merging CSS files to reduce the number of CSS files.
+CSS-012	USAGE	Document links to multiple CSS files.	
+CSS-013	USAGE	CSS Selector attribute is declared !Important.	
+CSS-015	ERROR	Alternate Stylesheet has no title.	
+CSS-016	SUPPRESSED	Alternate Stylesheet precedes primary stylesheet.	
+CSS-017	WARNING	CSS Selector specifies absolute position.	
+CSS-019	WARNING	CSS font-face declaration has no attributes.	
+CSS-020	USAGE	CSS font selector declaration uses unexpected font-size value '%1$s'.	Acceptable values include percentages, em multiples, 'larger', 'smaller', 'normal' or 'inherit'.
+CSS-021	USAGE	CSS Selector font shorthand specifies an invalid System Font.	Acceptable values include 'caption', 'icon', 'menu', 'message-box', 'small-caption',  'status-bar', or 'inherit'.
+CSS-022	USAGE	CSS Selector specifies global margin setting.	
+CSS-023	USAGE	CSS Selector specifies media query.	
+CSS-024	USAGE	CSS class Selector is not used.	Remove unused CSS selectors.
+CSS-025	USAGE	CSS class Selector is not found.	Check for typos or define a class selector to document the use of the class.
+CSS-027	USAGE	CSS Selector specifies absolute position.	
+CSS-028	USAGE	Use of Font-face declaration.	
+HTM-001	ERROR	Any publication resource that is an XML-based media type must be a valid XML 1.0 document. XML version found: %1$s.	
+HTM-002	WARNING	The installed xml parser doesn't support xml version verification. Xml files must be a valid XML 1.0 document.	
+HTM-003	ERROR	External entities are not allowed in ePub v3 documents. External entity declaration found: %1$s.	
+HTM-004	ERROR	Irregular DOCTYPE: found '%1$s', expected '%2$s'.	
+HTM-005	USAGE	An external reference was found.	
+HTM-006	USAGE	An XHTML Named Entity was found.	
+HTM-007	WARNING	Empty or whitespace-only value of attribute ssml:ph.	
+HTM-008	ERROR	The src attribute is required.	
+HTM-009	ERROR	The DOCTYPE provided is obsolete or irregular and can be removed.	
+HTM-010	USAGE	Namespace uri '%1$s' was found.	
+HTM-011	ERROR	Entity is undeclared.	Define the entity or use the numbered entity instead.
+HTM-012	USAGE	Found a link to a CFI in an external book.	
+HTM-013	USAGE	Intra-Publication CFIs found in document.	
+HTM-014	WARNING	Invalid file extension for HTML file, expecting (html, htm or xhtml).
+HTM-014a	WARNING	XHTML Content Document file name '%1$s' should have the extension '.xhtml'.	
+HTM-015	WARNING	HTML4 DOCTYPE definition within ePub v3.	
+HTM-016	WARNING	HTML5 DOCTYPE definition within ePub v2.	
+HTM-017	ERROR	Content file has different language value in attributes xml:lang and lang.	
+HTM-018	ERROR	Content file has invalid language value at attribute xml:lang.	
+HTM-019	ERROR	Content file has invalid language definition at attribute lang.	
+HTM-020	USAGE	Content file doesn't contain xml:lang attribute.	
+HTM-021	USAGE	Content file doesn't contain lang attribute.	
+HTM-022	USAGE	Document may contain excessive DIV or SPAN tags.	Merge DIV or SPAN tags when they are consecutive and use the same style.
+HTM-023	WARNING	An invalid XHTML Named Entity was found: '%1$s'.	Check the spelling or use numbered entities instead.
+HTM-024	USAGE	An XHTML Named Entity was found. Only '&' ''' '"e;' '<' or '>' are allowed.	Check the spelling or use numbered entities instead.
+HTM-025	WARNING	Non-registered URI scheme type found in href.	
+HTM-027	USAGE	List contains less than 2 items.	Lists should have more than one item for accessibility.
+HTM-028	USAGE	Input html elements should include an id.	
+HTM-029	USAGE	Label html elements should include a 'for' attribute referencing the id of an input element.	
+HTM-033	USAGE	HTML 'head' element does not have a 'title' child element.	
+HTM-036	SUPPRESSED	IFrames are highly discouraged.	
+HTM-038	USAGE	Ensure b, i, em, and strong elements are used in compliance with W3C HTML5 directives.	CSS styles are usually more appropriate for italics or bold text.
+HTM-043	USAGE	SVG elements should include an xml:lang and lang attributes.	
+HTM-044	USAGE	Namespace uri '%1$s' was included but not used.	Remove unused Namespace URIs.
+HTM-045	USAGE	Encountered empty href.	Empty hrefs are valid self-references.  These should be validated to ensure that this is the desired intent.
+HTM-046	ERROR	Fixed format item has no viewport defined.	A viewport declaration is required for fixed format items.
+HTM-047	ERROR	Html viewport is missing height and/or width.	The viewport declaration must declare both width and height.
+HTM-048	ERROR	SVG ViewBox is missing on fixed format document.	A viewBox declaration is required for fixed format documents.
+HTM-049	ERROR	Html element does not have an xmlns set to 'http://www.w3.org/1999/xhtml'.	Add xmlns="http://www.w3.org/1999/xhtml" to the html element.
+HTM-050	USAGE	Found epub:type="pagebreak" attribute in content document.	
+MED-001	ERROR	Video poster must have core media image type.	
+MED-002	ERROR	%1$s element doesn't provide fallback.	
+MED-003	ERROR	Non-standard image resource of type %1$s found.	
+MED-004	ERROR	Image file header may be corrupted.	
+MED-005	ERROR	Media Overlay audio reference %1$s to non-standard audio type %2$s found.	
+MED_006	USAGE	Some browsers do not support rendering SVG images which use a filename in the xlink:href property.	
+NAV-001	ERROR	The nav file is not supported for ePub v2.	
+NAV-002	USAGE	Found epub:type="page-list" in nav document	
+NAV-003	SUPPRESSED	Found both epub:type="page-list" in nav document and epub:type="pagebreak" in content document(s)	Using multiple paging constructs can cause unpredictable paging behavior in some epub readers.
+NCX-002	ERROR	toc attribute was not found on the spine element.	
+NCX-003	USAGE	An .NCX file is required for TOC navigation on ePub v2 readers.	
+NCX-005	USAGE	Found ncx "page-list" in .ncx file	
+NCX-006	USAGE	Found both "page-list" construct in ncx document and Adobe page-map attribute on the spine.	Using multiple paging constructs can cause unpredictable paging behavior in some readers.
+OPF-001	ERROR	There was an error when parsing the ePub version: %1$s.	
+OPF-002	FATAL	The OPF file '%1$s' was not found in the ePub.	
+OPF-003	WARNING	Item '%1$s' exists in the ePub, but is not declared in the OPF manifest.	
+OPF-004	WARNING	Invalid prefix declaration: leading or trailing whitespace is not allowed.	
+OPF-004a	ERROR	Invalid prefix declaration: found empty prefix.	
+OPF-004b	ERROR	Invalid prefix '%1$s': must be a valid non-colonized name (aka 'NCName').	
+OPF-004c	ERROR	Invalid prefix declaration: prefix '%1$s' must be immediately followed by a colon character (':').	
+OPF-004d	ERROR	Invalid prefix declaration: prefix '%1$s' must be separated by its URI with a space.	
+OPF-004e	WARNING	Invalid prefix declaration: found illegal whitespace between prefix and URI.	
+OPF-004f	WARNING	Invalid prefix declaration: found illegal whitespace between prefix mappings.	
+OPF-005	ERROR	Invalid prefix declaration: URI for prefix '%1$s' doesn't exist.	
+OPF-006	ERROR	Invalid prefix declaration: URI '%1$s' is not a valid URI.	
+OPF-007	WARNING	Re-declaration of reserved prefix '%1$s'.	
+OPF-007a	ERROR	Invalid prefix mapping: prefix '_' must not be declared.	
+OPF-007b	ERROR	Invalid prefix mapping: default vocabulary '%1$s' must not be re-declared.	
+OPF-008	ERROR	Handler binding for core Media-type '%1$s' is not allowed.	
+OPF-009	ERROR	The media-type %1$s has already been assigned handler '%2$s'.	
+OPF-010	ERROR	Error resolving reference: '%1$s'.	
+OPF-011	ERROR	itemref can't have both page-spread-right and page-spread-left properties.	
+OPF-012	ERROR	Item property '%1$s' is not defined for media type '%2$s'.	
+OPF-013	ERROR	The type property '%1$s' on the object tag does not match the declared media-type '%2$s' in the OPF manifest.	
+OPF-014	ERROR	The property '%1$s' should be declared in the OPF file.	
+OPF-015	ERROR	The property '%1$s' should not be declared in the OPF file.	
+OPF-016	ERROR	The element "rootfile" is missing its required attribute "full-path".	
+OPF-017	ERROR	The attribute "full-path" on element "rootfile" must not be empty.	
+OPF-018	WARNING	The 'remote-resources' property was declared in the OPF, but no reference to remote resources has been found. Make sure this property is legitimate.	
+OPF-019	FATAL	Spine tag was not found in the OPF file.	
+OPF-020	SUPPRESSED	Excessive number of spine items.	
+OPF-021	WARNING	Use of non-registered URI scheme type in href: '%1$s'.	
+OPF-022	ERROR	Invalid path: '%1$s'.	
+OPF-024	ERROR	Found unknown ePub version %1$s.	
+OPF-025	ERROR	Property '%1$s' can take only one value.	
+OPF-026	ERROR	Found malformed property value: '%1$s'.	
+OPF-027	ERROR	Undefined property: '%1$s'.	
+OPF-028	ERROR	Undeclared prefix: '%1$s'.	
+OPF-029	ERROR	The file '%1$s' does not appear to match the media type %2$s, as specified in the OPF file.	
+OPF-030	ERROR	The unique-identifier '%1$s' was not found.	
+OPF-031	ERROR	File listed in reference element in guide was not declared in OPF manifest: %1$s.	
+OPF-032	ERROR	Guide references '%1$s' which is not a valid 'OPS Content Document'.	
+OPF-033	ERROR	The spine contains no linear resources.	
+OPF-034	ERROR	The spine contains multiple references to the manifest item with id '%1$s'.	
+OPF-035	WARNING	Media type 'text/html' is not appropriate for XHTML/OPS.	Use 'application/xhtml+xml' instead.
+OPF-036	USAGE	Video type '%1$s' might not be supported by reading systems 	Use 'video/mp4', 'video/h264' or 'video/webm' instead.
+OPF-037	WARNING	Found deprecated media-type '%1$s'.	
+OPF-038	WARNING	Media type '%1$s' is not appropriate for an OEBPS 1.2 context; Use 'text/x-oeb1-document' instead.	
+OPF-039	WARNING	Media-type '%1$s' is not appropriate in an OEBPS 1.2 context. Use 'text/x-oeb1-css' instead.	
+OPF-040	ERROR	Fallback item could not be found.	
+OPF-041	ERROR	Fallback-style item could not be found.	
+OPF-042	ERROR	'%1$s' is not a permissible spine media-type.	
+OPF-043	ERROR	Spine item with non-standard media-type '%1$s' has no fallback.	
+OPF-044	ERROR	Spine item with non-standard media-type '%1$s' has a fallback to non-standard media-type.	
+OPF-045	ERROR	Encountered circular reference in fallback chain.	
+OPF-046	ERROR	Scripted property is not set on mediaType handler.	
+OPF-047	USAGE	OPF file is using OEBPS 1.2 syntax allowing backwards compatibility.	
+OPF-048	ERROR	Package tag is missing its required unique-identifier attribute and value.	
+OPF-049	ERROR	Item id '%1$s' was not found in the manifest.	
+OPF-050	ERROR	TOC attribute references resource with non-NCX mime type; 'application/x-dtbncx+xml' is expected.	
+OPF-051	SUPPRESSED	Image dimensions exceed recommended size.	
+OPF-052	ERROR	Role value '%1$s' is not valid.	
+OPF-053	WARNING	Date value '%1$s' does not follow recommended syntax as per http://www.w3.org/TR/NOTE-datetime:%2$s.	
+OPF-054	ERROR	Date value '%1$s' is not valid as per http://www.w3.org/TR/NOTE-datetime:%2$s.	
+OPF-055	WARNING	%1$s tag is empty.	
+OPF-056	WARNING	Media type '%1$s' is not an appropriate audio mimetype.	Use 'audio/mp3', 'audio/mp4' or 'audio/ogg' instead.
+OPF-057	SUPPRESSED	Image file length exceeds recommended size.	
+OPF-058	USAGE	Spine item has no TOC entry reference.	Every spine item in the manifest should be referenced by at least one TOC entry.
+OPF-059	USAGE	Spine item has no NAV entry reference.	Every spine item in the manifest should be referenced by at least one NAV entry.
+OPF-060	ERROR	Duplicate entry in the ZIP file: '%1$f'.	
+OPF-061	WARNING	Duplicate entry in the ZIP file (after Unicode NFC normalization) '%1$f'.	
+OPF-062	USAGE	Found Adobe page-map attribute on spine element in opf file.	
+OPF-063	WARNING	Referenced Adobe page-map item '%1$s' was not found in the manifest.	
+PKG-001	WARNING	Validating the ePub against version %1$s but detected version %2$s.	
+PKG-003	ERROR	Unable to read ePub file header.  This is likely a corrupted ePub file.	
+PKG-004	FATAL	Corrupted ePub ZIP header.	
+PKG-005	ERROR	The mimetype file has an extension of length %1$s.  No filename extensions are permitted for the mimetype file.	
+PKG-006	ERROR	Mimetype file entry is missing or is not the first file in the archive.	
+PKG-007	ERROR	Mimetype file should only contain the string 'application/epub+zip'.	
+PKG-008	FATAL	Unable to read file '%1$s'.	
+PKG-009	ERROR	File name contains characters that are not allowed in OCF file names: '%1$s'.	
+PKG-010	WARNING	Filename contains spaces, therefore URI escaping is necessary. Consider removing spaces from filename.	
+PKG-011	ERROR	Filename is not allowed to end with '.'.	
+PKG-012	WARNING	File name contains the following non-ascii characters: %1$s. Consider changing the filename.	
+PKG-013	ERROR	The ePub file includes multiple OPS renditions.	
+PKG-014	WARNING	The ePub contains empty directory '%1$s'.	
+PKG-015	FATAL	Unable to read ePub contents: %1$s	
+PKG-016	WARNING	Use only lowercase characters for the ePub file extension for maximum compatibility.	For maximum compatibility, use '.epub'.
+PKG-017	WARNING	Uncommon ePub file extension.	For maximum compatibility, use '.epub'.
+PKG-018	FATAL	The ePub file is not found.	
+PKG-020	ERROR	OPF file '%1$s' is not found.	
+PKG-021	ERROR	Corrupted image file encountered.	
+PKG-022	WARNING	Wrong file extension for image. The image is a '%1$s' file but has the file extension '%2$s'.	
+RSC-001	ERROR	File '%1$s' is not found.	
+RSC-002	FATAL	Required META-INF/container.xml resource is not found.	
+RSC-003	ERROR	No rootfile tag with media type 'application/oebps-package+xml' was found in the container.	
+RSC-004	ERROR	File '%1$s' could not be decrypted.	
+RSC-005	ERROR	Error while parsing file '%1$s'.	
+RSC-006	ERROR	Remote resource reference not allowed; resource must be placed in the OCF.	Only audio and video remote resources are permitted.
+RSC-007	ERROR	Referenced resource is not found in the ePub.	
+RSC-008	ERROR	Referenced resource is not declared in the OPF manifest.	
+RSC-009	ERROR	A fragment identifier should not be used with an img src attribute.	
+RSC-010	ERROR	Reference to non-standard resource type found.	
+RSC-011	WARNING	Found a reference to a resource that is not a spine item.	
+RSC-012	ERROR	Fragment identifier is not defined.	
+RSC-013	ERROR	Fragment identifier is used in a reference to a stylesheet resource.	
+RSC-014	ERROR	Fragment identifier defines an incompatible resource type.	
+RSC-015	ERROR	A fragment identifier is required for svg use tag references.	
+RSC-016	FATAL	Fatal Error while parsing file '%1$s'.	
+RSC-017	WARNING	Warning while parsing file '%1$s'.	
+RSC-018	WARNING	Altimg file '%1$s' is not found.	
+SCP-001	USAGE	Use of Javascript eval() function in ePub scripts is a security risk.	
+SCP-002	USAGE	Use of XMLHttpRequest in ePub scripts is a security risk.	
+SCP-003	USAGE	Local and Session Storage is not currently supported.	
+SCP-004	ERROR	Content file contains script which is not supported in ePub v2.	
+SCP-005	ERROR	Content file contains script but it is not marked as scripted.	
+SCP-006	USAGE	Inline scripts found.	
+SCP-007	USAGE	Script references 'innerHtml'.	Use a DOM instead.
+SCP-008	USAGE	Script references 'innerText'.	Use 'textContent' instead.
+SCP-009	USAGE	Content file uses mouse event handlers.	Ensure that all mouse driven functionality is accessible from the keyboard and touch devices.
+SCP-010	USAGE	Epub 3 content file contains script.	
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/OPS/content.opf
new file mode 100644
index 0000000..71a8b80
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/OPS/content.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Transform Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" href="external_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="style_tag_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" href="inline_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="style" href="style.css" media-type="text/css"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/OPS/external_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/OPS/external_css.xhtml
new file mode 100644
index 0000000..8656762
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/OPS/external_css.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Rotate - External CSS</title>
+    <link rel="stylesheet" type="text/css" href="style.css"/>
+</head>
+<body>
+<div>
+<h1>Rotate specified in external css file</h1>
+    <div class="rotateX">Rotate X</div>
+    <div class="rotateY">Rotate Y</div>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/OPS/inline_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/OPS/inline_css.xhtml
new file mode 100644
index 0000000..aa4e2f3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/OPS/inline_css.xhtml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+        <!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Rotate - Inline CSS</title>
+</head>
+<body>
+<h1>Rotate - Inline CSS</h1>
+<div>
+<div style="-webkit-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px">Rotate 120° Chrome</div>
+<div style="-ms-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px">Rotate 120° IE</div>
+</div>
+<div>
+<div style="-moz-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px">Rotate 120° Firefox</div>
+<div style="-o-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px">Rotate 120° Opera</div>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/OPS/style.css b/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/OPS/style.css
new file mode 100644
index 0000000..cfd461f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/OPS/style.css
@@ -0,0 +1,9 @@
+.rotateY {
+    background-color:lightblue;
+    -webkit-transform:rotateY(180deg);
+}
+
+.rotateX {
+    background-color:lightblue;
+    -webkit-transform:rotateX(90deg);
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/OPS/style_tag_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/OPS/style_tag_css.xhtml
new file mode 100644
index 0000000..7cfbae1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/OPS/style_tag_css.xhtml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Transform - Style Tag</title>
+    <style type="text/css">
+        .rotateY {
+            background-color:yellow;
+            -webkit-transform:rotateY(180deg);
+        }
+
+        .rotateX {
+            background-color:yellow;
+            -webkit-transform:rotateX(180deg);
+        }
+    </style>
+</head>
+<body>
+<div>
+    <h1>Rotate - Style Tag</h1>
+
+    <div class="rotateX">Rotate X</div>
+    <div class="rotateY">Rotate Y</div>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/OPS/toc.ncx
new file mode 100644
index 0000000..b88cb96
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Transform Style Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Rotate - External CSS</text>
+      </navLabel>
+      <content src="external_css.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/OPS/toc.xhtml
new file mode 100644
index 0000000..27aaab4
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/OPS/toc.xhtml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="external_css.xhtml">External CSS</a></li>
+        <li><a href="style_tag_css.xhtml">Style Tag</a> </li>
+        <li><a href="inline_css.xhtml">Inline Style</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/mimetype b/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings_expected_results.json
new file mode 100644
index 0000000..1c424e5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/passonwarnings_expected_results.json
@@ -0,0 +1,364 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/command_line/passonwarnings.epub",
+    "filename" : "passonwarnings.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:54",
+    "elapsedTime" : 134,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 6
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Transform Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 3,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 648,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 416,
+    "uncompressedSize" : 1037,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "aebc85c8f66a9883315649a5d951663614ff385634bcbaae6f617e4505368a3",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 305,
+    "uncompressedSize" : 569,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "44c9adde7f138641ee9dcd4ccc218a1424d2599b9bff2d602aa39fcef1c3e",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/external_css.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/external_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 235,
+    "uncompressedSize" : 387,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "315d5d9ce6d29250e590cc3c714dc811fec88da5295d32de24dacf2cf5d367c",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/style.css" ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/style_tag_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 263,
+    "uncompressedSize" : 563,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a4d45bfbd24ab97ff2bdaa17276c1bc88aa8a5aadbf06f3b28b2f5db91612f6",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page03",
+    "fileName" : "OPS/inline_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 296,
+    "uncompressedSize" : 822,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "8d961afefd6889d6a3b3df1d0a159c6abad4f957874ffc4d774c342b20489c",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : 3,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style",
+    "fileName" : "OPS/style.css",
+    "media_type" : "text/css",
+    "compressedSize" : 89,
+    "uncompressedSize" : 168,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "fe2ec1a6557123bdc9ef17ee654387a6fa24167bf03b9f12183d446d4dc4e4",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 272,
+    "uncompressedSize" : 474,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "757651f9ad2c519ab51d4fe19ee617ed850292badc94389d55ecfc38bff7e87",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/style_tag_css.xhtml", "OPS/inline_css.xhtml", "OPS/external_css.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "passonwarnings.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-013",
+    "severity" : "USAGE",
+    "message" : "Content file contains at least one inline style declaration.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 10,
+      "column" : 119,
+      "context" : "-webkit-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px"
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 11,
+      "column" : 115,
+      "context" : "-ms-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px"
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 14,
+      "column" : 116,
+      "context" : "-moz-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px"
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 15,
+      "column" : 114,
+      "context" : "-o-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px"
+    } ],
+    "suggestion" : "Inline styles are not compatible with accessibility settings and display personalization. Use CSS Styles instead."
+  }, {
+    "ID" : "CSS-009",
+    "severity" : "USAGE",
+    "message" : "Use of certain CSS such as Columns, Transforms, Transitions, box-sizing or KeyFrames can cause pagination issues.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/style.css",
+      "line" : 3,
+      "column" : 23,
+      "context" : "-webkit-transform : rotatey(180deg) ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 8,
+      "column" : 23,
+      "context" : "-webkit-transform : rotatex(90deg) ;"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 5,
+      "column" : 28,
+      "context" : ".rotateY {\n            background-color:yellow;\n            -webkit-transform:rotateY(180deg);\n        }\n\n        .rotateX {\n            background-color:yellow;\n            -webkit-transform:rotateX(180deg);\n        }"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 8,
+      "column" : 31,
+      "context" : "-webkit-transform : rotatey(180deg) ;"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 13,
+      "column" : 31,
+      "context" : "-webkit-transform : rotatex(180deg) ;"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/inline_css.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/style_tag_css.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/severity/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/command_line/severity/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/severity/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/content.opf
new file mode 100644
index 0000000..2400f6c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/content.opf
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Hyperlink Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" href="external_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="style_tag_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" href="inline_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="style" href="style.css" media-type="text/css"/>
+    <item id="style2" href="unused.css" media-type="text/css"/>
+    <item id="style3" href="cssStyles.css" media-type="text/css"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/cssStyles.css b/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/cssStyles.css
new file mode 100644
index 0000000..11d1585
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/cssStyles.css
@@ -0,0 +1,37 @@
+LI {
+    position: absolute;
+    font-family: Verdana, Arial, Helvetica;
+    font-size: 1.5em;
+    font-weight: normal;
+    text-align: right;
+}
+
+P > foo {
+    font: 600 12px/14px sans-serif
+}
+
+.used {
+    font-style: italic;
+    color: #006400 !important;
+}
+
+.unused {
+    font-size: 120%;
+    line-height: 26px;
+    font-weight: bold;
+    color: #1e90ff;
+}
+
+H1 {
+    font-family: Verdana, Arial, Helvetica;
+    font-size: large;
+    font-weight: bold;
+    color: #3333cc;
+    text-align: center;
+}
+
+ at media screen and (orientation: landscape) {
+    .foo {
+        font-size: large;
+    }
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/external_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/external_css.xhtml
new file mode 100644
index 0000000..8ac73ed
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/external_css.xhtml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Unused - External CSS</title>
+    <link rel="stylesheet" type="text/css" href="style.css"/>
+    <link rel="stylesheet" type="text/css" href="cssStyles.css"/>
+</head>
+<body>
+
+<h1>Unused class specified in external css file</h1>
+
+<div class="used">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+</div>
+<div class="fixed">
+    Fixed Div
+</div>
+
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/inline_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/inline_css.xhtml
new file mode 100644
index 0000000..4e2f3d0
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/inline_css.xhtml
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Unused - Inline CSS</title>
+</head>
+<body>
+<h1>Unused - Inline CSS</h1>
+
+<div style="position: absolute;top: 80px;left: 50px">
+    <p style="color: #006400 !important; background-color: #fafad2 !important; font-size: 18pt">Unused css does not
+        apply to inline styles.</p>
+</div>
+<div style="unicode-bidi: embed; direction: rtl">Bidi content</div>
+<div style="position:fixed; left: 5px;">Fixed</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/style.css b/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/style.css
new file mode 100644
index 0000000..44c3e03
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/style.css
@@ -0,0 +1,101 @@
+BODY, P, TABLE, TD, TH, BR, DIV, SPAN {
+    font-size: 14px;
+    color: #00aaaa;
+}
+
+.p {
+    font: 600 12px/14px sans-serif
+}
+
+.x {
+    font: joke
+}
+
+.w {
+    font: 18px joke
+}
+
+.y {
+    font: 18px
+}
+
+.v {
+    font: fantasy
+}
+
+.p {
+    font: 600 12px/14px sans-serif
+}
+
+.q {
+    font: 80% sans-serif
+}
+
+.r {
+    font: x-large/110% "New Century Schoolbook", serif
+}
+
+.s {
+    font: bold italic large Palatino, serif
+}
+
+.t {
+    font: normal small-caps 120%/120% fantasy
+}
+
+.u {
+    font: menu
+}
+
+H2 {
+    font: italic small-caps bold 80%/120% arial, helvetica, sans-serif;
+}
+
+div {
+    unicode-bidi: embed;
+    direction: rtl
+}
+
+.fixed
+{
+    width:100px;
+    height:100px;
+    background:red;
+    left:10px;
+    top:100px;
+    position:fixed;
+}
+
+LI {
+    position: absolute;
+    font-family: Verdana, Arial, Helvetica;
+    font-size: 1.5em;
+    font-weight: normal;
+    text-align: right;
+}
+
+.used {
+    font-style: italic;
+    color: #006400 !important;
+}
+
+.unused {
+    font-size: 120%;
+    font-weight: bold;
+    color: #1e90ff;
+}
+
+H1 {
+    font-family: Verdana, Arial, Helvetica;
+    font-size: large;
+    font-weight: bold;
+    text-decoration: none;
+    color: #3333cc;
+    text-align: center;
+}
+
+ at media screen and (orientation: landscape) {
+    .foo {
+        font-size: large;
+    }
+}
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/style_tag_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/style_tag_css.xhtml
new file mode 100644
index 0000000..bdacc35
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/style_tag_css.xhtml
@@ -0,0 +1,83 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Unused - Style Tag CSS</title>
+    <style>
+        .used {
+            font-style: italic;
+            color: #006400 !important;
+            line-height: 20pt;
+            position: relative;
+        }
+
+        .unused {
+            font-weight: bold;
+            color: #1e90ff;
+            position: absolute;
+        }
+
+        @media screen and (orientation: landscape) {
+            .used {
+                font-size: larger;
+            }
+        }
+
+        .bidi {
+            unicode-bidi: normal;
+        }
+
+
+        .fixed
+        {
+            width:100px;
+            height:100px;
+            background:red;
+            left:10px;
+            top:100px;
+            position:fixed;
+        }
+    </style>
+</head>
+<body>
+
+<div class="used">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+</div>
+<div class="undefined">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip
+
+</div>
+<div class="bidi">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+
+</div>
+<div class="fixed">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+</div>
+</body>
+</html>
+
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/toc.ncx
new file mode 100644
index 0000000..ad464c8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Unused Style Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>External CSS</text>
+      </navLabel>
+      <content src="external_css.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/toc.xhtml
new file mode 100644
index 0000000..1a32717
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/toc.xhtml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="external_css.xhtml">External CSS</a></li>
+        <li><a href="style_tag_css.xhtml">Style Tag</a></li>
+        <li><a href="inline_css.xhtml">Inline Style</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/unused.css b/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/unused.css
new file mode 100644
index 0000000..4f7cd86
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/severity/OPS/unused.css
@@ -0,0 +1,69 @@
+.otherstyle {
+    font-weight: bold;
+    color: #1e90ff;
+}
+
+BODY, P, TABLE, TD, TH, BR, DIV, SPAN {
+    font-family: Verdana, Arial, Helvetica;
+    font-size: 12px;
+    color: #000000;
+}
+
+H1 {
+    font-family: Verdana, Arial, Helvetica;
+    font-size: 22px;
+    font-weight: bold;
+    text-decoration: none;
+    color: #3333cc;
+    text-align: left;
+}
+
+LI {
+    font-family: Verdana, Arial, Helvetica;
+    font-size: 14px;
+    font-weight: none;
+    text-decoration: none;
+    color: brown;
+    text-align: left;
+}
+
+.TableText {
+    font-family: Verdana, Arial, Helvetica;
+    font-size: 12px;
+    color: #000000;
+}
+
+.sideBarLink {
+    font-family: Verdana, Arial, Helvetica;
+    font-size: 12px;
+    font-weight: bold;
+    text-decoration: none;
+    color: #ffff99;
+}
+
+.sideBarLink:Hover {
+    text-decoration: none;
+    color: #ff3333;
+}
+
+.bodyText {
+    font-family: Verdana, Arial, Helvetica;
+    font-size: 11px;
+    font-weight: normal;
+    color: #000000;
+}
+
+.copyright {
+    font-family: Verdana, Arial, Helvetica;
+    font-size: 10px;
+    font-weight: normal;
+    color: #000000;
+}
+.unusedStyle
+{
+    color: #333333;
+}
+li.unusedStyle2
+{
+    color: #444444;
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/severity/mimetype b/src/test/resources/com/adobe/epubcheck/test/command_line/severity/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/severity/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/severity_error_expected_results.txt b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_error_expected_results.txt
new file mode 100644
index 0000000..e5291ed
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_error_expected_results.txt
@@ -0,0 +1,12 @@
+Start command_line test('severity_error')
+Validating against EPUB version 3.0 - custom validation
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(27,13): The 'unicode-bidi' property must not be included in an ePub Style Sheet.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(14,1): The 'unicode-bidi' property must not be included in an ePub Style Sheet.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(14,22): The 'direction' property must not be included in an ePub Style Sheet.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(55,5): The 'unicode-bidi' property must not be included in an ePub Style Sheet.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(56,5): The 'direction' property must not be included in an ePub Style Sheet.
+
+Check finished with errors
+
+epubcheck completed
+Completed command_line test('severity_error')
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/severity_fatal_expected_results.txt b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_fatal_expected_results.txt
new file mode 100644
index 0000000..bb5c43d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_fatal_expected_results.txt
@@ -0,0 +1,5 @@
+Start command_line test('severity_fatal')
+Validating against EPUB version 3.0 - custom validation
+No errors or warnings detected.
+epubcheck completed
+Completed command_line test('severity_fatal')
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideBadId.txt b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideBadId.txt
new file mode 100644
index 0000000..5eb7404
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideBadId.txt
@@ -0,0 +1,3 @@
+ID	Severity
+BogusID	ERROR
+
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideBadId_expected_results.txt b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideBadId_expected_results.txt
new file mode 100644
index 0000000..0772a50
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideBadId_expected_results.txt
@@ -0,0 +1,83 @@
+Start command_line test('severity_overrideBadId')
+ERROR(CHK-002): ./com/adobe/epubcheck/test/command_line/severity/(1,0): Unrecognized custom message id BogusID encountered in message overrides file './com/adobe/epubcheck/test/command_line/severity_overrideBadId.txt'.
+Validating against EPUB version 3.0 - custom validation
+USAGE(HTM-010): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/toc.ncx(2,68): Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.
+USAGE(OPF-059): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/toc.ncx(-1,-1): Spine item has no NAV entry reference.
+USAGE(OPF-059): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/toc.ncx(-1,-1): Spine item has no NAV entry reference.
+USAGE(CSS-012): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/external_css.xhtml(6,62): Document links to multiple CSS files.
+USAGE(CSS-012): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/external_css.xhtml(7,66): Document links to multiple CSS files.
+USAGE(ACC-008): ./com/adobe/epubcheck/test/command_line/severity.epub/severity.epub(-1,-1): Navigation Document has no 'landmarks nav' element.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(2,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(7,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-015): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(7,5): CSS Selector font line-height attribute value does not use a relative size.
+USAGE(CSS-021): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(11,5): CSS Selector font shorthand specifies an invalid System Font.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(15,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(19,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(27,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-015): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(27,5): CSS Selector font line-height attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(35,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(39,5): CSS Selector font-size attribute value does not use a relative size.
+WARNING(CSS-017): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(70,5): CSS Selector specifies absolute position.
+USAGE(CSS-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(79,5): CSS Selector attribute is declared !Important.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(90,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(CSS-023): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(97,1): CSS Selector specifies media query.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(99,9): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(8,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(14,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(23,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(32,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(38,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(51,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(58,5): CSS Selector font-size attribute value does not use a relative size.
+WARNING(CSS-017): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(2,5): CSS Selector specifies absolute position.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(10,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-015): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(10,5): CSS Selector font line-height attribute value does not use a relative size.
+USAGE(CSS-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(15,5): CSS Selector attribute is declared !Important.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(27,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(CSS-023): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(33,1): CSS Selector specifies media query.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(35,9): CSS Selector font-size attribute value does not use a relative size.
+USAGE(CSS-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(9,13): CSS Selector attribute is declared !Important.
+WARNING(CSS-017): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(17,13): CSS Selector specifies absolute position.
+USAGE(CSS-023): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(20,9): CSS Selector specifies media query.
+USAGE(CSS-025): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(54,24): CSS class Selector is not found.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(14,9): CSS class Selector is not used.
+USAGE(ACC-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(10,54): Content file contains at least one inline style declaration.
+USAGE(ACC-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(11,97): Content file contains at least one inline style declaration.
+USAGE(ACC-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(14,50): Content file contains at least one inline style declaration.
+USAGE(ACC-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(15,41): Content file contains at least one inline style declaration.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(1,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(22,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(14,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(10,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(18,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(34,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(38,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(42,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(46,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(30,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(6,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(30,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(56,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(82,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(49,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(36,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(98,5): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(62,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(66,3): CSS class Selector is not used.
+Validating using EPUB version 3.0 rules.
+USAGE(ACC-007): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/external_css.xhtml(-1,-1): Content Documents do not use 'epub:type' attributes for semantic inflection.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(27,13): The 'unicode-bidi' property must not be included in an ePub Style Sheet.
+WARNING(CSS-006): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(38,13): CSS position:fixed property should not be used in EPUBs.
+USAGE(ACC-007): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(-1,-1): Content Documents do not use 'epub:type' attributes for semantic inflection.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(14,1): The 'unicode-bidi' property must not be included in an ePub Style Sheet.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(14,22): The 'direction' property must not be included in an ePub Style Sheet.
+WARNING(CSS-006): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(15,1): CSS position:fixed property should not be used in EPUBs.
+USAGE(ACC-007): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(-1,-1): Content Documents do not use 'epub:type' attributes for semantic inflection.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(55,5): The 'unicode-bidi' property must not be included in an ePub Style Sheet.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(56,5): The 'direction' property must not be included in an ePub Style Sheet.
+WARNING(CSS-006): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(66,5): CSS position:fixed property should not be used in EPUBs.
+
+Check finished with errors
+
+epubcheck completed
+Completed command_line test('severity_overrideBadId')
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideBadMessage.txt b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideBadMessage.txt
new file mode 100644
index 0000000..2c2563b
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideBadMessage.txt
@@ -0,0 +1,4 @@
+ID	Severity	Message	Suggestion
+CSS-001	ERROR	This is an overridden message with too many parameters: %1$s %2$s %3$s %4$s %5$s %6$s
+ACC-015	USAGE	This is an overridden message.	This is an overridden suggestion.
+CSS-021	WARNING	This is an overridden message.	This is an overridden suggestion with too many parameters: %1$s %2$s %3$s %4$s %5$s %6$s
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideBadMessage_expected_results.txt b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideBadMessage_expected_results.txt
new file mode 100644
index 0000000..300c3b8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideBadMessage_expected_results.txt
@@ -0,0 +1,84 @@
+Start command_line test('severity_overrideBadMessage')
+ERROR(CHK-004): ./com/adobe/epubcheck/test/command_line/severity/(1,0): The custom message contains too many parameters in message overrides file './com/adobe/epubcheck/test/command_line/severity_overrideBadMessage.txt'.
+ERROR(CHK-005): ./com/adobe/epubcheck/test/command_line/severity/(2,0): The custom suggestion contains too many parameters in message overrides file './com/adobe/epubcheck/test/command_line/severity_overrideBadMessage.txt'.
+Validating against EPUB version 3.0 - custom validation
+USAGE(HTM-010): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/toc.ncx(2,68): Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.
+USAGE(OPF-059): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/toc.ncx(-1,-1): Spine item has no NAV entry reference.
+USAGE(OPF-059): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/toc.ncx(-1,-1): Spine item has no NAV entry reference.
+USAGE(CSS-012): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/external_css.xhtml(6,62): Document links to multiple CSS files.
+USAGE(CSS-012): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/external_css.xhtml(7,66): Document links to multiple CSS files.
+USAGE(ACC-008): ./com/adobe/epubcheck/test/command_line/severity.epub/severity.epub(-1,-1): Navigation Document has no 'landmarks nav' element.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(2,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(7,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-015): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(7,5): This is an overridden message.
+USAGE(CSS-021): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(11,5): CSS Selector font shorthand specifies an invalid System Font.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(15,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(19,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(27,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-015): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(27,5): This is an overridden message.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(35,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(39,5): CSS Selector font-size attribute value does not use a relative size.
+WARNING(CSS-017): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(70,5): CSS Selector specifies absolute position.
+USAGE(CSS-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(79,5): CSS Selector attribute is declared !Important.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(90,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(CSS-023): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(97,1): CSS Selector specifies media query.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(99,9): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(8,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(14,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(23,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(32,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(38,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(51,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(58,5): CSS Selector font-size attribute value does not use a relative size.
+WARNING(CSS-017): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(2,5): CSS Selector specifies absolute position.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(10,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-015): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(10,5): This is an overridden message.
+USAGE(CSS-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(15,5): CSS Selector attribute is declared !Important.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(27,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(CSS-023): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(33,1): CSS Selector specifies media query.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(35,9): CSS Selector font-size attribute value does not use a relative size.
+USAGE(CSS-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(9,13): CSS Selector attribute is declared !Important.
+WARNING(CSS-017): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(17,13): CSS Selector specifies absolute position.
+USAGE(CSS-023): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(20,9): CSS Selector specifies media query.
+USAGE(CSS-025): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(54,24): CSS class Selector is not found.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(14,9): CSS class Selector is not used.
+USAGE(ACC-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(10,54): Content file contains at least one inline style declaration.
+USAGE(ACC-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(11,97): Content file contains at least one inline style declaration.
+USAGE(ACC-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(14,50): Content file contains at least one inline style declaration.
+USAGE(ACC-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(15,41): Content file contains at least one inline style declaration.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(1,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(22,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(14,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(10,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(18,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(34,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(38,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(42,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(46,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(30,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(6,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(30,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(56,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(82,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(49,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(36,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(98,5): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(62,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(66,3): CSS class Selector is not used.
+Validating using EPUB version 3.0 rules.
+USAGE(ACC-007): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/external_css.xhtml(-1,-1): Content Documents do not use 'epub:type' attributes for semantic inflection.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(27,13): The 'unicode-bidi' property must not be included in an ePub Style Sheet.
+WARNING(CSS-006): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(38,13): CSS position:fixed property should not be used in EPUBs.
+USAGE(ACC-007): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(-1,-1): Content Documents do not use 'epub:type' attributes for semantic inflection.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(14,1): The 'unicode-bidi' property must not be included in an ePub Style Sheet.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(14,22): The 'direction' property must not be included in an ePub Style Sheet.
+WARNING(CSS-006): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(15,1): CSS position:fixed property should not be used in EPUBs.
+USAGE(ACC-007): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(-1,-1): Content Documents do not use 'epub:type' attributes for semantic inflection.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(55,5): The 'unicode-bidi' property must not be included in an ePub Style Sheet.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(56,5): The 'direction' property must not be included in an ePub Style Sheet.
+WARNING(CSS-006): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(66,5): CSS position:fixed property should not be used in EPUBs.
+
+Check finished with errors
+
+epubcheck completed
+Completed command_line test('severity_overrideBadMessage')
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideBadSeverity.txt b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideBadSeverity.txt
new file mode 100644
index 0000000..b462822
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideBadSeverity.txt
@@ -0,0 +1,3 @@
+ID	Severity
+CSS-012	BogusSeverity
+
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideBadSeverity_expected_results.txt b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideBadSeverity_expected_results.txt
new file mode 100644
index 0000000..ffbdb81
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideBadSeverity_expected_results.txt
@@ -0,0 +1,83 @@
+Start command_line test('severity_overrideBadSeverity')
+ERROR(CHK-003): ./com/adobe/epubcheck/test/command_line/severity/(1,8): Unrecognized custom message severity 'BogusSeverity' encountered in message overrides file './com/adobe/epubcheck/test/command_line/severity_overrideBadSeverity.txt'.
+Validating against EPUB version 3.0 - custom validation
+USAGE(HTM-010): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/toc.ncx(2,68): Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.
+USAGE(OPF-059): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/toc.ncx(-1,-1): Spine item has no NAV entry reference.
+USAGE(OPF-059): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/toc.ncx(-1,-1): Spine item has no NAV entry reference.
+USAGE(CSS-012): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/external_css.xhtml(6,62): Document links to multiple CSS files.
+USAGE(CSS-012): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/external_css.xhtml(7,66): Document links to multiple CSS files.
+USAGE(ACC-008): ./com/adobe/epubcheck/test/command_line/severity.epub/severity.epub(-1,-1): Navigation Document has no 'landmarks nav' element.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(2,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(7,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-015): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(7,5): CSS Selector font line-height attribute value does not use a relative size.
+USAGE(CSS-021): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(11,5): CSS Selector font shorthand specifies an invalid System Font.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(15,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(19,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(27,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-015): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(27,5): CSS Selector font line-height attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(35,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(39,5): CSS Selector font-size attribute value does not use a relative size.
+WARNING(CSS-017): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(70,5): CSS Selector specifies absolute position.
+USAGE(CSS-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(79,5): CSS Selector attribute is declared !Important.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(90,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(CSS-023): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(97,1): CSS Selector specifies media query.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(99,9): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(8,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(14,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(23,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(32,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(38,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(51,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(58,5): CSS Selector font-size attribute value does not use a relative size.
+WARNING(CSS-017): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(2,5): CSS Selector specifies absolute position.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(10,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-015): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(10,5): CSS Selector font line-height attribute value does not use a relative size.
+USAGE(CSS-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(15,5): CSS Selector attribute is declared !Important.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(27,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(CSS-023): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(33,1): CSS Selector specifies media query.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(35,9): CSS Selector font-size attribute value does not use a relative size.
+USAGE(CSS-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(9,13): CSS Selector attribute is declared !Important.
+WARNING(CSS-017): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(17,13): CSS Selector specifies absolute position.
+USAGE(CSS-023): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(20,9): CSS Selector specifies media query.
+USAGE(CSS-025): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(54,24): CSS class Selector is not found.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(14,9): CSS class Selector is not used.
+USAGE(ACC-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(10,54): Content file contains at least one inline style declaration.
+USAGE(ACC-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(11,97): Content file contains at least one inline style declaration.
+USAGE(ACC-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(14,50): Content file contains at least one inline style declaration.
+USAGE(ACC-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(15,41): Content file contains at least one inline style declaration.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(1,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(22,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(14,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(10,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(18,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(34,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(38,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(42,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(46,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(30,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(6,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(30,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(56,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(82,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(49,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(36,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(98,5): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(62,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(66,3): CSS class Selector is not used.
+Validating using EPUB version 3.0 rules.
+USAGE(ACC-007): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/external_css.xhtml(-1,-1): Content Documents do not use 'epub:type' attributes for semantic inflection.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(27,13): The 'unicode-bidi' property must not be included in an ePub Style Sheet.
+WARNING(CSS-006): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(38,13): CSS position:fixed property should not be used in EPUBs.
+USAGE(ACC-007): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(-1,-1): Content Documents do not use 'epub:type' attributes for semantic inflection.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(14,1): The 'unicode-bidi' property must not be included in an ePub Style Sheet.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(14,22): The 'direction' property must not be included in an ePub Style Sheet.
+WARNING(CSS-006): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(15,1): CSS position:fixed property should not be used in EPUBs.
+USAGE(ACC-007): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(-1,-1): Content Documents do not use 'epub:type' attributes for semantic inflection.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(55,5): The 'unicode-bidi' property must not be included in an ePub Style Sheet.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(56,5): The 'direction' property must not be included in an ePub Style Sheet.
+WARNING(CSS-006): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(66,5): CSS position:fixed property should not be used in EPUBs.
+
+Check finished with errors
+
+epubcheck completed
+Completed command_line test('severity_overrideBadSeverity')
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideMissingFile_expected_results.txt b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideMissingFile_expected_results.txt
new file mode 100644
index 0000000..6d0100d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideMissingFile_expected_results.txt
@@ -0,0 +1,83 @@
+Start command_line test('severity_overrideMissingFile')
+ERROR(CHK-001): ./com/adobe/epubcheck/test/command_line/severity/./com/adobe/epubcheck/test/command_line/severity_overrideMissingFile.txt(-1,-1): The custom message overrides file was not found.
+Validating against EPUB version 3.0 - custom validation
+USAGE(HTM-010): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/toc.ncx(2,68): Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.
+USAGE(OPF-059): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/toc.ncx(-1,-1): Spine item has no NAV entry reference.
+USAGE(OPF-059): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/toc.ncx(-1,-1): Spine item has no NAV entry reference.
+USAGE(CSS-012): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/external_css.xhtml(6,62): Document links to multiple CSS files.
+USAGE(CSS-012): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/external_css.xhtml(7,66): Document links to multiple CSS files.
+USAGE(ACC-008): ./com/adobe/epubcheck/test/command_line/severity.epub/severity.epub(-1,-1): Navigation Document has no 'landmarks nav' element.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(2,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(7,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-015): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(7,5): CSS Selector font line-height attribute value does not use a relative size.
+USAGE(CSS-021): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(11,5): CSS Selector font shorthand specifies an invalid System Font.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(15,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(19,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(27,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-015): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(27,5): CSS Selector font line-height attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(35,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(39,5): CSS Selector font-size attribute value does not use a relative size.
+WARNING(CSS-017): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(70,5): CSS Selector specifies absolute position.
+USAGE(CSS-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(79,5): CSS Selector attribute is declared !Important.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(90,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(CSS-023): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(97,1): CSS Selector specifies media query.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(99,9): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(8,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(14,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(23,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(32,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(38,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(51,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(58,5): CSS Selector font-size attribute value does not use a relative size.
+WARNING(CSS-017): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(2,5): CSS Selector specifies absolute position.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(10,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-015): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(10,5): CSS Selector font line-height attribute value does not use a relative size.
+USAGE(CSS-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(15,5): CSS Selector attribute is declared !Important.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(27,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(CSS-023): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(33,1): CSS Selector specifies media query.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(35,9): CSS Selector font-size attribute value does not use a relative size.
+USAGE(CSS-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(9,13): CSS Selector attribute is declared !Important.
+WARNING(CSS-017): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(17,13): CSS Selector specifies absolute position.
+USAGE(CSS-023): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(20,9): CSS Selector specifies media query.
+USAGE(CSS-025): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(54,24): CSS class Selector is not found.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(14,9): CSS class Selector is not used.
+USAGE(ACC-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(10,54): Content file contains at least one inline style declaration.
+USAGE(ACC-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(11,97): Content file contains at least one inline style declaration.
+USAGE(ACC-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(14,50): Content file contains at least one inline style declaration.
+USAGE(ACC-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(15,41): Content file contains at least one inline style declaration.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(1,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(22,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(14,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(10,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(18,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(34,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(38,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(42,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(46,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(30,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(6,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(30,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(56,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(82,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(49,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(36,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(98,5): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(62,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(66,3): CSS class Selector is not used.
+Validating using EPUB version 3.0 rules.
+USAGE(ACC-007): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/external_css.xhtml(-1,-1): Content Documents do not use 'epub:type' attributes for semantic inflection.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(27,13): The 'unicode-bidi' property must not be included in an ePub Style Sheet.
+WARNING(CSS-006): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(38,13): CSS position:fixed property should not be used in EPUBs.
+USAGE(ACC-007): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(-1,-1): Content Documents do not use 'epub:type' attributes for semantic inflection.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(14,1): The 'unicode-bidi' property must not be included in an ePub Style Sheet.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(14,22): The 'direction' property must not be included in an ePub Style Sheet.
+WARNING(CSS-006): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(15,1): CSS position:fixed property should not be used in EPUBs.
+USAGE(ACC-007): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(-1,-1): Content Documents do not use 'epub:type' attributes for semantic inflection.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(55,5): The 'unicode-bidi' property must not be included in an ePub Style Sheet.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(56,5): The 'direction' property must not be included in an ePub Style Sheet.
+WARNING(CSS-006): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(66,5): CSS position:fixed property should not be used in EPUBs.
+
+Check finished with errors
+
+epubcheck completed
+Completed command_line test('severity_overrideMissingFile')
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideOk.txt b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideOk.txt
new file mode 100644
index 0000000..7e2e883
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideOk.txt
@@ -0,0 +1,4 @@
+ID	Severity	Message	Suggestion
+CSS-012	ERROR	This is an overridden message	This is an overridden suggestion.
+ACC-015	USAGE
+CSS-021	SUPPRESSED
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideOk_expected_results.txt b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideOk_expected_results.txt
new file mode 100644
index 0000000..8b02b29
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_overrideOk_expected_results.txt
@@ -0,0 +1,81 @@
+Start command_line test('severity_overrideOk')
+Validating against EPUB version 3.0 - custom validation
+USAGE(HTM-010): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/toc.ncx(2,68): Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.
+USAGE(OPF-059): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/toc.ncx(-1,-1): Spine item has no NAV entry reference.
+USAGE(OPF-059): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/toc.ncx(-1,-1): Spine item has no NAV entry reference.
+ERROR(CSS-012): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/external_css.xhtml(6,62):  (severity overridden from USAGE) This is an overridden message
+ERROR(CSS-012): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/external_css.xhtml(7,66):  (severity overridden from USAGE) This is an overridden message
+USAGE(ACC-008): ./com/adobe/epubcheck/test/command_line/severity.epub/severity.epub(-1,-1): Navigation Document has no 'landmarks nav' element.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(2,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(7,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-015): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(7,5): CSS Selector font line-height attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(15,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(19,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(27,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-015): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(27,5): CSS Selector font line-height attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(35,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(39,5): CSS Selector font-size attribute value does not use a relative size.
+WARNING(CSS-017): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(70,5): CSS Selector specifies absolute position.
+USAGE(CSS-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(79,5): CSS Selector attribute is declared !Important.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(90,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(CSS-023): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(97,1): CSS Selector specifies media query.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(99,9): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(8,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(14,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(23,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(32,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(38,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(51,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(58,5): CSS Selector font-size attribute value does not use a relative size.
+WARNING(CSS-017): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(2,5): CSS Selector specifies absolute position.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(10,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-015): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(10,5): CSS Selector font line-height attribute value does not use a relative size.
+USAGE(CSS-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(15,5): CSS Selector attribute is declared !Important.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(27,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(CSS-023): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(33,1): CSS Selector specifies media query.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(35,9): CSS Selector font-size attribute value does not use a relative size.
+USAGE(CSS-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(9,13): CSS Selector attribute is declared !Important.
+WARNING(CSS-017): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(17,13): CSS Selector specifies absolute position.
+USAGE(CSS-023): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(20,9): CSS Selector specifies media query.
+USAGE(CSS-025): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(54,24): CSS class Selector is not found.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(14,9): CSS class Selector is not used.
+USAGE(ACC-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(10,54): Content file contains at least one inline style declaration.
+USAGE(ACC-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(11,97): Content file contains at least one inline style declaration.
+USAGE(ACC-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(14,50): Content file contains at least one inline style declaration.
+USAGE(ACC-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(15,41): Content file contains at least one inline style declaration.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(1,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(22,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(14,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(10,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(18,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(34,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(38,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(42,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(46,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(30,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(6,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(30,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(56,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(82,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(49,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(36,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(98,5): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(62,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(66,3): CSS class Selector is not used.
+Validating using EPUB version 3.0 rules.
+USAGE(ACC-007): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/external_css.xhtml(-1,-1): Content Documents do not use 'epub:type' attributes for semantic inflection.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(27,13): The 'unicode-bidi' property must not be included in an ePub Style Sheet.
+WARNING(CSS-006): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(38,13): CSS position:fixed property should not be used in EPUBs.
+USAGE(ACC-007): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(-1,-1): Content Documents do not use 'epub:type' attributes for semantic inflection.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(14,1): The 'unicode-bidi' property must not be included in an ePub Style Sheet.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(14,22): The 'direction' property must not be included in an ePub Style Sheet.
+WARNING(CSS-006): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(15,1): CSS position:fixed property should not be used in EPUBs.
+USAGE(ACC-007): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(-1,-1): Content Documents do not use 'epub:type' attributes for semantic inflection.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(55,5): The 'unicode-bidi' property must not be included in an ePub Style Sheet.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(56,5): The 'direction' property must not be included in an ePub Style Sheet.
+WARNING(CSS-006): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(66,5): CSS position:fixed property should not be used in EPUBs.
+
+Check finished with errors
+
+epubcheck completed
+Completed command_line test('severity_overrideOk')
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/severity_usage_expected_results.txt b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_usage_expected_results.txt
new file mode 100644
index 0000000..f25a87a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_usage_expected_results.txt
@@ -0,0 +1,82 @@
+Start command_line test('severity_usage')
+Validating against EPUB version 3.0 - custom validation
+USAGE(HTM-010): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/toc.ncx(2,68): Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.
+USAGE(OPF-059): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/toc.ncx(-1,-1): Spine item has no NAV entry reference.
+USAGE(OPF-059): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/toc.ncx(-1,-1): Spine item has no NAV entry reference.
+USAGE(CSS-012): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/external_css.xhtml(6,62): Document links to multiple CSS files.
+USAGE(CSS-012): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/external_css.xhtml(7,66): Document links to multiple CSS files.
+USAGE(ACC-008): ./com/adobe/epubcheck/test/command_line/severity.epub/severity.epub(-1,-1): Navigation Document has no 'landmarks nav' element.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(2,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(7,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-015): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(7,5): CSS Selector font line-height attribute value does not use a relative size.
+USAGE(CSS-021): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(11,5): CSS Selector font shorthand specifies an invalid System Font.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(15,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(19,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(27,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-015): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(27,5): CSS Selector font line-height attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(35,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(39,5): CSS Selector font-size attribute value does not use a relative size.
+WARNING(CSS-017): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(70,5): CSS Selector specifies absolute position.
+USAGE(CSS-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(79,5): CSS Selector attribute is declared !Important.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(90,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(CSS-023): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(97,1): CSS Selector specifies media query.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(99,9): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(8,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(14,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(23,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(32,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(38,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(51,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(58,5): CSS Selector font-size attribute value does not use a relative size.
+WARNING(CSS-017): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(2,5): CSS Selector specifies absolute position.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(10,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(ACC-015): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(10,5): CSS Selector font line-height attribute value does not use a relative size.
+USAGE(CSS-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(15,5): CSS Selector attribute is declared !Important.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(27,5): CSS Selector font-size attribute value does not use a relative size.
+USAGE(CSS-023): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(33,1): CSS Selector specifies media query.
+USAGE(ACC-014): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(35,9): CSS Selector font-size attribute value does not use a relative size.
+USAGE(CSS-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(9,13): CSS Selector attribute is declared !Important.
+WARNING(CSS-017): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(17,13): CSS Selector specifies absolute position.
+USAGE(CSS-023): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(20,9): CSS Selector specifies media query.
+USAGE(CSS-025): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(54,24): CSS class Selector is not found.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(14,9): CSS class Selector is not used.
+USAGE(ACC-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(10,54): Content file contains at least one inline style declaration.
+USAGE(ACC-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(11,97): Content file contains at least one inline style declaration.
+USAGE(ACC-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(14,50): Content file contains at least one inline style declaration.
+USAGE(ACC-013): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(15,41): Content file contains at least one inline style declaration.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(1,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(22,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(14,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(10,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(18,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(34,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(38,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(42,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(46,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(30,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(6,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(30,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(56,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(82,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(49,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(36,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(98,5): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(62,1): CSS class Selector is not used.
+USAGE(CSS-024): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/unused.css(66,3): CSS class Selector is not used.
+Validating using EPUB version 3.0 rules.
+USAGE(ACC-007): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/external_css.xhtml(-1,-1): Content Documents do not use 'epub:type' attributes for semantic inflection.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(27,13): The 'unicode-bidi' property must not be included in an ePub Style Sheet.
+WARNING(CSS-006): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(38,13): CSS position:fixed property should not be used in EPUBs.
+USAGE(ACC-007): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(-1,-1): Content Documents do not use 'epub:type' attributes for semantic inflection.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(14,1): The 'unicode-bidi' property must not be included in an ePub Style Sheet.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(14,22): The 'direction' property must not be included in an ePub Style Sheet.
+WARNING(CSS-006): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(15,1): CSS position:fixed property should not be used in EPUBs.
+USAGE(ACC-007): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(-1,-1): Content Documents do not use 'epub:type' attributes for semantic inflection.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(55,5): The 'unicode-bidi' property must not be included in an ePub Style Sheet.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(56,5): The 'direction' property must not be included in an ePub Style Sheet.
+WARNING(CSS-006): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(66,5): CSS position:fixed property should not be used in EPUBs.
+
+Check finished with errors
+
+epubcheck completed
+Completed command_line test('severity_usage')
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/severity_warning_expected_results.txt b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_warning_expected_results.txt
new file mode 100644
index 0000000..3cafc7d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/severity_warning_expected_results.txt
@@ -0,0 +1,18 @@
+Start command_line test('severity_warning')
+Validating against EPUB version 3.0 - custom validation
+WARNING(CSS-017): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(70,5): CSS Selector specifies absolute position.
+WARNING(CSS-017): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/cssStyles.css(2,5): CSS Selector specifies absolute position.
+WARNING(CSS-017): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(17,13): CSS Selector specifies absolute position.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(27,13): The 'unicode-bidi' property must not be included in an ePub Style Sheet.
+WARNING(CSS-006): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style_tag_css.xhtml(38,13): CSS position:fixed property should not be used in EPUBs.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(14,1): The 'unicode-bidi' property must not be included in an ePub Style Sheet.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(14,22): The 'direction' property must not be included in an ePub Style Sheet.
+WARNING(CSS-006): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/inline_css.xhtml(15,1): CSS position:fixed property should not be used in EPUBs.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(55,5): The 'unicode-bidi' property must not be included in an ePub Style Sheet.
+ERROR(CSS-001): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(56,5): The 'direction' property must not be included in an ePub Style Sheet.
+WARNING(CSS-006): ./com/adobe/epubcheck/test/command_line/severity.epub/OPS/style.css(66,5): CSS position:fixed property should not be used in EPUBs.
+
+Check finished with errors
+
+epubcheck completed
+Completed command_line test('severity_warning')
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/OPS/content.opf
new file mode 100644
index 0000000..71a8b80
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/OPS/content.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Transform Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" href="external_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="style_tag_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" href="inline_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="style" href="style.css" media-type="text/css"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/OPS/external_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/OPS/external_css.xhtml
new file mode 100644
index 0000000..8656762
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/OPS/external_css.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Rotate - External CSS</title>
+    <link rel="stylesheet" type="text/css" href="style.css"/>
+</head>
+<body>
+<div>
+<h1>Rotate specified in external css file</h1>
+    <div class="rotateX">Rotate X</div>
+    <div class="rotateY">Rotate Y</div>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/OPS/inline_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/OPS/inline_css.xhtml
new file mode 100644
index 0000000..aa4e2f3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/OPS/inline_css.xhtml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+        <!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Rotate - Inline CSS</title>
+</head>
+<body>
+<h1>Rotate - Inline CSS</h1>
+<div>
+<div style="-webkit-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px">Rotate 120° Chrome</div>
+<div style="-ms-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px">Rotate 120° IE</div>
+</div>
+<div>
+<div style="-moz-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px">Rotate 120° Firefox</div>
+<div style="-o-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px">Rotate 120° Opera</div>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/OPS/style.css b/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/OPS/style.css
new file mode 100644
index 0000000..cfd461f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/OPS/style.css
@@ -0,0 +1,9 @@
+.rotateY {
+    background-color:lightblue;
+    -webkit-transform:rotateY(180deg);
+}
+
+.rotateX {
+    background-color:lightblue;
+    -webkit-transform:rotateX(90deg);
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/OPS/style_tag_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/OPS/style_tag_css.xhtml
new file mode 100644
index 0000000..7cfbae1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/OPS/style_tag_css.xhtml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Transform - Style Tag</title>
+    <style type="text/css">
+        .rotateY {
+            background-color:yellow;
+            -webkit-transform:rotateY(180deg);
+        }
+
+        .rotateX {
+            background-color:yellow;
+            -webkit-transform:rotateX(180deg);
+        }
+    </style>
+</head>
+<body>
+<div>
+    <h1>Rotate - Style Tag</h1>
+
+    <div class="rotateX">Rotate X</div>
+    <div class="rotateY">Rotate Y</div>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/OPS/toc.ncx
new file mode 100644
index 0000000..b88cb96
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Transform Style Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Rotate - External CSS</text>
+      </navLabel>
+      <content src="external_css.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/OPS/toc.xhtml
new file mode 100644
index 0000000..27aaab4
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/OPS/toc.xhtml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="external_css.xhtml">External CSS</a></li>
+        <li><a href="style_tag_css.xhtml">Style Tag</a> </li>
+        <li><a href="inline_css.xhtml">Inline Style</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/mimetype b/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile_expected_results.xml b/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile_expected_results.xml
new file mode 100644
index 0000000..9fb58c5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/command_line/xmlfile_expected_results.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jhove xmlns="http://hul.harvard.edu/ois/xml/ns/jhove" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="epubcheck" release="4.0.0-alpha11-SNAPSHOT" date="2012-10-31">
+ <date>2014-09-05T03:27:51+02:00</date>
+ <repInfo uri="xmlfile.epub">
+  <created>2014-09-05T03:24:40Z</created>
+  <lastModified>2012-10-10T12:00:00Z</lastModified>
+  <format>application/epub+zip</format>
+  <version>3.0</version>
+  <status>Well-formed</status>
+  <messages>
+   <message>HTM-010, HINT, [Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.], OPS/toc.ncx (2-68)</message>
+   <message>OPF-059, HINT, [Spine item has no NAV entry reference.], OPS/toc.ncx</message>
+   <message>OPF-059, HINT, [Spine item has no NAV entry reference.], OPS/toc.ncx</message>
+   <message>ACC-008, HINT, [Navigation Document has no 'landmarks nav' element.], xmlfile.epub</message>
+   <message>CSS-009, HINT, [Use of certain CSS such as Columns, Transforms, Transitions, box-sizing or KeyFrames can cause pagination issues.], OPS/style.css (3-23)</message>
+   <message>CSS-009, HINT, [Use of certain CSS such as Columns, Transforms, Transitions, box-sizing or KeyFrames can cause pagination issues.], OPS/style.css (8-23)</message>
+   <message>CSS-009, HINT, [Use of certain CSS such as Columns, Transforms, Transitions, box-sizing or KeyFrames can cause pagination issues.], OPS/style_tag_css.xhtml (8-31)</message>
+   <message>CSS-009, HINT, [Use of certain CSS such as Columns, Transforms, Transitions, box-sizing or KeyFrames can cause pagination issues.], OPS/style_tag_css.xhtml (13-31)</message>
+   <message>CSS-009, HINT, [Use of certain CSS such as Columns, Transforms, Transitions, box-sizing or KeyFrames can cause pagination issues.], OPS/style_tag_css.xhtml (5-28)</message>
+   <message>ACC-013, HINT, [Content file contains at least one inline style declaration.], OPS/inline_css.xhtml (14-116)</message>
+   <message>ACC-013, HINT, [Content file contains at least one inline style declaration.], OPS/inline_css.xhtml (10-119)</message>
+   <message>ACC-013, HINT, [Content file contains at least one inline style declaration.], OPS/inline_css.xhtml (15-114)</message>
+   <message>ACC-013, HINT, [Content file contains at least one inline style declaration.], OPS/inline_css.xhtml (11-115)</message>
+   <message>ACC-007, HINT, [Content Documents do not use 'epub:type' attributes for semantic inflection.], OPS/external_css.xhtml</message>
+   <message>ACC-007, HINT, [Content Documents do not use 'epub:type' attributes for semantic inflection.], OPS/style_tag_css.xhtml</message>
+   <message>ACC-007, HINT, [Content Documents do not use 'epub:type' attributes for semantic inflection.], OPS/inline_css.xhtml</message>
+  </messages>
+  <mimeType>application/epub+zip</mimeType>
+  <properties>
+   <property>
+    <name>CharacterCount</name>
+    <values arity="Scalar" type="Long">
+     <value>648</value>
+    </values>
+   </property>
+   <property>
+    <name>Language</name>
+    <values arity="Scalar" type="String">
+     <value>en</value>
+    </values>
+   </property>
+   <property>
+    <name>Info</name>
+    <values arity="List" type="Property">
+     <property>
+      <name>Identifier</name>
+      <values arity="Scalar" type="String">
+       <value>000000000000000000</value>
+      </values>
+     </property>
+     <property>
+      <name>CreationDate</name>
+      <values arity="Scalar" type="Date">
+       <value>2014-09-05T03:24:40Z</value>
+      </values>
+     </property>
+     <property>
+      <name>ModDate</name>
+      <values arity="Scalar" type="Date">
+       <value>2012-10-10T12:00:00Z</value>
+      </values>
+     </property>
+     <property>
+      <name>Title</name>
+      <values arity="Scalar" type="String">
+       <value>Transform Sample Book</value>
+      </values>
+     </property>
+    </values>
+   </property>
+  </properties>
+ </repInfo>
+</jhove>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/alternate/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/css/alternate/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/alternate/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/alternate/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/css/alternate/OPS/content.opf
new file mode 100644
index 0000000..8df9d77
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/alternate/OPS/content.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Alternative Stylesheets</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="page02.xhtml" media-type="application/xhtml+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="style1" href="styles/style.css" media-type="text/css"/>
+    <item id="style2" href="styles/chocolate.css" media-type="text/css"/>
+    <item id="style3" href="styles/midnight.css" media-type="text/css"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/alternate/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/alternate/OPS/page01.xhtml
new file mode 100644
index 0000000..a3a2b85
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/alternate/OPS/page01.xhtml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Alternate Styles</title>
+    <link rel="stylesheet" href="styles/style.css"/>
+    <link rel="alternate stylesheet" href="styles/chocolate.css"/>
+    <link rel="alternate stylesheet" href="styles/midnight.css" title="Midnight"/>
+</head>
+<body>
+  <div>
+    <h1>Alternate Style Sheets</h1>
+
+    <p>This file has a couple of alternate style sheets.</p>
+
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/alternate/OPS/page02.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/alternate/OPS/page02.xhtml
new file mode 100644
index 0000000..c190aea
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/alternate/OPS/page02.xhtml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Alternate Styles</title>
+    <link rel="alternate stylesheet" href="styles/midnight.css" title="Midnight"/>
+</head>
+<body>
+  <div>
+    <h1>Alternate Style Sheets</h1>
+
+    <p>This file has an alternate stylesheet but bo 'main' stylesheet.</p>
+
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/alternate/OPS/styles/chocolate.css b/src/test/resources/com/adobe/epubcheck/test/css/alternate/OPS/styles/chocolate.css
new file mode 100644
index 0000000..3982fc0
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/alternate/OPS/styles/chocolate.css
@@ -0,0 +1,812 @@
+/* The W3C Core Styles Copyright (c) 1998 W3C (mit, inria, Keio), All Rights
+Reserved. W3C liability, trademark, document use and software licensing rules
+apply. See http://www.w3.org/Consortium/Legal/ipr-notice.html
+
+This stylesheet has been served in a form to avoid known bugs in your user
+agent's css implementation. Copying and serving this stylesheet to other
+agents may lead to unexpected results. Please refer to its address rather than
+copy it. */
+
+
+
+
+
+/* begin body type */	/* 1 - humanist sans a */
+
+body	{
+    font-size:	1em;
+    font-weight:	normal;
+    word-spacing:	normal;
+    letter-spacing:	normal;
+    text-transform:	none;
+    font-family:	Verdana, Myriad Web, Syntax, sans-serif;
+    font-size-adjust:	.58;
+}
+
+p, blockquote, ul, ol, dl, dd, li, dir, menu	{
+    /* inherit from body */
+}
+
+small	{
+    font-size:	.92em;
+}
+
+big	{
+    font-size:	1.17em;
+}
+
+pre	{
+    font-family:	'Monotype.com', Courier New, monospace;
+}
+
+ol li	{
+    list-style-type:	decimal;
+}
+
+ol ol li	{
+    list-style-type:	lower-alpha;
+}
+
+ol ol ol li	{
+    list-style-type:	lower-roman;
+}
+
+table, tbody, tr, td	{
+    font-size:	1em;
+    word-spacing:	normal;
+    letter-spacing:	normal;
+    text-transform:	none;
+    font-family:	Verdana, Myriad Web, Syntax, sans-serif;
+    font-size-adjust:	.58;
+}
+
+/* end body type */
+
+
+
+
+/* begin header type */	/* 7 - humanist sans b */
+
+h1	{
+    font-family:	Trebuchet ms, Verdana, Myriad Web, Syntax, sans-serif;
+    font-size-adjust:	.53;
+    font-size:	2em;
+    font-weight:	400;
+    font-style:	normal;
+    text-decoration:	none;
+    word-spacing:	normal;
+    letter-spacing:	normal;
+    text-transform:	none;
+}
+
+h2	{
+    font-family:	Trebuchet ms, Verdana, Myriad Web, Syntax, sans-serif;
+    font-size-adjust:	.53;
+    font-size:	1.75em;
+    font-weight:	400;
+    font-style:	normal;
+    text-decoration:	none;
+    word-spacing:	normal;
+    letter-spacing:	normal;
+    text-transform:	none;
+}
+
+h3	{
+    font-family:	Trebuchet ms, Verdana, Myriad Web, Syntax, sans-serif;
+    font-size-adjust:	.53;
+    font-size:	1.58em;
+    font-weight:	400;
+    font-style:	normal;
+    text-decoration:	none;
+    word-spacing:	normal;
+    letter-spacing:	normal;
+    text-transform:	none;
+}
+
+h4	{
+    font-family:	Trebuchet ms, Verdana, Myriad Web, Syntax, sans-serif;
+    font-size-adjust:	.53;
+    font-size:	1.33em;
+    font-weight:	500;
+    font-style:	normal;
+    text-decoration:	none;
+    word-spacing:	normal;
+    letter-spacing:	normal;
+    text-transform:	none;
+}
+
+h5, dt	{
+    font-family:	Trebuchet ms, Verdana, Myriad Web, Syntax, sans-serif;
+    font-size-adjust:	.53;
+    font-size:	1.17em;
+    font-weight:	600;
+    font-style:	normal;
+    text-decoration:	none;
+    word-spacing:	normal;
+    letter-spacing:	normal;
+    text-transform:	none;
+}
+
+h6	{
+    font-family:	Trebuchet ms, Verdana, Myriad Web, Syntax, sans-serif;
+    font-size-adjust:	.53;
+    font-size:	1em;
+    font-weight:	700;
+    font-style:	normal;
+    text-decoration:	none;
+    word-spacing:	normal;
+    letter-spacing:	normal;
+    text-transform:	none;
+}
+
+tfoot, thead	{
+    font-size:	1em;
+    word-spacing:	normal;
+    letter-spacing:	normal;
+    text-transform:	none;
+    font-family:	Trebuchet ms, Verdana, Myriad Web, Syntax, sans-serif;
+    font-size-adjust:	.53;
+}
+
+th	{
+    vertical-align:	baseline;
+    font-size:	1em;
+    font-weight:	bold;
+    word-spacing:	normal;
+    letter-spacing:	normal;
+    text-transform:	none;
+    font-family:	Trebuchet ms, Verdana, Myriad Web, Syntax, sans-serif;
+    font-size-adjust:	.53;
+}
+
+hr	{
+    visibility:	hidden;
+}
+
+/* end header type */
+
+
+
+
+/* begin affordances */	/* 3 - mint reverse */
+
+a, address, blockquote, body, cite, code, dd, del, dfn,
+div, dl, dt, em, form, h1, h2, h3, h4, h5, h6, iframe, img, kbd,
+li, object, ol, p, q, samp, small, span, strong, sub, sup, ul, var,
+applet, big, center, dir, font, hr, menu, pre,
+abbr, acronym, bdo, button, fieldset, ins, label	{
+    word-spacing:	normal;
+    letter-spacing:	normal;
+    text-transform:	none;
+    text-decoration:	none;
+    border-color:	#ccc;
+    border-style:	none;
+}
+
+body	{
+    color:	#D0FFD0;
+    background:	#212121;
+}
+
+em	{
+    font-style:	normal;
+    font-weight:	bold;
+    color:	#D0FFD0;
+    background:	#212121;
+}
+
+strong	{
+    font-style:	italic;
+    background:	#212121;
+    font-weight:	bold;
+    color:	#D0FFD0;
+}
+
+em strong, strong em	{
+    text-transform:	uppercase;
+    font-style:	normal;
+    font-weight:	bolder;
+    background:	#212121;
+    color:	#D0FFD0;
+}
+
+b	{
+    font-weight:	bold;
+}
+
+i	{
+    font-style:	italic;
+}
+
+.warning	{
+    text-transform:	none;
+    font-style:	normal;
+    font-weight:	bolder;
+    background:	yellow;
+    color:	black;
+}
+
+del	{
+    text-decoration:	line-through;
+    background:	#900;
+}
+
+ins	{
+    text-decoration:	none;
+    background:	#060;
+}
+
+var, cite, dfn, .note	{
+    font-style:	italic;
+}
+
+address	{
+    font-style:	normal;
+    letter-spacing:	.1em;
+}
+
+acronym	{
+    font-variant:	small-caps;
+    letter-spacing:	0.1em;
+}
+
+h1, h2, h3, h4, h5, h6, dt, th, thead, tfoot	{
+    color:	rgb(245,245,245);
+    background:	#212121;
+}
+
+hr	{
+    color:	#ccc;
+}
+
+#colophon	{
+    display:	none;
+}
+
+col, colgroup, table, tbody, td, tr	{
+    color:	#D0FFD0;
+    text-decoration:	none;
+    border-color:	#ccc;
+    border-style:	none;
+    background:	#212121;
+}
+
+a:link	{
+    text-decoration:	none;
+    font-weight:	bold;
+    color:	#F60;
+    background:	#212121;
+}
+
+a:visited	{
+    text-decoration:	none;
+    font-weight:	bold;
+    color:	#C96;
+    background:	#212121;
+}
+
+a:active	{
+    text-decoration:	none;
+    font-weight:	bold;
+    color:	#ffc;
+    background:	#212121;
+}
+
+a:hover	{
+    text-decoration:	none;
+    color:	#FC0;
+    background:	#212121;
+}
+
+a.offsite	{
+    text-decoration:	none;
+    font-weight:	normal;
+    color:	#F60;
+    background:	#212121;
+}
+
+/* end affordances */
+
+
+
+
+/* begin vertical */	/* 1 - pentatonic a */
+
+a, address, blockquote, cite, code, dd, del, dfn,
+div, dl, dt, em, form, h1, h2, h3, h4, h5, h6, iframe, img, kbd,
+li, object, ol, p, q, samp, small, span, strong, sub, sup, ul, var,
+applet, b, big, center, dir, font, hr, i, menu, pre, s, strike, tt,
+u, abbr, acronym, bdo, button, fieldset, ins, label	{
+    margin-top:	0;
+    margin-bottom:	0;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+    vertical-align:	baseline;
+}
+
+body	{
+    line-height:	1.58em;
+}
+
+div > p:first-child, body > p:first-child, td > p:first-child	{
+    margin-top:	.75em;
+    margin-bottom:	.75em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+h1 + p, h2 + p, h3 + p, h4 + p, h5 + p, h6 + p, div + p, p.initial	{
+    margin-top:	.75em;
+    margin-bottom:	.75em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+h1, h2, h3, h4, h5, h6	{
+    line-height:	1.33em;
+}
+
+h1	{
+    margin-top:	1.33em;
+    margin-bottom:	.33em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+h2	{
+    margin-top:	1.75em;
+    margin-bottom:	.33em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+h3	{
+    margin-top:	1.58em;
+    margin-bottom:	.33em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+h4	{
+    margin-top:	1.33em;
+    margin-bottom:	.33em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+h5	{
+    margin-top:	1.17em;
+    margin-bottom:	.33em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+h6	{
+    margin-top:	1em;
+    margin-bottom:	.33em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+p	{
+    margin-top:	.75em;
+    margin-bottom:	.75em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+blockquote, fieldset, form, ul, ol, dl, dir, menu	{
+    margin-top:	.75em;
+    margin-bottom:	.75em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+dt	{
+    margin-top:	0;
+    margin-bottom:	0;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+dd	{
+    margin-top:	0;
+    margin-bottom:	.75em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+ul ul, ol ol, li address, li dl, li ol, li p, li ul, li dir, li hr, li menu, li pre, li h1, li h2, li h3, li h4, li h5, li h6, dd address, dd dl, dd ol, dd p, dd ul, dd dir, dd hr, dd menu, dd pre, dd h1, dd h2, dd h3, dd h4, dd h5, dd h6	{
+    margin-top:	0;
+    margin-bottom:	0;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+li	{
+    margin-top:	0;
+    margin-bottom:	0;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+address	{
+    margin-top:	1.58em;
+    margin-bottom:	1.58em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+pre	{
+    margin-top:	.75em;
+    margin-bottom:	.75em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+    line-height:	1.25em;
+}
+
+hr	{
+    margin-top:	.75em;
+    margin-bottom:	.75em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+    height:	1px;
+}
+
+div, center	{
+    margin-top:	0;
+    margin-bottom:	0;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+.subhead	{
+    margin-top:	.75em;
+    margin-bottom:	.75em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+.stb	{
+    margin-top:	2.17em;
+    margin-bottom:	.75em;
+    padding-top:	2.17em;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+    border-style:	solid
+}
+
+.mtb	{
+    margin-top:	3.08em;
+    margin-bottom:	.75em;
+    padding-top:	3.08em;
+    padding-bottom:	0;
+    border-top:	.1em;
+    border-bottom:	0;
+    border-style:	solid
+}
+
+.ltb	{
+    margin-top:	4.34em;
+    margin-bottom:	.75em;
+    padding-top:	4.34em;
+    padding-bottom:	0;
+    border-top:	.25em;
+    border-bottom:	0;
+    border-style:	solid
+}
+
+col, colgroup, table, tbody, td, tfoot, th, thead, tr	{
+    margin-top:	0;
+    margin-bottom:	0;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+td, th	{
+    line-height:	1.33em;
+}
+
+/* end vertical */
+
+
+
+
+/* begin horizontal */	/* 1 - compact */
+
+a, address, blockquote, cite, code, dd, del, dfn,
+div, dl, dt, em, form, h1, h2, h3, h4, h5, h6, iframe, img, kbd,
+li, object, ol, p, q, samp, small, span, strong, sub, sup, ul, var,
+applet, b, big, center, dir, font, hr, i, menu, pre, s, strike, tt,
+u, abbr, acronym, bdo, button, fieldset, ins, label	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    text-align:	left;
+    float:	none;
+    clear:	none;
+    list-style-position:	outside;
+}
+
+address, blockquote, dl, fieldset, form, ol,
+p, ul,  dir, hr, menu, pre	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+}
+
+div > p:first-child, body > p:first-child, td > p:first-child	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    text-align:	left;
+    text-indent:	0;
+}
+
+h1 + p, h2 + p, h3 + p, h4 + p, h5 + p, h6 + p, div + p, p.initial	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    text-align:	left;
+    text-indent:	0;
+}
+
+h1	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    text-align:	left;
+}
+
+h2	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    text-align:	left;
+}
+
+h3	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    text-align:	left;
+}
+
+h4	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    text-align:	left;
+}
+
+h5	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    text-align:	left;
+}
+
+h6	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    text-align:	left;
+}
+
+p	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    text-indent:	0;
+}
+
+blockquote	{
+    margin-left:	1.58em;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+}
+
+address	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+}
+
+pre	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+}
+
+li	{
+    margin-left:	3.16em;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+}
+
+dt	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+}
+
+dd	{
+    margin-left:	1.58em;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+}
+
+ul ul, ol ol, li address, li dl, li ol, li p, li ul, li dir, li hr, li menu, li pre, li h1, li h2, li h3, li h4, li h5, li h6, dd address, dd dl, dd ol, dd p, dd ul, dd dir, dd hr, dd menu, dd pre, dd h1, dd h2, dd h3, dd h4, dd h5, dd h6	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+}
+
+hr	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    text-align:	left;
+    width:	100%;
+}
+
+center	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    text-align:	left;
+}
+
+col, colgroup, table, tbody, td, tfoot, th, thead, tr	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    float:	none;
+    clear:	none;
+}
+
+table	{
+    text-align:	left;
+}
+
+td	{
+    text-align:	left;
+}
+
+th	{
+    text-align:	left;
+}
+
+caption	{
+    text-align:	left;
+}
+
+/* end horizontal */
+
+
+
+
+/* begin body box */	/* 5 - 'ninths symmetric' */
+
+body	{
+    padding-top:	0;
+    padding-left:	0;
+    padding-right:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-left:	0;
+    border-bottom:	0;
+    border-right:	0;
+    width:	auto;
+}
+/* end body box */
+
+
+
+
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/alternate/OPS/styles/midnight.css b/src/test/resources/com/adobe/epubcheck/test/css/alternate/OPS/styles/midnight.css
new file mode 100644
index 0000000..e4cb574
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/alternate/OPS/styles/midnight.css
@@ -0,0 +1,812 @@
+/* The W3C Core Styles Copyright (c) 1998 W3C (mit, inria, Keio), All Rights
+Reserved. W3C liability, trademark, document use and software licensing rules
+apply. See http://www.w3.org/Consortium/Legal/ipr-notice.html
+
+This stylesheet has been served in a form to avoid known bugs in your user
+agent's css implementation. Copying and serving this stylesheet to other
+agents may lead to unexpected results. Please refer to its address rather than
+copy it. */
+
+
+
+
+
+	/* begin body type */	/* 1 - humanist sans a */
+
+body	{	
+	font-size:	1em;
+	font-weight:	normal;
+	word-spacing:	normal;
+	letter-spacing:	normal;
+	text-transform:	none;
+	font-family:	Verdana, Myriad Web, Syntax, sans-serif;
+	font-size-adjust:	.58;
+	}	
+
+p, blockquote, ul, ol, dl, dd, li, dir, menu	{	
+	/* inherit from body */	
+	}	
+
+small	{	
+	font-size:	.92em;
+	}	
+
+big	{	
+	font-size:	1.17em;
+	}	
+
+pre	{	
+	font-family:	'Monotype.com', Courier New, monospace;
+	}	
+
+ol li	{	
+	list-style-type:	decimal;
+	}	
+
+ol ol li	{	
+	list-style-type:	lower-alpha;
+	}	
+
+ol ol ol li	{	
+	list-style-type:	lower-roman;
+	}	
+
+table, tbody, tr, td	{	
+	font-size:	1em;
+	word-spacing:	normal;
+	letter-spacing:	normal;
+	text-transform:	none;
+	font-family:	Verdana, Myriad Web, Syntax, sans-serif;
+	font-size-adjust:	.58;
+	}	
+
+	/* end body type */	
+
+
+
+
+	/* begin header type */	/* 1 - humanist sans a */
+		
+h1	{	
+	font-family:	Tahoma, Verdana, Myriad Web, Syntax, sans-serif;
+	font-size-adjust:	.53;
+	font-size:	2em;
+	font-weight:	500;
+	font-style:	normal;
+	text-decoration:	none;
+	word-spacing:	normal;
+	letter-spacing:	normal;
+	text-transform:	none;
+	}	
+		
+h2	{	
+	font-family:	Tahoma, Verdana, Myriad Web, Syntax, sans-serif;
+	font-size-adjust:	.53;
+	font-size:	1.75em;
+	font-weight:	500;
+	font-style:	normal;
+	text-decoration:	none;
+	word-spacing:	normal;
+	letter-spacing:	normal;
+	text-transform:	none;
+	}	
+		
+h3	{	
+	font-family:	Tahoma, Verdana, Myriad Web, Syntax, sans-serif;
+	font-size-adjust:	.53;
+	font-size:	1.58em;
+	font-weight:	600;
+	font-style:	normal;
+	text-decoration:	none;
+	word-spacing:	normal;
+	letter-spacing:	normal;
+	text-transform:	none;
+	}	
+		
+h4	{	
+	font-family:	Tahoma, Verdana, Myriad Web, Syntax, sans-serif;
+	font-size-adjust:	.53;
+	font-size:	1.33em;
+	font-weight:	600;
+	font-style:	normal;
+	text-decoration:	none;
+	word-spacing:	normal;
+	letter-spacing:	normal;
+	text-transform:	none;
+	}	
+		
+h5, dt	{	
+	font-family:	Tahoma, Verdana, Myriad Web, Syntax, sans-serif;
+	font-size-adjust:	.53;
+	font-size:	1.17em;
+	font-weight:	600;
+	font-style:	normal;
+	text-decoration:	none;
+	word-spacing:	normal;
+	letter-spacing:	normal;
+	text-transform:	none;
+	}	
+		
+h6	{	
+	font-family:	Tahoma, Verdana, Myriad Web, Syntax, sans-serif;
+	font-size-adjust:	.53;
+	font-size:	1em;
+	font-weight:	700;
+	font-style:	normal;
+	text-decoration:	none;
+	word-spacing:	normal;
+	letter-spacing:	normal;
+	text-transform:	none;
+	}	
+		
+tfoot, thead	{	
+	font-size:	1em;
+	word-spacing:	normal;
+	letter-spacing:	normal;
+	text-transform:	none;
+	font-family:	Verdana, Myriad Web, Syntax, sans-serif;
+	font-size-adjust:	.53;
+	}	
+		
+th	{	
+	vertical-align:	baseline;
+	font-size:	1em;
+	font-weight:	bold;
+	word-spacing:	normal;
+	letter-spacing:	normal;
+	text-transform:	none;
+	font-family:	Verdana, Myriad Web, Syntax, sans-serif;
+	font-size-adjust:	.53;
+	}	
+		
+hr	{	
+	visibility:	hidden;
+	}	
+		
+	/* end header type */	
+
+
+
+
+	/* begin affordances */	/* 5 - midnight */
+		
+a, address, blockquote, body, cite, code, dd, del, dfn,		
+div, dl, dt, em, form, h1, h2, h3, h4, h5, h6, iframe, img, kbd,		
+li, object, ol, p, q, samp, small, span, strong, sub, sup, ul, var, 		
+applet, big, center, dir, font, hr, menu, pre,		
+abbr, acronym, bdo, button, fieldset, ins, label	{	
+	word-spacing:	normal;
+	letter-spacing:	normal;
+	text-transform:	none;
+	text-decoration:	none;
+	border-color:	#CC9;
+	border-style:	none;
+	}	
+		
+body	{	
+	color:	#CC9;
+	background:	black;
+	}	
+		
+em	{	
+	font-style:	normal;
+	font-weight:	bold;
+	color:	#CC9;
+	background:	black;
+	}	
+		
+strong	{	
+	font-style:	italic;
+	background:	black;
+	font-weight:	bold;
+	color:	#CC9;
+	}	
+		
+em strong, strong em	{	
+	text-transform:	uppercase;
+	font-style:	normal;
+	font-weight:	bolder;
+	background:	black;
+	color:	#CC9;
+	}	
+		
+b	{
+	font-weight:	bold;
+	}
+	
+i	{
+	font-style:	italic;
+	}
+		
+.warning	{	
+	text-transform:	none;
+	font-style:	normal;
+	font-weight:	bolder;
+	background:	#ff6;
+	color:	black;
+	}	
+		
+del	{	
+	text-decoration:	line-through;
+	background:	#900;
+	}	
+		
+ins	{	
+	text-decoration:	none;
+	background:	#060;
+	}	
+		
+var, cite, dfn, .note	{	
+	font-style:	italic;
+	}	
+		
+address	{	
+	font-style:	normal;
+	letter-spacing:	.1em;
+	}	
+		
+acronym	{	
+	font-variant:	small-caps;
+	letter-spacing:	0.1em;
+	}	
+		
+h1, h2, h3, h4, h5, h6, dt, th, thead, tfoot	{	
+	color:	#6CC;
+	background:	black;
+	}	
+		
+hr	{	
+	color:	#CC9;
+	}	
+		
+#colophon	{	
+	display:	none;
+	}	
+		
+col, colgroup, table, tbody, td, tr	{	
+	color:	#CC9;
+	text-decoration:	none;
+	border-color:	#CC9;
+	border-style:	none;
+	background:	black;
+	}	
+		
+a:link	{	
+	text-decoration:	none;
+	font-weight:	bold;
+	color:	#ff6;
+	background:	black;
+	}	
+		
+a:visited	{	
+	text-decoration:	none;
+	font-weight:	bold;
+	color:	#FC0;
+	background:	black;
+	}	
+		
+a:active	{	
+	text-decoration:	none;
+	font-weight:	bold;
+	color:	#ff6;
+	background:	#663;
+	}	
+		
+a:hover	{	
+	text-decoration:	none;
+	color:	black;
+	background:	#CC9;
+	}	
+		
+a.offsite	{	
+	text-decoration:	none;
+	font-weight:	normal;
+	color:	#ff6;
+	background:	black;
+	}	
+		
+	/* end affordances */	
+
+
+
+
+	/* begin vertical */	/* 1 - pentatonic a */
+		
+a, address, blockquote, cite, code, dd, del, dfn,		
+div, dl, dt, em, form, h1, h2, h3, h4, h5, h6, iframe, img, kbd,		
+li, object, ol, p, q, samp, small, span, strong, sub, sup, ul, var, 		
+applet, b, big, center, dir, font, hr, i, menu, pre, s, strike, tt,		
+u, abbr, acronym, bdo, button, fieldset, ins, label	{	
+	margin-top:	0;
+	margin-bottom:	0;
+	padding-top:	0;
+	padding-bottom:	0;
+	border-top:	0;
+	border-bottom:	0;
+	vertical-align:	baseline;
+	}	
+		
+body	{	
+	line-height:	1.58em;
+	}	
+		
+div > p:first-child, body > p:first-child, td > p:first-child	{	
+	margin-top:	.75em;
+	margin-bottom:	.75em;
+	padding-top:	0;
+	padding-bottom:	0;
+	border-top:	0;
+	border-bottom:	0;
+	}	
+		
+h1 + p, h2 + p, h3 + p, h4 + p, h5 + p, h6 + p, div + p, p.initial	{	
+	margin-top:	.75em;
+	margin-bottom:	.75em;
+	padding-top:	0;
+	padding-bottom:	0;
+	border-top:	0;
+	border-bottom:	0;
+	}	
+		
+h1, h2, h3, h4, h5, h6	{	
+	line-height:	1.33em;
+	}	
+		
+h1	{	
+	margin-top:	1.33em;
+	margin-bottom:	.33em;
+	padding-top:	0;
+	padding-bottom:	0;
+	border-top:	0;
+	border-bottom:	0;
+	}	
+		
+h2	{	
+	margin-top:	1.75em;
+	margin-bottom:	.33em;
+	padding-top:	0;
+	padding-bottom:	0;
+	border-top:	0;
+	border-bottom:	0;
+	}	
+		
+h3	{	
+	margin-top:	1.58em;
+	margin-bottom:	.33em;
+	padding-top:	0;
+	padding-bottom:	0;
+	border-top:	0;
+	border-bottom:	0;
+	}	
+		
+h4	{	
+	margin-top:	1.33em;
+	margin-bottom:	.33em;
+	padding-top:	0;
+	padding-bottom:	0;
+	border-top:	0;
+	border-bottom:	0;
+	}	
+		
+h5	{	
+	margin-top:	1.17em;
+	margin-bottom:	.33em;
+	padding-top:	0;
+	padding-bottom:	0;
+	border-top:	0;
+	border-bottom:	0;
+	}	
+		
+h6	{	
+	margin-top:	1em;
+	margin-bottom:	.33em;
+	padding-top:	0;
+	padding-bottom:	0;
+	border-top:	0;
+	border-bottom:	0;
+	}	
+		
+p	{	
+	margin-top:	.75em;
+	margin-bottom:	.75em;
+	padding-top:	0;
+	padding-bottom:	0;
+	border-top:	0;
+	border-bottom:	0;
+	}	
+		
+blockquote, fieldset, form, ul, ol, dl, dir, menu	{	
+	margin-top:	.75em;
+	margin-bottom:	.75em;
+	padding-top:	0;
+	padding-bottom:	0;
+	border-top:	0;
+	border-bottom:	0;
+	}	
+		
+dt	{	
+	margin-top:	0;
+	margin-bottom:	0;
+	padding-top:	0;
+	padding-bottom:	0;
+	border-top:	0;
+	border-bottom:	0;
+	}	
+		
+dd	{	
+	margin-top:	0;
+	margin-bottom:	.75em;
+	padding-top:	0;
+	padding-bottom:	0;
+	border-top:	0;
+	border-bottom:	0;
+	}	
+		
+ul ul, ol ol, li address, li dl, li ol, li p, li ul, li dir, li hr, li menu, li pre, li h1, li h2, li h3, li h4, li h5, li h6, dd address, dd dl, dd ol, dd p, dd ul, dd dir, dd hr, dd menu, dd pre, dd h1, dd h2, dd h3, dd h4, dd h5, dd h6	{	
+	margin-top:	0;
+	margin-bottom:	0;
+	padding-top:	0;
+	padding-bottom:	0;
+	border-top:	0;
+	border-bottom:	0;
+	}	
+		
+li	{	
+	margin-top:	0;
+	margin-bottom:	0;
+	padding-top:	0;
+	padding-bottom:	0;
+	border-top:	0;
+	border-bottom:	0;
+	}	
+		
+address	{	
+	margin-top:	1.58em;
+	margin-bottom:	1.58em;
+	padding-top:	0;
+	padding-bottom:	0;
+	border-top:	0;
+	border-bottom:	0;
+	}	
+		
+pre	{	
+	margin-top:	.75em;
+	margin-bottom:	.75em;
+	padding-top:	0;
+	padding-bottom:	0;
+	border-top:	0;
+	border-bottom:	0;
+	line-height:	1.25em;
+	}	
+		
+hr	{	
+	margin-top:	.75em;
+	margin-bottom:	.75em;
+	padding-top:	0;
+	padding-bottom:	0;
+	border-top:	0;
+	border-bottom:	0;
+	height:	1px;
+	}	
+		
+div, center	{	
+	margin-top:	0;
+	margin-bottom:	0;
+	padding-top:	0;
+	padding-bottom:	0;
+	border-top:	0;
+	border-bottom:	0;
+	}	
+		
+.subhead	{	
+	margin-top:	.75em;
+	margin-bottom:	.75em;
+	padding-top:	0;
+	padding-bottom:	0;
+	border-top:	0;
+	border-bottom:	0;
+	}	
+		
+.stb	{	
+	margin-top:	2.17em;
+	margin-bottom:	.75em;
+	padding-top:	2.17em;
+	padding-bottom:	0;
+	border-top:	0;
+	border-bottom:	0;
+	border-style:	solid
+	}	
+		
+.mtb	{	
+	margin-top:	3.08em;
+	margin-bottom:	.75em;
+	padding-top:	3.08em;
+	padding-bottom:	0;
+	border-top:	.1em;
+	border-bottom:	0;
+	border-style:	solid
+	}	
+		
+.ltb	{	
+	margin-top:	4.34em;
+	margin-bottom:	.75em;
+	padding-top:	4.34em;
+	padding-bottom:	0;
+	border-top:	.25em;
+	border-bottom:	0;
+	border-style:	solid
+	}	
+		
+col, colgroup, table, tbody, td, tfoot, th, thead, tr	{	
+	margin-top:	0;
+	margin-bottom:	0;
+	padding-top:	0;
+	padding-bottom:	0;
+	border-top:	0;
+	border-bottom:	0;
+	}	
+		
+td, th	{	
+	line-height:	1.33em;
+	}	
+		
+	/* end vertical */	
+
+
+
+
+	/* begin horizontal */	/* 2 - inset */
+		
+a, address, blockquote, cite, code, dd, del, dfn,		
+div, dl, dt, em, form, h1, h2, h3, h4, h5, h6, iframe, img, kbd,		
+li, object, ol, p, q, samp, small, span, strong, sub, sup, ul, var, 		
+applet, b, big, center, dir, font, hr, i, menu, pre, s, strike, tt,		
+u, abbr, acronym, bdo, button, fieldset, ins, label	{	
+	margin-left:	0;
+	margin-right:	0;
+	padding-left:	0;
+	padding-right:	0;
+	border-left:	0;
+	border-right:	0;
+	text-align:	left;
+	float:	none;
+	clear:	none;
+	list-style-position:	outside;
+	}	
+		
+address, blockquote, dl, fieldset, form, ol, 		
+p, ul,  dir, hr, menu, pre	{	
+	margin-left:	0;
+	margin-right:	0;
+	padding-left:	1.58em;
+	padding-right:	0;
+	border-left:	0;
+	border-right:	0;
+	}	
+		
+div > p:first-child, body > p:first-child, td > p:first-child	{	
+	margin-left:	0;
+	margin-right:	0;
+	padding-left:	0;
+	padding-right:	0;
+	border-left:	0;
+	border-right:	0;
+	text-align:	left;
+	text-indent:	0;
+	}	
+		
+h1 + p, h2 + p, h3 + p, h4 + p, h5 + p, h6 + p, div + p, p.initial	{	
+	margin-left:	0;
+	margin-right:	0;
+	padding-left:	1.58em;
+	padding-right:	0;
+	border-left:	0;
+	border-right:	0;
+	text-align:	left;
+	text-indent:	0;
+	}	
+		
+h1	{	
+	margin-left:	0;
+	margin-right:	0;
+	padding-left:	0;
+	padding-right:	0;
+	border-left:	0;
+	border-right:	0;
+	text-align:	left;
+	}	
+		
+h2	{	
+	margin-left:	0;
+	margin-right:	0;
+	padding-left:	0;
+	padding-right:	0;
+	border-left:	0;
+	border-right:	0;
+	text-align:	left;
+	}	
+		
+h3	{	
+	margin-left:	0;
+	margin-right:	0;
+	padding-left:	0;
+	padding-right:	0;
+	border-left:	0;
+	border-right:	0;
+	text-align:	left;
+	}	
+		
+h4	{	
+	margin-left:	0;
+	margin-right:	0;
+	padding-left:	0;
+	padding-right:	0;
+	border-left:	0;
+	border-right:	0;
+	text-align:	left;
+	}	
+		
+h5	{	
+	margin-left:	0;
+	margin-right:	0;
+	padding-left:	0;
+	padding-right:	0;
+	border-left:	0;
+	border-right:	0;
+	text-align:	left;
+	}	
+		
+h6	{	
+	margin-left:	0;
+	margin-right:	0;
+	padding-left:	0;
+	padding-right:	0;
+	border-left:	0;
+	border-right:	0;
+	text-align:	left;
+	}	
+		
+p	{	
+	margin-left:	0;
+	margin-right:	0;
+	padding-left:	1.58em;
+	padding-right:	0;
+	border-left:	0;
+	border-right:	0;
+	text-indent:	0;
+	}	
+		
+blockquote	{	
+	margin-left:	1.58em;
+	margin-right:	0;
+	padding-left:	1.58em;
+	padding-right:	0;
+	border-left:	0;
+	border-right:	0;
+	}	
+		
+address	{	
+	margin-left:	0;
+	margin-right:	0;
+	padding-left:	1.58em;
+	padding-right:	0;
+	border-left:	0;
+	border-right:	0;
+	}	
+		
+pre	{	
+	margin-left:	0;
+	margin-right:	0;
+	padding-left:	1.58em;
+	padding-right:	0;
+	border-left:	0;
+	border-right:	0;
+	}	
+		
+li	{	
+	margin-left:	3.16em;
+	margin-right:	0;
+	padding-left:	0;
+	padding-right:	0;
+	border-left:	0;
+	border-right:	0;
+	}	
+		
+dt	{	
+	margin-left:	0;
+	margin-right:	0;
+	padding-left:	0;
+	padding-right:	0;
+	border-left:	0;
+	border-right:	0;
+	}	
+		
+dd	{	
+	margin-left:	1.58em;
+	margin-right:	0;
+	padding-left:	0;
+	padding-right:	0;
+	border-left:	0;
+	border-right:	0;
+	}	
+		
+ul ul, ol ol, li address, li dl, li ol, li p, li ul, li dir, li hr, li menu, li pre, li h1, li h2, li h3, li h4, li h5, li h6, dd address, dd dl, dd ol, dd p, dd ul, dd dir, dd hr, dd menu, dd pre, dd h1, dd h2, dd h3, dd h4, dd h5, dd h6	{	
+	margin-left:	0;
+	margin-right:	0;
+	padding-left:	0;
+	padding-right:	0;
+	border-left:	0;
+	border-right:	0;
+	}
+		
+hr	{	
+	margin-left:	2em;
+	margin-right:	0;
+	padding-left:	1.58em;
+	padding-right:	0;
+	border-left:	0;
+	border-right:	0;
+	text-align:	left;
+	width:	12em;
+	}	
+		
+center	{	
+	margin-left:	0;
+	margin-right:	0;
+	padding-left:	0;
+	padding-right:	0;
+	border-left:	0;
+	border-right:	0;
+	text-align:	left;
+	}	
+		
+col, colgroup, table, tbody, td, tfoot, th, thead, tr	{	
+	margin-left:	0;
+	margin-right:	0;
+	padding-left:	0;
+	padding-right:	0;
+	border-left:	0;
+	border-right:	0;
+	float:	none;
+	clear:	none;
+	}	
+		
+table	{	
+	text-align:	left;
+	}	
+		
+td	{	
+	text-align:	left;
+	}	
+		
+th	{	
+	text-align:	left;
+	}	
+		
+caption	{	
+	text-align:	left;
+	}	
+		
+	/* end horizontal */	
+
+
+
+
+	/* begin body box */	/* 2 - 'ninths asymmetric' */
+
+body	{
+	padding-top:	0;
+	padding-left:	0;
+	padding-right:	0;
+	padding-bottom:	0;
+	border-top:	0;
+	border-left:	0;
+	border-bottom:	0;
+	border-right:	0;
+	width:	auto;
+	}
+	/* end body box */
+
+
+
+
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/alternate/OPS/styles/style.css b/src/test/resources/com/adobe/epubcheck/test/css/alternate/OPS/styles/style.css
new file mode 100644
index 0000000..aa4e574
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/alternate/OPS/styles/style.css
@@ -0,0 +1,800 @@
+/* The W3C Core Styles Copyright (c) 1998 W3C (mit, inria, Keio), All Rights
+Reserved. W3C liability, trademark, document use and software licensing rules
+apply. See http://www.w3.org/Consortium/Legal/ipr-notice.html
+
+This stylesheet has been served in a form to avoid known bugs in your user
+agent's css implementation. Copying and serving this stylesheet to other
+agents may lead to unexpected results. Please refer to its address rather than
+copy it. */
+
+
+
+
+
+/* begin body type */	/* 2 - serif a */
+
+body	{
+    font-size:	1em;
+    font-weight:	normal;
+    word-spacing:	normal;
+    letter-spacing:	normal;
+    text-transform:	none;
+    font-family:	Georgia, Minion Web, Palatino, Book Antiqua, Utopia, Times New Roman, serif;
+    font-size-adjust:	.5;
+}
+
+p, blockquote, ul, ol, dl, dd, li, dir, menu	{
+    /* inherit from body */
+}
+
+small	{
+    font-size:	.92em;
+}
+
+big	{
+    font-size:	1.17em;
+}
+
+pre	{
+    font-family:	'Monotype.com', Courier New, monospace;
+}
+
+ol li	{
+    list-style-type:	decimal;
+}
+
+ol ol li	{
+    list-style-type:	lower-alpha;
+}
+
+ol ol ol li	{
+    list-style-type:	lower-roman;
+}
+
+table, tbody, tr, td	{
+    font-size:	1em;
+    word-spacing:	normal;
+    letter-spacing:	normal;
+    text-transform:	none;
+    font-family:	Georgia, Minion Web, Palatino, Book Antiqua, Utopia, Times New Roman, serif;
+    font-size-adjust:	.5;
+}
+
+/* end body type */
+
+
+
+
+/* begin header type */	/* 7 - humanist sans b */
+
+h1	{
+    font-family:	Trebuchet ms, Verdana, Myriad Web, Syntax, sans-serif;
+    font-size-adjust:	.53;
+    font-size:	2em;
+    font-weight:	400;
+    font-style:	normal;
+    text-decoration:	none;
+    word-spacing:	normal;
+    letter-spacing:	normal;
+    text-transform:	none;
+}
+
+h2	{
+    font-family:	Trebuchet ms, Verdana, Myriad Web, Syntax, sans-serif;
+    font-size-adjust:	.53;
+    font-size:	1.75em;
+    font-weight:	400;
+    font-style:	normal;
+    text-decoration:	none;
+    word-spacing:	normal;
+    letter-spacing:	normal;
+    text-transform:	none;
+}
+
+h3	{
+    font-family:	Trebuchet ms, Verdana, Myriad Web, Syntax, sans-serif;
+    font-size-adjust:	.53;
+    font-size:	1.58em;
+    font-weight:	400;
+    font-style:	normal;
+    text-decoration:	none;
+    word-spacing:	normal;
+    letter-spacing:	normal;
+    text-transform:	none;
+}
+
+h4	{
+    font-family:	Trebuchet ms, Verdana, Myriad Web, Syntax, sans-serif;
+    font-size-adjust:	.53;
+    font-size:	1.33em;
+    font-weight:	500;
+    font-style:	normal;
+    text-decoration:	none;
+    word-spacing:	normal;
+    letter-spacing:	normal;
+    text-transform:	none;
+}
+
+h5, dt	{
+    font-family:	Trebuchet ms, Verdana, Myriad Web, Syntax, sans-serif;
+    font-size-adjust:	.53;
+    font-size:	1.17em;
+    font-weight:	600;
+    font-style:	normal;
+    text-decoration:	none;
+    word-spacing:	normal;
+    letter-spacing:	normal;
+    text-transform:	none;
+}
+
+h6	{
+    font-family:	Trebuchet ms, Verdana, Myriad Web, Syntax, sans-serif;
+    font-size-adjust:	.53;
+    font-size:	1em;
+    font-weight:	700;
+    font-style:	normal;
+    text-decoration:	none;
+    word-spacing:	normal;
+    letter-spacing:	normal;
+    text-transform:	none;
+}
+
+tfoot, thead	{
+    font-size:	1em;
+    word-spacing:	normal;
+    letter-spacing:	normal;
+    text-transform:	none;
+    font-family:	Trebuchet ms, Verdana, Myriad Web, Syntax, sans-serif;
+    font-size-adjust:	.53;
+}
+
+th	{
+    vertical-align:	baseline;
+    font-size:	1em;
+    font-weight:	bold;
+    word-spacing:	normal;
+    letter-spacing:	normal;
+    text-transform:	none;
+    font-family:	Trebuchet ms, Verdana, Myriad Web, Syntax, sans-serif;
+    font-size-adjust:	.53;
+}
+
+hr	{
+    visibility:	hidden;
+}
+
+/* end header type */
+
+
+
+
+/* begin affordances */	/* 2 - laid */
+
+a, address, blockquote, body, cite, code, dd, del, dfn,
+div, dl, dt, em, form, h1, h2, h3, h4, h5, h6, iframe, img, kbd,
+li, object, ol, p, q, samp, small, span, strong, sub, sup, ul, var,
+applet, big, center, dir, font, hr, menu, pre,
+abbr, acronym, bdo, button, fieldset, ins, label	{
+    word-spacing:	normal;
+    letter-spacing:	normal;
+    text-transform:	none;
+    text-decoration:	none;
+    border-color:	black;
+    border-style:	none;
+}
+
+body	{
+    color:	black;
+}
+
+em	{
+    font-style:	normal;
+    font-weight:	bold;
+    color:	black;
+}
+
+strong	{
+    font-style:	italic;
+    font-weight:	bold;
+    color:	black;
+}
+
+em strong, strong em	{
+    text-transform:	uppercase;
+    font-style:	normal;
+    font-weight:	bolder;
+    color:	black;
+}
+
+b	{
+    font-weight:	bold;
+}
+
+i	{
+    font-style:	italic;
+}
+
+.warning	{
+    text-transform:	none;
+    font-style:	normal;
+    font-weight:	bolder;
+    color:	black;
+}
+
+del	{
+    text-decoration:	line-through;
+    background:	#F66;
+}
+
+ins	{
+    text-decoration:	underline;
+    background:	yellow;
+}
+
+var, cite, dfn, .note	{
+    font-style:	italic;
+}
+
+address	{
+    font-style:	normal;
+    letter-spacing:	.1em;
+}
+
+acronym	{
+    font-variant:	small-caps;
+    letter-spacing:	0.1em;
+}
+
+h1, h2, h3, h4, h5, h6, dt, th, thead, tfoot	{
+    color:	black;
+}
+
+hr	{
+    color:	black;
+}
+
+#colophon	{
+    display:	none;
+}
+
+col, colgroup, table, tbody, td, tr	{
+    color:	black;
+    text-decoration:	none;
+    border-color:	black;
+    border-style:	none;
+}
+
+a:link	{
+    text-decoration:	none;
+    font-weight:	bold;
+    color:	#C00;
+}
+
+a:visited	{
+    text-decoration:	none;
+    font-weight:	bold;
+    color:	#69C;
+}
+
+a:active	{
+    text-decoration:	none;
+    font-weight:	bold;
+    color:	#C00;
+}
+
+a:hover	{
+    text-decoration:	none;
+    color:	#F00;
+}
+
+a.offsite	{
+    text-decoration:	none;
+    font-weight:	normal;
+    color:	#C66;
+}
+
+/* end affordances */
+
+
+
+
+/* begin vertical */	/* 2 - pentatonic b */
+
+a, address, blockquote, cite, code, dd, del, dfn,
+div, dl, dt, em, form, h1, h2, h3, h4, h5, h6, iframe, img, kbd,
+li, object, ol, p, q, samp, small, span, strong, sub, sup, ul, var,
+applet, b, big, center, dir, font, hr, i, menu, pre, s, strike, tt,
+u, abbr, acronym, bdo, button, fieldset, ins, label	{
+    margin-top:	0;
+    margin-bottom:	0;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+    vertical-align:	baseline;
+}
+
+body	{
+    line-height:	1.75em;
+}
+
+div > p:first-child, body > p:first-child, td > p:first-child	{
+    margin-top:	0;
+    margin-bottom:	0;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+h1 + p, h2 + p, h3 + p, h4 + p, h5 + p, h6 + p, div + p, p.initial	{
+    margin-top:	0;
+    margin-bottom:	0;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+h1, h2, h3, h4, h5, h6	{
+    line-height:	1.33em;
+}
+
+h1	{
+    margin-top:	1.33em;
+    margin-bottom:	.33em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+h2	{
+    margin-top:	1.75em;
+    margin-bottom:	.33em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+h3	{
+    margin-top:	1.58em;
+    margin-bottom:	.33em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+h4	{
+    margin-top:	1.33em;
+    margin-bottom:	.33em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+h5	{
+    margin-top:	1.17em;
+    margin-bottom:	.33em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+h6	{
+    margin-top:	1em;
+    margin-bottom:	.33em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+p	{
+    margin-top:	0;
+    margin-bottom:	0;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+blockquote, fieldset, form, ul, ol, dl, dir, menu	{
+    margin-top:	.83em;
+    margin-bottom:	.83em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+dt	{
+    margin-top:	0;
+    margin-bottom:	0;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+dd	{
+    margin-top:	0;
+    margin-bottom:	.83em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+ul ul, ol ol, li address, li dl, li ol, li p, li ul, li dir, li hr, li menu, li pre, li h1, li h2, li h3, li h4, li h5, li h6, dd address, dd dl, dd ol, dd p, dd ul, dd dir, dd hr, dd menu, dd pre, dd h1, dd h2, dd h3, dd h4, dd h5, dd h6	{
+    margin-top:	0;
+    margin-bottom:	0;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+li	{
+    margin-top:	0;
+    margin-bottom:	0;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+address	{
+    margin-top:	1.75em;
+    margin-bottom:	1.75em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+pre	{
+    margin-top:	.83em;
+    margin-bottom:	.83em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+    line-height:	1.33em;
+}
+
+hr	{
+    margin-top:	.83em;
+    margin-bottom:	.83em;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+    height:	.1em;
+}
+
+div, center	{
+    margin-top:	0;
+    margin-bottom:	0;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+.subhead	{
+    margin-top:	0;
+    margin-bottom:	0;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+.stb	{
+    margin-top:	.83em;
+    margin-bottom:	0;
+    padding-top:	.83em;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+    border-style:	solid
+}
+
+.mtb	{
+    margin-top:	2.17em;
+    margin-bottom:	0;
+    padding-top:	2.17em;
+    padding-bottom:	0;
+    border-top:	.1em;
+    border-bottom:	0;
+    border-style:	solid
+}
+
+.ltb	{
+    margin-top:	3.08em;
+    margin-bottom:	0;
+    padding-top:	3.08em;
+    padding-bottom:	0;
+    border-top:	.25em;
+    border-bottom:	0;
+    border-style:	solid
+}
+
+col, colgroup, table, tbody, td, tfoot, th, thead, tr	{
+    margin-top:	0;
+    margin-bottom:	0;
+    padding-top:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-bottom:	0;
+}
+
+td, th	{
+    line-height:	1.58em;
+}
+
+/* end vertical */
+
+
+
+
+/* begin horizontal */	/* 3 - indents */
+
+a, address, blockquote, cite, code, dd, del, dfn,
+div, dl, dt, em, form, h1, h2, h3, h4, h5, h6, iframe, img, kbd,
+li, object, ol, p, q, samp, small, span, strong, sub, sup, ul, var,
+applet, b, big, center, dir, font, hr, i, menu, pre, s, strike, tt,
+u, abbr, acronym, bdo, button, fieldset, ins, label	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    text-align:	left;
+    float:	none;
+    clear:	none;
+    list-style-position:	outside;
+}
+
+address, blockquote, dl, fieldset, form, ol,
+p, ul,  dir, hr, menu, pre	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+}
+
+div > p:first-child, body > p:first-child, td > p:first-child	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    text-align:	left;
+    text-indent:	0;
+}
+
+h1 + p, h2 + p, h3 + p, h4 + p, h5 + p, h6 + p, div + p, .initial, .stb, .mtb, .ltb	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    text-align:	left;
+    text-indent:	0;
+}
+
+h1	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    text-align:	left;
+}
+
+h2	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    text-align:	left;
+}
+
+h3	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    text-align:	left;
+}
+
+h4	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    text-align:	left;
+}
+
+h5	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    text-align:	left;
+}
+
+h6	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    text-align:	left;
+}
+
+p	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    text-indent:	1.75em;
+}
+
+blockquote	{
+    margin-left:	1.75em;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+}
+
+address	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+}
+
+pre	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+}
+
+li	{
+    margin-left:	1.75em;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+}
+
+dt	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+}
+
+dd	{
+    margin-left:	1.75em;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+}
+
+ul ul, ol ol, li address, li dl, li ol, li p, li ul, li dir, li hr, li menu, li pre, li h1, li h2, li h3, li h4, li h5, li h6, dd address, dd dl, dd ol, dd p, dd ul, dd dir, dd hr, dd menu, dd pre, dd h1, dd h2, dd h3, dd h4, dd h5, dd h6	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+}
+
+hr	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    text-align:	center;
+    width:	.5em;
+}
+
+center	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    text-align:	left;
+}
+
+col, colgroup, table, tbody, td, tfoot, th, thead, tr	{
+    margin-left:	0;
+    margin-right:	0;
+    padding-left:	0;
+    padding-right:	0;
+    border-left:	0;
+    border-right:	0;
+    float:	none;
+    clear:	none;
+}
+
+table	{
+    text-align:	left;
+}
+
+td	{
+    text-align:	left;
+}
+
+th	{
+    text-align:	left;
+}
+
+caption	{
+    text-align:	left;
+}
+
+/* end horizontal */
+
+
+
+
+/* begin body box */	/* 3 - 'twelvths asymmetric' */
+
+body	{
+    padding-top:	0;
+    padding-left:	0;
+    padding-right:	0;
+    padding-bottom:	0;
+    border-top:	0;
+    border-left:	0;
+    border-bottom:	0;
+    border-right:	0;
+    width:	auto;
+}
+/* end body box */
+
+
+
+
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/alternate/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/css/alternate/OPS/toc.ncx
new file mode 100644
index 0000000..61eaa2b
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/alternate/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Alternate</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/alternate/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/alternate/OPS/toc.xhtml
new file mode 100644
index 0000000..f17be2a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/alternate/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="page01.xhtml">Page 1</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/alternate/mimetype b/src/test/resources/com/adobe/epubcheck/test/css/alternate/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/alternate/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/alternate_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/css/alternate_expected_results.json
new file mode 100644
index 0000000..a147d79
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/alternate_expected_results.json
@@ -0,0 +1,388 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/css/alternate.epub",
+    "filename" : "alternate.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:17:17",
+    "elapsedTime" : 384,
+    "nFatal" : 0,
+    "nError" : 1,
+    "nWarning" : 0,
+    "nUsage" : 6
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Alternative Stylesheets",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 2,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 321,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 420,
+    "uncompressedSize" : 1066,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "36c0c754576a1835748462194e541c655d6c6ccc999a82d18f38ba2e50bb735a",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 292,
+    "uncompressedSize" : 547,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2ea3881a076ad166fc41c3aff7b5681176d347c090493fbad05060483034b9",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 241,
+    "uncompressedSize" : 484,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "84b398d276c3edc54ace34aa85fd89d4477a0925e8de516e7d91a9abaa92f8",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/styles/chocolate.css", "OPS/styles/style.css", "OPS/styles/midnight.css" ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/page02.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 227,
+    "uncompressedSize" : 378,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f52cb34766a2e04b350c8ee7cb998d54415acd972657e899e95d4ad0ef",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/styles/midnight.css" ]
+  }, {
+    "id" : "style1",
+    "fileName" : "OPS/styles/style.css",
+    "media_type" : "text/css",
+    "compressedSize" : 2177,
+    "uncompressedSize" : 14554,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1cdd9d61f5e2ca9a84a7059d445a50cb774fd04ed5a1bb76f0f2a9c49ba469",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style2",
+    "fileName" : "OPS/styles/chocolate.css",
+    "media_type" : "text/css",
+    "compressedSize" : 2182,
+    "uncompressedSize" : 14828,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1071b0a679204e451d97e3b06d643f1a69cccef24095d985cff2268329775113",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style3",
+    "fileName" : "OPS/styles/midnight.css",
+    "media_type" : "text/css",
+    "compressedSize" : 2168,
+    "uncompressedSize" : 13839,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d66c2d586442631d071afa95876850b4d41857a9f5ea6af08f34b8ce5f8a24",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 228,
+    "uncompressedSize" : 339,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c1f5f92fde356c7bbbc841fce3f768289bf47019fdf46fc33b54273fa0f0cf4",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page02.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "alternate.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-015",
+    "severity" : "ERROR",
+    "message" : "Alternate Stylesheet has no title.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : 6,
+      "column" : 67,
+      "context" : "styles/chocolate.css"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-024",
+    "severity" : "USAGE",
+    "message" : "CSS class Selector is not used.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 217,
+      "column" : 1,
+      "context" : ".warning"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 234,
+      "column" : 17,
+      "context" : ".note"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 290,
+      "column" : 2,
+      "context" : ".offsite"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 330,
+      "column" : 59,
+      "context" : ".initial"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 489,
+      "column" : 1,
+      "context" : ".subhead"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 498,
+      "column" : 1,
+      "context" : ".stb"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 508,
+      "column" : 1,
+      "context" : ".mtb"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 518,
+      "column" : 1,
+      "context" : ".ltb"
+    } ],
+    "suggestion" : "Remove unused CSS selectors."
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-058",
+    "severity" : "USAGE",
+    "message" : "Spine item has no TOC entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page02.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one TOC entry."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page02.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/columns/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/css/columns/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/columns/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/columns/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/css/columns/OPS/content.opf
new file mode 100644
index 0000000..0572670
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/columns/OPS/content.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Columns Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" href="external_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="style_tag_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" href="inline_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="style" href="style.css" media-type="text/css"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/columns/OPS/external_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/columns/OPS/external_css.xhtml
new file mode 100644
index 0000000..a51b844
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/columns/OPS/external_css.xhtml
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Columns - External CSS</title>
+    <link rel="stylesheet" type="text/css" href="style.css"/>
+</head>
+<body>
+
+<h1>Columns specified in external css file</h1>
+
+<div class="newspaper">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+</div>
+
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/columns/OPS/inline_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/columns/OPS/inline_css.xhtml
new file mode 100644
index 0000000..46f9413
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/columns/OPS/inline_css.xhtml
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Columns - Inline CSS</title>
+</head>
+<body>
+<h1>Columns - Inline CSS</h1>
+
+<div style="-webkit-column-count:3;-webkit-column-gap:normal;-webkit-column-rule:1px outset #ff00ff;">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/columns/OPS/style.css b/src/test/resources/com/adobe/epubcheck/test/css/columns/OPS/style.css
new file mode 100644
index 0000000..a973950
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/columns/OPS/style.css
@@ -0,0 +1,6 @@
+div {
+    -moz-column-count: 3; /* Firefox */
+    -webkit-column-count: 3; /* Safari and Chrome */
+    column-count: 3;
+    -webkit-column-gap: 50px;
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/columns/OPS/style_tag_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/columns/OPS/style_tag_css.xhtml
new file mode 100644
index 0000000..21e897e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/columns/OPS/style_tag_css.xhtml
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Columns - Style Tag CSS</title>
+    <style>
+        .newspaper {
+            -moz-column-count: 3; /* Firefox */
+            -webkit-column-count: 3; /* Safari and Chrome */
+            column-count: 3;
+        }
+    </style>
+</head>
+<body>
+
+<p><b>Note:</b> Internet Explorer does not support the column-count property.</p>
+
+<div class="newspaper">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+</div>
+
+</body>
+</html>
+
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/columns/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/css/columns/OPS/toc.ncx
new file mode 100644
index 0000000..b6dac50
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/columns/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Columns Style Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>External CSS</text>
+      </navLabel>
+      <content src="external_css.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/columns/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/columns/OPS/toc.xhtml
new file mode 100644
index 0000000..1a32717
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/columns/OPS/toc.xhtml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="external_css.xhtml">External CSS</a></li>
+        <li><a href="style_tag_css.xhtml">Style Tag</a></li>
+        <li><a href="inline_css.xhtml">Inline Style</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/columns/mimetype b/src/test/resources/com/adobe/epubcheck/test/css/columns/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/columns/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/columns_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/css/columns_expected_results.json
new file mode 100644
index 0000000..c71a731
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/columns_expected_results.json
@@ -0,0 +1,393 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/css/columns.epub",
+    "filename" : "columns.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:17:14",
+    "elapsedTime" : 345,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 8
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Columns Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 3,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 3124,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 415,
+    "uncompressedSize" : 1035,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7bb63467aa728c4d18d8167d84e6a760d65ffc7ac6d045381be15f61e49f1",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 297,
+    "uncompressedSize" : 558,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "4a146596d7b5a59229912fb4a5921360a4108643436dfe1164f87836e89d10de",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/external_css.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/external_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 698,
+    "uncompressedSize" : 1198,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "88f24d892812a0afd21f5623c3fe736f582bd356cea479b4940dbb091c966dd",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/style.css" ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/style_tag_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 766,
+    "uncompressedSize" : 1366,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b63a72a215e9ca22ab68a3965313655eacd82bf38bd9c6dce06ba76718250dc",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page03",
+    "fileName" : "OPS/inline_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 686,
+    "uncompressedSize" : 1193,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1780a74b689f3c996b282ed3348a4840d1d0285d15cee6f466f43a211c2461",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : 3,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style",
+    "fileName" : "OPS/style.css",
+    "media_type" : "text/css",
+    "compressedSize" : 91,
+    "uncompressedSize" : 152,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b4d1b82f1b94b9786d645cf2638da2930a78b46bc63dab1f7b4417cb8bdd6",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 270,
+    "uncompressedSize" : 473,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "465d7d734aa539b2dc4b402dea6f4e8d96bdeac452a1d5743b6ccdaa29f4c",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/style_tag_css.xhtml", "OPS/inline_css.xhtml", "OPS/external_css.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "columns.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-013",
+    "severity" : "USAGE",
+    "message" : "Content file contains at least one inline style declaration.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 10,
+      "column" : 103,
+      "context" : "-webkit-column-count:3;-webkit-column-gap:normal;-webkit-column-rule:1px outset #ff00ff;"
+    } ],
+    "suggestion" : "Inline styles are not compatible with accessibility settings and display personalization. Use CSS Styles instead."
+  }, {
+    "ID" : "CSS-009",
+    "severity" : "USAGE",
+    "message" : "Use of certain CSS such as Columns, Transforms, Transitions, box-sizing or KeyFrames can cause pagination issues.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 10,
+      "column" : 103,
+      "context" : "-webkit-column-count:3;-webkit-column-gap:normal;-webkit-column-rule:1px outset #ff00ff;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 2,
+      "column" : 5,
+      "context" : "-moz-column-count : 3 ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 3,
+      "column" : 5,
+      "context" : "-webkit-column-count : 3 ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 4,
+      "column" : 5,
+      "context" : "column-count : 3 ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 5,
+      "column" : 5,
+      "context" : "-webkit-column-gap : 50px ;"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 6,
+      "column" : 12,
+      "context" : ".newspaper {\n            -moz-column-count: 3; /* Firefox */\n            -webkit-column-count: 3; /* Safari and Chrome */\n            column-count: 3;\n        }"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 8,
+      "column" : 13,
+      "context" : "-moz-column-count : 3 ;"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 9,
+      "column" : 13,
+      "context" : "-webkit-column-count : 3 ;"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 10,
+      "column" : 13,
+      "context" : "column-count : 3 ;"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-025",
+    "severity" : "USAGE",
+    "message" : "CSS class Selector is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_css.xhtml",
+      "line" : 12,
+      "column" : 24,
+      "context" : ".newspaper"
+    } ],
+    "suggestion" : "Check for typos or define a class selector to document the use of the class."
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-038",
+    "severity" : "USAGE",
+    "message" : "Ensure b, i, em, and strong elements are used in compliance with W3C HTML5 directives.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 16,
+      "column" : 7,
+      "context" : "b"
+    } ],
+    "suggestion" : "CSS styles are usually more appropriate for italics or bold text."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/inline_css.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/style_tag_css.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/discouraged/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/css/discouraged/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/discouraged/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/content.opf
new file mode 100644
index 0000000..2400f6c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/content.opf
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Hyperlink Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" href="external_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="style_tag_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" href="inline_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="style" href="style.css" media-type="text/css"/>
+    <item id="style2" href="unused.css" media-type="text/css"/>
+    <item id="style3" href="cssStyles.css" media-type="text/css"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/cssStyles.css b/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/cssStyles.css
new file mode 100644
index 0000000..11d1585
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/cssStyles.css
@@ -0,0 +1,37 @@
+LI {
+    position: absolute;
+    font-family: Verdana, Arial, Helvetica;
+    font-size: 1.5em;
+    font-weight: normal;
+    text-align: right;
+}
+
+P > foo {
+    font: 600 12px/14px sans-serif
+}
+
+.used {
+    font-style: italic;
+    color: #006400 !important;
+}
+
+.unused {
+    font-size: 120%;
+    line-height: 26px;
+    font-weight: bold;
+    color: #1e90ff;
+}
+
+H1 {
+    font-family: Verdana, Arial, Helvetica;
+    font-size: large;
+    font-weight: bold;
+    color: #3333cc;
+    text-align: center;
+}
+
+ at media screen and (orientation: landscape) {
+    .foo {
+        font-size: large;
+    }
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/external_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/external_css.xhtml
new file mode 100644
index 0000000..8ac73ed
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/external_css.xhtml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Unused - External CSS</title>
+    <link rel="stylesheet" type="text/css" href="style.css"/>
+    <link rel="stylesheet" type="text/css" href="cssStyles.css"/>
+</head>
+<body>
+
+<h1>Unused class specified in external css file</h1>
+
+<div class="used">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+</div>
+<div class="fixed">
+    Fixed Div
+</div>
+
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/inline_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/inline_css.xhtml
new file mode 100644
index 0000000..4e2f3d0
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/inline_css.xhtml
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Unused - Inline CSS</title>
+</head>
+<body>
+<h1>Unused - Inline CSS</h1>
+
+<div style="position: absolute;top: 80px;left: 50px">
+    <p style="color: #006400 !important; background-color: #fafad2 !important; font-size: 18pt">Unused css does not
+        apply to inline styles.</p>
+</div>
+<div style="unicode-bidi: embed; direction: rtl">Bidi content</div>
+<div style="position:fixed; left: 5px;">Fixed</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/style.css b/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/style.css
new file mode 100644
index 0000000..44c3e03
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/style.css
@@ -0,0 +1,101 @@
+BODY, P, TABLE, TD, TH, BR, DIV, SPAN {
+    font-size: 14px;
+    color: #00aaaa;
+}
+
+.p {
+    font: 600 12px/14px sans-serif
+}
+
+.x {
+    font: joke
+}
+
+.w {
+    font: 18px joke
+}
+
+.y {
+    font: 18px
+}
+
+.v {
+    font: fantasy
+}
+
+.p {
+    font: 600 12px/14px sans-serif
+}
+
+.q {
+    font: 80% sans-serif
+}
+
+.r {
+    font: x-large/110% "New Century Schoolbook", serif
+}
+
+.s {
+    font: bold italic large Palatino, serif
+}
+
+.t {
+    font: normal small-caps 120%/120% fantasy
+}
+
+.u {
+    font: menu
+}
+
+H2 {
+    font: italic small-caps bold 80%/120% arial, helvetica, sans-serif;
+}
+
+div {
+    unicode-bidi: embed;
+    direction: rtl
+}
+
+.fixed
+{
+    width:100px;
+    height:100px;
+    background:red;
+    left:10px;
+    top:100px;
+    position:fixed;
+}
+
+LI {
+    position: absolute;
+    font-family: Verdana, Arial, Helvetica;
+    font-size: 1.5em;
+    font-weight: normal;
+    text-align: right;
+}
+
+.used {
+    font-style: italic;
+    color: #006400 !important;
+}
+
+.unused {
+    font-size: 120%;
+    font-weight: bold;
+    color: #1e90ff;
+}
+
+H1 {
+    font-family: Verdana, Arial, Helvetica;
+    font-size: large;
+    font-weight: bold;
+    text-decoration: none;
+    color: #3333cc;
+    text-align: center;
+}
+
+ at media screen and (orientation: landscape) {
+    .foo {
+        font-size: large;
+    }
+}
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/style_tag_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/style_tag_css.xhtml
new file mode 100644
index 0000000..bdacc35
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/style_tag_css.xhtml
@@ -0,0 +1,83 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Unused - Style Tag CSS</title>
+    <style>
+        .used {
+            font-style: italic;
+            color: #006400 !important;
+            line-height: 20pt;
+            position: relative;
+        }
+
+        .unused {
+            font-weight: bold;
+            color: #1e90ff;
+            position: absolute;
+        }
+
+        @media screen and (orientation: landscape) {
+            .used {
+                font-size: larger;
+            }
+        }
+
+        .bidi {
+            unicode-bidi: normal;
+        }
+
+
+        .fixed
+        {
+            width:100px;
+            height:100px;
+            background:red;
+            left:10px;
+            top:100px;
+            position:fixed;
+        }
+    </style>
+</head>
+<body>
+
+<div class="used">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+</div>
+<div class="undefined">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip
+
+</div>
+<div class="bidi">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+
+</div>
+<div class="fixed">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+</div>
+</body>
+</html>
+
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/toc.ncx
new file mode 100644
index 0000000..ad464c8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Unused Style Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>External CSS</text>
+      </navLabel>
+      <content src="external_css.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/toc.xhtml
new file mode 100644
index 0000000..1a32717
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/toc.xhtml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="external_css.xhtml">External CSS</a></li>
+        <li><a href="style_tag_css.xhtml">Style Tag</a></li>
+        <li><a href="inline_css.xhtml">Inline Style</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/unused.css b/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/unused.css
new file mode 100644
index 0000000..4f7cd86
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/discouraged/OPS/unused.css
@@ -0,0 +1,69 @@
+.otherstyle {
+    font-weight: bold;
+    color: #1e90ff;
+}
+
+BODY, P, TABLE, TD, TH, BR, DIV, SPAN {
+    font-family: Verdana, Arial, Helvetica;
+    font-size: 12px;
+    color: #000000;
+}
+
+H1 {
+    font-family: Verdana, Arial, Helvetica;
+    font-size: 22px;
+    font-weight: bold;
+    text-decoration: none;
+    color: #3333cc;
+    text-align: left;
+}
+
+LI {
+    font-family: Verdana, Arial, Helvetica;
+    font-size: 14px;
+    font-weight: none;
+    text-decoration: none;
+    color: brown;
+    text-align: left;
+}
+
+.TableText {
+    font-family: Verdana, Arial, Helvetica;
+    font-size: 12px;
+    color: #000000;
+}
+
+.sideBarLink {
+    font-family: Verdana, Arial, Helvetica;
+    font-size: 12px;
+    font-weight: bold;
+    text-decoration: none;
+    color: #ffff99;
+}
+
+.sideBarLink:Hover {
+    text-decoration: none;
+    color: #ff3333;
+}
+
+.bodyText {
+    font-family: Verdana, Arial, Helvetica;
+    font-size: 11px;
+    font-weight: normal;
+    color: #000000;
+}
+
+.copyright {
+    font-family: Verdana, Arial, Helvetica;
+    font-size: 10px;
+    font-weight: normal;
+    color: #000000;
+}
+.unusedStyle
+{
+    color: #333333;
+}
+li.unusedStyle2
+{
+    color: #444444;
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/discouraged/mimetype b/src/test/resources/com/adobe/epubcheck/test/css/discouraged/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/discouraged/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/discouraged_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/css/discouraged_expected_results.json
new file mode 100644
index 0000000..1f13bbe
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/discouraged_expected_results.json
@@ -0,0 +1,775 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/css/discouraged.epub",
+    "filename" : "discouraged.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:17:16",
+    "elapsedTime" : 270,
+    "nFatal" : 0,
+    "nError" : 2,
+    "nWarning" : 2,
+    "nUsage" : 13
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Hyperlink Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 3,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 4782,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 438,
+    "uncompressedSize" : 1168,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1e24cb276952c07078749a4a6180b62bf3876eae71adf282c82d308a6c75be",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 296,
+    "uncompressedSize" : 557,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "487ec57fbe6ea6f31bf33a1215b02587252de97e15d8591a512fcdc490a26",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/external_css.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/external_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 720,
+    "uncompressedSize" : 1304,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "4a3c315c63924d8588185f102379505c44a38f7b57e4c4b4578343288f677",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/style.css", "OPS/cssStyles.css" ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/style_tag_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 929,
+    "uncompressedSize" : 3853,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b37fbcfec0c18cd840f1a2bcc729fd29e988094c37b83d264966a2cb0aadbfe",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page03",
+    "fileName" : "OPS/inline_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 329,
+    "uncompressedSize" : 546,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "333c46574b3519b11e91dbc652d7ff37327a2152d3e2f426cd6ba6f58ef5be",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : 3,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style",
+    "fileName" : "OPS/style.css",
+    "media_type" : "text/css",
+    "compressedSize" : 535,
+    "uncompressedSize" : 1291,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "bfe34ef867a47facdedc489781cae71f58fc799ead525c3552f462e2deffe99",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style2",
+    "fileName" : "OPS/unused.css",
+    "media_type" : "text/css",
+    "compressedSize" : 306,
+    "uncompressedSize" : 1168,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "9f2e3f82a29d637226faf73ec0e6371896dd8e829080f3ddd4992310c588e0",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style3",
+    "fileName" : "OPS/cssStyles.css",
+    "media_type" : "text/css",
+    "compressedSize" : 283,
+    "uncompressedSize" : 591,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d9d62cde95e18227c46eb91f682b34e41a881f33ece412fd12c9fa180bae0",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 270,
+    "uncompressedSize" : 473,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "465d7d734aa539b2dc4b402dea6f4e8d96bdeac452a1d5743b6ccdaa29f4c",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/style_tag_css.xhtml", "OPS/inline_css.xhtml", "OPS/external_css.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "discouraged.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-013",
+    "severity" : "USAGE",
+    "message" : "Content file contains at least one inline style declaration.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 10,
+      "column" : 54,
+      "context" : "position: absolute;top: 80px;left: 50px"
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 11,
+      "column" : 97,
+      "context" : "color: #006400 !important; background-color: #fafad2 !important; font-size: 18pt"
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 14,
+      "column" : 50,
+      "context" : "unicode-bidi: embed; direction: rtl"
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 15,
+      "column" : 41,
+      "context" : "position:fixed; left: 5px;"
+    } ],
+    "suggestion" : "Inline styles are not compatible with accessibility settings and display personalization. Use CSS Styles instead."
+  }, {
+    "ID" : "ACC-014",
+    "severity" : "USAGE",
+    "message" : "CSS Selector font-size attribute value does not use a relative size.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/cssStyles.css",
+      "line" : 10,
+      "column" : 5,
+      "context" : "font : 600 12px / 14px sans-serif ;"
+    }, {
+      "fileName" : "OPS/cssStyles.css",
+      "line" : 27,
+      "column" : 5,
+      "context" : "font-size : large ;"
+    }, {
+      "fileName" : "OPS/cssStyles.css",
+      "line" : 35,
+      "column" : 9,
+      "context" : "font-size : large ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 2,
+      "column" : 5,
+      "context" : "font-size : 14px ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 7,
+      "column" : 5,
+      "context" : "font : 600 12px / 14px sans-serif ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 15,
+      "column" : 5,
+      "context" : "font : 18px joke ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 19,
+      "column" : 5,
+      "context" : "font : 18px ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 27,
+      "column" : 5,
+      "context" : "font : 600 12px / 14px sans-serif ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 35,
+      "column" : 5,
+      "context" : "font : x-large / 110% 'New Century Schoolbook' , serif ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 39,
+      "column" : 5,
+      "context" : "font : bold italic large Palatino , serif ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 90,
+      "column" : 5,
+      "context" : "font-size : large ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 99,
+      "column" : 9,
+      "context" : "font-size : large ;"
+    }, {
+      "fileName" : "OPS/unused.css",
+      "line" : 8,
+      "column" : 5,
+      "context" : "font-size : 12px ;"
+    }, {
+      "fileName" : "OPS/unused.css",
+      "line" : 14,
+      "column" : 5,
+      "context" : "font-size : 22px ;"
+    }, {
+      "fileName" : "OPS/unused.css",
+      "line" : 23,
+      "column" : 5,
+      "context" : "font-size : 14px ;"
+    }, {
+      "fileName" : "OPS/unused.css",
+      "line" : 32,
+      "column" : 5,
+      "context" : "font-size : 12px ;"
+    }, {
+      "fileName" : "OPS/unused.css",
+      "line" : 38,
+      "column" : 5,
+      "context" : "font-size : 12px ;"
+    }, {
+      "fileName" : "OPS/unused.css",
+      "line" : 51,
+      "column" : 5,
+      "context" : "font-size : 11px ;"
+    }, {
+      "fileName" : "OPS/unused.css",
+      "line" : 58,
+      "column" : 5,
+      "context" : "font-size : 10px ;"
+    } ],
+    "suggestion" : "Acceptable values include percentages, em multiples, 'larger', 'smaller', 'normal' or 'inherit'."
+  }, {
+    "ID" : "ACC-015",
+    "severity" : "USAGE",
+    "message" : "CSS Selector font line-height attribute value does not use a relative size.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/cssStyles.css",
+      "line" : 10,
+      "column" : 5,
+      "context" : "font : 600 12px / 14px sans-serif ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 7,
+      "column" : 5,
+      "context" : "font : 600 12px / 14px sans-serif ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 27,
+      "column" : 5,
+      "context" : "font : 600 12px / 14px sans-serif ;"
+    } ],
+    "suggestion" : "Acceptable values include percentages, numeric multiples, em multiples, 'normal', or 'inherit'."
+  }, {
+    "ID" : "CSS-001",
+    "severity" : "ERROR",
+    "message" : "The 'direction' property must not be included in an ePub Style Sheet.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 14,
+      "column" : 22,
+      "context" : "direction : rtl ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 56,
+      "column" : 5,
+      "context" : "direction : rtl ;"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-001",
+    "severity" : "ERROR",
+    "message" : "The 'unicode-bidi' property must not be included in an ePub Style Sheet.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 14,
+      "column" : 1,
+      "context" : "unicode-bidi : embed ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 55,
+      "column" : 5,
+      "context" : "unicode-bidi : embed ;"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 27,
+      "column" : 13,
+      "context" : "unicode-bidi : normal ;"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-006",
+    "severity" : "WARNING",
+    "message" : "CSS position:fixed property should not be used in EPUBs.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 15,
+      "column" : 1,
+      "context" : "position : fixed ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 66,
+      "column" : 5,
+      "context" : "position : fixed ;"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 38,
+      "column" : 13,
+      "context" : "position : fixed ;"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-012",
+    "severity" : "USAGE",
+    "message" : "Document links to multiple CSS files.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_css.xhtml",
+      "line" : 6,
+      "column" : 62,
+      "context" : "style.css"
+    }, {
+      "fileName" : "OPS/external_css.xhtml",
+      "line" : 7,
+      "column" : 66,
+      "context" : "cssStyles.css"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-013",
+    "severity" : "USAGE",
+    "message" : "CSS Selector attribute is declared !Important.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/cssStyles.css",
+      "line" : 15,
+      "column" : 5,
+      "context" : "color : #006400 !important ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 79,
+      "column" : 5,
+      "context" : "color : #006400 !important ;"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 9,
+      "column" : 13,
+      "context" : "color : #006400 !important ;"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-017",
+    "severity" : "WARNING",
+    "message" : "CSS Selector specifies absolute position.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/cssStyles.css",
+      "line" : 2,
+      "column" : 5,
+      "context" : "position : absolute ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 70,
+      "column" : 5,
+      "context" : "position : absolute ;"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 17,
+      "column" : 13,
+      "context" : "position : absolute ;"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-021",
+    "severity" : "USAGE",
+    "message" : "CSS Selector font shorthand specifies an invalid System Font.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/style.css",
+      "line" : 11,
+      "column" : 5,
+      "context" : "font : joke ;"
+    } ],
+    "suggestion" : "Acceptable values include 'caption', 'icon', 'menu', 'message-box', 'small-caption',  'status-bar', or 'inherit'."
+  }, {
+    "ID" : "CSS-023",
+    "severity" : "USAGE",
+    "message" : "CSS Selector specifies media query.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/cssStyles.css",
+      "line" : 33,
+      "column" : 1,
+      "context" : "@media screen and (orientation : landscape)"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 97,
+      "column" : 1,
+      "context" : "@media screen and (orientation : landscape)"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 20,
+      "column" : 9,
+      "context" : "@media screen and (orientation : landscape)"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-024",
+    "severity" : "USAGE",
+    "message" : "CSS class Selector is not used.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/style.css",
+      "line" : 6,
+      "column" : 1,
+      "context" : ".p"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 10,
+      "column" : 1,
+      "context" : ".x"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 14,
+      "column" : 1,
+      "context" : ".w"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 18,
+      "column" : 1,
+      "context" : ".y"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 22,
+      "column" : 1,
+      "context" : ".v"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 30,
+      "column" : 1,
+      "context" : ".q"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 34,
+      "column" : 1,
+      "context" : ".r"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 38,
+      "column" : 1,
+      "context" : ".s"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 42,
+      "column" : 1,
+      "context" : ".t"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 46,
+      "column" : 1,
+      "context" : ".u"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 82,
+      "column" : 1,
+      "context" : ".unused"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 98,
+      "column" : 5,
+      "context" : ".foo"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 14,
+      "column" : 9,
+      "context" : ".unused"
+    }, {
+      "fileName" : "OPS/unused.css",
+      "line" : 1,
+      "column" : 1,
+      "context" : ".otherstyle"
+    }, {
+      "fileName" : "OPS/unused.css",
+      "line" : 30,
+      "column" : 1,
+      "context" : ".TableText"
+    }, {
+      "fileName" : "OPS/unused.css",
+      "line" : 36,
+      "column" : 1,
+      "context" : ".sideBarLink"
+    }, {
+      "fileName" : "OPS/unused.css",
+      "line" : 49,
+      "column" : 1,
+      "context" : ".bodyText"
+    }, {
+      "fileName" : "OPS/unused.css",
+      "line" : 56,
+      "column" : 1,
+      "context" : ".copyright"
+    }, {
+      "fileName" : "OPS/unused.css",
+      "line" : 62,
+      "column" : 1,
+      "context" : ".unusedStyle"
+    }, {
+      "fileName" : "OPS/unused.css",
+      "line" : 66,
+      "column" : 3,
+      "context" : ".unusedStyle2"
+    } ],
+    "suggestion" : "Remove unused CSS selectors."
+  }, {
+    "ID" : "CSS-025",
+    "severity" : "USAGE",
+    "message" : "CSS class Selector is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 54,
+      "column" : 24,
+      "context" : ".undefined"
+    } ],
+    "suggestion" : "Check for typos or define a class selector to document the use of the class."
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/inline_css.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/style_tag_css.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/discouraged_expected_results.xml b/src/test/resources/com/adobe/epubcheck/test/css/discouraged_expected_results.xml
new file mode 100644
index 0000000..a1e662f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/discouraged_expected_results.xml
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jhove xmlns="http://hul.harvard.edu/ois/xml/ns/jhove" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="epubcheck" release="4.0.0-alpha11-SNAPSHOT" date="2012-10-31">
+ <date>2014-09-05T03:17:16+02:00</date>
+ <repInfo uri="discouraged.epub">
+  <created>2014-09-05T01:49:14Z</created>
+  <lastModified>2012-10-10T12:00:00Z</lastModified>
+  <format>application/epub+zip</format>
+  <version>3.0</version>
+  <status>Not well-formed</status>
+  <messages>
+   <message>CSS-001, ERROR, [The 'unicode-bidi' property must not be included in an ePub Style Sheet.], OPS/style_tag_css.xhtml (27-13)</message>
+   <message>CSS-001, ERROR, [The 'unicode-bidi' property must not be included in an ePub Style Sheet.], OPS/inline_css.xhtml (14-1)</message>
+   <message>CSS-001, ERROR, [The 'unicode-bidi' property must not be included in an ePub Style Sheet.], OPS/style.css (55-5)</message>
+   <message>CSS-001, ERROR, [The 'direction' property must not be included in an ePub Style Sheet.], OPS/inline_css.xhtml (14-22)</message>
+   <message>CSS-001, ERROR, [The 'direction' property must not be included in an ePub Style Sheet.], OPS/style.css (56-5)</message>
+   <message>CSS-017, WARN, [CSS Selector specifies absolute position.], OPS/style.css (70-5)</message>
+   <message>CSS-017, WARN, [CSS Selector specifies absolute position.], OPS/cssStyles.css (2-5)</message>
+   <message>CSS-017, WARN, [CSS Selector specifies absolute position.], OPS/style_tag_css.xhtml (17-13)</message>
+   <message>CSS-006, WARN, [CSS position:fixed property should not be used in EPUBs.], OPS/style_tag_css.xhtml (38-13)</message>
+   <message>CSS-006, WARN, [CSS position:fixed property should not be used in EPUBs.], OPS/inline_css.xhtml (15-1)</message>
+   <message>CSS-006, WARN, [CSS position:fixed property should not be used in EPUBs.], OPS/style.css (66-5)</message>
+   <message>HTM-010, HINT, [Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.], OPS/toc.ncx (2-68)</message>
+   <message>OPF-059, HINT, [Spine item has no NAV entry reference.], OPS/toc.ncx</message>
+   <message>OPF-059, HINT, [Spine item has no NAV entry reference.], OPS/toc.ncx</message>
+   <message>CSS-012, HINT, [Document links to multiple CSS files.], OPS/external_css.xhtml (6-62)</message>
+   <message>CSS-012, HINT, [Document links to multiple CSS files.], OPS/external_css.xhtml (7-66)</message>
+   <message>ACC-008, HINT, [Navigation Document has no 'landmarks nav' element.], discouraged.epub</message>
+   <message>ACC-014, HINT, [CSS Selector font-size attribute value does not use a relative size.], OPS/style.css (2-5)</message>
+   <message>ACC-014, HINT, [CSS Selector font-size attribute value does not use a relative size.], OPS/style.css (7-5)</message>
+   <message>ACC-014, HINT, [CSS Selector font-size attribute value does not use a relative size.], OPS/style.css (15-5)</message>
+   <message>ACC-014, HINT, [CSS Selector font-size attribute value does not use a relative size.], OPS/style.css (19-5)</message>
+   <message>ACC-014, HINT, [CSS Selector font-size attribute value does not use a relative size.], OPS/style.css (27-5)</message>
+   <message>ACC-014, HINT, [CSS Selector font-size attribute value does not use a relative size.], OPS/style.css (35-5)</message>
+   <message>ACC-014, HINT, [CSS Selector font-size attribute value does not use a relative size.], OPS/style.css (39-5)</message>
+   <message>ACC-014, HINT, [CSS Selector font-size attribute value does not use a relative size.], OPS/style.css (90-5)</message>
+   <message>ACC-014, HINT, [CSS Selector font-size attribute value does not use a relative size.], OPS/style.css (99-9)</message>
+   <message>ACC-014, HINT, [CSS Selector font-size attribute value does not use a relative size.], OPS/unused.css (8-5)</message>
+   <message>ACC-014, HINT, [CSS Selector font-size attribute value does not use a relative size.], OPS/unused.css (14-5)</message>
+   <message>ACC-014, HINT, [CSS Selector font-size attribute value does not use a relative size.], OPS/unused.css (23-5)</message>
+   <message>ACC-014, HINT, [CSS Selector font-size attribute value does not use a relative size.], OPS/unused.css (32-5)</message>
+   <message>ACC-014, HINT, [CSS Selector font-size attribute value does not use a relative size.], OPS/unused.css (38-5)</message>
+   <message>ACC-014, HINT, [CSS Selector font-size attribute value does not use a relative size.], OPS/unused.css (51-5)</message>
+   <message>ACC-014, HINT, [CSS Selector font-size attribute value does not use a relative size.], OPS/unused.css (58-5)</message>
+   <message>ACC-014, HINT, [CSS Selector font-size attribute value does not use a relative size.], OPS/cssStyles.css (10-5)</message>
+   <message>ACC-014, HINT, [CSS Selector font-size attribute value does not use a relative size.], OPS/cssStyles.css (27-5)</message>
+   <message>ACC-014, HINT, [CSS Selector font-size attribute value does not use a relative size.], OPS/cssStyles.css (35-9)</message>
+   <message>ACC-015, HINT, [CSS Selector font line-height attribute value does not use a relative size.], OPS/style.css (7-5)</message>
+   <message>ACC-015, HINT, [CSS Selector font line-height attribute value does not use a relative size.], OPS/style.css (27-5)</message>
+   <message>ACC-015, HINT, [CSS Selector font line-height attribute value does not use a relative size.], OPS/cssStyles.css (10-5)</message>
+   <message>CSS-021, HINT, [CSS Selector font shorthand specifies an invalid System Font.], OPS/style.css (11-5)</message>
+   <message>CSS-013, HINT, [CSS Selector attribute is declared !Important.], OPS/style.css (79-5)</message>
+   <message>CSS-013, HINT, [CSS Selector attribute is declared !Important.], OPS/cssStyles.css (15-5)</message>
+   <message>CSS-013, HINT, [CSS Selector attribute is declared !Important.], OPS/style_tag_css.xhtml (9-13)</message>
+   <message>CSS-023, HINT, [CSS Selector specifies media query.], OPS/style.css (97-1)</message>
+   <message>CSS-023, HINT, [CSS Selector specifies media query.], OPS/cssStyles.css (33-1)</message>
+   <message>CSS-023, HINT, [CSS Selector specifies media query.], OPS/style_tag_css.xhtml (20-9)</message>
+   <message>CSS-025, HINT, [CSS class Selector is not found.], OPS/style_tag_css.xhtml (54-24)</message>
+   <message>CSS-024, HINT, [CSS class Selector is not used.], OPS/style_tag_css.xhtml (14-9)</message>
+   <message>CSS-024, HINT, [CSS class Selector is not used.], OPS/unused.css (1-1)</message>
+   <message>CSS-024, HINT, [CSS class Selector is not used.], OPS/style.css (22-1)</message>
+   <message>CSS-024, HINT, [CSS class Selector is not used.], OPS/style.css (14-1)</message>
+   <message>CSS-024, HINT, [CSS class Selector is not used.], OPS/style.css (10-1)</message>
+   <message>CSS-024, HINT, [CSS class Selector is not used.], OPS/style.css (18-1)</message>
+   <message>CSS-024, HINT, [CSS class Selector is not used.], OPS/style.css (34-1)</message>
+   <message>CSS-024, HINT, [CSS class Selector is not used.], OPS/style.css (38-1)</message>
+   <message>CSS-024, HINT, [CSS class Selector is not used.], OPS/style.css (42-1)</message>
+   <message>CSS-024, HINT, [CSS class Selector is not used.], OPS/style.css (46-1)</message>
+   <message>CSS-024, HINT, [CSS class Selector is not used.], OPS/unused.css (30-1)</message>
+   <message>CSS-024, HINT, [CSS class Selector is not used.], OPS/style.css (6-1)</message>
+   <message>CSS-024, HINT, [CSS class Selector is not used.], OPS/style.css (30-1)</message>
+   <message>CSS-024, HINT, [CSS class Selector is not used.], OPS/unused.css (56-1)</message>
+   <message>CSS-024, HINT, [CSS class Selector is not used.], OPS/style.css (82-1)</message>
+   <message>CSS-024, HINT, [CSS class Selector is not used.], OPS/unused.css (49-1)</message>
+   <message>CSS-024, HINT, [CSS class Selector is not used.], OPS/unused.css (36-1)</message>
+   <message>CSS-024, HINT, [CSS class Selector is not used.], OPS/style.css (98-5)</message>
+   <message>CSS-024, HINT, [CSS class Selector is not used.], OPS/unused.css (62-1)</message>
+   <message>CSS-024, HINT, [CSS class Selector is not used.], OPS/unused.css (66-3)</message>
+   <message>ACC-013, HINT, [Content file contains at least one inline style declaration.], OPS/inline_css.xhtml (10-54)</message>
+   <message>ACC-013, HINT, [Content file contains at least one inline style declaration.], OPS/inline_css.xhtml (11-97)</message>
+   <message>ACC-013, HINT, [Content file contains at least one inline style declaration.], OPS/inline_css.xhtml (14-50)</message>
+   <message>ACC-013, HINT, [Content file contains at least one inline style declaration.], OPS/inline_css.xhtml (15-41)</message>
+   <message>ACC-007, HINT, [Content Documents do not use 'epub:type' attributes for semantic inflection.], OPS/external_css.xhtml</message>
+   <message>ACC-007, HINT, [Content Documents do not use 'epub:type' attributes for semantic inflection.], OPS/style_tag_css.xhtml</message>
+   <message>ACC-007, HINT, [Content Documents do not use 'epub:type' attributes for semantic inflection.], OPS/inline_css.xhtml</message>
+  </messages>
+  <mimeType>application/epub+zip</mimeType>
+  <properties>
+   <property>
+    <name>CharacterCount</name>
+    <values arity="Scalar" type="Long">
+     <value>4782</value>
+    </values>
+   </property>
+   <property>
+    <name>Language</name>
+    <values arity="Scalar" type="String">
+     <value>en</value>
+    </values>
+   </property>
+   <property>
+    <name>Info</name>
+    <values arity="List" type="Property">
+     <property>
+      <name>Identifier</name>
+      <values arity="Scalar" type="String">
+       <value>000000000000000000</value>
+      </values>
+     </property>
+     <property>
+      <name>CreationDate</name>
+      <values arity="Scalar" type="Date">
+       <value>2014-09-05T01:49:14Z</value>
+      </values>
+     </property>
+     <property>
+      <name>ModDate</name>
+      <values arity="Scalar" type="Date">
+       <value>2012-10-10T12:00:00Z</value>
+      </values>
+     </property>
+     <property>
+      <name>Title</name>
+      <values arity="Scalar" type="String">
+       <value>Hyperlink Sample Book</value>
+      </values>
+     </property>
+    </values>
+   </property>
+  </properties>
+ </repInfo>
+</jhove>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/content.opf
new file mode 100644
index 0000000..cc19ca0
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/content.opf
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Transform Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" href="external_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="style" href="style.css" media-type="text/css"/>
+    <item id="style2" href="style2.css" media-type="text/css"/>
+    <item id="style3" href="style3.css" media-type="text/css"/>
+    <item id="style4" href="style4.css" media-type="text/css"/>
+    <item id="style5" href="style5.css" media-type="text/css"/>
+    <item id="style6" href="style6.css" media-type="text/css"/>
+    <item id="style7" href="style7.css" media-type="text/css"/>
+    <item id="style8" href="style8.css" media-type="text/css"/>
+    <item id="style9" href="style9.css" media-type="text/css"/>
+    <item id="style10" href="style10.css" media-type="text/css"/>
+    <item id="style11" href="style11.css" media-type="text/css"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+  </spine>
+</package>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/external_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/external_css.xhtml
new file mode 100644
index 0000000..ae29237
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/external_css.xhtml
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Rotate - External CSS</title>
+    <link rel="stylesheet" type="text/css" href="style.css"/>
+</head>
+<body>
+<div class="used">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+</div>
+
+<div class="otherstyle">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+</div>
+<div class="used3">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat.
+</div>
+<div class="used4">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat.
+</div>
+<div class="used5">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat.
+</div>
+<div class="used6">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat.
+</div>
+<div class="used7">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat.
+</div>
+<div class="used8">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat.
+</div>
+<div class="used9">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat.
+</div>
+<div class="used10">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat.
+</div>
+<div class="used11">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat.
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style.css b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style.css
new file mode 100644
index 0000000..62644b8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style.css
@@ -0,0 +1,4 @@
+.used {
+    font-style: italic;
+    color: #006400;
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style10.css b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style10.css
new file mode 100644
index 0000000..044dc1f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style10.css
@@ -0,0 +1,4 @@
+.used10 {
+    font-style: italic;
+    color: #006400;
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style11.css b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style11.css
new file mode 100644
index 0000000..8c3f5a1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style11.css
@@ -0,0 +1,4 @@
+.used11 {
+    font-style: italic;
+    color: #006400;
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style2.css b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style2.css
new file mode 100644
index 0000000..3ba4415
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style2.css
@@ -0,0 +1,4 @@
+.otherstyle {
+    font-weight: bold;
+    color:#1e90ff;
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style3.css b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style3.css
new file mode 100644
index 0000000..0826345
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style3.css
@@ -0,0 +1,4 @@
+.used3 {
+    font-style: italic;
+    color: #006400;
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style4.css b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style4.css
new file mode 100644
index 0000000..f587f3a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style4.css
@@ -0,0 +1,4 @@
+.used4 {
+    font-style: italic;
+    color: #006400;
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style5.css b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style5.css
new file mode 100644
index 0000000..07c75e7
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style5.css
@@ -0,0 +1,4 @@
+.used5 {
+    font-style: italic;
+    color: #006400;
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style6.css b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style6.css
new file mode 100644
index 0000000..c406438
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style6.css
@@ -0,0 +1,4 @@
+.used6 {
+    font-style: italic;
+    color: #006400;
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style7.css b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style7.css
new file mode 100644
index 0000000..9ff6e81
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style7.css
@@ -0,0 +1,4 @@
+.used7 {
+    font-style: italic;
+    color: #006400;
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style8.css b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style8.css
new file mode 100644
index 0000000..b021373
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style8.css
@@ -0,0 +1,4 @@
+.used8 {
+    font-style: italic;
+    color: #006400;
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style9.css b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style9.css
new file mode 100644
index 0000000..b1b77d6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/style9.css
@@ -0,0 +1,4 @@
+.used9 {
+    font-style: italic;
+    color: #006400;
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/toc.ncx
new file mode 100644
index 0000000..b88cb96
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Transform Style Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Rotate - External CSS</text>
+      </navLabel>
+      <content src="external_css.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/toc.xhtml
new file mode 100644
index 0000000..832146c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="external_css.xhtml">External CSS</a></li>
+    </ol>
+</nav>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/mimetype b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3_expected_results.json
new file mode 100644
index 0000000..dcdaf95
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/excessive_epub3_expected_results.json
@@ -0,0 +1,454 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/css/excessive_epub3.epub",
+    "filename" : "excessive_epub3.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:17:17",
+    "elapsedTime" : 213,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 3
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Transform Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 3233,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 450,
+    "uncompressedSize" : 1449,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "26daeb62792d5d2556f2f5f4a22aa186691f655bd2de4d27f5e199745b8",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 305,
+    "uncompressedSize" : 569,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "44c9adde7f138641ee9dcd4ccc218a1424d2599b9bff2d602aa39fcef1c3e",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/external_css.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/external_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 742,
+    "uncompressedSize" : 3664,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e91f8f216857a06b9573cf7d3d4cf5cd8b842dc3bd291aa5912569dfe6826cd",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/style.css" ]
+  }, {
+    "id" : "style",
+    "fileName" : "OPS/style.css",
+    "media_type" : "text/css",
+    "compressedSize" : 51,
+    "uncompressedSize" : 54,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f34f25e2a1f6e02e5c5e20e75e3f7f744845ec6ad54ffbae69d3b4f86b66daa",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style10",
+    "fileName" : "OPS/style10.css",
+    "media_type" : "text/css",
+    "compressedSize" : 53,
+    "uncompressedSize" : 56,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d834e184dcd74ca1d083c7c8424788f33a423d5ee32ff27a68c114de8f7a4d2b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style11",
+    "fileName" : "OPS/style11.css",
+    "media_type" : "text/css",
+    "compressedSize" : 53,
+    "uncompressedSize" : 56,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c7e01f35c5a42e594eb4b2fa8cc86ca2f1fb8187c88274db860312e164e06b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style2",
+    "fileName" : "OPS/style2.css",
+    "media_type" : "text/css",
+    "compressedSize" : 55,
+    "uncompressedSize" : 58,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "11bd43365912d8948339a3e1dd73b8f7434dd7c1bb4b2bf94dcb44c84dc96",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style3",
+    "fileName" : "OPS/style3.css",
+    "media_type" : "text/css",
+    "compressedSize" : 52,
+    "uncompressedSize" : 55,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f2e808842af59221cc71e1841b6fe4987adddff805b4219effca86a8b4ee8",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style4",
+    "fileName" : "OPS/style4.css",
+    "media_type" : "text/css",
+    "compressedSize" : 52,
+    "uncompressedSize" : 55,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b9be321a7be716d7d5d3f8384344b14b8513bd927392bf850fbf3c2b3beccc",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style5",
+    "fileName" : "OPS/style5.css",
+    "media_type" : "text/css",
+    "compressedSize" : 52,
+    "uncompressedSize" : 55,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d80269d896c4621b374305b24f614bef962402c958512b244d0815cdde764",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style6",
+    "fileName" : "OPS/style6.css",
+    "media_type" : "text/css",
+    "compressedSize" : 52,
+    "uncompressedSize" : 55,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "974311bf4fd0dc8d2b97a58a5781da83c3c3b6122c4bc5e5aecc224459f07cf3",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style7",
+    "fileName" : "OPS/style7.css",
+    "media_type" : "text/css",
+    "compressedSize" : 52,
+    "uncompressedSize" : 55,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "4e2a56959828e7b3113288b25ab26a3a1c82ec4843f9c9f4cf28fcf6ef3d58",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style8",
+    "fileName" : "OPS/style8.css",
+    "media_type" : "text/css",
+    "compressedSize" : 52,
+    "uncompressedSize" : 55,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "4addc0b162e007ef89655de4eff1445108443ebd1514a4f3492306f317f28bf",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style9",
+    "fileName" : "OPS/style9.css",
+    "media_type" : "text/css",
+    "compressedSize" : 52,
+    "uncompressedSize" : 55,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "37e5f354e9e87ff1993f229d151ec337bf2ebe4acee66fe19d6cca12ba2e51",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 236,
+    "uncompressedSize" : 352,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1f66826d9b01e6582b36eae8ef4bfc1279b70fed4f6ea0d94f823f4d2de049",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/external_css.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "excessive_epub3.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font-face/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/css/font-face/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font-face/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/content.opf
new file mode 100644
index 0000000..c193c5b
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/content.opf
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Font Face Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" href="external_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="style_tag_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" href="inline_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="style" href="styles/style.css" media-type="text/css"/>
+    <item id="brankovic" href="fonts/brankovic.ttf" media-type="application/x-font-truetype"/>
+    <item id="fummel" href="fonts/Fummel.otf" media-type="application/vnd.ms-opentype"/>
+    <item id="bloody" href="fonts/bloody.woff" media-type="application/font-woff"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/external_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/external_css.xhtml
new file mode 100644
index 0000000..f751cb1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/external_css.xhtml
@@ -0,0 +1,66 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Font-Face - External CSS</title>
+    <link rel="stylesheet" type="text/css" href="styles/style.css"/>
+    <link href='http://fonts.googleapis.com/css?family=Chela+One' rel='stylesheet' type='text/css'/>
+</head>
+<body>
+<div>
+    <h1>Font-Face specified in external css file</h1>
+    <table>
+        <tr>
+            <td>
+                <div class="myFont">This is standard font.</div>
+            </td>
+        </tr>
+        <tr>
+            <td>
+                <div class="myFont1">This should be a different font.</div>
+            </td>
+        </tr>
+        <tr>
+            <td>
+                <div class="myFont2">This should be a different font.</div>
+            </td>
+        </tr>
+        <tr>
+            <td>
+                <div class="myFont3">This should be a different font.</div>
+            </td>
+        </tr>
+        <tr>
+            <td>
+                <div class="myFont4">This references a missing font.</div>
+            </td>
+        </tr>
+        <tr>
+            <td>
+                <div class="myFont5">This references an incorrect font path.</div>
+            </td>
+        </tr>
+        <tr>
+            <td>
+                <div class="myFont6">This references a null font path.</div>
+            </td>
+        </tr>
+        <tr>
+            <td>
+                <div class="ex1">This references font style.</div>
+            </td>
+        </tr>
+        <tr>
+            <td>
+                <div class="myFont7">This references an external font</div>
+            </td>
+        </tr>
+        <tr>
+            <td>
+                <div style="font-family: 'Chela One', cursive;">This references a font from <a href="http://www.google.com/fonts">Google Fonts</a></div>
+            </td>
+        </tr>
+    </table>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/fonts/Fummel.otf b/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/fonts/Fummel.otf
new file mode 100644
index 0000000..fd3cb74
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/fonts/Fummel.otf differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/fonts/bloody.woff b/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/fonts/bloody.woff
new file mode 100644
index 0000000..63e25a9
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/fonts/bloody.woff differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/fonts/brankovic.ttf b/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/fonts/brankovic.ttf
new file mode 100644
index 0000000..ddac810
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/fonts/brankovic.ttf differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/inline_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/inline_css.xhtml
new file mode 100644
index 0000000..c5439dd
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/inline_css.xhtml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Font-Face - Inline CSS</title>
+</head>
+<body>
+<h1>Font-Face - Inline CSS</h1>
+
+<p>Using the @font-face rule isn't possible inline.</p>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/style_tag_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/style_tag_css.xhtml
new file mode 100644
index 0000000..c41fe02
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/style_tag_css.xhtml
@@ -0,0 +1,47 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Font-Face - Style Tag CSS</title>
+    <style>
+        @font-face {
+            font-family: "bloody";
+            src: url('fonts/bloody.woff');
+        }
+
+        @font-face {
+            font-family: "badaboom";
+            src: url('fonts/badaboom.woff');
+        }
+
+        @font-face {
+            font-family: 'Chela One';
+            font-style: normal;
+            font-weight: 400;
+            src: local('Chela One'), local('ChelaOne-Regular'), url(http://themes.googleusercontent.com/static/fonts/chelaone/v1/DHUBEAsCcSRMyWTJ6sisfj8E0i7KZn-EPnyo3HZu7kw.woff) format('woff');
+        }
+
+        div {
+            font-family: bloody;
+        }
+
+        .noRef{
+            font-family: "badaboom";
+        }
+
+        .externalFont {
+            font-family: 'Chela One';
+        }
+    </style>
+</head>
+<body>
+
+<p><b>Note:</b> Internet Explorer 9 only supports .eot fonts.</p>
+
+<div>
+    This is an embedded font.
+</div>
+     <p class="noRef">Reference to font that is missing from the package.</p>
+     <p class="externalFont">Reference to an external font.</p>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/styles/style.css b/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/styles/style.css
new file mode 100644
index 0000000..5fe6716
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/styles/style.css
@@ -0,0 +1,95 @@
+ at font-face {
+    font-family: brankovic;
+    src: url('../fonts/brankovic.ttf');
+}
+
+ at font-face {
+    font-family: fummel;
+    src: url('../fonts/Fummel.otf');
+}
+
+ at font-face {
+    font-family: "bloody";
+    src: url('../fonts/bloody.woff');
+}
+
+ at font-face {
+    font-family: "null";
+    src: url('');
+}
+
+ at font-face {
+    font-family: "bloody_wrong";
+    src: url('fonts/bloody.woff');
+}
+
+ at font-face {
+    font-family: "badaboom";
+    src: url('../fonts/badaboom.woff');
+}
+
+ at font-face {
+}
+
+ at font-face {
+    font-family: "Bitstream Vera Serif Bold";
+    src: url("http://developer.mozilla.org/@api/deki/files/2934/=VeraSeBd.ttf");
+}
+
+.ex1 {
+    font: 5em arial, sans-serif
+}
+
+
+.ex2 {
+    font: 5 arial, sans-serif /*This triggers CSS-020*/
+}
+
+.ex3 {
+    font: /*This should trigger CSS-019 but triggers CSS-008 instead*/
+}
+
+.myFont {
+    font-size: xx-large;
+    color: maroon;
+}
+
+.myFont1 {
+    font-family: brankovic;
+    font-size: xx-large;
+    color: maroon;
+}
+
+.myFont2 {
+    font-family: fummel;
+    font-size: xx-large;
+    color: maroon;
+}
+
+.myFont3 {
+    font-family: bloody;
+    font-size: xx-large;
+    color: maroon;
+}
+
+.myFont4 {
+    font-family: badaboom;
+    font-size: xx-large;
+    color: maroon;
+}
+
+.myFont5 {
+    font-family: bloody_wrong;
+    font-size: xx-large;
+    color: maroon;
+}
+
+.myFont6 {
+    font-family: null;
+    font-size: 3em;
+    color: #8a2be2;
+}
+
+.myFont7 {
+    font-family: "Bitstream Vera Serif Bold", serif
+}
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/toc.ncx
new file mode 100644
index 0000000..0e13086
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Transform Style Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Font-Face - External CSS</text>
+      </navLabel>
+      <content src="external_css.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/toc.xhtml
new file mode 100644
index 0000000..1a32717
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font-face/OPS/toc.xhtml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="external_css.xhtml">External CSS</a></li>
+        <li><a href="style_tag_css.xhtml">Style Tag</a></li>
+        <li><a href="inline_css.xhtml">Inline Style</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font-face/mimetype b/src/test/resources/com/adobe/epubcheck/test/css/font-face/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font-face/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font-face_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/css/font-face_expected_results.json
new file mode 100644
index 0000000..d949892
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font-face_expected_results.json
@@ -0,0 +1,706 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/css/font-face.epub",
+    "filename" : "font-face.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:17:15",
+    "elapsedTime" : 306,
+    "nFatal" : 0,
+    "nError" : 4,
+    "nWarning" : 2,
+    "nUsage" : 13
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Font Face Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 3,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 2205,
+    "embeddedFonts" : [ "bloody", "badaboom", "brankovic", "fummel", "null", "bloody_wrong" ],
+    "refFonts" : [ "Chela One,400", "Bitstream Vera Serif Bold" ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "bloody",
+    "fileName" : "OPS/fonts/bloody.woff",
+    "media_type" : "application/font-woff",
+    "compressedSize" : 28527,
+    "uncompressedSize" : 28712,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "419dd5fb551a75d9eb151d087d6ad8f538d63195c3f92dbdb340b2854bcdfd",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "brankovic",
+    "fileName" : "OPS/fonts/brankovic.ttf",
+    "media_type" : "application/x-font-truetype",
+    "compressedSize" : 26899,
+    "uncompressedSize" : 36356,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c0ed9e347c43d359413d59aba316e875cb2e39dd96a0eb17da68d8763f34cac",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 491,
+    "uncompressedSize" : 1312,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ee2bbf684b9dc4a474c5bd6c9926d2171f9fcb0e909ea0f326f6baad1c6a4",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "fummel",
+    "fileName" : "OPS/fonts/Fummel.otf",
+    "media_type" : "application/vnd.ms-opentype",
+    "compressedSize" : 3983,
+    "uncompressedSize" : 6564,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "bacb93368983fb8787e7a79f8b5d8cf2051506db53692deb13fcdd2c1ead8",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 308,
+    "uncompressedSize" : 572,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b767bd4568f668c54d7fe9e207bfc383627c7e0dd6a85c19b9277c7e6ea5db",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/external_css.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/external_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 487,
+    "uncompressedSize" : 1894,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "df35f6169344d373e68f35a1f6cd53804b7e77c3965796bb334ed0514754bd",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "http://fonts.googleapis.com/css?family=Chela+One", "OPS/styles/style.css" ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/style_tag_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 537,
+    "uncompressedSize" : 1212,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d227f6abf310a9b1f45f786d390ed75bd5ada18e24d719387f7bb9431c121",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/fonts/badaboom.woff", "OPS/fonts/bloody.woff", "http://themes.googleusercontent.com/static/fonts/chelaone/v1/DHUBEAsCcSRMyWTJ6sisfj8E0i7KZn-EPnyo3HZu7kw.woff" ]
+  }, {
+    "id" : "page03",
+    "fileName" : "OPS/inline_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 190,
+    "uncompressedSize" : 275,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d1da59f2540fc47650464ea554a99a5b25ee2f19dede375e324e75fb7a7e",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : 3,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style",
+    "fileName" : "OPS/styles/style.css",
+    "media_type" : "text/css",
+    "compressedSize" : 390,
+    "uncompressedSize" : 1444,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f8732454d8db2692f8aa2ec56474b4bbb98fedfa72b1588ae05ca928767d",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/fonts/badaboom.woff", "OPS/fonts/Fummel.otf", "OPS/styles/fonts/bloody.woff", "OPS/fonts/bloody.woff", "http://developer.mozilla.org/@api/deki/files/2934/=VeraSeBd.ttf", "OPS/fonts/brankovic.ttf" ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 270,
+    "uncompressedSize" : 473,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "465d7d734aa539b2dc4b402dea6f4e8d96bdeac452a1d5743b6ccdaa29f4c",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/style_tag_css.xhtml", "OPS/inline_css.xhtml", "OPS/external_css.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "font-face.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-013",
+    "severity" : "USAGE",
+    "message" : "Content file contains at least one inline style declaration.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_css.xhtml",
+      "line" : 60,
+      "column" : 65,
+      "context" : "font-family: 'Chela One', cursive;"
+    } ],
+    "suggestion" : "Inline styles are not compatible with accessibility settings and display personalization. Use CSS Styles instead."
+  }, {
+    "ID" : "ACC-014",
+    "severity" : "USAGE",
+    "message" : "CSS Selector font-size attribute value does not use a relative size.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 59,
+      "column" : 5,
+      "context" : "font-size : xx-large ;"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 65,
+      "column" : 5,
+      "context" : "font-size : xx-large ;"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 71,
+      "column" : 5,
+      "context" : "font-size : xx-large ;"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 77,
+      "column" : 5,
+      "context" : "font-size : xx-large ;"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 83,
+      "column" : 5,
+      "context" : "font-size : xx-large ;"
+    } ],
+    "suggestion" : "Acceptable values include percentages, em multiples, 'larger', 'smaller', 'normal' or 'inherit'."
+  }, {
+    "ID" : "CSS-002",
+    "severity" : "ERROR",
+    "message" : "Empty or NULL reference found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 18,
+      "column" : 5,
+      "context" : "url('')"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-007",
+    "severity" : "WARNING",
+    "message" : "Font-face reference OPS/fonts/brankovic.ttf refers to non-standard font type application/x-font-truetype.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 3,
+      "column" : 5,
+      "context" : "src : url('../fonts/brankovic.ttf') ;"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-008",
+    "severity" : "ERROR",
+    "message" : "An error occurred while parsing the CSS: Token '}' not allowed here, expecting a property value.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 50,
+      "column" : 1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-012",
+    "severity" : "USAGE",
+    "message" : "Document links to multiple CSS files.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_css.xhtml",
+      "line" : 6,
+      "column" : 69,
+      "context" : "styles/style.css"
+    }, {
+      "fileName" : "OPS/external_css.xhtml",
+      "line" : 7,
+      "column" : 101,
+      "context" : "http://fonts.googleapis.com/css?family=Chela+One"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-019",
+    "severity" : "WARNING",
+    "message" : "CSS font-face declaration has no attributes.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 31,
+      "column" : 1,
+      "context" : "@font-face"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-020",
+    "severity" : "USAGE",
+    "message" : "CSS font selector declaration uses unexpected font-size value '5'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 45,
+      "column" : 5,
+      "context" : "font : 5 arial , sans-serif ;"
+    } ],
+    "suggestion" : "Acceptable values include percentages, em multiples, 'larger', 'smaller', 'normal' or 'inherit'."
+  }, {
+    "ID" : "CSS-024",
+    "severity" : "USAGE",
+    "message" : "CSS class Selector is not used.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 44,
+      "column" : 1,
+      "context" : ".ex2"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 48,
+      "column" : 1,
+      "context" : ".ex3"
+    } ],
+    "suggestion" : "Remove unused CSS selectors."
+  }, {
+    "ID" : "CSS-025",
+    "severity" : "USAGE",
+    "message" : "CSS class Selector is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_css.xhtml",
+      "line" : 15,
+      "column" : 37,
+      "context" : ".myFont"
+    } ],
+    "suggestion" : "Check for typos or define a class selector to document the use of the class."
+  }, {
+    "ID" : "CSS-028",
+    "severity" : "USAGE",
+    "message" : "Use of Font-face declaration.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 8,
+      "column" : 13,
+      "context" : "null"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 9,
+      "column" : 13,
+      "context" : "OPS/fonts/bloody.woff"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 13,
+      "column" : 13,
+      "context" : "OPS/fonts/bloody.woff"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 14,
+      "column" : 13,
+      "context" : "OPS/fonts/badaboom.woff"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 18,
+      "column" : 13,
+      "context" : "OPS/fonts/badaboom.woff"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 19,
+      "column" : 13,
+      "context" : "OPS/fonts/badaboom.woff"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 20,
+      "column" : 13,
+      "context" : "OPS/fonts/badaboom.woff"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 21,
+      "column" : 13,
+      "context" : "http://themes.googleusercontent.com/static/fonts/chelaone/v1/DHUBEAsCcSRMyWTJ6sisfj8E0i7KZn-EPnyo3HZu7kw.woff"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 2,
+      "column" : 5,
+      "context" : "null"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 3,
+      "column" : 5,
+      "context" : "OPS/fonts/brankovic.ttf"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 7,
+      "column" : 5,
+      "context" : "OPS/fonts/brankovic.ttf"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 8,
+      "column" : 5,
+      "context" : "OPS/fonts/Fummel.otf"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 12,
+      "column" : 5,
+      "context" : "OPS/fonts/Fummel.otf"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 13,
+      "column" : 5,
+      "context" : "OPS/fonts/bloody.woff"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 17,
+      "column" : 5,
+      "context" : "OPS/fonts/bloody.woff"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 18,
+      "column" : 5,
+      "context" : "OPS/styles/"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 22,
+      "column" : 5,
+      "context" : "OPS/styles/"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 23,
+      "column" : 5,
+      "context" : "OPS/styles/fonts/bloody.woff"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 27,
+      "column" : 5,
+      "context" : "OPS/styles/fonts/bloody.woff"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 28,
+      "column" : 5,
+      "context" : "OPS/fonts/badaboom.woff"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 35,
+      "column" : 5,
+      "context" : "OPS/fonts/badaboom.woff"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 36,
+      "column" : 5,
+      "context" : "http://developer.mozilla.org/@api/deki/files/2934/=VeraSeBd.ttf"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-005",
+    "severity" : "USAGE",
+    "message" : "An external reference was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_css.xhtml",
+      "line" : 60,
+      "column" : 131,
+      "context" : "http://www.google.com/fonts"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-038",
+    "severity" : "USAGE",
+    "message" : "Ensure b, i, em, and strong elements are used in compliance with W3C HTML5 directives.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 39,
+      "column" : 7,
+      "context" : "b"
+    } ],
+    "suggestion" : "CSS styles are usually more appropriate for italics or bold text."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/inline_css.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/style_tag_css.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  }, {
+    "ID" : "RSC-006",
+    "severity" : "ERROR",
+    "message" : "Remote resource reference not allowed; resource must be placed in the OCF.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_css.xhtml",
+      "line" : 7,
+      "column" : 101,
+      "context" : "http://fonts.googleapis.com/css?family=Chela+One"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 21,
+      "column" : 13,
+      "context" : "http://themes.googleusercontent.com/static/fonts/chelaone/v1/DHUBEAsCcSRMyWTJ6sisfj8E0i7KZn-EPnyo3HZu7kw.woff"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 36,
+      "column" : 5,
+      "context" : "http://developer.mozilla.org/@api/deki/files/2934/=VeraSeBd.ttf"
+    } ],
+    "suggestion" : "Only audio and video remote resources are permitted."
+  }, {
+    "ID" : "RSC-007",
+    "severity" : "ERROR",
+    "message" : "Referenced resource is not found in the ePub.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 14,
+      "column" : 13,
+      "context" : "OPS/fonts/badaboom.woff"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 23,
+      "column" : 5,
+      "context" : "OPS/styles/fonts/bloody.woff"
+    }, {
+      "fileName" : "OPS/styles/style.css",
+      "line" : 28,
+      "column" : 5,
+      "context" : "OPS/fonts/badaboom.woff"
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe/META-INF/container.xml
new file mode 100644
index 0000000..affa714
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+	<rootfiles>
+		<rootfile full-path="OEBPS/content.opf" media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe/META-INF/encryption.xml b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe/META-INF/encryption.xml
new file mode 100644
index 0000000..db72c39
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe/META-INF/encryption.xml
@@ -0,0 +1,8 @@
+<encryption xmlns="urn:oasis:names:tc:opendocument:xmlns:container" xmlns:enc="http://www.w3.org/2001/04/xmlenc#" xmlns:deenc="http://ns.adobe.com/digitaleditions/enc">
+	<enc:EncryptedData>
+		<enc:EncryptionMethod Algorithm="http://ns.adobe.com/pdf/enc#RC"/>
+		<enc:CipherData>
+			<enc:CipherReference URI="OEBPS/fonts/ChaparralPro-Regular.otf"/>
+		</enc:CipherData>
+	</enc:EncryptedData>
+</encryption>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe/OEBPS/am-font-test.html b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe/OEBPS/am-font-test.html
new file mode 100644
index 0000000..b659f94
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe/OEBPS/am-font-test.html
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 //EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<title>am-font-test.html</title>
+		<link href="template.css" rel="stylesheet" type="text/css"/>
+	</head>
+	<body>
+		<div id="am-font-test.html" xml:lang="en-US">
+			<div class="Basic-Text-Frame">
+				<p class="Headline">This is Chaparral Pro </p>
+			</div>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe/OEBPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe/OEBPS/content.opf
new file mode 100644
index 0000000..4fd08d0
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe/OEBPS/content.opf
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<package xmlns="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/" unique-identifier="bookid" version="2.0">
+	<metadata>
+		<meta name="generator" content="Adobe InDesign"/>
+		<dc:title>Fonts Default Test</dc:title>
+		<dc:creator></dc:creator>
+		<dc:subject></dc:subject>
+		<dc:description></dc:description>
+		<dc:publisher>AMC</dc:publisher>
+		<dc:date>2011-07-16</dc:date>
+		<dc:source></dc:source>
+		<dc:relation></dc:relation>
+		<dc:coverage></dc:coverage>
+		<dc:rights></dc:rights>
+		<dc:language>en-US</dc:language>
+		<dc:identifier id="bookid">12345</dc:identifier>
+		<dc:identifier>urn:uuid:7C39D332-2638-4726-B5F6-D0619B58F487</dc:identifier>
+	</metadata>
+	<manifest>
+		<item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/>
+		<item id="css" href="template.css" media-type="text/css"/>
+		<item id="am-font-test" href="am-font-test.html" media-type="application/xhtml+xml"/>
+		<item id="ChaparralPro-Regular.otf" href="fonts/ChaparralPro-Regular.otf" media-type="application/x-font-otf"/>
+	</manifest>
+	<spine toc="ncx">
+		<itemref idref="am-font-test"/>
+	</spine>
+</package>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe/OEBPS/fonts/ChaparralPro-Regular.otf b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe/OEBPS/fonts/ChaparralPro-Regular.otf
new file mode 100644
index 0000000..316ebe8
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe/OEBPS/fonts/ChaparralPro-Regular.otf differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe/OEBPS/template.css b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe/OEBPS/template.css
new file mode 100644
index 0000000..451df0d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe/OEBPS/template.css
@@ -0,0 +1,35 @@
+ at font-face {
+	font-family : "Chaparral Pro";
+	font-style : normal;
+	font-weight : normal;
+	src : url("fonts/ChaparralPro-Regular.otf");
+}
+ at page {
+	margin : 0.5em;
+}
+tbody, thead, tfoot, tr, td, th {
+	border-style : inherit;
+	border-width : inherit;
+	border-color : inherit;
+}
+.leftFloat {
+	float : left;
+}
+.rightFloat {
+	float : right;
+}
+p.Headline {
+	font-family : "Chaparral Pro", serif;
+	font-weight : normal;
+	font-style : normal;
+	font-size : 2.17em;
+	text-decoration : none;
+	font-variant : normal;
+	line-height : 1.2;
+	text-align : left;
+	color : #000000;
+	text-indent : 0px;
+	margin : 0px;
+}
+div.Basic-Text-Frame {
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe/OEBPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe/OEBPS/toc.ncx
new file mode 100644
index 0000000..c7fb62f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe/OEBPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE ncx PUBLIC "-//NISO//DTD ncx 2005-1//EN" "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd">
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+	<head>
+		<meta name="dtb:uid" content="12345"/>
+		<meta name="dtb:depth" content="0"/>
+		<meta name="dtb:totalPageCount" content="0"/>
+		<meta name="dtb:maxPageNumber" content="0"/>
+	</head>
+	<docTitle>
+		<text/>	</docTitle>
+	<navMap>
+		<navPoint id="navpoint1" playOrder="1">
+			<navLabel>
+				<text>am-font-test</text>
+			</navLabel>
+			<content src="am-font-test.html"/>
+		</navPoint>
+	</navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe/mimetype b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe_expected_results.json
new file mode 100644
index 0000000..cfb4e50
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_adobe_expected_results.json
@@ -0,0 +1,312 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/css/font_encryption_adobe.epub",
+    "filename" : "font_encryption_adobe.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:17:17",
+    "elapsedTime" : 59,
+    "nFatal" : 0,
+    "nError" : 1,
+    "nWarning" : 0,
+    "nUsage" : 5
+  },
+  "publication" : {
+    "publisher" : "AMC",
+    "title" : "Fonts Default Test",
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "12345",
+    "language" : "en-US",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "2.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 73,
+    "embeddedFonts" : [ "Chaparral Pro" ],
+    "refFonts" : [ ],
+    "hasEncryption" : true,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ChaparralPro-Regular.otf",
+    "fileName" : "OEBPS/fonts/ChaparralPro-Regular.otf",
+    "media_type" : "application/x-font-otf",
+    "compressedSize" : 13789,
+    "uncompressedSize" : 31804,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a6ee6fd5bfe8bc8f9a40d0293d37ba8282ec526b2a9e8ef39fe307970768",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "am-font-test",
+    "fileName" : "OEBPS/am-font-test.html",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 318,
+    "uncompressedSize" : 490,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "fe886bcabc47476a3b64a211c139f4cf52a886105d2771c5e77415ed912390",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OEBPS/template.css" ]
+  }, {
+    "id" : "css",
+    "fileName" : "OEBPS/template.css",
+    "media_type" : "text/css",
+    "compressedSize" : 301,
+    "uncompressedSize" : 625,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "13af71cd5c6b8b3d38f68c4ca922282c66adb8d99c94d9c80378423bd5ffba0",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OEBPS/fonts/ChaparralPro-Regular.otf" ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 187,
+    "uncompressedSize" : 265,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "259af1e3b24529de5ef971284f4fed5eefdb388a53cf3e52966c83e155ba3f",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:META-INF/encryption.xml",
+    "fileName" : "META-INF/encryption.xml",
+    "media_type" : null,
+    "compressedSize" : 238,
+    "uncompressedSize" : 403,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "fd8108c1432ea5bdbcea0dd5b8870b48a85809bd885b03ea3814a5e7f2c2c",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OEBPS/content.opf",
+    "fileName" : "OEBPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 558,
+    "uncompressedSize" : 1177,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "eb84bb96341d1badff8dee2b3c3aa97dd4322b7a05619668dae2cd77902517",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OEBPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 337,
+    "uncompressedSize" : 631,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7789854a45c73f40274827a93456dbc47758ea2fcc6c9fd4b5db6f3a71cd5",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OEBPS/am-font-test.html" ]
+  } ],
+  "messages" : [ {
+    "ID" : "CSS-024",
+    "severity" : "USAGE",
+    "message" : "CSS class Selector is not used.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OEBPS/template.css",
+      "line" : 15,
+      "column" : 1,
+      "context" : ".leftFloat"
+    }, {
+      "fileName" : "OEBPS/template.css",
+      "line" : 18,
+      "column" : 1,
+      "context" : ".rightFloat"
+    } ],
+    "suggestion" : "Remove unused CSS selectors."
+  }, {
+    "ID" : "CSS-028",
+    "severity" : "USAGE",
+    "message" : "Use of Font-face declaration.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OEBPS/template.css",
+      "line" : 2,
+      "column" : 2,
+      "context" : "null"
+    }, {
+      "fileName" : "OEBPS/template.css",
+      "line" : 3,
+      "column" : 2,
+      "context" : "null"
+    }, {
+      "fileName" : "OEBPS/template.css",
+      "line" : 4,
+      "column" : 2,
+      "context" : "null"
+    }, {
+      "fileName" : "OEBPS/template.css",
+      "line" : 5,
+      "column" : 2,
+      "context" : "OEBPS/fonts/ChaparralPro-Regular.otf"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-004",
+    "severity" : "ERROR",
+    "message" : "Irregular DOCTYPE: found '-//W3C//DTD XHTML 1.1 //EN', expected '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \n\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OEBPS/am-font-test.html",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OEBPS/toc.ncx",
+      "line" : 3,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-020",
+    "severity" : "USAGE",
+    "message" : "Content file doesn't contain xml:lang attribute.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OEBPS/am-font-test.html",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-021",
+    "severity" : "USAGE",
+    "message" : "Content file doesn't contain lang attribute.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OEBPS/am-font-test.html",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/css/fonts.css b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/css/fonts.css
new file mode 100644
index 0000000..45b1aa1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/css/fonts.css
@@ -0,0 +1,82 @@
+ at font-face {
+    font-family: 'OS-obf-otf';
+    font-weight: normal;
+    font-style: normal;
+    src:url(../fonts/OldStandard-Regular.obf.otf) format('opentype');
+}
+
+ at font-face {
+    font-family: 'OS-obf-otf';
+    font-weight: bold;
+    font-style: normal;
+    src:url(../fonts/OldStandard-Bold.obf.otf) format('opentype');
+}
+
+ at font-face {
+    font-family:'OS-obf-otf';
+    font-weight: normal;
+    font-style: italic;
+    src:url(../fonts/OldStandard-Italic.obf.otf) format('opentype');
+}
+
+ at font-face {
+    font-family: 'OS-woff';
+    font-weight: normal;
+    font-style: normal;
+    src:url(../fonts/OldStandard-Regular.woff) format('woff');
+}
+
+ at font-face {
+    font-family: 'OS-woff';
+    font-weight: bold;
+    font-style: normal;
+    src:url(../fonts/OldStandard-Bold.woff) format('woff');
+}
+
+ at font-face {
+    font-family:'OS-woff';
+    font-weight: normal;
+    font-style: italic;
+    src:url(../fonts/OldStandard-Italic.woff) format('woff');
+}
+ at font-face {
+    font-family: 'OS-obf-woff';
+    font-weight: normal;
+    font-style: normal;
+    src:url(../fonts/OldStandard-Regular.obf.woff) format('woff');
+}
+
+ at font-face {
+    font-family: 'OS-obf-woff';
+    font-weight: bold;
+    font-style: normal;
+    src:url(../fonts/OldStandard-Bold.obf.woff) format('woff');
+}
+
+ at font-face {
+    font-family:'OS-obf-woff';
+    font-weight: normal;
+    font-style: italic;
+    src:url(../fonts/OldStandard-Italic.obf.woff) format('woff');
+}
+
+ at font-face {
+    font-family: 'OS-otf';
+    font-weight: normal;
+    font-style: normal;
+    src:url(../fonts/OldStandard-Regular.otf) format('opentype');
+}
+
+ at font-face {
+    font-family: 'OS-otf';
+    font-weight: bold;
+    font-style: normal;
+    src:url(../fonts/OldStandard-Bold.otf) format('opentype');
+}
+
+ at font-face {
+    font-family:'OS-otf';
+    font-weight: normal;
+    font-style: italic;
+    src:url(../fonts/OldStandard-Italic.otf) format('opentype');
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Bold.obf.otf b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Bold.obf.otf
new file mode 100644
index 0000000..7c936a9
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Bold.obf.otf differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Bold.obf.woff b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Bold.obf.woff
new file mode 100644
index 0000000..8e8dcef
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Bold.obf.woff differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Bold.otf b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Bold.otf
new file mode 100644
index 0000000..b7498ce
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Bold.otf differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Bold.woff b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Bold.woff
new file mode 100644
index 0000000..9a5f29b
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Bold.woff differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Italic.obf.otf b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Italic.obf.otf
new file mode 100644
index 0000000..c3f2eb3
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Italic.obf.otf differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Italic.obf.woff b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Italic.obf.woff
new file mode 100644
index 0000000..cf52892
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Italic.obf.woff differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Italic.otf b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Italic.otf
new file mode 100644
index 0000000..003a3ff
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Italic.otf differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Italic.woff b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Italic.woff
new file mode 100644
index 0000000..b59a91b
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Italic.woff differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Regular.obf.otf b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Regular.obf.otf
new file mode 100644
index 0000000..fc7fb98
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Regular.obf.otf differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Regular.obf.woff b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Regular.obf.woff
new file mode 100644
index 0000000..66cd0ad
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Regular.obf.woff differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Regular.otf b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Regular.otf
new file mode 100644
index 0000000..1e0688f
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Regular.otf differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Regular.woff b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Regular.woff
new file mode 100644
index 0000000..20d92fe
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/fonts/OldStandard-Regular.woff differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/package.opf b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/package.opf
new file mode 100644
index 0000000..a710834
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/package.opf
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" xml:lang="en" unique-identifier="uid" prefix="cc: http://creativecommons.org/ns#">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title id="title">External CSS @fontface Test</dc:title>
+    <dc:creator>David</dc:creator>
+    <dc:identifier id="uid">epub3.test</dc:identifier>
+    <dc:language>en-US</dc:language>
+    <meta property="dcterms:modified">2012-01-20T12:47:00Z</meta>
+    <dc:publisher>Epub3 Team</dc:publisher>
+    <dc:description>This Epub is set up as a shell with content that is able to be added to test ereader functionality</dc:description>
+  </metadata>
+  <manifest>
+    <item id="cover" href="pages/cover.xhtml" media-type="application/xhtml+xml"/>
+    <item id="toc" properties="nav" href="pages/toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="pg1" href="pages/pg1.xhtml" media-type="application/xhtml+xml"/>
+    <item id="pg2" href="pages/pg2.xhtml" media-type="application/xhtml+xml"/>
+    <item id="pg3" href="pages/pg3.xhtml" media-type="application/xhtml+xml"/>
+    
+    <item id="font.OldStandard.regular" href="fonts/OldStandard-Regular.obf.woff" media-type="application/font-woff"/>
+    <item id="font.OldStandard.italic" href="fonts/OldStandard-Italic.obf.woff" media-type="application/font-woff"/>
+    <item id="font.OldStandard.bold" href="fonts/OldStandard-Bold.obf.woff" media-type="application/font-woff"/>
+    
+    <item id="font.OldStandard2.regular" href="fonts/OldStandard-Regular.otf" media-type="application/vnd.ms-opentype"/>
+    <item id="font.OldStandard2.italic" href="fonts/OldStandard-Italic.otf" media-type="application/vnd.ms-opentype"/>
+    <item id="font.OldStandard2.bold" href="fonts/OldStandard-Bold.otf" media-type="application/vnd.ms-opentype"/>
+        
+    <item id="font.OldStandard3.regular" href="fonts/OldStandard-Regular.obf.otf" media-type="application/vnd.ms-opentype"/>
+    <item id="font.OldStandard3.italic" href="fonts/OldStandard-Italic.obf.otf" media-type="application/vnd.ms-opentype"/>
+    <item id="font.OldStandard3.bold" href="fonts/OldStandard-Bold.obf.otf" media-type="application/vnd.ms-opentype"/>       
+   
+    <item id="font.OldStandard4.regular" href="fonts/OldStandard-Regular.woff" media-type="application/font-woff"/>
+    <item id="font.OldStandard4.italic" href="fonts/OldStandard-Italic.woff" media-type="application/font-woff"/>
+    <item id="font.OldStandard4.bold" href="fonts/OldStandard-Bold.woff" media-type="application/font-woff"/>      
+    
+    <item id="fonts" href="css/fonts.css" media-type="text/css"/>
+
+    <item id="encryption" href="../META-INF/encryption.xml" media-type="text/xml"/>
+  </manifest>
+  <spine>
+	<itemref idref="cover"/>
+    <itemref idref="toc"/>
+    <itemref idref="pg1"/>
+    <itemref idref="pg2"/>
+    <itemref idref="pg3"/>
+
+  </spine>
+</package>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/pages/cover.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/pages/cover.xhtml
new file mode 100644
index 0000000..f9f3e57
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/pages/cover.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+   <head>
+      <title>EPUB3 Feature Test Document</title>
+   </head>
+   <body>
+      <hgroup id="covertitle">
+         <h1>EPUB3 Reader Feature Test</h1>
+         <h3>Document with a different external CSS for each spine item. Each page tests a different CSS-fontface</h3>
+                           
+      </hgroup>
+   </body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/pages/pg1.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/pages/pg1.xhtml
new file mode 100644
index 0000000..30daa09
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/pages/pg1.xhtml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+    <head>
+        <title>Page 1</title>
+        <link rel="stylesheet" type="text/css" href="../css/fonts.css" />
+    </head>
+    <body>
+        <h1> Page 1 - Normal  </h1>
+        
+        <p style="font-family:OS-otf,sans-serif;">
+        Each Paragraph will have a different font that it uses.
+        </p>
+        
+        <p style="font-family:OS-woff,sans-serif;">
+        However, all the fonts on the page /should/ appear to look the same because the only difference in the font is the file format.
+        </p>
+        
+        <p style="font-family:OS-obf-otf,sans-serif;">
+        There are four fonts total, so there will be 5 paragraphs - the last one is the fallback font so it is obvious if one font isn't working. 
+        </p>
+        
+        <p style="font-family:OS-obf-woff,sans-serif;">
+        The font order will be: otf, woff, obf-otf, obf-woff.
+        </p>
+        
+        <!--p>
+        <font face="sans-serif">
+        This is the comparison paragraph, where a sans-serif font is used from html's font tag
+        </font>
+        </p-->
+        
+        <p style="font-family:sans-serif;">
+        This is a comparison paragraph, with font set as sans-serif by inline css
+        </p>
+        
+        
+        
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/pages/pg2.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/pages/pg2.xhtml
new file mode 100644
index 0000000..f5d75dc
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/pages/pg2.xhtml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+    <head>
+        <title>Page 2</title>
+        <link rel="stylesheet" type="text/css" href="../css/fonts.css" />
+    </head>
+    <body>
+        <h1> Page 2 - Bold  </h1>
+        
+        <p style="font-family:OS-otf,sans-serif;font-weight:bold;">
+        Each Paragraph will have a different font that it uses.
+        </p>
+        
+        <p style="font-family:OS-woff,sans-serif;font-weight:bold;">
+        However, all the fonts on the page /should/ appear to look the same because the only difference in the font is the file format.
+        </p>
+        
+        <p style="font-family:OS-obf-otf,sans-serif;font-weight:bold;">
+        There are four fonts total, so there will be 5 paragraphs - the last one is the fallback font so it is obvious if one font isn't working.
+        </p>
+        
+        <p style="font-family:OS-obf-woff,sans-serif;font-weight:bold;">
+        The font order will be: otf, woff, obf-otf, obf-woff.
+        </p>
+        
+        <!--p>
+        <font face="sans-serif">
+        <b>
+        This is the comparison paragraph, where a sans-serif font is used from html's font tag
+        </b>
+        </font>
+        </p-->
+        
+        <p style="font-family:sans-serif;font-weight:bold;">
+        This is a comparison paragraph, with font set as sans-serif by inline css
+        </p>
+        
+        
+        
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/pages/pg3.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/pages/pg3.xhtml
new file mode 100644
index 0000000..b7d2368
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/pages/pg3.xhtml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+    <head>
+        <title>Page 3</title>
+        <link rel="stylesheet" type="text/css" href="../css/fonts.css" />
+    </head>
+    <body>
+        <h1> Page 3 - Italic  </h1>
+        
+        <p style="font-family:OS-otf,sans-serif;font-style:italic;">
+        Each Paragraph will have a different font that it uses.
+        </p>
+        
+        <p style="font-family:OS-woff,sans-serif;font-style:italic;">
+        However, all the fonts on the page /should/ appear to look the same because the only difference in the font is the file format.
+        </p>
+        
+        <p style="font-family:OS-obf-otf,sans-serif;font-style:italic;">
+        There are four fonts total, so there will be 5 paragraphs - the last one is the fallback font so it is obvious if one font isn't working.
+        </p>
+        
+        <p style="font-family:OS-obf-woff,sans-serif;font-style:italic;">
+        The font order will be: otf, woff, obf-otf, obf-woff.
+        </p>
+        
+        <!--p>
+        <font face="sans-serif">
+        <i>
+        This is the comparison paragraph, where a sans-serif font is used from html's font tag
+        </i>
+        </font>
+        </p-->
+        
+        <p style="font-family:sans-serif;font-style:italic;">
+        This is a comparison paragraph, with font set as sans-serif by inline css
+        </p>
+        
+        
+        
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/pages/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/pages/toc.xhtml
new file mode 100644
index 0000000..bd097db
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/Css-fontface/pages/toc.xhtml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" lang="en" xml:lang="en">
+   <head>
+      <title>Table of Contents</title>
+      <meta charset="utf-8" />
+   </head>
+   <body>
+      <section id="toc">
+         <h1>Css- at fontface - each page should appear to use only one font</h1>
+         <nav epub:type="toc">
+            <h2>Table of contents</h2>
+            <ol>
+               <li>
+                  <a href="pg1.xhtml"> pg1
+                  </a>
+               </li>
+               <li>
+                  <a href="pg2.xhtml"> pg2
+                  </a>
+               </li>
+               <li>
+                  <a href="pg3.xhtml"> pg3
+                  </a>
+               </li>           
+            </ol>
+         </nav>
+      </section>
+   </body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/META-INF/container.xml
new file mode 100644
index 0000000..4dd6a1b
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+<rootfiles>
+<rootfile full-path="Css-fontface/package.opf" media-type="application/oebps-package+xml"/>
+</rootfiles>
+</container>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/META-INF/encryption.xml b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/META-INF/encryption.xml
new file mode 100644
index 0000000..b9f42ff
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/META-INF/encryption.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<encryption xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+    <EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#">
+        <EncryptionMethod Algorithm="http://www.idpf.org/2008/embedding"/>
+        <CipherData>
+            <CipherReference URI="Css- at fontface/fonts/OldStandard-Bold.obf.woff"/>
+        </CipherData>
+    </EncryptedData>
+    <EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#">
+        <EncryptionMethod Algorithm="http://www.idpf.org/2008/embedding"/>
+        <CipherData>
+            <CipherReference URI="Css- at fontface/fonts/OldStandard-Regular.obf.woff"/>
+        </CipherData>
+    </EncryptedData>
+    <EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#">
+        <EncryptionMethod Algorithm="http://www.idpf.org/2008/embedding"/>
+        <CipherData>
+            <CipherReference URI="Css- at fontface/fonts/OldStandard-Italic.obf.woff"/>
+        </CipherData>
+    </EncryptedData>
+    <EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#">
+        <EncryptionMethod Algorithm="http://www.idpf.org/2008/embedding"/>
+        <CipherData>
+            <CipherReference URI="Css- at fontface/fonts/OldStandard-Bold.obf.otf"/>
+        </CipherData>
+    </EncryptedData>
+    <EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#">
+        <EncryptionMethod Algorithm="http://www.idpf.org/2008/embedding"/>
+        <CipherData>
+            <CipherReference URI="Css- at fontface/fonts/OldStandard-Regular.obf.otf"/>
+        </CipherData>
+    </EncryptedData>
+    <EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#">
+        <EncryptionMethod Algorithm="http://www.idpf.org/2008/embedding"/>
+        <CipherData>
+            <CipherReference URI="Css- at fontface/fonts/OldStandard-Italic.obf.otf"/>
+        </CipherData>
+    </EncryptedData>
+</encryption>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/mimetype b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf_expected_results.json
new file mode 100644
index 0000000..aea7397
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf_expected_results.json
@@ -0,0 +1,810 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/css/font_encryption_idpf.epub",
+    "filename" : "font_encryption_idpf.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:17:17",
+    "elapsedTime" : 704,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 6
+  },
+  "publication" : {
+    "publisher" : "Epub3 Team",
+    "title" : "External CSS @fontface Test",
+    "creator" : [ "David" ],
+    "date" : "2012-01-20T12:47:00Z",
+    "subject" : [ ],
+    "description" : "This Epub is set up as a shell with content that is able to be added to test ereader functionality",
+    "rights" : null,
+    "identifier" : "epub3.test",
+    "language" : "en-US",
+    "nSpines" : 5,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : false,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 2904,
+    "embeddedFonts" : [ "OS-obf-otf", "OS-obf-otf,bold", "OS-obf-otf,italic", "OS-woff", "OS-woff,bold", "OS-woff,italic", "OS-obf-woff", "OS-obf-woff,bold", "OS-obf-woff,italic", "OS-otf", "OS-otf,bold", "OS-otf,italic" ],
+    "refFonts" : [ ],
+    "hasEncryption" : true,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "cover",
+    "fileName" : "Css-fontface/pages/cover.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 275,
+    "uncompressedSize" : 462,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a4844942570ae162138231196572940fbadd74e7c20a9917811d8c360bb62",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:Css-fontface/package.opf",
+    "fileName" : "Css-fontface/package.opf",
+    "media_type" : null,
+    "compressedSize" : 753,
+    "uncompressedSize" : 2903,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "413b5774be21e453872093ee4d1f528db885ada9358a37a43f56c1f92c5e49",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 251,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f19ae9dd24642bc54c262b06ee344b210a4a4f68f464ce844ac364399102960",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "encryption",
+    "fileName" : "META-INF/encryption.xml",
+    "media_type" : "text/xml",
+    "compressedSize" : 291,
+    "uncompressedSize" : 1833,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5989e060eda6b7bd91491d8e5bec1c239c8f38e1c14c89689b41d64c12235882",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "font.OldStandard.bold",
+    "fileName" : "Css-fontface/fonts/OldStandard-Bold.obf.woff",
+    "media_type" : "application/font-woff",
+    "compressedSize" : 104007,
+    "uncompressedSize" : 104300,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1939e1f111785e82e88f4c6ee3a5d8a920a467e8105129a6aef7542ae6d953f",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "font.OldStandard.italic",
+    "fileName" : "Css-fontface/fonts/OldStandard-Italic.obf.woff",
+    "media_type" : "application/font-woff",
+    "compressedSize" : 118545,
+    "uncompressedSize" : 118780,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c5505c2965bc5d6580538ae39eade6e088fda088fd1badd1702e141db3dcddac",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "font.OldStandard.regular",
+    "fileName" : "Css-fontface/fonts/OldStandard-Regular.obf.woff",
+    "media_type" : "application/font-woff",
+    "compressedSize" : 108795,
+    "uncompressedSize" : 109100,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "4fc9fc8cc86e7ad3f32dc32749657fb3efc5a4a7b4bd887bb752058fe15e4",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "font.OldStandard2.bold",
+    "fileName" : "Css-fontface/fonts/OldStandard-Bold.otf",
+    "media_type" : "application/vnd.ms-opentype",
+    "compressedSize" : 202297,
+    "uncompressedSize" : 471892,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3c65285d84f53f727f26ae3c65788796dd75b54cea43f1f25e6deaff43a1",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "font.OldStandard2.italic",
+    "fileName" : "Css-fontface/fonts/OldStandard-Italic.otf",
+    "media_type" : "application/vnd.ms-opentype",
+    "compressedSize" : 238477,
+    "uncompressedSize" : 538480,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "bfc29f50104138888d436ecaea8d3cd3b0d4bfdf8249a10ff9c117aed15ae3a",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "font.OldStandard2.regular",
+    "fileName" : "Css-fontface/fonts/OldStandard-Regular.otf",
+    "media_type" : "application/vnd.ms-opentype",
+    "compressedSize" : 200338,
+    "uncompressedSize" : 443980,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "588be229fb2d23c4ef90bda5e38ac1da1b5b3075ec26d6242e173238e88b86",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "font.OldStandard3.bold",
+    "fileName" : "Css-fontface/fonts/OldStandard-Bold.obf.otf",
+    "media_type" : "application/vnd.ms-opentype",
+    "compressedSize" : 202589,
+    "uncompressedSize" : 471892,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b0999ab6fbd91cc6cb3aaf8c53cecc2f6bf353d25eabc18219e4bbc9f2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "font.OldStandard3.italic",
+    "fileName" : "Css-fontface/fonts/OldStandard-Italic.obf.otf",
+    "media_type" : "application/vnd.ms-opentype",
+    "compressedSize" : 238849,
+    "uncompressedSize" : 538480,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "bb76ab2914f18ef98ddbe65484d44379fd1a13687c3eec49276698c23efab",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "font.OldStandard3.regular",
+    "fileName" : "Css-fontface/fonts/OldStandard-Regular.obf.otf",
+    "media_type" : "application/vnd.ms-opentype",
+    "compressedSize" : 200623,
+    "uncompressedSize" : 443980,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "4b2f2b872232d31bf01b3bcb1f3855d4489ea4f52c2bfc6f6bccea21be76ee",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "font.OldStandard4.bold",
+    "fileName" : "Css-fontface/fonts/OldStandard-Bold.woff",
+    "media_type" : "application/font-woff",
+    "compressedSize" : 103978,
+    "uncompressedSize" : 104300,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "8a32e753e1454a8dae46d7b502bb033ae49c8a4c659d52ad6804061efe2907c",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "font.OldStandard4.italic",
+    "fileName" : "Css-fontface/fonts/OldStandard-Italic.woff",
+    "media_type" : "application/font-woff",
+    "compressedSize" : 118514,
+    "uncompressedSize" : 118780,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "6459ed87de9e65aae918709265da75edc50dd1e34179f9d2d2998abd46769c7",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "font.OldStandard4.regular",
+    "fileName" : "Css-fontface/fonts/OldStandard-Regular.woff",
+    "media_type" : "application/font-woff",
+    "compressedSize" : 108762,
+    "uncompressedSize" : 109100,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7c72df4bd09145d12cd5d39704de1e6aa713139c38c5b4d6eb8b0e414c4ee9e",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "fonts",
+    "fileName" : "Css-fontface/css/fonts.css",
+    "media_type" : "text/css",
+    "compressedSize" : 225,
+    "uncompressedSize" : 1902,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "16f7b7ecc82a777861ecfdee1461c6ad32aa482be2674c64b0a39d1cbf585b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "Css-fontface/fonts/OldStandard-Italic.otf", "Css-fontface/fonts/OldStandard-Bold.obf.woff", "Css-fontface/fonts/OldStandard-Regular.obf.woff", "Css-fontface/fonts/OldStandard-Italic.obf.otf", "Css-fontface/fonts/OldStandard-Regular.obf.otf", "Css-fontface/fonts/OldStandard-Bold.otf", "Css-fontface/fonts/OldStandard-Regular.otf", "Css-fontface/fonts/OldStandard-Italic.obf.woff", "Css-fontface/fonts/OldStandard-Italic.woff", "Css-fontface/fonts/OldStandard-Bold.o [...]
+  }, {
+    "id" : "pg1",
+    "fileName" : "Css-fontface/pages/pg1.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 560,
+    "uncompressedSize" : 1385,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "6bac922b3caabcce534315cc734883bae6df3f55225e7569fb3ca5df4d0fa63",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "Css-fontface/css/fonts.css" ]
+  }, {
+    "id" : "pg2",
+    "fileName" : "Css-fontface/pages/pg2.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 575,
+    "uncompressedSize" : 1492,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "bab9e4b6859ba7fb94ef37ecb02d32cfd76cbad7b6954ab136439578d461fb",
+    "isSpineItem" : true,
+    "spineIndex" : 3,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "Css-fontface/css/fonts.css" ]
+  }, {
+    "id" : "pg3",
+    "fileName" : "Css-fontface/pages/pg3.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 574,
+    "uncompressedSize" : 1499,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1d4dde11213f45de37647267c365d4387f5c27b47b9b384cdbd71ce6363c71",
+    "isSpineItem" : true,
+    "spineIndex" : 4,
+    "isLinear" : true,
+    "navigationOrder" : 3,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "Css-fontface/css/fonts.css" ]
+  }, {
+    "id" : "toc",
+    "fileName" : "Css-fontface/pages/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 347,
+    "uncompressedSize" : 859,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d8eb7f8b37cc185bee23e06ce0f2da35254e4afae1fffa9ea9b894a8347ec20",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "Css-fontface/pages/pg2.xhtml", "Css-fontface/pages/pg1.xhtml", "Css-fontface/pages/pg3.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "Css-fontface/pages/cover.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "Css-fontface/pages/pg1.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "Css-fontface/pages/pg2.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "Css-fontface/pages/pg3.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "font_encryption_idpf.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-013",
+    "severity" : "USAGE",
+    "message" : "Content file contains at least one inline style declaration.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "Css-fontface/pages/pg1.xhtml",
+      "line" : 11,
+      "column" : 51,
+      "context" : "font-family:OS-otf,sans-serif;"
+    }, {
+      "fileName" : "Css-fontface/pages/pg1.xhtml",
+      "line" : 15,
+      "column" : 52,
+      "context" : "font-family:OS-woff,sans-serif;"
+    }, {
+      "fileName" : "Css-fontface/pages/pg1.xhtml",
+      "line" : 19,
+      "column" : 55,
+      "context" : "font-family:OS-obf-otf,sans-serif;"
+    }, {
+      "fileName" : "Css-fontface/pages/pg1.xhtml",
+      "line" : 23,
+      "column" : 56,
+      "context" : "font-family:OS-obf-woff,sans-serif;"
+    }, {
+      "fileName" : "Css-fontface/pages/pg1.xhtml",
+      "line" : 33,
+      "column" : 44,
+      "context" : "font-family:sans-serif;"
+    }, {
+      "fileName" : "Css-fontface/pages/pg2.xhtml",
+      "line" : 11,
+      "column" : 68,
+      "context" : "font-family:OS-otf,sans-serif;font-weight:bold;"
+    }, {
+      "fileName" : "Css-fontface/pages/pg2.xhtml",
+      "line" : 15,
+      "column" : 69,
+      "context" : "font-family:OS-woff,sans-serif;font-weight:bold;"
+    }, {
+      "fileName" : "Css-fontface/pages/pg2.xhtml",
+      "line" : 19,
+      "column" : 72,
+      "context" : "font-family:OS-obf-otf,sans-serif;font-weight:bold;"
+    }, {
+      "fileName" : "Css-fontface/pages/pg2.xhtml",
+      "line" : 23,
+      "column" : 73,
+      "context" : "font-family:OS-obf-woff,sans-serif;font-weight:bold;"
+    }, {
+      "fileName" : "Css-fontface/pages/pg2.xhtml",
+      "line" : 35,
+      "column" : 61,
+      "context" : "font-family:sans-serif;font-weight:bold;"
+    }, {
+      "fileName" : "Css-fontface/pages/pg3.xhtml",
+      "line" : 11,
+      "column" : 69,
+      "context" : "font-family:OS-otf,sans-serif;font-style:italic;"
+    }, {
+      "fileName" : "Css-fontface/pages/pg3.xhtml",
+      "line" : 15,
+      "column" : 70,
+      "context" : "font-family:OS-woff,sans-serif;font-style:italic;"
+    }, {
+      "fileName" : "Css-fontface/pages/pg3.xhtml",
+      "line" : 19,
+      "column" : 73,
+      "context" : "font-family:OS-obf-otf,sans-serif;font-style:italic;"
+    }, {
+      "fileName" : "Css-fontface/pages/pg3.xhtml",
+      "line" : 23,
+      "column" : 74,
+      "context" : "font-family:OS-obf-woff,sans-serif;font-style:italic;"
+    }, {
+      "fileName" : "Css-fontface/pages/pg3.xhtml",
+      "line" : 35,
+      "column" : 62,
+      "context" : "font-family:sans-serif;font-style:italic;"
+    } ],
+    "suggestion" : "Inline styles are not compatible with accessibility settings and display personalization. Use CSS Styles instead."
+  }, {
+    "ID" : "CSS-028",
+    "severity" : "USAGE",
+    "message" : "Use of Font-face declaration.",
+    "additionalLocations" : 23,
+    "locations" : [ {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 2,
+      "column" : 5,
+      "context" : "null"
+    }, {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 3,
+      "column" : 5,
+      "context" : "null"
+    }, {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 4,
+      "column" : 5,
+      "context" : "null"
+    }, {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 5,
+      "column" : 5,
+      "context" : "Css-fontface/fonts/OldStandard-Regular.obf.otf"
+    }, {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 9,
+      "column" : 5,
+      "context" : "Css-fontface/fonts/OldStandard-Regular.obf.otf"
+    }, {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 10,
+      "column" : 5,
+      "context" : "Css-fontface/fonts/OldStandard-Regular.obf.otf"
+    }, {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 11,
+      "column" : 5,
+      "context" : "Css-fontface/fonts/OldStandard-Regular.obf.otf"
+    }, {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 12,
+      "column" : 5,
+      "context" : "Css-fontface/fonts/OldStandard-Bold.obf.otf"
+    }, {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 16,
+      "column" : 5,
+      "context" : "Css-fontface/fonts/OldStandard-Bold.obf.otf"
+    }, {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 17,
+      "column" : 5,
+      "context" : "Css-fontface/fonts/OldStandard-Bold.obf.otf"
+    }, {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 18,
+      "column" : 5,
+      "context" : "Css-fontface/fonts/OldStandard-Bold.obf.otf"
+    }, {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 19,
+      "column" : 5,
+      "context" : "Css-fontface/fonts/OldStandard-Italic.obf.otf"
+    }, {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 23,
+      "column" : 5,
+      "context" : "Css-fontface/fonts/OldStandard-Italic.obf.otf"
+    }, {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 24,
+      "column" : 5,
+      "context" : "Css-fontface/fonts/OldStandard-Italic.obf.otf"
+    }, {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 25,
+      "column" : 5,
+      "context" : "Css-fontface/fonts/OldStandard-Italic.obf.otf"
+    }, {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 26,
+      "column" : 5,
+      "context" : "Css-fontface/fonts/OldStandard-Regular.woff"
+    }, {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 30,
+      "column" : 5,
+      "context" : "Css-fontface/fonts/OldStandard-Regular.woff"
+    }, {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 31,
+      "column" : 5,
+      "context" : "Css-fontface/fonts/OldStandard-Regular.woff"
+    }, {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 32,
+      "column" : 5,
+      "context" : "Css-fontface/fonts/OldStandard-Regular.woff"
+    }, {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 33,
+      "column" : 5,
+      "context" : "Css-fontface/fonts/OldStandard-Bold.woff"
+    }, {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 37,
+      "column" : 5,
+      "context" : "Css-fontface/fonts/OldStandard-Bold.woff"
+    }, {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 38,
+      "column" : 5,
+      "context" : "Css-fontface/fonts/OldStandard-Bold.woff"
+    }, {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 39,
+      "column" : 5,
+      "context" : "Css-fontface/fonts/OldStandard-Bold.woff"
+    }, {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 40,
+      "column" : 5,
+      "context" : "Css-fontface/fonts/OldStandard-Italic.woff"
+    }, {
+      "fileName" : "Css-fontface/css/fonts.css",
+      "line" : 43,
+      "column" : 5,
+      "context" : "Css-fontface/fonts/OldStandard-Italic.woff"
+    }, {
+      "fileName" : "There are 23 additional locations for this message.",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "NCX-003",
+    "severity" : "USAGE",
+    "message" : "An .NCX file is required for TOC navigation on ePub v2 readers.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "Css-fontface/package.opf",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-058",
+    "severity" : "USAGE",
+    "message" : "Spine item has no TOC entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "Css-fontface/pages/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "Css-fontface/pages/cover.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one TOC entry."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf_expected_results.xml b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf_expected_results.xml
new file mode 100644
index 0000000..01ccada
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_idpf_expected_results.xml
@@ -0,0 +1,331 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jhove xmlns="http://hul.harvard.edu/ois/xml/ns/jhove" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="epubcheck" release="4.0.0-alpha11-SNAPSHOT" date="2012-10-31">
+ <date>2014-09-05T03:17:19+02:00</date>
+ <repInfo uri="font_encryption_idpf.epub">
+  <created>2014-09-05T01:49:14Z</created>
+  <lastModified>2012-01-20T12:47:00Z</lastModified>
+  <format>application/epub+zip</format>
+  <version>3.0</version>
+  <status>Well-formed</status>
+  <messages>
+   <message>OPF-058, HINT, [Spine item has no TOC entry reference.], Css-fontface/pages/toc.xhtml</message>
+   <message>ACC-008, HINT, [Navigation Document has no 'landmarks nav' element.], font_encryption_idpf.epub</message>
+   <message>ACC-013, HINT, [Content file contains at least one inline style declaration.], Css-fontface/pages/pg1.xhtml (23-56)</message>
+   <message>ACC-013, HINT, [Content file contains at least one inline style declaration.], Css-fontface/pages/pg1.xhtml (33-44)</message>
+   <message>ACC-013, HINT, [Content file contains at least one inline style declaration.], Css-fontface/pages/pg1.xhtml (11-51)</message>
+   <message>ACC-013, HINT, [Content file contains at least one inline style declaration.], Css-fontface/pages/pg1.xhtml (19-55)</message>
+   <message>ACC-013, HINT, [Content file contains at least one inline style declaration.], Css-fontface/pages/pg1.xhtml (15-52)</message>
+   <message>ACC-013, HINT, [Content file contains at least one inline style declaration.], Css-fontface/pages/pg2.xhtml (11-68)</message>
+   <message>ACC-013, HINT, [Content file contains at least one inline style declaration.], Css-fontface/pages/pg2.xhtml (35-61)</message>
+   <message>ACC-013, HINT, [Content file contains at least one inline style declaration.], Css-fontface/pages/pg2.xhtml (15-69)</message>
+   <message>ACC-013, HINT, [Content file contains at least one inline style declaration.], Css-fontface/pages/pg2.xhtml (19-72)</message>
+   <message>ACC-013, HINT, [Content file contains at least one inline style declaration.], Css-fontface/pages/pg2.xhtml (23-73)</message>
+   <message>ACC-013, HINT, [Content file contains at least one inline style declaration.], Css-fontface/pages/pg3.xhtml (11-69)</message>
+   <message>ACC-013, HINT, [Content file contains at least one inline style declaration.], Css-fontface/pages/pg3.xhtml (35-62)</message>
+   <message>ACC-013, HINT, [Content file contains at least one inline style declaration.], Css-fontface/pages/pg3.xhtml (15-70)</message>
+   <message>ACC-013, HINT, [Content file contains at least one inline style declaration.], Css-fontface/pages/pg3.xhtml (23-74)</message>
+   <message>ACC-013, HINT, [Content file contains at least one inline style declaration.], Css-fontface/pages/pg3.xhtml (19-73)</message>
+   <message>ACC-007, HINT, [Content Documents do not use 'epub:type' attributes for semantic inflection.], Css-fontface/pages/cover.xhtml</message>
+   <message>ACC-007, HINT, [Content Documents do not use 'epub:type' attributes for semantic inflection.], Css-fontface/pages/pg1.xhtml</message>
+   <message>ACC-007, HINT, [Content Documents do not use 'epub:type' attributes for semantic inflection.], Css-fontface/pages/pg2.xhtml</message>
+   <message>ACC-007, HINT, [Content Documents do not use 'epub:type' attributes for semantic inflection.], Css-fontface/pages/pg3.xhtml</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (2-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (3-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (4-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (5-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (9-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (10-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (11-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (12-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (16-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (17-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (18-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (19-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (23-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (24-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (25-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (26-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (30-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (31-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (32-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (33-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (37-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (38-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (39-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (40-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], Css-fontface/css/fonts.css (43-5)</message>
+   <message>CSS-028, HINT, [Use of Font-face declaration.], There are 23 additional locations for this message.</message>
+  </messages>
+  <mimeType>application/epub+zip</mimeType>
+  <properties>
+   <property>
+    <name>CharacterCount</name>
+    <values arity="Scalar" type="Long">
+     <value>2904</value>
+    </values>
+   </property>
+   <property>
+    <name>Language</name>
+    <values arity="Scalar" type="String">
+     <value>en-US</value>
+    </values>
+   </property>
+   <property>
+    <name>Info</name>
+    <values arity="List" type="Property">
+     <property>
+      <name>Identifier</name>
+      <values arity="Scalar" type="String">
+       <value>epub3.test</value>
+      </values>
+     </property>
+     <property>
+      <name>CreationDate</name>
+      <values arity="Scalar" type="Date">
+       <value>2014-09-05T01:49:14Z</value>
+      </values>
+     </property>
+     <property>
+      <name>ModDate</name>
+      <values arity="Scalar" type="Date">
+       <value>2012-01-20T12:47:00Z</value>
+      </values>
+     </property>
+     <property>
+      <name>Title</name>
+      <values arity="Scalar" type="String">
+       <value>External CSS @fontface Test</value>
+      </values>
+     </property>
+     <property>
+      <name>Creator</name>
+      <values arity="Scalar" type="String">
+       <value>David</value>
+      </values>
+     </property>
+     <property>
+      <name>Publisher</name>
+      <values arity="Scalar" type="String">
+       <value>Epub3 Team</value>
+      </values>
+     </property>
+    </values>
+   </property>
+   <property>
+    <name>Fonts</name>
+    <values arity="List" type="Property">
+     <property>
+      <name>Font</name>
+      <values arity="List" type="Property">
+       <property>
+        <name>FontName</name>
+        <values arity="Scalar" type="String">
+         <value>OS-obf-otf</value>
+        </values>
+       </property>
+       <property>
+        <name>FontFile</name>
+        <values arity="Scalar" type="Boolean">
+         <value>false</value>
+        </values>
+       </property>
+      </values>
+     </property>
+     <property>
+      <name>Font</name>
+      <values arity="List" type="Property">
+       <property>
+        <name>FontName</name>
+        <values arity="Scalar" type="String">
+         <value>OS-obf-otf,bold</value>
+        </values>
+       </property>
+       <property>
+        <name>FontFile</name>
+        <values arity="Scalar" type="Boolean">
+         <value>false</value>
+        </values>
+       </property>
+      </values>
+     </property>
+     <property>
+      <name>Font</name>
+      <values arity="List" type="Property">
+       <property>
+        <name>FontName</name>
+        <values arity="Scalar" type="String">
+         <value>OS-obf-otf,italic</value>
+        </values>
+       </property>
+       <property>
+        <name>FontFile</name>
+        <values arity="Scalar" type="Boolean">
+         <value>false</value>
+        </values>
+       </property>
+      </values>
+     </property>
+     <property>
+      <name>Font</name>
+      <values arity="List" type="Property">
+       <property>
+        <name>FontName</name>
+        <values arity="Scalar" type="String">
+         <value>OS-woff</value>
+        </values>
+       </property>
+       <property>
+        <name>FontFile</name>
+        <values arity="Scalar" type="Boolean">
+         <value>false</value>
+        </values>
+       </property>
+      </values>
+     </property>
+     <property>
+      <name>Font</name>
+      <values arity="List" type="Property">
+       <property>
+        <name>FontName</name>
+        <values arity="Scalar" type="String">
+         <value>OS-woff,bold</value>
+        </values>
+       </property>
+       <property>
+        <name>FontFile</name>
+        <values arity="Scalar" type="Boolean">
+         <value>false</value>
+        </values>
+       </property>
+      </values>
+     </property>
+     <property>
+      <name>Font</name>
+      <values arity="List" type="Property">
+       <property>
+        <name>FontName</name>
+        <values arity="Scalar" type="String">
+         <value>OS-woff,italic</value>
+        </values>
+       </property>
+       <property>
+        <name>FontFile</name>
+        <values arity="Scalar" type="Boolean">
+         <value>false</value>
+        </values>
+       </property>
+      </values>
+     </property>
+     <property>
+      <name>Font</name>
+      <values arity="List" type="Property">
+       <property>
+        <name>FontName</name>
+        <values arity="Scalar" type="String">
+         <value>OS-obf-woff</value>
+        </values>
+       </property>
+       <property>
+        <name>FontFile</name>
+        <values arity="Scalar" type="Boolean">
+         <value>false</value>
+        </values>
+       </property>
+      </values>
+     </property>
+     <property>
+      <name>Font</name>
+      <values arity="List" type="Property">
+       <property>
+        <name>FontName</name>
+        <values arity="Scalar" type="String">
+         <value>OS-obf-woff,bold</value>
+        </values>
+       </property>
+       <property>
+        <name>FontFile</name>
+        <values arity="Scalar" type="Boolean">
+         <value>false</value>
+        </values>
+       </property>
+      </values>
+     </property>
+     <property>
+      <name>Font</name>
+      <values arity="List" type="Property">
+       <property>
+        <name>FontName</name>
+        <values arity="Scalar" type="String">
+         <value>OS-obf-woff,italic</value>
+        </values>
+       </property>
+       <property>
+        <name>FontFile</name>
+        <values arity="Scalar" type="Boolean">
+         <value>false</value>
+        </values>
+       </property>
+      </values>
+     </property>
+     <property>
+      <name>Font</name>
+      <values arity="List" type="Property">
+       <property>
+        <name>FontName</name>
+        <values arity="Scalar" type="String">
+         <value>OS-otf</value>
+        </values>
+       </property>
+       <property>
+        <name>FontFile</name>
+        <values arity="Scalar" type="Boolean">
+         <value>false</value>
+        </values>
+       </property>
+      </values>
+     </property>
+     <property>
+      <name>Font</name>
+      <values arity="List" type="Property">
+       <property>
+        <name>FontName</name>
+        <values arity="Scalar" type="String">
+         <value>OS-otf,bold</value>
+        </values>
+       </property>
+       <property>
+        <name>FontFile</name>
+        <values arity="Scalar" type="Boolean">
+         <value>false</value>
+        </values>
+       </property>
+      </values>
+     </property>
+     <property>
+      <name>Font</name>
+      <values arity="List" type="Property">
+       <property>
+        <name>FontName</name>
+        <values arity="Scalar" type="String">
+         <value>OS-otf,italic</value>
+        </values>
+       </property>
+       <property>
+        <name>FontFile</name>
+        <values arity="Scalar" type="Boolean">
+         <value>false</value>
+        </values>
+       </property>
+      </values>
+     </property>
+    </values>
+   </property>
+   <property>
+    <name>hasEncryption</name>
+    <values arity="Scalar" type="Boolean">
+     <value>true</value>
+    </values>
+   </property>
+  </properties>
+ </repInfo>
+</jhove>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown/META-INF/container.xml
new file mode 100644
index 0000000..affa714
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+	<rootfiles>
+		<rootfile full-path="OEBPS/content.opf" media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown/META-INF/encryption.xml b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown/META-INF/encryption.xml
new file mode 100644
index 0000000..29d17cd
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown/META-INF/encryption.xml
@@ -0,0 +1,8 @@
+<encryption xmlns="urn:oasis:names:tc:opendocument:xmlns:container" xmlns:enc="http://www.w3.org/2001/04/xmlenc#" xmlns:deenc="http://ns.adobe.com/digitaleditions/enc">
+	<enc:EncryptedData>
+		<enc:EncryptionMethod Algorithm="http://unknownencryption"/>
+		<enc:CipherData>
+			<enc:CipherReference URI="OEBPS/fonts/ChaparralPro-Regular.otf"/>
+		</enc:CipherData>
+	</enc:EncryptedData>
+</encryption>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown/OEBPS/am-font-test.html b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown/OEBPS/am-font-test.html
new file mode 100644
index 0000000..b659f94
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown/OEBPS/am-font-test.html
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 //EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<title>am-font-test.html</title>
+		<link href="template.css" rel="stylesheet" type="text/css"/>
+	</head>
+	<body>
+		<div id="am-font-test.html" xml:lang="en-US">
+			<div class="Basic-Text-Frame">
+				<p class="Headline">This is Chaparral Pro </p>
+			</div>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown/OEBPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown/OEBPS/content.opf
new file mode 100644
index 0000000..4fd08d0
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown/OEBPS/content.opf
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<package xmlns="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/" unique-identifier="bookid" version="2.0">
+	<metadata>
+		<meta name="generator" content="Adobe InDesign"/>
+		<dc:title>Fonts Default Test</dc:title>
+		<dc:creator></dc:creator>
+		<dc:subject></dc:subject>
+		<dc:description></dc:description>
+		<dc:publisher>AMC</dc:publisher>
+		<dc:date>2011-07-16</dc:date>
+		<dc:source></dc:source>
+		<dc:relation></dc:relation>
+		<dc:coverage></dc:coverage>
+		<dc:rights></dc:rights>
+		<dc:language>en-US</dc:language>
+		<dc:identifier id="bookid">12345</dc:identifier>
+		<dc:identifier>urn:uuid:7C39D332-2638-4726-B5F6-D0619B58F487</dc:identifier>
+	</metadata>
+	<manifest>
+		<item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/>
+		<item id="css" href="template.css" media-type="text/css"/>
+		<item id="am-font-test" href="am-font-test.html" media-type="application/xhtml+xml"/>
+		<item id="ChaparralPro-Regular.otf" href="fonts/ChaparralPro-Regular.otf" media-type="application/x-font-otf"/>
+	</manifest>
+	<spine toc="ncx">
+		<itemref idref="am-font-test"/>
+	</spine>
+</package>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown/OEBPS/fonts/ChaparralPro-Regular.otf b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown/OEBPS/fonts/ChaparralPro-Regular.otf
new file mode 100644
index 0000000..316ebe8
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown/OEBPS/fonts/ChaparralPro-Regular.otf differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown/OEBPS/template.css b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown/OEBPS/template.css
new file mode 100644
index 0000000..451df0d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown/OEBPS/template.css
@@ -0,0 +1,35 @@
+ at font-face {
+	font-family : "Chaparral Pro";
+	font-style : normal;
+	font-weight : normal;
+	src : url("fonts/ChaparralPro-Regular.otf");
+}
+ at page {
+	margin : 0.5em;
+}
+tbody, thead, tfoot, tr, td, th {
+	border-style : inherit;
+	border-width : inherit;
+	border-color : inherit;
+}
+.leftFloat {
+	float : left;
+}
+.rightFloat {
+	float : right;
+}
+p.Headline {
+	font-family : "Chaparral Pro", serif;
+	font-weight : normal;
+	font-style : normal;
+	font-size : 2.17em;
+	text-decoration : none;
+	font-variant : normal;
+	line-height : 1.2;
+	text-align : left;
+	color : #000000;
+	text-indent : 0px;
+	margin : 0px;
+}
+div.Basic-Text-Frame {
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown/OEBPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown/OEBPS/toc.ncx
new file mode 100644
index 0000000..c7fb62f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown/OEBPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE ncx PUBLIC "-//NISO//DTD ncx 2005-1//EN" "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd">
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+	<head>
+		<meta name="dtb:uid" content="12345"/>
+		<meta name="dtb:depth" content="0"/>
+		<meta name="dtb:totalPageCount" content="0"/>
+		<meta name="dtb:maxPageNumber" content="0"/>
+	</head>
+	<docTitle>
+		<text/>	</docTitle>
+	<navMap>
+		<navPoint id="navpoint1" playOrder="1">
+			<navLabel>
+				<text>am-font-test</text>
+			</navLabel>
+			<content src="am-font-test.html"/>
+		</navPoint>
+	</navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown/mimetype b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown_expected_results.json
new file mode 100644
index 0000000..565c644
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/font_encryption_unknown_expected_results.json
@@ -0,0 +1,324 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/css/font_encryption_unknown.epub",
+    "filename" : "font_encryption_unknown.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:17:17",
+    "elapsedTime" : 61,
+    "nFatal" : 0,
+    "nError" : 2,
+    "nWarning" : 0,
+    "nUsage" : 5
+  },
+  "publication" : {
+    "publisher" : "AMC",
+    "title" : "Fonts Default Test",
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "12345",
+    "language" : "en-US",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "2.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 73,
+    "embeddedFonts" : [ "Chaparral Pro" ],
+    "refFonts" : [ ],
+    "hasEncryption" : true,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ChaparralPro-Regular.otf",
+    "fileName" : "OEBPS/fonts/ChaparralPro-Regular.otf",
+    "media_type" : "application/x-font-otf",
+    "compressedSize" : 13789,
+    "uncompressedSize" : 31804,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a6ee6fd5bfe8bc8f9a40d0293d37ba8282ec526b2a9e8ef39fe307970768",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "am-font-test",
+    "fileName" : "OEBPS/am-font-test.html",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 318,
+    "uncompressedSize" : 490,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "fe886bcabc47476a3b64a211c139f4cf52a886105d2771c5e77415ed912390",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OEBPS/template.css" ]
+  }, {
+    "id" : "css",
+    "fileName" : "OEBPS/template.css",
+    "media_type" : "text/css",
+    "compressedSize" : 301,
+    "uncompressedSize" : 625,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "13af71cd5c6b8b3d38f68c4ca922282c66adb8d99c94d9c80378423bd5ffba0",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OEBPS/fonts/ChaparralPro-Regular.otf" ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 187,
+    "uncompressedSize" : 265,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "259af1e3b24529de5ef971284f4fed5eefdb388a53cf3e52966c83e155ba3f",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:META-INF/encryption.xml",
+    "fileName" : "META-INF/encryption.xml",
+    "media_type" : null,
+    "compressedSize" : 238,
+    "uncompressedSize" : 397,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5276e83294222e47c9d9894a3242d74fd697c8cda94d1824e7ee04dad83b9",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OEBPS/content.opf",
+    "fileName" : "OEBPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 558,
+    "uncompressedSize" : 1177,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "eb84bb96341d1badff8dee2b3c3aa97dd4322b7a05619668dae2cd77902517",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OEBPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 337,
+    "uncompressedSize" : 631,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7789854a45c73f40274827a93456dbc47758ea2fcc6c9fd4b5db6f3a71cd5",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OEBPS/am-font-test.html" ]
+  } ],
+  "messages" : [ {
+    "ID" : "CSS-024",
+    "severity" : "USAGE",
+    "message" : "CSS class Selector is not used.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OEBPS/template.css",
+      "line" : 15,
+      "column" : 1,
+      "context" : ".leftFloat"
+    }, {
+      "fileName" : "OEBPS/template.css",
+      "line" : 18,
+      "column" : 1,
+      "context" : ".rightFloat"
+    } ],
+    "suggestion" : "Remove unused CSS selectors."
+  }, {
+    "ID" : "CSS-028",
+    "severity" : "USAGE",
+    "message" : "Use of Font-face declaration.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OEBPS/template.css",
+      "line" : 2,
+      "column" : 2,
+      "context" : "null"
+    }, {
+      "fileName" : "OEBPS/template.css",
+      "line" : 3,
+      "column" : 2,
+      "context" : "null"
+    }, {
+      "fileName" : "OEBPS/template.css",
+      "line" : 4,
+      "column" : 2,
+      "context" : "null"
+    }, {
+      "fileName" : "OEBPS/template.css",
+      "line" : 5,
+      "column" : 2,
+      "context" : "OEBPS/fonts/ChaparralPro-Regular.otf"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-004",
+    "severity" : "ERROR",
+    "message" : "Irregular DOCTYPE: found '-//W3C//DTD XHTML 1.1 //EN', expected '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \n\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OEBPS/am-font-test.html",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OEBPS/toc.ncx",
+      "line" : 3,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-020",
+    "severity" : "USAGE",
+    "message" : "Content file doesn't contain xml:lang attribute.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OEBPS/am-font-test.html",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-021",
+    "severity" : "USAGE",
+    "message" : "Content file doesn't contain lang attribute.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OEBPS/am-font-test.html",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-004",
+    "severity" : "ERROR",
+    "message" : "File 'OEBPS/fonts/ChaparralPro-Regular.otf' could not be decrypted.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "font_encryption_unknown.epub",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/keyframe/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/css/keyframe/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/keyframe/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/keyframe/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/css/keyframe/OPS/content.opf
new file mode 100644
index 0000000..82032db
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/keyframe/OPS/content.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Keyframe Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" href="external_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="style_tag_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" href="inline_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="style" href="style.css" media-type="text/css"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/keyframe/OPS/external_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/keyframe/OPS/external_css.xhtml
new file mode 100644
index 0000000..53fbaeb
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/keyframe/OPS/external_css.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Keyframe - External CSS</title>
+    <link rel="stylesheet" type="text/css" href="style.css"/>
+</head>
+<body>
+<div>
+<h1>Keyframe specified in external css file</h1>
+    <div class="animated">Hello</div>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/keyframe/OPS/inline_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/keyframe/OPS/inline_css.xhtml
new file mode 100644
index 0000000..d7a108a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/keyframe/OPS/inline_css.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+        <!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Keyframe - Inline CSS</title>
+</head>
+<body>
+<h1>Keyframe - Inline CSS</h1>
+<p>There isn't a way to have a keyframe in inline css.</p>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/keyframe/OPS/style.css b/src/test/resources/com/adobe/epubcheck/test/css/keyframe/OPS/style.css
new file mode 100644
index 0000000..44b35ae
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/keyframe/OPS/style.css
@@ -0,0 +1,38 @@
+.animated
+{
+    width:200px;
+    height:100px;
+    background:white;
+    color: black;
+    text-align: center;
+    padding: 10px;
+    font-size: xx-large;
+    animation:mymove 5s infinite;
+    -moz-animation:mymove 5s infinite; /* Firefox */
+    -webkit-animation:mymove 5s infinite; /* Safari and Chrome */
+    -o-animation:mymove 5s infinite; /* Opera */
+}
+
+ at keyframes mymove
+{
+from   {background:white; color:black;}
+to {background:black; color:white;}
+}
+
+ at -moz-keyframes mymove /* Firefox */
+{
+from   {background:white; color:black;}
+to {background:black; color:white;}
+}
+
+ at -webkit-keyframes mymove /* Safari and Chrome */
+{
+from   {background:white; color:black;}
+to {background:black; color:white;}
+}
+
+ at -o-keyframes mymove /* Opera */
+{
+from   {background:white; color:black;}
+to {background:black; color:white;}
+}
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/keyframe/OPS/style_tag_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/keyframe/OPS/style_tag_css.xhtml
new file mode 100644
index 0000000..4673f56
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/keyframe/OPS/style_tag_css.xhtml
@@ -0,0 +1,53 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Keyframe - Style Tag CSS</title>
+    <style>
+        div {
+            width: 100px;
+            height: 100px;
+            background: purple;
+            position: relative;
+            animation: mymove 5s infinite;
+            -moz-animation: mymove 5s infinite; /* Firefox */
+            -webkit-animation: mymove 5s infinite; /* Safari and Chrome */
+            -o-animation: mymove 5s infinite; /* Opera */
+        }
+
+        @keyframes mymove
+        {
+            0%   {top:0px;}
+            50%  {top:200px;}
+            100% {top:0px;}
+        }
+
+        @-moz-keyframes mymove /* Firefox */
+        {
+            0%   {top:0px;}
+            50%  {top:200px;}
+            100% {top:0px;}
+        }
+
+        @-webkit-keyframes mymove /* Safari and Chrome */
+        {
+            0%   {top:0px;}
+            50%  {top:200px;}
+            100% {top:0px;}
+        }
+
+        @-o-keyframes mymove /* Opera */
+        {
+            0%   {top:0px;}
+            50%  {top:200px;}
+            100% {top:0px;}
+        }
+    </style>
+</head>
+<body>
+<div></div>
+
+<p><b>Note:</b> This example does not work in Internet Explorer.</p>
+</body>
+</html>
+
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/keyframe/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/css/keyframe/OPS/toc.ncx
new file mode 100644
index 0000000..852b4df
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/keyframe/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Transform Style Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Keyframe - External CSS</text>
+      </navLabel>
+      <content src="external_css.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/keyframe/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/keyframe/OPS/toc.xhtml
new file mode 100644
index 0000000..27aaab4
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/keyframe/OPS/toc.xhtml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="external_css.xhtml">External CSS</a></li>
+        <li><a href="style_tag_css.xhtml">Style Tag</a> </li>
+        <li><a href="inline_css.xhtml">Inline Style</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/keyframe/mimetype b/src/test/resources/com/adobe/epubcheck/test/css/keyframe/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/keyframe/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/keyframe_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/css/keyframe_expected_results.json
new file mode 100644
index 0000000..a82798f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/keyframe_expected_results.json
@@ -0,0 +1,381 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/css/keyframe.epub",
+    "filename" : "keyframe.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:17:15",
+    "elapsedTime" : 310,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 7
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Keyframe Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 3,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 1374,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 416,
+    "uncompressedSize" : 1036,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "fb3a21bb7d4bf47b39ac35b867af253e5b9c47eaea426846997def2a108323",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 307,
+    "uncompressedSize" : 571,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "374f9fbdb3e6d4c8519624f1e6fd90cd64c626f0d8c7f2f87d47d2eb263f10",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/external_css.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/external_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 232,
+    "uncompressedSize" : 349,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "17169f82893dce686173cbe8fd78214cd19be63264d9ac2f885cfb92824cab",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/style.css" ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/style_tag_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 421,
+    "uncompressedSize" : 1273,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7bcdb5906ee758814aff79fcb27e74aad9e6f27057a76e6217ef9abe5e89f29",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page03",
+    "fileName" : "OPS/inline_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 190,
+    "uncompressedSize" : 283,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1553ece79533d34eae296a5bdef7385deb93d71696995dda83fe9f7303abbd5",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : 3,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style",
+    "fileName" : "OPS/style.css",
+    "media_type" : "text/css",
+    "compressedSize" : 251,
+    "uncompressedSize" : 820,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e235bbcdfe64a7db804b16c7ed3c81229c9975c4faa0fd7f417d84bddf2fee",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 272,
+    "uncompressedSize" : 474,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "757651f9ad2c519ab51d4fe19ee617ed850292badc94389d55ecfc38bff7e87",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/style_tag_css.xhtml", "OPS/inline_css.xhtml", "OPS/external_css.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "keyframe.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-014",
+    "severity" : "USAGE",
+    "message" : "CSS Selector font-size attribute value does not use a relative size.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/style.css",
+      "line" : 9,
+      "column" : 5,
+      "context" : "font-size : xx-large ;"
+    } ],
+    "suggestion" : "Acceptable values include percentages, em multiples, 'larger', 'smaller', 'normal' or 'inherit'."
+  }, {
+    "ID" : "CSS-009",
+    "severity" : "USAGE",
+    "message" : "Use of certain CSS such as Columns, Transforms, Transitions, box-sizing or KeyFrames can cause pagination issues.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/style.css",
+      "line" : 16,
+      "column" : 1,
+      "context" : "@keyframes mymove"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 22,
+      "column" : 1,
+      "context" : "@-moz-keyframes mymove"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 28,
+      "column" : 1,
+      "context" : "@-webkit-keyframes mymove"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 34,
+      "column" : 1,
+      "context" : "@-o-keyframes mymove"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 6,
+      "column" : 12,
+      "context" : "div {\n            width: 100px;\n            height: 100px;\n            background: purple;\n            position: relative;\n            animation: mymove 5s infinite;\n            -moz-animation: mymove 5s infinite; /* Firefox */\n            -webkit-animation: mymove 5s infinite; /* Safari and Chrome */\n            -o-animation: mymove 5s infinite; /* Opera */\n        }\n\n        @keyframes mymove\n        {\n            0%   {top:0px;}\n            50%  {top:2 [...]
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 18,
+      "column" : 9,
+      "context" : "@keyframes mymove"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 25,
+      "column" : 9,
+      "context" : "@-moz-keyframes mymove"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 32,
+      "column" : 9,
+      "context" : "@-webkit-keyframes mymove"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 39,
+      "column" : 9,
+      "context" : "@-o-keyframes mymove"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-038",
+    "severity" : "USAGE",
+    "message" : "Ensure b, i, em, and strong elements are used in compliance with W3C HTML5 directives.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 50,
+      "column" : 7,
+      "context" : "b"
+    } ],
+    "suggestion" : "CSS styles are usually more appropriate for italics or bold text."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/inline_css.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/style_tag_css.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/OPS/content.opf
new file mode 100644
index 0000000..970fc60
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/OPS/content.opf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="2.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Multiple CSS References Sample Book (version 2.0)</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="external_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="style_tag_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" href="inline_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="style" href="style.css" media-type="text/css"/>
+    <item id="style2" href="style2.css" media-type="text/css"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/OPS/external_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/OPS/external_css.xhtml
new file mode 100644
index 0000000..7001c01
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/OPS/external_css.xhtml
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Multiple Stylesheet References - External CSS</title>
+    <link rel="stylesheet" type="text/css" href="style.css"/>
+    <link rel="stylesheet" type="text/css" href="style2.css"/>
+</head>
+<body>
+
+<h1>Multiple Stylesheet References specified</h1>
+
+<div class="used">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+</div>
+
+<div class="otherstyle">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/OPS/inline_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/OPS/inline_css.xhtml
new file mode 100644
index 0000000..dd07c98
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/OPS/inline_css.xhtml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Multiple - Inline CSS</title>
+</head>
+<body>
+<h1>Multipl - Inline CSS</h1>
+
+<p>Multiple stylesheet references does not apply to inline styles.</p>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/OPS/style.css b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/OPS/style.css
new file mode 100644
index 0000000..62644b8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/OPS/style.css
@@ -0,0 +1,4 @@
+.used {
+    font-style: italic;
+    color: #006400;
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/OPS/style2.css b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/OPS/style2.css
new file mode 100644
index 0000000..3ba4415
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/OPS/style2.css
@@ -0,0 +1,4 @@
+.otherstyle {
+    font-weight: bold;
+    color:#1e90ff;
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/OPS/style_tag_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/OPS/style_tag_css.xhtml
new file mode 100644
index 0000000..a37366e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/OPS/style_tag_css.xhtml
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Multiple Stylesheet References - Style Tag CSS</title>
+    <style type="text/css">
+        .used {
+            font-style: italic;
+            color: #006400;
+        }
+    </style>
+    <link rel="stylesheet" type="text/css" href="style2.css"/>
+</head>
+<body>
+
+<div class="used">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+</div>
+<div class="otherstyle">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+</div>
+
+</body>
+</html>
+
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/OPS/toc.ncx
new file mode 100644
index 0000000..ad464c8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Unused Style Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>External CSS</text>
+      </navLabel>
+      <content src="external_css.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/mimetype b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2_expected_results.json
new file mode 100644
index 0000000..6bbc88d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub2_expected_results.json
@@ -0,0 +1,145 @@
+{
+    "checker" : {
+        "checkerVersion" : "3.0.32-SNAPSHOT",
+        "checkDate" : "02-04-2013 11:00:01",
+        "elapsedTime" : 2,
+        "nFatal" : 0,
+        "nError" : 0,
+        "nWarning" : 0,
+        "nUsage" : 1
+    },
+    "publication" : {
+        "path" : "~/work/EpubCheck/com.adobe.epubcheck/multiple_epub2.epub",
+        "filename" : "multiple_epub2.epub",
+        "publisher" : null,
+        "title" : "Multiple CSS References Sample Book (version 2.0)",
+        "creator" : [ ],
+        "date" : null,
+        "subject" : [ ],
+        "description" : null,
+        "rights" : null,
+        "identifier" : "000000000000000000",
+        "language" : "en",
+        "nSpines" : 3,
+        "checkSum" : 0,
+        "ePubVersion" : "2.0",
+        "isScripted" : false,
+        "hasFixedFormat" : false,
+        "isBackwardCompatible" : true
+    },
+    "items" : [ {
+        "id" : "ncx",
+        "fileName" : "OPS/toc.ncx",
+        "media_type" : "application/x-dtbncx+xml",
+        "compressedSize" : 296,
+        "uncompressedSize" : 557,
+        "compressionMethod" : "Deflated",
+        "checkSum" : 0,
+        "isSpineItem" : false,
+        "isLinear" : false,
+        "isHTML5" : false,
+        "isFixedFormat" : false,
+        "isScripted" : false,
+        "scriptSrc" : false,
+        "scriptTag" : false,
+        "scriptInline" : false,
+        "referencedItems" : [ "OPS/external_css.xhtml" ]
+    }, {
+        "id" : "page01",
+        "fileName" : "OPS/external_css.xhtml",
+        "media_type" : "application/xhtml+xml",
+        "compressedSize" : 731,
+        "uncompressedSize" : 2181,
+        "compressionMethod" : "Deflated",
+        "checkSum" : 0,
+        "isSpineItem" : true,
+        "isLinear" : true,
+        "isHTML5" : false,
+        "isFixedFormat" : false,
+        "isScripted" : false,
+        "scriptSrc" : false,
+        "scriptTag" : false,
+        "scriptInline" : false,
+        "referencedItems" : [ "OPS/style.css", "OPS/style2.css" ]
+    }, {
+        "id" : "page02",
+        "fileName" : "OPS/style_tag_css.xhtml",
+        "media_type" : "application/xhtml+xml",
+        "compressedSize" : 768,
+        "uncompressedSize" : 2197,
+        "compressionMethod" : "Deflated",
+        "checkSum" : 0,
+        "isSpineItem" : true,
+        "isLinear" : true,
+        "isHTML5" : false,
+        "isFixedFormat" : false,
+        "isScripted" : false,
+        "scriptSrc" : false,
+        "scriptTag" : false,
+        "scriptInline" : false,
+        "referencedItems" : [ "OPS/style2.css" ]
+    }, {
+        "id" : "page03",
+        "fileName" : "OPS/inline_css.xhtml",
+        "media_type" : "application/xhtml+xml",
+        "compressedSize" : 195,
+        "uncompressedSize" : 287,
+        "compressionMethod" : "Deflated",
+        "checkSum" : 0,
+        "isSpineItem" : true,
+        "isLinear" : true,
+        "isHTML5" : false,
+        "isFixedFormat" : false,
+        "isScripted" : false,
+        "scriptSrc" : false,
+        "scriptTag" : false,
+        "scriptInline" : false,
+        "referencedItems" : [ ]
+    }, {
+        "id" : "style",
+        "fileName" : "OPS/style.css",
+        "media_type" : "text/css",
+        "compressedSize" : 51,
+        "uncompressedSize" : 54,
+        "compressionMethod" : "Deflated",
+        "checkSum" : 0,
+        "isSpineItem" : false,
+        "isLinear" : false,
+        "isHTML5" : false,
+        "isFixedFormat" : false,
+        "isScripted" : false,
+        "scriptSrc" : false,
+        "scriptTag" : false,
+        "scriptInline" : false,
+        "referencedItems" : [ ]
+    }, {
+        "id" : "style2",
+        "fileName" : "OPS/style2.css",
+        "media_type" : "text/css",
+        "compressedSize" : 55,
+        "uncompressedSize" : 58,
+        "compressionMethod" : "Deflated",
+        "checkSum" : 0,
+        "isSpineItem" : false,
+        "isLinear" : false,
+        "isHTML5" : false,
+        "isFixedFormat" : false,
+        "isScripted" : false,
+        "scriptSrc" : false,
+        "scriptTag" : false,
+        "scriptInline" : false,
+        "referencedItems" : [ ]
+    } ],
+    "messages" : [ {
+        "ID" : "CTC-049",
+        "severity" : "USAGE",
+        "message" : "Multiple CSS for document found.",
+        "locations" : [ {
+            "fileName" : "external_css.xhtml",
+            "line" : -1,
+            "column" : -1,
+            "context" : null
+        } ],
+        "suggestion" : null
+    } ]
+}
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/content.opf
new file mode 100644
index 0000000..fb79bbc
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/content.opf
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Multiple CSS References Sample Book (version 3.0)</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" href="external_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="style_tag_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" href="inline_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="style" href="style.css" media-type="text/css"/>
+    <item id="style2" href="style2.css" media-type="text/css"/>
+    <item id="style3" href="styleUTF32.css" media-type="text/css"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/external_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/external_css.xhtml
new file mode 100644
index 0000000..fae357d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/external_css.xhtml
@@ -0,0 +1,47 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Multiple Stylesheet References - External CSS</title>
+    <link rel="stylesheet" type="text/css" href="style.css"/>
+    <link rel="stylesheet" type="text/css" href="style2.css"/>
+    <link rel="stylesheet" type="text/css" href="styleUTF32.css"/>
+</head>
+<body>
+
+<h1>Multiple Stylesheet References specified</h1>
+
+<div class="used">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+</div>
+
+<div class="otherstyle">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+</div>
+
+<div class="anotherstyle">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/inline_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/inline_css.xhtml
new file mode 100644
index 0000000..2d68d19
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/inline_css.xhtml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Unused - Inline CSS</title>
+</head>
+<body>
+<h1>Unused - Inline CSS</h1>
+
+<p>Unused css does not apply to inline styles.</p>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/style.css b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/style.css
new file mode 100644
index 0000000..62644b8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/style.css
@@ -0,0 +1,4 @@
+.used {
+    font-style: italic;
+    color: #006400;
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/style2.css b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/style2.css
new file mode 100644
index 0000000..3ba4415
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/style2.css
@@ -0,0 +1,4 @@
+.otherstyle {
+    font-weight: bold;
+    color:#1e90ff;
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/styleUTF32.css b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/styleUTF32.css
new file mode 100644
index 0000000..29da134
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/styleUTF32.css differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/style_tag_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/style_tag_css.xhtml
new file mode 100644
index 0000000..a37366e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/style_tag_css.xhtml
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Multiple Stylesheet References - Style Tag CSS</title>
+    <style type="text/css">
+        .used {
+            font-style: italic;
+            color: #006400;
+        }
+    </style>
+    <link rel="stylesheet" type="text/css" href="style2.css"/>
+</head>
+<body>
+
+<div class="used">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+</div>
+<div class="otherstyle">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+</div>
+
+</body>
+</html>
+
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/toc.ncx
new file mode 100644
index 0000000..ad464c8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Unused Style Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>External CSS</text>
+      </navLabel>
+      <content src="external_css.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/toc.xhtml
new file mode 100644
index 0000000..1a32717
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/OPS/toc.xhtml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="external_css.xhtml">External CSS</a></li>
+        <li><a href="style_tag_css.xhtml">Style Tag</a></li>
+        <li><a href="inline_css.xhtml">Inline Style</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/mimetype b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3_expected_results.json
new file mode 100644
index 0000000..de55dfd
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/multiple_epub3_expected_results.json
@@ -0,0 +1,383 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/css/multiple_epub3.epub",
+    "filename" : "multiple_epub3.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:17:16",
+    "elapsedTime" : 252,
+    "nFatal" : 0,
+    "nError" : 1,
+    "nWarning" : 0,
+    "nUsage" : 5
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Multiple CSS References Sample Book (version 3.0)",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 3,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 4818,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 454,
+    "uncompressedSize" : 1197,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1732adf5b638fe28372d3241a9111dc64ae4c92b4d28c3a8670af1414e563cd",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 296,
+    "uncompressedSize" : 557,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "487ec57fbe6ea6f31bf33a1215b02587252de97e15d8591a512fcdc490a26",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/external_css.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/external_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 755,
+    "uncompressedSize" : 3151,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1645c29ed71825626891e7c7c6c3e53c8af17959c1f96d563076e0c96fd8af6a",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/style.css", "OPS/styleUTF32.css", "OPS/style2.css" ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/style_tag_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 768,
+    "uncompressedSize" : 2197,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1ef089e97e69dcc38ebd0a64df4f65a723c5a385e2140324a456e36b1d35e2",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/style2.css" ]
+  }, {
+    "id" : "page03",
+    "fileName" : "OPS/inline_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 179,
+    "uncompressedSize" : 264,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7b4abb2880bb98353fd0495856b9239846d1e6e61f471369095b607216081",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : 3,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style",
+    "fileName" : "OPS/style.css",
+    "media_type" : "text/css",
+    "compressedSize" : 51,
+    "uncompressedSize" : 54,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f34f25e2a1f6e02e5c5e20e75e3f7f744845ec6ad54ffbae69d3b4f86b66daa",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style2",
+    "fileName" : "OPS/style2.css",
+    "media_type" : "text/css",
+    "compressedSize" : 55,
+    "uncompressedSize" : 58,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "11bd43365912d8948339a3e1dd73b8f7434dd7c1bb4b2bf94dcb44c84dc96",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style3",
+    "fileName" : "OPS/styleUTF32.css",
+    "media_type" : "text/css",
+    "compressedSize" : 99,
+    "uncompressedSize" : 272,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "aeda1f99aaacf8d5a89c2be8280f2b4fb3080bd354bcf6c237c53bc938faa9",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 270,
+    "uncompressedSize" : 473,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "465d7d734aa539b2dc4b402dea6f4e8d96bdeac452a1d5743b6ccdaa29f4c",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/style_tag_css.xhtml", "OPS/inline_css.xhtml", "OPS/external_css.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "multiple_epub3.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-004",
+    "severity" : "ERROR",
+    "message" : "Only UTF-8 and UTF-16 encodings are allowed, detected utf-32be BOM.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/styleUTF32.css",
+      "line" : -1,
+      "column" : -1,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-012",
+    "severity" : "USAGE",
+    "message" : "Document links to multiple CSS files.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_css.xhtml",
+      "line" : 6,
+      "column" : 62,
+      "context" : "style.css"
+    }, {
+      "fileName" : "OPS/external_css.xhtml",
+      "line" : 7,
+      "column" : 63,
+      "context" : "style2.css"
+    }, {
+      "fileName" : "OPS/external_css.xhtml",
+      "line" : 8,
+      "column" : 67,
+      "context" : "styleUTF32.css"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/inline_css.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/style_tag_css.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/transform/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/css/transform/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/transform/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/transform/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/css/transform/OPS/content.opf
new file mode 100644
index 0000000..71a8b80
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/transform/OPS/content.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Transform Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" href="external_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="style_tag_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" href="inline_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="style" href="style.css" media-type="text/css"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/transform/OPS/external_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/transform/OPS/external_css.xhtml
new file mode 100644
index 0000000..8656762
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/transform/OPS/external_css.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Rotate - External CSS</title>
+    <link rel="stylesheet" type="text/css" href="style.css"/>
+</head>
+<body>
+<div>
+<h1>Rotate specified in external css file</h1>
+    <div class="rotateX">Rotate X</div>
+    <div class="rotateY">Rotate Y</div>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/transform/OPS/inline_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/transform/OPS/inline_css.xhtml
new file mode 100644
index 0000000..aa4e2f3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/transform/OPS/inline_css.xhtml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+        <!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Rotate - Inline CSS</title>
+</head>
+<body>
+<h1>Rotate - Inline CSS</h1>
+<div>
+<div style="-webkit-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px">Rotate 120° Chrome</div>
+<div style="-ms-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px">Rotate 120° IE</div>
+</div>
+<div>
+<div style="-moz-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px">Rotate 120° Firefox</div>
+<div style="-o-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px">Rotate 120° Opera</div>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/transform/OPS/style.css b/src/test/resources/com/adobe/epubcheck/test/css/transform/OPS/style.css
new file mode 100644
index 0000000..cfd461f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/transform/OPS/style.css
@@ -0,0 +1,9 @@
+.rotateY {
+    background-color:lightblue;
+    -webkit-transform:rotateY(180deg);
+}
+
+.rotateX {
+    background-color:lightblue;
+    -webkit-transform:rotateX(90deg);
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/transform/OPS/style_tag_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/transform/OPS/style_tag_css.xhtml
new file mode 100644
index 0000000..7cfbae1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/transform/OPS/style_tag_css.xhtml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Transform - Style Tag</title>
+    <style type="text/css">
+        .rotateY {
+            background-color:yellow;
+            -webkit-transform:rotateY(180deg);
+        }
+
+        .rotateX {
+            background-color:yellow;
+            -webkit-transform:rotateX(180deg);
+        }
+    </style>
+</head>
+<body>
+<div>
+    <h1>Rotate - Style Tag</h1>
+
+    <div class="rotateX">Rotate X</div>
+    <div class="rotateY">Rotate Y</div>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/transform/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/css/transform/OPS/toc.ncx
new file mode 100644
index 0000000..b88cb96
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/transform/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Transform Style Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Rotate - External CSS</text>
+      </navLabel>
+      <content src="external_css.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/transform/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/transform/OPS/toc.xhtml
new file mode 100644
index 0000000..27aaab4
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/transform/OPS/toc.xhtml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="external_css.xhtml">External CSS</a></li>
+        <li><a href="style_tag_css.xhtml">Style Tag</a> </li>
+        <li><a href="inline_css.xhtml">Inline Style</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/transform/mimetype b/src/test/resources/com/adobe/epubcheck/test/css/transform/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/transform/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/transform_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/css/transform_expected_results.json
new file mode 100644
index 0000000..2d7eb40
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/transform_expected_results.json
@@ -0,0 +1,364 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/css/transform.epub",
+    "filename" : "transform.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:17:10",
+    "elapsedTime" : 3762,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 6
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Transform Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 3,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 648,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 416,
+    "uncompressedSize" : 1037,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "aebc85c8f66a9883315649a5d951663614ff385634bcbaae6f617e4505368a3",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 305,
+    "uncompressedSize" : 569,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "44c9adde7f138641ee9dcd4ccc218a1424d2599b9bff2d602aa39fcef1c3e",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/external_css.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/external_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 235,
+    "uncompressedSize" : 387,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "315d5d9ce6d29250e590cc3c714dc811fec88da5295d32de24dacf2cf5d367c",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/style.css" ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/style_tag_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 263,
+    "uncompressedSize" : 563,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a4d45bfbd24ab97ff2bdaa17276c1bc88aa8a5aadbf06f3b28b2f5db91612f6",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page03",
+    "fileName" : "OPS/inline_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 296,
+    "uncompressedSize" : 822,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "8d961afefd6889d6a3b3df1d0a159c6abad4f957874ffc4d774c342b20489c",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : 3,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style",
+    "fileName" : "OPS/style.css",
+    "media_type" : "text/css",
+    "compressedSize" : 89,
+    "uncompressedSize" : 168,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "fe2ec1a6557123bdc9ef17ee654387a6fa24167bf03b9f12183d446d4dc4e4",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 272,
+    "uncompressedSize" : 474,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "757651f9ad2c519ab51d4fe19ee617ed850292badc94389d55ecfc38bff7e87",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/style_tag_css.xhtml", "OPS/inline_css.xhtml", "OPS/external_css.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "transform.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-013",
+    "severity" : "USAGE",
+    "message" : "Content file contains at least one inline style declaration.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 10,
+      "column" : 119,
+      "context" : "-webkit-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px"
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 11,
+      "column" : 115,
+      "context" : "-ms-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px"
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 14,
+      "column" : 116,
+      "context" : "-moz-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px"
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 15,
+      "column" : 114,
+      "context" : "-o-transform:rotate(120deg);width: 100px;height: 100px;background-color: purple;margin-bottom: 50px"
+    } ],
+    "suggestion" : "Inline styles are not compatible with accessibility settings and display personalization. Use CSS Styles instead."
+  }, {
+    "ID" : "CSS-009",
+    "severity" : "USAGE",
+    "message" : "Use of certain CSS such as Columns, Transforms, Transitions, box-sizing or KeyFrames can cause pagination issues.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/style.css",
+      "line" : 3,
+      "column" : 23,
+      "context" : "-webkit-transform : rotatey(180deg) ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 8,
+      "column" : 23,
+      "context" : "-webkit-transform : rotatex(90deg) ;"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 5,
+      "column" : 28,
+      "context" : ".rotateY {\n            background-color:yellow;\n            -webkit-transform:rotateY(180deg);\n        }\n\n        .rotateX {\n            background-color:yellow;\n            -webkit-transform:rotateX(180deg);\n        }"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 8,
+      "column" : 31,
+      "context" : "-webkit-transform : rotatey(180deg) ;"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 13,
+      "column" : 31,
+      "context" : "-webkit-transform : rotatex(180deg) ;"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/inline_css.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/style_tag_css.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/transition/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/css/transition/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/transition/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/transition/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/css/transition/OPS/content.opf
new file mode 100644
index 0000000..6f905bd
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/transition/OPS/content.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Transition Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" href="external_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="style_tag_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" href="inline_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="style" href="style.css" media-type="text/css"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/transition/OPS/external_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/transition/OPS/external_css.xhtml
new file mode 100644
index 0000000..3067496
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/transition/OPS/external_css.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Transition - External CSS</title>
+    <link rel="stylesheet" type="text/css" href="style.css"/>
+</head>
+<body>
+<div>
+<h1>Transition specified in external css file</h1>
+    <div class="transitionColor">Color changes on hover</div>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/transition/OPS/inline_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/transition/OPS/inline_css.xhtml
new file mode 100644
index 0000000..bd64ea1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/transition/OPS/inline_css.xhtml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+        <!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Transition - Inline CSS</title>
+    <style>
+        div:hover{letter-spacing: 10px}
+    </style>
+</head>
+<body>
+<h1>Transition - Inline CSS</h1>
+<div style="-webkit-transition:letter-spacing 2s">
+   abcdefghijklmnopqrstuvwxyz
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/transition/OPS/style.css b/src/test/resources/com/adobe/epubcheck/test/css/transition/OPS/style.css
new file mode 100644
index 0000000..1885988
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/transition/OPS/style.css
@@ -0,0 +1,10 @@
+.transitionColor {
+    background-color: yellow;
+    -webkit-transition-property: background-color;
+    -webkit-transition-duration: 2s;
+    -webkit-transition-timing-function: ease-in;
+}
+
+.transitionColor:hover {
+    background-color: blue
+}
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/transition/OPS/style_tag_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/transition/OPS/style_tag_css.xhtml
new file mode 100644
index 0000000..6d4ba98
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/transition/OPS/style_tag_css.xhtml
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Transition - Style Tag CSS</title>
+    <style>
+        div
+        {
+            width:100px;
+            height:100px;
+            background:red;
+            transition:width 2s;
+            -moz-transition:width 2s; /* Firefox 4 */
+            -webkit-transition:width 2s; /* Safari and Chrome */
+            -o-transition:width 2s; /* Opera */
+        }
+
+        div:hover
+        {
+            width:300px;
+        }
+    </style>
+</head>
+<body>
+
+<p><b>Note:</b> This example does not work in Internet Explorer.</p>
+
+<div></div>
+
+<p>Hover over the div element above, to see the transition effect.</p>
+
+</body>
+</html>
+
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/transition/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/css/transition/OPS/toc.ncx
new file mode 100644
index 0000000..8bd37ba
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/transition/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Transform Style Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Transition - External CSS</text>
+      </navLabel>
+      <content src="external_css.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/transition/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/transition/OPS/toc.xhtml
new file mode 100644
index 0000000..27aaab4
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/transition/OPS/toc.xhtml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="external_css.xhtml">External CSS</a></li>
+        <li><a href="style_tag_css.xhtml">Style Tag</a> </li>
+        <li><a href="inline_css.xhtml">Inline Style</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/transition/mimetype b/src/test/resources/com/adobe/epubcheck/test/css/transition/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/transition/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/transition_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/css/transition_expected_results.json
new file mode 100644
index 0000000..be6c21d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/transition_expected_results.json
@@ -0,0 +1,381 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/css/transition.epub",
+    "filename" : "transition.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:17:15",
+    "elapsedTime" : 332,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 7
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Transition Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 3,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 896,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 415,
+    "uncompressedSize" : 1038,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "449b6d29dd3fdc9bb118e4d8e2e3df3b516abb75a92eaf7e27d1277b32c92ea",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 304,
+    "uncompressedSize" : 573,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "8c8bef3d9ce34e9ab9b3c4050879d86b161b8a1f8ebb4aec9fad1160eee47",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/external_css.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/external_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 240,
+    "uncompressedSize" : 377,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "da67248849677ce9fd8577c55fe555f5776c62ac5fd4025616ea18aa003ac2",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/style.css" ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/style_tag_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 369,
+    "uncompressedSize" : 747,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "8b6f5567b807ed1623cbff35c95b5833f47e291416b5b8848b4be4a3bd495",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page03",
+    "fileName" : "OPS/inline_css.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 239,
+    "uncompressedSize" : 381,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b2ea71b84812932c7867d2c0bde36f792bff6183c718db54ada6841fc7b065",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : 3,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style",
+    "fileName" : "OPS/style.css",
+    "media_type" : "text/css",
+    "compressedSize" : 123,
+    "uncompressedSize" : 242,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "6bfd38b8709a833a3676be469ab3507257ce3d15f2d920e8cf0a4affc9653c0",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 272,
+    "uncompressedSize" : 474,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "757651f9ad2c519ab51d4fe19ee617ed850292badc94389d55ecfc38bff7e87",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/style_tag_css.xhtml", "OPS/inline_css.xhtml", "OPS/external_css.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "transition.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-013",
+    "severity" : "USAGE",
+    "message" : "Content file contains at least one inline style declaration.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 12,
+      "column" : 51,
+      "context" : "-webkit-transition:letter-spacing 2s"
+    } ],
+    "suggestion" : "Inline styles are not compatible with accessibility settings and display personalization. Use CSS Styles instead."
+  }, {
+    "ID" : "CSS-009",
+    "severity" : "USAGE",
+    "message" : "Use of certain CSS such as Columns, Transforms, Transitions, box-sizing or KeyFrames can cause pagination issues.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_css.xhtml",
+      "line" : 12,
+      "column" : 51,
+      "context" : "-webkit-transition:letter-spacing 2s"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 3,
+      "column" : 5,
+      "context" : "-webkit-transition-property : background-color ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 4,
+      "column" : 5,
+      "context" : "-webkit-transition-duration : 2s ;"
+    }, {
+      "fileName" : "OPS/style.css",
+      "line" : 5,
+      "column" : 5,
+      "context" : "-webkit-transition-timing-function : ease-in ;"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 6,
+      "column" : 12,
+      "context" : "div\n        {\n            width:100px;\n            height:100px;\n            background:red;\n            transition:width 2s;\n            -moz-transition:width 2s; /* Firefox 4 */\n            -webkit-transition:width 2s; /* Safari and Chrome */\n            -o-transition:width 2s; /* Opera */\n        }\n\n        div:hover\n        {\n            width:300px;\n        }"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 12,
+      "column" : 13,
+      "context" : "transition : width 2s ;"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 13,
+      "column" : 13,
+      "context" : "-moz-transition : width 2s ;"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 14,
+      "column" : 13,
+      "context" : "-webkit-transition : width 2s ;"
+    }, {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 15,
+      "column" : 13,
+      "context" : "-o-transition : width 2s ;"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-038",
+    "severity" : "USAGE",
+    "message" : "Ensure b, i, em, and strong elements are used in compliance with W3C HTML5 directives.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/style_tag_css.xhtml",
+      "line" : 26,
+      "column" : 7,
+      "context" : "b"
+    } ],
+    "suggestion" : "CSS styles are usually more appropriate for italics or bold text."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/inline_css.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/style_tag_css.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/OPS/content.opf
new file mode 100644
index 0000000..090a961
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/OPS/content.opf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="2.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Unused css Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="external_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="style_tag_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" href="inline_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="style" href="style.css" media-type="text/css"/>
+    <item id="style2" href="unused.css" media-type="text/css"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/OPS/external_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/OPS/external_css.xhtml
new file mode 100644
index 0000000..e00ee40
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/OPS/external_css.xhtml
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Unused - External CSS</title>
+    <link rel="stylesheet" type="text/css" href="style.css"/>
+</head>
+<body>
+
+<h1>Unused class specified in external css file</h1>
+
+<div class="used">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+</div>
+
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/OPS/inline_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/OPS/inline_css.xhtml
new file mode 100644
index 0000000..2d68d19
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/OPS/inline_css.xhtml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Unused - Inline CSS</title>
+</head>
+<body>
+<h1>Unused - Inline CSS</h1>
+
+<p>Unused css does not apply to inline styles.</p>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/OPS/style.css b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/OPS/style.css
new file mode 100644
index 0000000..4726984
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/OPS/style.css
@@ -0,0 +1,9 @@
+.used {
+    font-style: italic;
+    color: #006400;
+}
+
+.unused {
+    font-weight: bold;
+    color:#1e90ff;
+}
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/OPS/style_tag_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/OPS/style_tag_css.xhtml
new file mode 100644
index 0000000..10e8acf
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/OPS/style_tag_css.xhtml
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Unused - Style Tag CSS</title>
+    <style type="text/css">
+        .used {
+            font-style: italic;
+            color: #006400;
+        }
+
+        .unused {
+            font-weight: bold;
+            color:#1e90ff;
+        }
+    </style>
+</head>
+<body>
+
+<div class="used">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+</div>
+
+</body>
+</html>
+
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/OPS/toc.ncx
new file mode 100644
index 0000000..ad464c8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Unused Style Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>External CSS</text>
+      </navLabel>
+      <content src="external_css.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/OPS/unused.css b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/OPS/unused.css
new file mode 100644
index 0000000..3ba4415
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/OPS/unused.css
@@ -0,0 +1,4 @@
+.otherstyle {
+    font-weight: bold;
+    color:#1e90ff;
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/mimetype b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2_expected_results.json
new file mode 100644
index 0000000..e8f1883
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub2_expected_results.json
@@ -0,0 +1,39 @@
+{
+    "epubFileName" : "unused_epub2.epub",
+    "processStartDateTime" : 1358970215604,
+    "processEndDateTime" : 1358970216115,
+    "epubFileSizeCompressed" : "0.0",
+    "epubFileSizeUncompressed" : null,
+    "numberOfFiles" : null,
+    "checkedWithEpubVersion" : null,
+    "listOfMessage": [
+      {
+          "severity":  "WARNING",
+          "messageUI": "CSS-07",
+          "messageShortDescription": "Unused css class",
+          "messageLongCntxDescription": "Class 'unused' was declared but never used.",
+          "sourceErroneousFileName": "OPS/style_tag_css.xhtml",
+          "sourceErroneousLineNumber": "12",
+          "sourceErroneousColumnNumber": "9",
+          "sourceLineText": null,
+          "messageMainCategory": "General",
+          "messageSubCategory": "CSS"
+      },
+      {
+          "severity": "WARNING",
+          "messageUI": "CSS-07",
+          "messageShortDescription": "Unused css class",
+          "messageLongCntxDescription": "Class 'unused' was declared but never used.",
+          "sourceErroneousFileName": "OPS/style.css",
+          "sourceErroneousLineNumber": "6",
+          "sourceErroneousColumnNumber": "1",
+          "sourceLineText": null,
+          "messageMainCategory": "General",
+          "messageSubCategory": "CSS"
+      }
+  ],
+    "numberOfFatal" : 0,
+    "numberOfWarnings" : 0,
+    "numberOfException" : 0,
+    "numberOfInfos" : 0
+}
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/OPS/content.opf
new file mode 100644
index 0000000..a5ff1f2
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/OPS/content.opf
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Hyperlink Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" href="external_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="style_tag_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" href="inline_css.xhtml" media-type="application/xhtml+xml" />
+    <item id="style" href="style.css" media-type="text/css"/>
+    <item id="style2" href="unused.css" media-type="text/css"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/OPS/external_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/OPS/external_css.xhtml
new file mode 100644
index 0000000..e00ee40
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/OPS/external_css.xhtml
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Unused - External CSS</title>
+    <link rel="stylesheet" type="text/css" href="style.css"/>
+</head>
+<body>
+
+<h1>Unused class specified in external css file</h1>
+
+<div class="used">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+</div>
+
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/OPS/inline_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/OPS/inline_css.xhtml
new file mode 100644
index 0000000..2d68d19
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/OPS/inline_css.xhtml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Unused - Inline CSS</title>
+</head>
+<body>
+<h1>Unused - Inline CSS</h1>
+
+<p>Unused css does not apply to inline styles.</p>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/OPS/style.css b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/OPS/style.css
new file mode 100644
index 0000000..4726984
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/OPS/style.css
@@ -0,0 +1,9 @@
+.used {
+    font-style: italic;
+    color: #006400;
+}
+
+.unused {
+    font-weight: bold;
+    color:#1e90ff;
+}
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/OPS/style_tag_css.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/OPS/style_tag_css.xhtml
new file mode 100644
index 0000000..9dc58b6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/OPS/style_tag_css.xhtml
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Unused - Style Tag CSS</title>
+    <style>
+        .used {
+            font-style: italic;
+            color: #006400;
+        }
+
+        .unused {
+            font-weight: bold;
+            color:#1e90ff;
+        }
+    </style>
+</head>
+<body>
+
+<div class="used">
+    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
+    magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
+    nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse
+    molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui
+    blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta
+    nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent
+    claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
+    legere me lius quod ii legunt saepius.
+</div>
+
+</body>
+</html>
+
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/OPS/toc.ncx
new file mode 100644
index 0000000..ad464c8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Unused Style Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>External CSS</text>
+      </navLabel>
+      <content src="external_css.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/OPS/toc.xhtml
new file mode 100644
index 0000000..1a32717
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/OPS/toc.xhtml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="external_css.xhtml">External CSS</a></li>
+        <li><a href="style_tag_css.xhtml">Style Tag</a></li>
+        <li><a href="inline_css.xhtml">Inline Style</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/OPS/unused.css b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/OPS/unused.css
new file mode 100644
index 0000000..3ba4415
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/OPS/unused.css
@@ -0,0 +1,4 @@
+.otherstyle {
+    font-weight: bold;
+    color:#1e90ff;
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/mimetype b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3_expected_results.json
new file mode 100644
index 0000000..0887484
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/css/unused_epub3_expected_results.json
@@ -0,0 +1,39 @@
+{
+    "epubFileName" : "unused_epub3.epub",
+    "processStartDateTime" : 1358970215604,
+    "processEndDateTime" : 1358970216115,
+    "epubFileSizeCompressed" : "0.0",
+    "epubFileSizeUncompressed" : null,
+    "numberOfFiles" : null,
+    "checkedWithEpubVersion" : null,
+    "listOfMessage": [
+      {
+          "severity": "WARNING",
+          "messageUI": "CSS-07",
+          "messageShortDescription": "Unused css class",
+          "messageLongCntxDescription": "Class 'unused' was declared but never used.",
+          "sourceErroneousFileName": "OPS/style_tag_css.xhtml",
+          "sourceErroneousLineNumber": "12",
+          "sourceErroneousColumnNumber": "9",
+          "sourceLineText": null,
+          "messageMainCategory": "General",
+          "messageSubCategory": "CSS"
+      },
+      {
+          "severity": "WARNING",
+          "messageUI": "CSS-07",
+          "messageShortDescription": "Unused css class",
+          "messageLongCntxDescription": "Class 'unused' was declared but never used.",
+          "sourceErroneousFileName": "OPS/style.css",
+          "sourceErroneousLineNumber": "6",
+          "sourceErroneousColumnNumber": "1",
+          "sourceLineText": null,
+          "messageMainCategory": "General",
+          "messageSubCategory": "CSS"
+      }
+  ],
+    "numberOfFatal" : 0,
+    "numberOfWarnings" : 0,
+    "numberOfException" : 0,
+    "numberOfInfos" : 0
+}
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Epub2_marked_v3/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Epub2_marked_v3/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Epub2_marked_v3/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Epub2_marked_v3/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/Epub2_marked_v3/OPS/content.opf
new file mode 100644
index 0000000..8fac3b4
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Epub2_marked_v3/OPS/content.opf
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Epub2 marked as version 3</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Epub2_marked_v3/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Epub2_marked_v3/OPS/page01.xhtml
new file mode 100644
index 0000000..8441cac
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Epub2_marked_v3/OPS/page01.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+        "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Sample page</title>
+</head>
+<body>
+  <div>
+    <h1>Epub 2</h1>
+
+    <p>This is an epub2 marked as v3</p>
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Epub2_marked_v3/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/opf/Epub2_marked_v3/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Epub2_marked_v3/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Epub2_marked_v3/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/Epub2_marked_v3/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Epub2_marked_v3/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Epub2_marked_v3_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/Epub2_marked_v3_expected_results.json
new file mode 100644
index 0000000..d816dcf
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Epub2_marked_v3_expected_results.json
@@ -0,0 +1,238 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/Epub2_marked_v3.epub",
+    "filename" : "Epub2_marked_v3.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:42",
+    "elapsedTime" : 222,
+    "nFatal" : 0,
+    "nError" : 3,
+    "nWarning" : 1,
+    "nUsage" : 3
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Epub2 marked as version 3",
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 73,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 299,
+    "uncompressedSize" : 584,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "775ac73983ef53f451804e86608ac4756223fe2cabe5a351d544a125b8bc36b1",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 293,
+    "uncompressedSize" : 556,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7e983f3695b1eea13cb6d3e7aacb5d84de767f2ccda456f5154d35c5f9b012",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 234,
+    "uncompressedSize" : 344,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "6b855d55f176131432e10145322db8db9576f5cd16b5c67dc38ae92dfe2",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "Epub2_marked_v3.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-004",
+    "severity" : "ERROR",
+    "message" : "Irregular DOCTYPE: found '-//W3C//DTD XHTML 1.1//EN', expected '<!DOCTYPE html>'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-015",
+    "severity" : "WARNING",
+    "message" : "HTML4 DOCTYPE definition within ePub v3.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "page01.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'assertion failed:\n  Exactly one manifest item must declare the 'nav' property (number of 'nav' items: 0).'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 8,
+      "column" : 13,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'assertion failed:\n  package dcterms:modified meta element must occur exactly once'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 3,
+      "column" : 57,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Epub2_marked_v3_expected_results.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Epub2_marked_v3_expected_results.xml
new file mode 100644
index 0000000..410b495
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Epub2_marked_v3_expected_results.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jhove xmlns="http://hul.harvard.edu/ois/xml/ns/jhove" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="epubcheck" release="4.0.0-alpha11-SNAPSHOT" date="2012-10-31">
+ <date>2014-09-05T03:15:43+02:00</date>
+ <repInfo uri="Epub2_marked_v3.epub">
+  <created>2014-09-05T01:49:14Z</created>
+  <format>application/epub+zip</format>
+  <version>3.0</version>
+  <status>Not well-formed</status>
+  <messages>
+   <message>RSC-005, ERROR, [Error while parsing file 'assertion failed:
+  package dcterms:modified meta element must occur exactly once'.], OPS/content.opf (3-57)</message>
+   <message>RSC-005, ERROR, [Error while parsing file 'assertion failed:
+  Exactly one manifest item must declare the 'nav' property (number of 'nav' items: 0).'.], OPS/content.opf (8-13)</message>
+   <message>HTM-004, ERROR, [Irregular DOCTYPE: found '-//W3C//DTD XHTML 1.1//EN', expected '&lt;!DOCTYPE html&gt;'.], OPS/page01.xhtml</message>
+   <message>HTM-015, WARN, [HTML4 DOCTYPE definition within ePub v3.], page01.xhtml</message>
+   <message>HTM-010, HINT, [Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.], OPS/toc.ncx (2-68)</message>
+   <message>ACC-008, HINT, [Navigation Document has no 'landmarks nav' element.], Epub2_marked_v3.epub</message>
+   <message>ACC-007, HINT, [Content Documents do not use 'epub:type' attributes for semantic inflection.], OPS/page01.xhtml</message>
+  </messages>
+  <mimeType>application/epub+zip</mimeType>
+  <properties>
+   <property>
+    <name>CharacterCount</name>
+    <values arity="Scalar" type="Long">
+     <value>73</value>
+    </values>
+   </property>
+   <property>
+    <name>Language</name>
+    <values arity="Scalar" type="String">
+     <value>en</value>
+    </values>
+   </property>
+   <property>
+    <name>Info</name>
+    <values arity="List" type="Property">
+     <property>
+      <name>Identifier</name>
+      <values arity="Scalar" type="String">
+       <value>000000000000000000</value>
+      </values>
+     </property>
+     <property>
+      <name>CreationDate</name>
+      <values arity="Scalar" type="Date">
+       <value>2014-09-05T01:49:14Z</value>
+      </values>
+     </property>
+     <property>
+      <name>Title</name>
+      <values arity="Scalar" type="String">
+       <value>Epub2 marked as version 3</value>
+      </values>
+     </property>
+    </values>
+   </property>
+  </properties>
+ </repInfo>
+</jhove>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Epub3_marked_v2/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Epub3_marked_v2/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Epub3_marked_v2/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Epub3_marked_v2/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/Epub3_marked_v2/OPS/content.opf
new file mode 100644
index 0000000..07ebc9a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Epub3_marked_v2/OPS/content.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="2.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Missing TOC Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Epub3_marked_v2/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Epub3_marked_v2/OPS/page01.xhtml
new file mode 100644
index 0000000..7d387d1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Epub3_marked_v2/OPS/page01.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>No Toc</title>
+</head>
+<body>
+  <div>
+    <h1>Missing ToC</h1>
+
+    <p>The opf file for this epub is missing an item in the manifest marked as nav. Since this is an epub3, this item is required.</p>
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Epub3_marked_v2/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/opf/Epub3_marked_v2/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Epub3_marked_v2/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Epub3_marked_v2/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Epub3_marked_v2/OPS/toc.xhtml
new file mode 100644
index 0000000..f17be2a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Epub3_marked_v2/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="page01.xhtml">Page 1</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Epub3_marked_v2/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/Epub3_marked_v2/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Epub3_marked_v2/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Epub3_marked_v2_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/Epub3_marked_v2_expected_results.json
new file mode 100644
index 0000000..71954c6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Epub3_marked_v2_expected_results.json
@@ -0,0 +1,260 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/Epub3_marked_v2.epub",
+    "filename" : "Epub3_marked_v2.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:42",
+    "elapsedTime" : 57,
+    "nFatal" : 0,
+    "nError" : 5,
+    "nWarning" : 1,
+    "nUsage" : 1
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Missing TOC Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "2.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 223,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 361,
+    "uncompressedSize" : 738,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b575c7e2b33c1cb123460e9994acd5268d422ee0ba2ff5b4e6448dd1fda9c5",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 293,
+    "uncompressedSize" : 556,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7e983f3695b1eea13cb6d3e7aacb5d84de767f2ccda456f5154d35c5f9b012",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 223,
+    "uncompressedSize" : 333,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "67d4de685f8c7abbef48e947b7b2e0b49c164c753eecbb7c4534ba43661d15",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 228,
+    "uncompressedSize" : 339,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c1f5f92fde356c7bbbc841fce3f768289bf47019fdf46fc33b54273fa0f0cf4",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-016",
+    "severity" : "WARNING",
+    "message" : "HTML5 DOCTYPE definition within ePub v2.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "NAV-001",
+    "severity" : "ERROR",
+    "message" : "The nav file is not supported for ePub v2.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'attribute \"properties\" not allowed here; expected attribute \"fallback\", \"fallback-style\", \"href\", \"media-type\", \"required-modules\" or \"required-namespace\"'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 12,
+      "column" : 90,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'attribute \"property\" not allowed here; expected attribute \"content\", \"id\", \"name\", \"scheme\" or \"xml:lang\"'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 7,
+      "column" : 39,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'element \"meta\" missing required attributes \"content\" and \"name\"'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 7,
+      "column" : 39,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'text not allowed here; expected the element end-tag'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 7,
+      "column" : 61,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Epub3_marked_v2_expected_results.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Epub3_marked_v2_expected_results.xml
new file mode 100644
index 0000000..a8ec17d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Epub3_marked_v2_expected_results.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jhove xmlns="http://hul.harvard.edu/ois/xml/ns/jhove" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="epubcheck" release="4.0.0-alpha11-SNAPSHOT" date="2012-10-31">
+ <date>2014-09-05T03:15:42+02:00</date>
+ <repInfo uri="Epub3_marked_v2.epub">
+  <created>2014-09-05T01:49:14Z</created>
+  <lastModified>2012-10-10T12:00:00Z</lastModified>
+  <format>application/epub+zip</format>
+  <version>2.0</version>
+  <status>Not well-formed</status>
+  <messages>
+   <message>RSC-005, ERROR, [Error while parsing file 'attribute "property" not allowed here; expected attribute "content", "id", "name", "scheme" or "xml:lang"'.], OPS/content.opf (7-39)</message>
+   <message>RSC-005, ERROR, [Error while parsing file 'element "meta" missing required attributes "content" and "name"'.], OPS/content.opf (7-39)</message>
+   <message>RSC-005, ERROR, [Error while parsing file 'text not allowed here; expected the element end-tag'.], OPS/content.opf (7-61)</message>
+   <message>RSC-005, ERROR, [Error while parsing file 'attribute "properties" not allowed here; expected attribute "fallback", "fallback-style", "href", "media-type", "required-modules" or "required-namespace"'.], OPS/content.opf (12-90)</message>
+   <message>NAV-001, ERROR, [The nav file is not supported for ePub v2.], OPS/toc.xhtml</message>
+   <message>HTM-016, WARN, [HTML5 DOCTYPE definition within ePub v2.], toc.xhtml</message>
+   <message>HTM-010, HINT, [Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.], OPS/toc.ncx (2-68)</message>
+  </messages>
+  <mimeType>application/epub+zip</mimeType>
+  <properties>
+   <property>
+    <name>CharacterCount</name>
+    <values arity="Scalar" type="Long">
+     <value>223</value>
+    </values>
+   </property>
+   <property>
+    <name>Language</name>
+    <values arity="Scalar" type="String">
+     <value>en</value>
+    </values>
+   </property>
+   <property>
+    <name>Info</name>
+    <values arity="List" type="Property">
+     <property>
+      <name>Identifier</name>
+      <values arity="Scalar" type="String">
+       <value>000000000000000000</value>
+      </values>
+     </property>
+     <property>
+      <name>CreationDate</name>
+      <values arity="Scalar" type="Date">
+       <value>2014-09-05T01:49:14Z</value>
+      </values>
+     </property>
+     <property>
+      <name>ModDate</name>
+      <values arity="Scalar" type="Date">
+       <value>2012-10-10T12:00:00Z</value>
+      </values>
+     </property>
+     <property>
+      <name>Title</name>
+      <values arity="Scalar" type="String">
+       <value>Missing TOC Sample Book</value>
+      </values>
+     </property>
+    </values>
+   </property>
+  </properties>
+ </repInfo>
+</jhove>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/content.opf
new file mode 100644
index 0000000..d0056d7
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/content.opf
@@ -0,0 +1,213 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="2.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Excessive Spine Items Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page001" href="page001.xhtml" media-type="application/xhtml+xml" />
+    <item id="page002" href="page002.xhtml" media-type="application/xhtml+xml" />
+    <item id="page003" href="page003.xhtml" media-type="application/xhtml+xml" />
+    <item id="page004" href="page004.xhtml" media-type="application/xhtml+xml" />
+    <item id="page005" href="page005.xhtml" media-type="application/xhtml+xml" />
+    <item id="page006" href="page006.xhtml" media-type="application/xhtml+xml" />
+    <item id="page007" href="page007.xhtml" media-type="application/xhtml+xml" />
+    <item id="page008" href="page008.xhtml" media-type="application/xhtml+xml" />
+    <item id="page009" href="page009.xhtml" media-type="application/xhtml+xml" />
+    <item id="page010" href="page010.xhtml" media-type="application/xhtml+xml" />
+    <item id="page011" href="page011.xhtml" media-type="application/xhtml+xml" />
+    <item id="page012" href="page012.xhtml" media-type="application/xhtml+xml" />
+    <item id="page013" href="page013.xhtml" media-type="application/xhtml+xml" />
+    <item id="page014" href="page014.xhtml" media-type="application/xhtml+xml" />
+    <item id="page015" href="page015.xhtml" media-type="application/xhtml+xml" />
+    <item id="page016" href="page016.xhtml" media-type="application/xhtml+xml" />
+    <item id="page017" href="page017.xhtml" media-type="application/xhtml+xml" />
+    <item id="page018" href="page018.xhtml" media-type="application/xhtml+xml" />
+    <item id="page019" href="page019.xhtml" media-type="application/xhtml+xml" />
+    <item id="page020" href="page020.xhtml" media-type="application/xhtml+xml" />
+    <item id="page021" href="page021.xhtml" media-type="application/xhtml+xml" />
+    <item id="page022" href="page022.xhtml" media-type="application/xhtml+xml" />
+    <item id="page023" href="page023.xhtml" media-type="application/xhtml+xml" />
+    <item id="page024" href="page024.xhtml" media-type="application/xhtml+xml" />
+    <item id="page025" href="page025.xhtml" media-type="application/xhtml+xml" />
+    <item id="page026" href="page026.xhtml" media-type="application/xhtml+xml" />
+    <item id="page027" href="page027.xhtml" media-type="application/xhtml+xml" />
+    <item id="page028" href="page028.xhtml" media-type="application/xhtml+xml" />
+    <item id="page029" href="page029.xhtml" media-type="application/xhtml+xml" />
+    <item id="page030" href="page030.xhtml" media-type="application/xhtml+xml" />
+    <item id="page031" href="page031.xhtml" media-type="application/xhtml+xml" />
+    <item id="page032" href="page032.xhtml" media-type="application/xhtml+xml" />
+    <item id="page033" href="page033.xhtml" media-type="application/xhtml+xml" />
+    <item id="page034" href="page034.xhtml" media-type="application/xhtml+xml" />
+    <item id="page035" href="page035.xhtml" media-type="application/xhtml+xml" />
+    <item id="page036" href="page036.xhtml" media-type="application/xhtml+xml" />
+    <item id="page037" href="page037.xhtml" media-type="application/xhtml+xml" />
+    <item id="page038" href="page038.xhtml" media-type="application/xhtml+xml" />
+    <item id="page039" href="page039.xhtml" media-type="application/xhtml+xml" />
+    <item id="page040" href="page040.xhtml" media-type="application/xhtml+xml" />
+    <item id="page041" href="page041.xhtml" media-type="application/xhtml+xml" />
+    <item id="page042" href="page042.xhtml" media-type="application/xhtml+xml" />
+    <item id="page043" href="page043.xhtml" media-type="application/xhtml+xml" />
+    <item id="page044" href="page044.xhtml" media-type="application/xhtml+xml" />
+    <item id="page045" href="page045.xhtml" media-type="application/xhtml+xml" />
+    <item id="page046" href="page046.xhtml" media-type="application/xhtml+xml" />
+    <item id="page047" href="page047.xhtml" media-type="application/xhtml+xml" />
+    <item id="page048" href="page048.xhtml" media-type="application/xhtml+xml" />
+    <item id="page049" href="page049.xhtml" media-type="application/xhtml+xml" />
+    <item id="page050" href="page050.xhtml" media-type="application/xhtml+xml" />
+    <item id="page051" href="page051.xhtml" media-type="application/xhtml+xml" />
+    <item id="page052" href="page052.xhtml" media-type="application/xhtml+xml" />
+    <item id="page053" href="page053.xhtml" media-type="application/xhtml+xml" />
+    <item id="page054" href="page054.xhtml" media-type="application/xhtml+xml" />
+    <item id="page055" href="page055.xhtml" media-type="application/xhtml+xml" />
+    <item id="page056" href="page056.xhtml" media-type="application/xhtml+xml" />
+    <item id="page057" href="page057.xhtml" media-type="application/xhtml+xml" />
+    <item id="page058" href="page058.xhtml" media-type="application/xhtml+xml" />
+    <item id="page059" href="page059.xhtml" media-type="application/xhtml+xml" />
+    <item id="page060" href="page060.xhtml" media-type="application/xhtml+xml" />
+    <item id="page061" href="page061.xhtml" media-type="application/xhtml+xml" />
+    <item id="page062" href="page062.xhtml" media-type="application/xhtml+xml" />
+    <item id="page063" href="page063.xhtml" media-type="application/xhtml+xml" />
+    <item id="page064" href="page064.xhtml" media-type="application/xhtml+xml" />
+    <item id="page065" href="page065.xhtml" media-type="application/xhtml+xml" />
+    <item id="page066" href="page066.xhtml" media-type="application/xhtml+xml" />
+    <item id="page067" href="page067.xhtml" media-type="application/xhtml+xml" />
+    <item id="page068" href="page068.xhtml" media-type="application/xhtml+xml" />
+    <item id="page069" href="page069.xhtml" media-type="application/xhtml+xml" />
+    <item id="page070" href="page070.xhtml" media-type="application/xhtml+xml" />
+    <item id="page071" href="page071.xhtml" media-type="application/xhtml+xml" />
+    <item id="page072" href="page072.xhtml" media-type="application/xhtml+xml" />
+    <item id="page073" href="page073.xhtml" media-type="application/xhtml+xml" />
+    <item id="page074" href="page074.xhtml" media-type="application/xhtml+xml" />
+    <item id="page075" href="page075.xhtml" media-type="application/xhtml+xml" />
+    <item id="page076" href="page076.xhtml" media-type="application/xhtml+xml" />
+    <item id="page077" href="page077.xhtml" media-type="application/xhtml+xml" />
+    <item id="page078" href="page078.xhtml" media-type="application/xhtml+xml" />
+    <item id="page079" href="page079.xhtml" media-type="application/xhtml+xml" />
+    <item id="page080" href="page080.xhtml" media-type="application/xhtml+xml" />
+    <item id="page081" href="page081.xhtml" media-type="application/xhtml+xml" />
+    <item id="page082" href="page082.xhtml" media-type="application/xhtml+xml" />
+    <item id="page083" href="page083.xhtml" media-type="application/xhtml+xml" />
+    <item id="page084" href="page084.xhtml" media-type="application/xhtml+xml" />
+    <item id="page085" href="page085.xhtml" media-type="application/xhtml+xml" />
+    <item id="page086" href="page086.xhtml" media-type="application/xhtml+xml" />
+    <item id="page087" href="page087.xhtml" media-type="application/xhtml+xml" />
+    <item id="page088" href="page088.xhtml" media-type="application/xhtml+xml" />
+    <item id="page089" href="page089.xhtml" media-type="application/xhtml+xml" />
+    <item id="page090" href="page090.xhtml" media-type="application/xhtml+xml" />
+    <item id="page091" href="page091.xhtml" media-type="application/xhtml+xml" />
+    <item id="page092" href="page092.xhtml" media-type="application/xhtml+xml" />
+    <item id="page093" href="page093.xhtml" media-type="application/xhtml+xml" />
+    <item id="page094" href="page094.xhtml" media-type="application/xhtml+xml" />
+    <item id="page095" href="page095.xhtml" media-type="application/xhtml+xml" />
+    <item id="page096" href="page096.xhtml" media-type="application/xhtml+xml" />
+    <item id="page097" href="page097.xhtml" media-type="application/xhtml+xml" />
+    <item id="page098" href="page098.xhtml" media-type="application/xhtml+xml" />
+    <item id="page099" href="page099.xhtml" media-type="application/xhtml+xml" />
+    <item id="page100" href="page100.xhtml" media-type="application/xhtml+xml" />
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page001" />
+    <itemref idref="page002" />
+    <itemref idref="page003" />
+    <itemref idref="page004" />
+    <itemref idref="page005" />
+    <itemref idref="page006" />
+    <itemref idref="page007" />
+    <itemref idref="page008" />
+    <itemref idref="page009" />
+    <itemref idref="page010" />
+    <itemref idref="page011" />
+    <itemref idref="page012" />
+    <itemref idref="page013" />
+    <itemref idref="page014" />
+    <itemref idref="page015" />
+    <itemref idref="page016" />
+    <itemref idref="page017" />
+    <itemref idref="page018" />
+    <itemref idref="page019" />
+    <itemref idref="page020" />
+    <itemref idref="page021" />
+    <itemref idref="page022" />
+    <itemref idref="page023" />
+    <itemref idref="page024" />
+    <itemref idref="page025" />
+    <itemref idref="page026" />
+    <itemref idref="page027" />
+    <itemref idref="page028" />
+    <itemref idref="page029" />
+    <itemref idref="page030" />
+    <itemref idref="page031" />
+    <itemref idref="page032" />
+    <itemref idref="page033" />
+    <itemref idref="page034" />
+    <itemref idref="page035" />
+    <itemref idref="page036" />
+    <itemref idref="page037" />
+    <itemref idref="page038" />
+    <itemref idref="page039" />
+    <itemref idref="page040" />
+    <itemref idref="page041" />
+    <itemref idref="page042" />
+    <itemref idref="page043" />
+    <itemref idref="page044" />
+    <itemref idref="page045" />
+    <itemref idref="page046" />
+    <itemref idref="page047" />
+    <itemref idref="page048" />
+    <itemref idref="page049" />
+    <itemref idref="page050" />
+    <itemref idref="page051" />
+    <itemref idref="page052" />
+    <itemref idref="page053" />
+    <itemref idref="page054" />
+    <itemref idref="page055" />
+    <itemref idref="page056" />
+    <itemref idref="page057" />
+    <itemref idref="page058" />
+    <itemref idref="page059" />
+    <itemref idref="page060" />
+    <itemref idref="page061" />
+    <itemref idref="page062" />
+    <itemref idref="page063" />
+    <itemref idref="page064" />
+    <itemref idref="page065" />
+    <itemref idref="page066" />
+    <itemref idref="page067" />
+    <itemref idref="page068" />
+    <itemref idref="page069" />
+    <itemref idref="page070" />
+    <itemref idref="page071" />
+    <itemref idref="page072" />
+    <itemref idref="page073" />
+    <itemref idref="page074" />
+    <itemref idref="page075" />
+    <itemref idref="page076" />
+    <itemref idref="page077" />
+    <itemref idref="page078" />
+    <itemref idref="page079" />
+    <itemref idref="page080" />
+    <itemref idref="page081" />
+    <itemref idref="page082" />
+    <itemref idref="page083" />
+    <itemref idref="page084" />
+    <itemref idref="page085" />
+    <itemref idref="page086" />
+    <itemref idref="page087" />
+    <itemref idref="page088" />
+    <itemref idref="page089" />
+    <itemref idref="page090" />
+    <itemref idref="page091" />
+    <itemref idref="page092" />
+    <itemref idref="page093" />
+    <itemref idref="page094" />
+    <itemref idref="page095" />
+    <itemref idref="page096" />
+    <itemref idref="page097" />
+    <itemref idref="page098" />
+    <itemref idref="page099" />
+    <itemref idref="page100" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page001.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page001.xhtml
new file mode 100644
index 0000000..cce48f5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page001.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 1</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 1</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page002.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page002.xhtml
new file mode 100644
index 0000000..247bdb6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page002.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 2</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 2</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page003.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page003.xhtml
new file mode 100644
index 0000000..9172f6d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page003.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 3</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 3</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page004.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page004.xhtml
new file mode 100644
index 0000000..0223501
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page004.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 4</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 4</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page005.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page005.xhtml
new file mode 100644
index 0000000..9fb5bc3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page005.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 5</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 5</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page006.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page006.xhtml
new file mode 100644
index 0000000..37f6201
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page006.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 6</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 6</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page007.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page007.xhtml
new file mode 100644
index 0000000..2ce9cd7
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page007.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 7</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 7</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page008.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page008.xhtml
new file mode 100644
index 0000000..f075174
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page008.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 8</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 8</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page009.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page009.xhtml
new file mode 100644
index 0000000..aaaf176
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page009.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 9</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 9</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page010.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page010.xhtml
new file mode 100644
index 0000000..4c7edbc
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page010.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 10</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 10</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page011.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page011.xhtml
new file mode 100644
index 0000000..9fda529
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page011.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 11</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 11</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page012.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page012.xhtml
new file mode 100644
index 0000000..5de89da
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page012.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 12</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 12</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page013.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page013.xhtml
new file mode 100644
index 0000000..c03d05d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page013.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 13</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 13</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page014.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page014.xhtml
new file mode 100644
index 0000000..0d82f8c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page014.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 14</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 14</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page015.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page015.xhtml
new file mode 100644
index 0000000..5c561ff
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page015.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 15</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 15</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page016.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page016.xhtml
new file mode 100644
index 0000000..19fbc36
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page016.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 16</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 16</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page017.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page017.xhtml
new file mode 100644
index 0000000..dc2214a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page017.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 17</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 17</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page018.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page018.xhtml
new file mode 100644
index 0000000..0612a90
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page018.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 18</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 18</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page019.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page019.xhtml
new file mode 100644
index 0000000..913be55
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page019.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 19</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 19</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page020.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page020.xhtml
new file mode 100644
index 0000000..6295ef8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page020.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 20</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 20</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page021.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page021.xhtml
new file mode 100644
index 0000000..188f3e2
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page021.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 21</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 21</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page022.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page022.xhtml
new file mode 100644
index 0000000..1c087c3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page022.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 22</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 22</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page023.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page023.xhtml
new file mode 100644
index 0000000..0793c8c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page023.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 23</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 23</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page024.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page024.xhtml
new file mode 100644
index 0000000..36072e1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page024.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 24</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 24</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page025.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page025.xhtml
new file mode 100644
index 0000000..0085ece
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page025.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 25</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 25</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page026.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page026.xhtml
new file mode 100644
index 0000000..4d258a2
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page026.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 26</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 26</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page027.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page027.xhtml
new file mode 100644
index 0000000..517a8c6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page027.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 27</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 27</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page028.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page028.xhtml
new file mode 100644
index 0000000..bd14324
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page028.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 28</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 28</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page029.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page029.xhtml
new file mode 100644
index 0000000..998a4ba
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page029.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 29</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 29</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page030.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page030.xhtml
new file mode 100644
index 0000000..4f9a60e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page030.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 30</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 30</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page031.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page031.xhtml
new file mode 100644
index 0000000..95a4d3a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page031.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 31</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 31</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page032.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page032.xhtml
new file mode 100644
index 0000000..64ff523
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page032.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 32</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 32</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page033.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page033.xhtml
new file mode 100644
index 0000000..0f38b1d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page033.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 33</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 33</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page034.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page034.xhtml
new file mode 100644
index 0000000..200cf68
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page034.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 34</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 34</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page035.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page035.xhtml
new file mode 100644
index 0000000..e29465b
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page035.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 35</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 35</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page036.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page036.xhtml
new file mode 100644
index 0000000..21dd3e8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page036.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 36</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 36</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page037.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page037.xhtml
new file mode 100644
index 0000000..636bb2f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page037.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 37</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 37</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page038.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page038.xhtml
new file mode 100644
index 0000000..b3b46fd
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page038.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 38</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 38</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page039.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page039.xhtml
new file mode 100644
index 0000000..a5f688c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page039.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 39</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 39</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page040.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page040.xhtml
new file mode 100644
index 0000000..10fc38f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page040.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 40</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 40</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page041.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page041.xhtml
new file mode 100644
index 0000000..16c0ef9
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page041.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 41</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 41</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page042.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page042.xhtml
new file mode 100644
index 0000000..d9addb8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page042.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 42</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 42</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page043.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page043.xhtml
new file mode 100644
index 0000000..dea75bb
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page043.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 43</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 43</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page044.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page044.xhtml
new file mode 100644
index 0000000..a8fa9e5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page044.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 44</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 44</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page045.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page045.xhtml
new file mode 100644
index 0000000..36c4561
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page045.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 45</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 45</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page046.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page046.xhtml
new file mode 100644
index 0000000..3f02a88
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page046.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 46</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 46</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page047.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page047.xhtml
new file mode 100644
index 0000000..1067815
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page047.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 47</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 47</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page048.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page048.xhtml
new file mode 100644
index 0000000..3d2f541
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page048.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 48</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 48</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page049.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page049.xhtml
new file mode 100644
index 0000000..182c0db
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page049.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 49</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 49</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page050.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page050.xhtml
new file mode 100644
index 0000000..6d90d7c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page050.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 50</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 50</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page051.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page051.xhtml
new file mode 100644
index 0000000..fb0ac3f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page051.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 51</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 51</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page052.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page052.xhtml
new file mode 100644
index 0000000..7eb05ce
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page052.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 52</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 52</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page053.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page053.xhtml
new file mode 100644
index 0000000..db27697
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page053.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 53</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 53</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page054.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page054.xhtml
new file mode 100644
index 0000000..1e15d7f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page054.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 54</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 54</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page055.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page055.xhtml
new file mode 100644
index 0000000..74df7fa
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page055.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 55</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 55</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page056.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page056.xhtml
new file mode 100644
index 0000000..261440e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page056.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 56</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 56</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page057.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page057.xhtml
new file mode 100644
index 0000000..f47e942
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page057.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 57</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 57</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page058.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page058.xhtml
new file mode 100644
index 0000000..77a5645
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page058.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 58</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 58</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page059.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page059.xhtml
new file mode 100644
index 0000000..ffd7df2
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page059.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 59</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 59</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page060.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page060.xhtml
new file mode 100644
index 0000000..0458000
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page060.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 60</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 60</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page061.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page061.xhtml
new file mode 100644
index 0000000..b4e5760
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page061.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 61</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 61</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page062.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page062.xhtml
new file mode 100644
index 0000000..ca63e74
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page062.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 62</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 62</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page063.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page063.xhtml
new file mode 100644
index 0000000..9bdefc4
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page063.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 63</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 63</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page064.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page064.xhtml
new file mode 100644
index 0000000..635b630
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page064.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 64</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 64</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page065.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page065.xhtml
new file mode 100644
index 0000000..231e7c2
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page065.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 65</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 65</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page066.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page066.xhtml
new file mode 100644
index 0000000..05c27f0
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page066.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 66</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 66</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page067.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page067.xhtml
new file mode 100644
index 0000000..4e2a9f9
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page067.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 67</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 67</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page068.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page068.xhtml
new file mode 100644
index 0000000..25f13e5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page068.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 68</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 68</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page069.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page069.xhtml
new file mode 100644
index 0000000..2cb4dfb
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page069.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 69</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 69</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page070.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page070.xhtml
new file mode 100644
index 0000000..ef94a7a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page070.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 70</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 70</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page071.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page071.xhtml
new file mode 100644
index 0000000..355571a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page071.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 71</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 71</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page072.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page072.xhtml
new file mode 100644
index 0000000..3de4a4f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page072.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 72</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 72</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page073.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page073.xhtml
new file mode 100644
index 0000000..dab8821
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page073.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 73</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 73</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page074.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page074.xhtml
new file mode 100644
index 0000000..f6b8767
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page074.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 74</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 74</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page075.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page075.xhtml
new file mode 100644
index 0000000..e5613b1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page075.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 75</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 75</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page076.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page076.xhtml
new file mode 100644
index 0000000..36c4a71
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page076.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 76</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 76</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page077.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page077.xhtml
new file mode 100644
index 0000000..e8d0b34
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page077.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 77</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 77</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page078.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page078.xhtml
new file mode 100644
index 0000000..bd44a63
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page078.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 78</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 78</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page079.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page079.xhtml
new file mode 100644
index 0000000..e6bfa21
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page079.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 79</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 79</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page080.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page080.xhtml
new file mode 100644
index 0000000..88246b7
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page080.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 80</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 80</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page081.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page081.xhtml
new file mode 100644
index 0000000..e0a5cb6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page081.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 81</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 81</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page082.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page082.xhtml
new file mode 100644
index 0000000..e9c3f95
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page082.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 82</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 82</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page083.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page083.xhtml
new file mode 100644
index 0000000..ebfdb36
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page083.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 83</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 83</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page084.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page084.xhtml
new file mode 100644
index 0000000..736b65d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page084.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 84</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 84</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page085.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page085.xhtml
new file mode 100644
index 0000000..45406e1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page085.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 85</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 85</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page086.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page086.xhtml
new file mode 100644
index 0000000..4e0f54e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page086.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 86</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 86</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page087.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page087.xhtml
new file mode 100644
index 0000000..036b828
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page087.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 87</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 87</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page088.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page088.xhtml
new file mode 100644
index 0000000..733ce26
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page088.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 88</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 88</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page089.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page089.xhtml
new file mode 100644
index 0000000..abf1737
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page089.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 89</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 89</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page090.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page090.xhtml
new file mode 100644
index 0000000..880b3e6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page090.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 90</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 90</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page091.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page091.xhtml
new file mode 100644
index 0000000..a613243
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page091.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 91</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 91</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page092.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page092.xhtml
new file mode 100644
index 0000000..71a4057
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page092.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 92</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 92</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page093.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page093.xhtml
new file mode 100644
index 0000000..c42fabe
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page093.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 93</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 93</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page094.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page094.xhtml
new file mode 100644
index 0000000..d2e2ee5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page094.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 94</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 94</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page095.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page095.xhtml
new file mode 100644
index 0000000..9f4d59e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page095.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 95</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 95</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page096.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page096.xhtml
new file mode 100644
index 0000000..a7f9835
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page096.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 96</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 96</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page097.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page097.xhtml
new file mode 100644
index 0000000..e3de10d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page097.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 97</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 97</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page098.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page098.xhtml
new file mode 100644
index 0000000..6b81405
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page098.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 98</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 98</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page099.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page099.xhtml
new file mode 100644
index 0000000..bbba065
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page099.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 99</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 99</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page100.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page100.xhtml
new file mode 100644
index 0000000..caaddb0
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/page100.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 100</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 100</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/toc.ncx
new file mode 100644
index 0000000..c9317ec
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page001.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2_expected_results.json
new file mode 100644
index 0000000..02ec7d1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2_expected_results.json
@@ -0,0 +1,2481 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub2.epub",
+    "filename" : "Excessive_Spine_Items_epub2.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:45",
+    "elapsedTime" : 645,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 2
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Excessive Spine Items Sample Book",
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 100,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "2.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 7484,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 1103,
+    "uncompressedSize" : 11881,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e6fe83613c59b14e7bff7f42eeaa734a5cc1f463b31559b4712f18df938972e",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 294,
+    "uncompressedSize" : 557,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b324945e2ef6588e881e99ec48a96949a9dcf96760d477943ff64ef063b2e63b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page001.xhtml" ]
+  }, {
+    "id" : "page001",
+    "fileName" : "OPS/page001.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 150,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7d2ab8a3ea3618e7b6ede0db69bcdf9796e82e12c8dcf4de9e516772fb707b79",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page002",
+    "fileName" : "OPS/page002.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "64d6ffb6f5b0eac4989678c7a85252341875c80d151a7a6bf19b7bd556fda5",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page003",
+    "fileName" : "OPS/page003.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 150,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "63451ed1f55127a7723328bd510dae3525c3bee2311f083fe1f4c864ee196",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page004",
+    "fileName" : "OPS/page004.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b5c1fe7d9f5fc2bc3031646c9ecdf472a524bce7fea32b29f5a1c8299319f4d",
+    "isSpineItem" : true,
+    "spineIndex" : 3,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page005",
+    "fileName" : "OPS/page005.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b2a15669d1f7ea52d8da18dda71c9dae4f6f62663ca5ebeae4fbb30a8d73abc",
+    "isSpineItem" : true,
+    "spineIndex" : 4,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page006",
+    "fileName" : "OPS/page006.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "452377d4944412c1c4ca582925d24b3b5bcfebb35302fa4da6655de137a78",
+    "isSpineItem" : true,
+    "spineIndex" : 5,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page007",
+    "fileName" : "OPS/page007.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3427944296e459c85cc9182068d2192ac7f534e3ae66aef566d5a967d08727",
+    "isSpineItem" : true,
+    "spineIndex" : 6,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page008",
+    "fileName" : "OPS/page008.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c6c1d96ff16227eefe6ad8ef693f21d5b7b1331e3812b8ba623dd8256eb",
+    "isSpineItem" : true,
+    "spineIndex" : 7,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page009",
+    "fileName" : "OPS/page009.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 150,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a3142e9867f083fb72fd3dbc2cc7e531d0198dff56f8dc6d515bf9e6dd45d",
+    "isSpineItem" : true,
+    "spineIndex" : 8,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page010",
+    "fileName" : "OPS/page010.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "8cf8924a7e5a6aab4766c0998b54ae037b9e7ef27bdac80a496ffbc3255c56",
+    "isSpineItem" : true,
+    "spineIndex" : 9,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page011",
+    "fileName" : "OPS/page011.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c99863ef3e9455c115b834c864ac4f7dc516df4b8f15b2f363a7f5a2757",
+    "isSpineItem" : true,
+    "spineIndex" : 10,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page012",
+    "fileName" : "OPS/page012.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "6c7aff599f1edcfc120488650c3f9c40cbe7ecd7f58219a112b161d66a82e",
+    "isSpineItem" : true,
+    "spineIndex" : 11,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page013",
+    "fileName" : "OPS/page013.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "91301eb941ff3cc41884eb8c4337992f2c6e4e5b19b57e50dd298081fef",
+    "isSpineItem" : true,
+    "spineIndex" : 12,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page014",
+    "fileName" : "OPS/page014.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "82a1bb4ec2b92c647bc393f3a11fa3ed65b7ccde455ea9c890371070c64767",
+    "isSpineItem" : true,
+    "spineIndex" : 13,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page015",
+    "fileName" : "OPS/page015.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "32ad872f913d74cb2b180d73070f74a7a98f58e87f43a792a1bd41f6b1b8acc",
+    "isSpineItem" : true,
+    "spineIndex" : 14,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page016",
+    "fileName" : "OPS/page016.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5427accc914bb059d9273abe5d6ca3b61d63127d956aeaac878ed2106f596",
+    "isSpineItem" : true,
+    "spineIndex" : 15,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page017",
+    "fileName" : "OPS/page017.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3458e01c339999b7c4f4b1a640dfe77535e768a8ce73e1f29717fa85149f695",
+    "isSpineItem" : true,
+    "spineIndex" : 16,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page018",
+    "fileName" : "OPS/page018.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "49f9ab1633f381b3b56ca8b483c1d2b32a7d211aa8763993f4ece118233a8620",
+    "isSpineItem" : true,
+    "spineIndex" : 17,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page019",
+    "fileName" : "OPS/page019.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5adce7dffc9c3c74c24643ec147be776fe558fd7e576865e73f5a63bfcfd9a9",
+    "isSpineItem" : true,
+    "spineIndex" : 18,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page020",
+    "fileName" : "OPS/page020.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f3bb97c37986fe195f6e74397bb5885d58b258bcb32534feacd6ca70ccd8f78d",
+    "isSpineItem" : true,
+    "spineIndex" : 19,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page021",
+    "fileName" : "OPS/page021.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7f436689c070ae2a98e1da4e3a45e3214b7b5e8b209055b5d84f7089ace223",
+    "isSpineItem" : true,
+    "spineIndex" : 20,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page022",
+    "fileName" : "OPS/page022.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5f35f0d22453c6b4bc8f3dca778a1fcdda6fd54e765a0afcbeec3f36a4e6a4c",
+    "isSpineItem" : true,
+    "spineIndex" : 21,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page023",
+    "fileName" : "OPS/page023.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1daa62312f7d05a24b3057ed1ee098841cb67b2f66365e5ebb531d3c3a928",
+    "isSpineItem" : true,
+    "spineIndex" : 22,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page024",
+    "fileName" : "OPS/page024.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "172ffe2031a35c8641e07af6f63c729066c89e6618ba9e49b617c39381a7f5ae",
+    "isSpineItem" : true,
+    "spineIndex" : 23,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page025",
+    "fileName" : "OPS/page025.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "83d84d664f747629189458658c70ce3d87a7537a4ef85463fbf256472f8123",
+    "isSpineItem" : true,
+    "spineIndex" : 24,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page026",
+    "fileName" : "OPS/page026.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1bc03887b825d5681b113b84bf262979f561c5a6bbe3b2e47059541191ff",
+    "isSpineItem" : true,
+    "spineIndex" : 25,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page027",
+    "fileName" : "OPS/page027.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "161f1ebafd3f6fa7021d73f461899ad68bea5e1591c1f3573c69f85a657ec",
+    "isSpineItem" : true,
+    "spineIndex" : 26,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page028",
+    "fileName" : "OPS/page028.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cc9aee84c822d8f15fecf82710dfccccab678a73618487d47a0f4ddfcc54f2",
+    "isSpineItem" : true,
+    "spineIndex" : 27,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page029",
+    "fileName" : "OPS/page029.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3c57673fc1a1af647ef2299ddcf2393ab49ed5575e224bcdd87f971b582f67",
+    "isSpineItem" : true,
+    "spineIndex" : 28,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page030",
+    "fileName" : "OPS/page030.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "84e3d66ef9556d946dc41bfa8fb375ed6e365f814e12f1c0dd151669ce2582",
+    "isSpineItem" : true,
+    "spineIndex" : 29,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page031",
+    "fileName" : "OPS/page031.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "bd8cf76b86646cf6e1aa7b1f9ce7bea1b94594aa08d5aef31fdd2173934065",
+    "isSpineItem" : true,
+    "spineIndex" : 30,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page032",
+    "fileName" : "OPS/page032.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "121d4a45f06c3fd7d76fc58567d161221bd57c8592539ab7f8f53ee4dd39db4",
+    "isSpineItem" : true,
+    "spineIndex" : 31,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page033",
+    "fileName" : "OPS/page033.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "421f59195f6a20bdfd1f622fb8319bc96358a4a530c89c4f4a1e905bd49216",
+    "isSpineItem" : true,
+    "spineIndex" : 32,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page034",
+    "fileName" : "OPS/page034.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "67be833a53c958f35cde18b6a7aac496fa665eb1eaafcd68a58c3cad5a1c54",
+    "isSpineItem" : true,
+    "spineIndex" : 33,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page035",
+    "fileName" : "OPS/page035.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b46c401fdce375f7fec56e93e541a970fdf35da480e2d74cdc9cd4339d50ef57",
+    "isSpineItem" : true,
+    "spineIndex" : 34,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page036",
+    "fileName" : "OPS/page036.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "efa92e205f245167b62b7dfb7373f6abb58f76b9aedfcba2c883f24523225594",
+    "isSpineItem" : true,
+    "spineIndex" : 35,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page037",
+    "fileName" : "OPS/page037.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3adcd9d2dd9844135ad807a49b5e379e869a3f8ca795b34b458c189959a13d1",
+    "isSpineItem" : true,
+    "spineIndex" : 36,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page038",
+    "fileName" : "OPS/page038.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "fa92080ab50ddf69fce95567d31ca55d46745173e307de1c28beff48fd6f2",
+    "isSpineItem" : true,
+    "spineIndex" : 37,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page039",
+    "fileName" : "OPS/page039.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5a05a22c8eb8b4b35a8058703c2bd4ce3be5a757b06cb81c9e9fbfd8457",
+    "isSpineItem" : true,
+    "spineIndex" : 38,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page040",
+    "fileName" : "OPS/page040.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "aca957d8c33639a9511bc2efaa55df4581576458b88b01da2aba121146fce",
+    "isSpineItem" : true,
+    "spineIndex" : 39,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page041",
+    "fileName" : "OPS/page041.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "995913a2c6d18182ff5c3873b7ea3747e314e8329cbbd31afd6a8fe905a",
+    "isSpineItem" : true,
+    "spineIndex" : 40,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page042",
+    "fileName" : "OPS/page042.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e7153c6f618483c2d143c4ce847f8264f5f8797233757e65aa56657c589",
+    "isSpineItem" : true,
+    "spineIndex" : 41,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page043",
+    "fileName" : "OPS/page043.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1773201a9ef5cf6cc32453685fc95aa7c93470be2396385b9415c917ea7ca6",
+    "isSpineItem" : true,
+    "spineIndex" : 42,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page044",
+    "fileName" : "OPS/page044.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5debc1fafe10fb4321b493cf3a606c7ef4d13b51d179b9eecaad618fc05561a3",
+    "isSpineItem" : true,
+    "spineIndex" : 43,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page045",
+    "fileName" : "OPS/page045.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2a3d279579658dfcd1da2c66d6ce116d8b8ba6d1e86cc6c578d1b4252aca5",
+    "isSpineItem" : true,
+    "spineIndex" : 44,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page046",
+    "fileName" : "OPS/page046.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b76ff1672b3e021854ee89a38d9ca1d74d58f56d7da49a32fbde38b70945d",
+    "isSpineItem" : true,
+    "spineIndex" : 45,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page047",
+    "fileName" : "OPS/page047.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "405ebb6ed1fe5fb0bd35bbfd4a188bbf8738a79bee3ff9991492782d2e1e696",
+    "isSpineItem" : true,
+    "spineIndex" : 46,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page048",
+    "fileName" : "OPS/page048.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c381aafc6cd24d2495f5a8337317c30122cc6ee249fa4ac7ac97b6cef81",
+    "isSpineItem" : true,
+    "spineIndex" : 47,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page049",
+    "fileName" : "OPS/page049.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b85169a8539d5719aad76a7bc55d0793e929a34278a569e45d3fb6f6eda6c8",
+    "isSpineItem" : true,
+    "spineIndex" : 48,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page050",
+    "fileName" : "OPS/page050.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c4d3925174787a9768fa2d7dca3c9b73bf5a62e62696daecc957e3648d42719",
+    "isSpineItem" : true,
+    "spineIndex" : 49,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page051",
+    "fileName" : "OPS/page051.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7674fdf7eccfacd36a277dbfde1199da967f5913d554ff323045286beda",
+    "isSpineItem" : true,
+    "spineIndex" : 50,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page052",
+    "fileName" : "OPS/page052.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "24885e81f86ca0c5f04a795ed3f485503f9dc91cfc74b10e8e2b0f22f60adf8",
+    "isSpineItem" : true,
+    "spineIndex" : 51,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page053",
+    "fileName" : "OPS/page053.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cbe7d3682cf9d93e451ec56d74d4ba6be69f21de986ae34830522882615f",
+    "isSpineItem" : true,
+    "spineIndex" : 52,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page054",
+    "fileName" : "OPS/page054.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "71a167ac84bac65f1462bb3983e1455b652b7cf1ac1d4a8d2f2e2b1d4749b8",
+    "isSpineItem" : true,
+    "spineIndex" : 53,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page055",
+    "fileName" : "OPS/page055.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2c7966bc1b8b3e4a363ff41c720c5f5f14b33e3945ad67832287d6dd7ad17b",
+    "isSpineItem" : true,
+    "spineIndex" : 54,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page056",
+    "fileName" : "OPS/page056.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5025384da7ba8385bd4c5d01b78ada6624eaff0d2557b336eb9ebd675f3a13",
+    "isSpineItem" : true,
+    "spineIndex" : 55,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page057",
+    "fileName" : "OPS/page057.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ac2824db1f68f0a212e42c826b87d35aebd746146f69cdab486a5c211745a5b",
+    "isSpineItem" : true,
+    "spineIndex" : 56,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page058",
+    "fileName" : "OPS/page058.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f98b4b77aee0272926ff429b8c875795e4caa8b1e9c96ca43794af9f1a6f7f",
+    "isSpineItem" : true,
+    "spineIndex" : 57,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page059",
+    "fileName" : "OPS/page059.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "eb27973b8ab3382385bb28adfb0a2355dda4f0d992a417d3df98148594305f",
+    "isSpineItem" : true,
+    "spineIndex" : 58,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page060",
+    "fileName" : "OPS/page060.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "9076dbacdedfdaf74c2a0a529286849da61ff566d20a6f5479813988247d444",
+    "isSpineItem" : true,
+    "spineIndex" : 59,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page061",
+    "fileName" : "OPS/page061.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "20fe9168777da1d82f27562975d2d3c5262c509a13196955e72ad8cf03a56",
+    "isSpineItem" : true,
+    "spineIndex" : 60,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page062",
+    "fileName" : "OPS/page062.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b18bbe4a9859ae318a65851bb82cde4e7c3735ad0c53eb5cb3a2ee946d681ec",
+    "isSpineItem" : true,
+    "spineIndex" : 61,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page063",
+    "fileName" : "OPS/page063.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a869284f928f933dab3d89838a67b50dd7aa7adc48a7429ebd5c4d56996f483",
+    "isSpineItem" : true,
+    "spineIndex" : 62,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page064",
+    "fileName" : "OPS/page064.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "632783cc18ab1cb5936845d1d613a58e9e7ab944976c16c7791ad967724cfa99",
+    "isSpineItem" : true,
+    "spineIndex" : 63,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page065",
+    "fileName" : "OPS/page065.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1e8a457f349f6c15ef536139c18d9ae468101ba56eee55f7f8d028344179db",
+    "isSpineItem" : true,
+    "spineIndex" : 64,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page066",
+    "fileName" : "OPS/page066.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f738af98f87f6fe5b33289d5cfdaf64d6802cdb8e88867f9ad2c452f06848a0",
+    "isSpineItem" : true,
+    "spineIndex" : 65,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page067",
+    "fileName" : "OPS/page067.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "8ba47355d9e69f388fe4f893f26cb6a3ee4f41c411e94752962a096d3a5fa5",
+    "isSpineItem" : true,
+    "spineIndex" : 66,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page068",
+    "fileName" : "OPS/page068.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e86ba831b63134deb3ce5f662045ceed19415c24e4fcad2f58bcb4241eaf",
+    "isSpineItem" : true,
+    "spineIndex" : 67,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page069",
+    "fileName" : "OPS/page069.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f61b1c14c0261e96368b6317ee586f19eec9a20846ac6fe06d7150e81b4a6e",
+    "isSpineItem" : true,
+    "spineIndex" : 68,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page070",
+    "fileName" : "OPS/page070.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "98dba438a4dce9fd69f9f653d52237ddb55b7d8bf23ebd5cc0bf98f3451df",
+    "isSpineItem" : true,
+    "spineIndex" : 69,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page071",
+    "fileName" : "OPS/page071.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "412274eab1e2b26c7b2195cf88cdb299799f388a423e885b85de169c7fe4",
+    "isSpineItem" : true,
+    "spineIndex" : 70,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page072",
+    "fileName" : "OPS/page072.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "de82868c50d9dd2c91d8834c772fd434f2f7d194f7a3d7bb47db518984b1e4",
+    "isSpineItem" : true,
+    "spineIndex" : 71,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page073",
+    "fileName" : "OPS/page073.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cda3dffac17c5e076bea4812ceb220f6f24d8f60f9ef5a3a8b1b89c85615",
+    "isSpineItem" : true,
+    "spineIndex" : 72,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page074",
+    "fileName" : "OPS/page074.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "fedce17295db5f4bf65bf73be82f948d9d2fda8c4c51aea7db43d518da8cf7",
+    "isSpineItem" : true,
+    "spineIndex" : 73,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page075",
+    "fileName" : "OPS/page075.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d44d599b894b3dbc99a7fc12c186638a78c34e16b40ae10e7f3606cc0263fca",
+    "isSpineItem" : true,
+    "spineIndex" : 74,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page076",
+    "fileName" : "OPS/page076.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e269a88ef01b868311cae7bd653db8e331eb9a39f66f80713db79af03d441383",
+    "isSpineItem" : true,
+    "spineIndex" : 75,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page077",
+    "fileName" : "OPS/page077.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a999b61423697a1cd7bdee8d104c5da7ba8c81d0c6326785ccdd51b45be8326",
+    "isSpineItem" : true,
+    "spineIndex" : 76,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page078",
+    "fileName" : "OPS/page078.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "4fde977ccd331bf6405daefed33b59775ebf66c6e9b2a35298956fee53c9c96e",
+    "isSpineItem" : true,
+    "spineIndex" : 77,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page079",
+    "fileName" : "OPS/page079.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "134d56bb4de036d968737f9d89d6426a517ac88bbdb4e902317c8d8386c8a8",
+    "isSpineItem" : true,
+    "spineIndex" : 78,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page080",
+    "fileName" : "OPS/page080.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f11147a8b209e3431c67867897c958c3fe29165b30c5667f436fc222a22a8",
+    "isSpineItem" : true,
+    "spineIndex" : 79,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page081",
+    "fileName" : "OPS/page081.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a1c6387349704fdff8342f125650cb52fb4ce9c59bf8a737a3a1ae6712208093",
+    "isSpineItem" : true,
+    "spineIndex" : 80,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page082",
+    "fileName" : "OPS/page082.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3daa5340e738bf7e1b913418f4fd4846d379ab2b98040d814b9508cb6f7f8",
+    "isSpineItem" : true,
+    "spineIndex" : 81,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page083",
+    "fileName" : "OPS/page083.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e35ddc1c2e3845b046f2ac73a6d3bac4a2abcc8899491851cb6cfd24e583b",
+    "isSpineItem" : true,
+    "spineIndex" : 82,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page084",
+    "fileName" : "OPS/page084.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e6391eff26d6694e7d6b515815bac0edfcc692784299fc542aa80406ab8e273",
+    "isSpineItem" : true,
+    "spineIndex" : 83,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page085",
+    "fileName" : "OPS/page085.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5ec49fa9fd9c911b67fff9745623ed7d543e8bdf4d8c5a148ff813ccf52e54",
+    "isSpineItem" : true,
+    "spineIndex" : 84,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page086",
+    "fileName" : "OPS/page086.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "55859fe66f31bdb8b417a2fe43a1e2968bc218a9884304310e2e7bacea179",
+    "isSpineItem" : true,
+    "spineIndex" : 85,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page087",
+    "fileName" : "OPS/page087.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d2334680ea3c33bbefce4c99c6c89daaec7c8b32461fadf133493ed6b16152ff",
+    "isSpineItem" : true,
+    "spineIndex" : 86,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page088",
+    "fileName" : "OPS/page088.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2d3d7495edda52b677acbf78293477fde2177de76f798675af2244f0e9dd61",
+    "isSpineItem" : true,
+    "spineIndex" : 87,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page089",
+    "fileName" : "OPS/page089.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cd494d5023a9bf71ac6156c34592ca365bd9b30e1dccba0e9346edeab7c",
+    "isSpineItem" : true,
+    "spineIndex" : 88,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page090",
+    "fileName" : "OPS/page090.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b3585e79565d13f9b57e49ded1fb5be5eb4065cca7bc1d53207cd0ecaeed349c",
+    "isSpineItem" : true,
+    "spineIndex" : 89,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page091",
+    "fileName" : "OPS/page091.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1d2ba9558df4a34c9ae832b86b2adb067d93f7fd7e7a86326fd4a7335b466",
+    "isSpineItem" : true,
+    "spineIndex" : 90,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page092",
+    "fileName" : "OPS/page092.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ec937edcf87d479e2cccaada9aafe9a99bffe7d93605dd94ec662cefd320",
+    "isSpineItem" : true,
+    "spineIndex" : 91,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page093",
+    "fileName" : "OPS/page093.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ef904680b26192e28dc527b52db23dd07476d1cd2e3a39f498e6d28347379dd",
+    "isSpineItem" : true,
+    "spineIndex" : 92,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page094",
+    "fileName" : "OPS/page094.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "68efdc11ef3a261246209df8d05d6bfdd7b471959b6bfaee31bc180c41fe13f",
+    "isSpineItem" : true,
+    "spineIndex" : 93,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page095",
+    "fileName" : "OPS/page095.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "8531fc15621643a8956860594c1d4915be54611a55f9c8c059d35aa43f4b8f",
+    "isSpineItem" : true,
+    "spineIndex" : 94,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page096",
+    "fileName" : "OPS/page096.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cd76f817c09986db1b7bbe93e795c2e26e9b324144c945cbf3e20e8bd5dd0",
+    "isSpineItem" : true,
+    "spineIndex" : 95,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page097",
+    "fileName" : "OPS/page097.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ba1d7e073c0ae48e628f35a434f5aa4cf71bb95762866374c14cdcf657",
+    "isSpineItem" : true,
+    "spineIndex" : 96,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page098",
+    "fileName" : "OPS/page098.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "55b94968d156902bb5f39c2ea4feb0ddc06dd1bebbf1eb29f5dcb62f5d7e2d",
+    "isSpineItem" : true,
+    "spineIndex" : 97,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page099",
+    "fileName" : "OPS/page099.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "19a21c9bdccb3e75ece20ccff9fb7ed185bc2ce29a8c7aca9724b1c61f46e",
+    "isSpineItem" : true,
+    "spineIndex" : 98,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page100",
+    "fileName" : "OPS/page100.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 232,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "fce184af67bf3c013bd3ab214ef2ec87b6fbfdae51f5f6c55f3519764ae8841",
+    "isSpineItem" : true,
+    "spineIndex" : 99,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  } ],
+  "messages" : [ {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 74,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page002.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page003.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page004.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page005.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page006.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page007.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page008.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page009.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page010.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page011.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page012.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page013.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page014.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page015.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page016.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page017.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page018.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page019.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page020.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page021.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page022.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page023.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page024.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page025.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page026.xhtml"
+    }, {
+      "fileName" : "There are 74 additional locations for this message.",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/content.opf
new file mode 100644
index 0000000..bf14e41
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/content.opf
@@ -0,0 +1,215 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Excessive Spine Items Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page001" href="page001.xhtml" media-type="application/xhtml+xml" />
+    <item id="page002" href="page002.xhtml" media-type="application/xhtml+xml" />
+    <item id="page003" href="page003.xhtml" media-type="application/xhtml+xml" />
+    <item id="page004" href="page004.xhtml" media-type="application/xhtml+xml" />
+    <item id="page005" href="page005.xhtml" media-type="application/xhtml+xml" />
+    <item id="page006" href="page006.xhtml" media-type="application/xhtml+xml" />
+    <item id="page007" href="page007.xhtml" media-type="application/xhtml+xml" />
+    <item id="page008" href="page008.xhtml" media-type="application/xhtml+xml" />
+    <item id="page009" href="page009.xhtml" media-type="application/xhtml+xml" />
+    <item id="page010" href="page010.xhtml" media-type="application/xhtml+xml" />
+    <item id="page011" href="page011.xhtml" media-type="application/xhtml+xml" />
+    <item id="page012" href="page012.xhtml" media-type="application/xhtml+xml" />
+    <item id="page013" href="page013.xhtml" media-type="application/xhtml+xml" />
+    <item id="page014" href="page014.xhtml" media-type="application/xhtml+xml" />
+    <item id="page015" href="page015.xhtml" media-type="application/xhtml+xml" />
+    <item id="page016" href="page016.xhtml" media-type="application/xhtml+xml" />
+    <item id="page017" href="page017.xhtml" media-type="application/xhtml+xml" />
+    <item id="page018" href="page018.xhtml" media-type="application/xhtml+xml" />
+    <item id="page019" href="page019.xhtml" media-type="application/xhtml+xml" />
+    <item id="page020" href="page020.xhtml" media-type="application/xhtml+xml" />
+    <item id="page021" href="page021.xhtml" media-type="application/xhtml+xml" />
+    <item id="page022" href="page022.xhtml" media-type="application/xhtml+xml" />
+    <item id="page023" href="page023.xhtml" media-type="application/xhtml+xml" />
+    <item id="page024" href="page024.xhtml" media-type="application/xhtml+xml" />
+    <item id="page025" href="page025.xhtml" media-type="application/xhtml+xml" />
+    <item id="page026" href="page026.xhtml" media-type="application/xhtml+xml" />
+    <item id="page027" href="page027.xhtml" media-type="application/xhtml+xml" />
+    <item id="page028" href="page028.xhtml" media-type="application/xhtml+xml" />
+    <item id="page029" href="page029.xhtml" media-type="application/xhtml+xml" />
+    <item id="page030" href="page030.xhtml" media-type="application/xhtml+xml" />
+    <item id="page031" href="page031.xhtml" media-type="application/xhtml+xml" />
+    <item id="page032" href="page032.xhtml" media-type="application/xhtml+xml" />
+    <item id="page033" href="page033.xhtml" media-type="application/xhtml+xml" />
+    <item id="page034" href="page034.xhtml" media-type="application/xhtml+xml" />
+    <item id="page035" href="page035.xhtml" media-type="application/xhtml+xml" />
+    <item id="page036" href="page036.xhtml" media-type="application/xhtml+xml" />
+    <item id="page037" href="page037.xhtml" media-type="application/xhtml+xml" />
+    <item id="page038" href="page038.xhtml" media-type="application/xhtml+xml" />
+    <item id="page039" href="page039.xhtml" media-type="application/xhtml+xml" />
+    <item id="page040" href="page040.xhtml" media-type="application/xhtml+xml" />
+    <item id="page041" href="page041.xhtml" media-type="application/xhtml+xml" />
+    <item id="page042" href="page042.xhtml" media-type="application/xhtml+xml" />
+    <item id="page043" href="page043.xhtml" media-type="application/xhtml+xml" />
+    <item id="page044" href="page044.xhtml" media-type="application/xhtml+xml" />
+    <item id="page045" href="page045.xhtml" media-type="application/xhtml+xml" />
+    <item id="page046" href="page046.xhtml" media-type="application/xhtml+xml" />
+    <item id="page047" href="page047.xhtml" media-type="application/xhtml+xml" />
+    <item id="page048" href="page048.xhtml" media-type="application/xhtml+xml" />
+    <item id="page049" href="page049.xhtml" media-type="application/xhtml+xml" />
+    <item id="page050" href="page050.xhtml" media-type="application/xhtml+xml" />
+    <item id="page051" href="page051.xhtml" media-type="application/xhtml+xml" />
+    <item id="page052" href="page052.xhtml" media-type="application/xhtml+xml" />
+    <item id="page053" href="page053.xhtml" media-type="application/xhtml+xml" />
+    <item id="page054" href="page054.xhtml" media-type="application/xhtml+xml" />
+    <item id="page055" href="page055.xhtml" media-type="application/xhtml+xml" />
+    <item id="page056" href="page056.xhtml" media-type="application/xhtml+xml" />
+    <item id="page057" href="page057.xhtml" media-type="application/xhtml+xml" />
+    <item id="page058" href="page058.xhtml" media-type="application/xhtml+xml" />
+    <item id="page059" href="page059.xhtml" media-type="application/xhtml+xml" />
+    <item id="page060" href="page060.xhtml" media-type="application/xhtml+xml" />
+    <item id="page061" href="page061.xhtml" media-type="application/xhtml+xml" />
+    <item id="page062" href="page062.xhtml" media-type="application/xhtml+xml" />
+    <item id="page063" href="page063.xhtml" media-type="application/xhtml+xml" />
+    <item id="page064" href="page064.xhtml" media-type="application/xhtml+xml" />
+    <item id="page065" href="page065.xhtml" media-type="application/xhtml+xml" />
+    <item id="page066" href="page066.xhtml" media-type="application/xhtml+xml" />
+    <item id="page067" href="page067.xhtml" media-type="application/xhtml+xml" />
+    <item id="page068" href="page068.xhtml" media-type="application/xhtml+xml" />
+    <item id="page069" href="page069.xhtml" media-type="application/xhtml+xml" />
+    <item id="page070" href="page070.xhtml" media-type="application/xhtml+xml" />
+    <item id="page071" href="page071.xhtml" media-type="application/xhtml+xml" />
+    <item id="page072" href="page072.xhtml" media-type="application/xhtml+xml" />
+    <item id="page073" href="page073.xhtml" media-type="application/xhtml+xml" />
+    <item id="page074" href="page074.xhtml" media-type="application/xhtml+xml" />
+    <item id="page075" href="page075.xhtml" media-type="application/xhtml+xml" />
+    <item id="page076" href="page076.xhtml" media-type="application/xhtml+xml" />
+    <item id="page077" href="page077.xhtml" media-type="application/xhtml+xml" />
+    <item id="page078" href="page078.xhtml" media-type="application/xhtml+xml" />
+    <item id="page079" href="page079.xhtml" media-type="application/xhtml+xml" />
+    <item id="page080" href="page080.xhtml" media-type="application/xhtml+xml" />
+    <item id="page081" href="page081.xhtml" media-type="application/xhtml+xml" />
+    <item id="page082" href="page082.xhtml" media-type="application/xhtml+xml" />
+    <item id="page083" href="page083.xhtml" media-type="application/xhtml+xml" />
+    <item id="page084" href="page084.xhtml" media-type="application/xhtml+xml" />
+    <item id="page085" href="page085.xhtml" media-type="application/xhtml+xml" />
+    <item id="page086" href="page086.xhtml" media-type="application/xhtml+xml" />
+    <item id="page087" href="page087.xhtml" media-type="application/xhtml+xml" />
+    <item id="page088" href="page088.xhtml" media-type="application/xhtml+xml" />
+    <item id="page089" href="page089.xhtml" media-type="application/xhtml+xml" />
+    <item id="page090" href="page090.xhtml" media-type="application/xhtml+xml" />
+    <item id="page091" href="page091.xhtml" media-type="application/xhtml+xml" />
+    <item id="page092" href="page092.xhtml" media-type="application/xhtml+xml" />
+    <item id="page093" href="page093.xhtml" media-type="application/xhtml+xml" />
+    <item id="page094" href="page094.xhtml" media-type="application/xhtml+xml" />
+    <item id="page095" href="page095.xhtml" media-type="application/xhtml+xml" />
+    <item id="page096" href="page096.xhtml" media-type="application/xhtml+xml" />
+    <item id="page097" href="page097.xhtml" media-type="application/xhtml+xml" />
+    <item id="page098" href="page098.xhtml" media-type="application/xhtml+xml" />
+    <item id="page099" href="page099.xhtml" media-type="application/xhtml+xml" />
+    <item id="page100" href="page100.xhtml" media-type="application/xhtml+xml" />
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page001" />
+    <itemref idref="page002" />
+    <itemref idref="page003" />
+    <itemref idref="page004" />
+    <itemref idref="page005" />
+    <itemref idref="page006" />
+    <itemref idref="page007" />
+    <itemref idref="page008" />
+    <itemref idref="page009" />
+    <itemref idref="page010" />
+    <itemref idref="page011" />
+    <itemref idref="page012" />
+    <itemref idref="page013" />
+    <itemref idref="page014" />
+    <itemref idref="page015" />
+    <itemref idref="page016" />
+    <itemref idref="page017" />
+    <itemref idref="page018" />
+    <itemref idref="page019" />
+    <itemref idref="page020" />
+    <itemref idref="page021" />
+    <itemref idref="page022" />
+    <itemref idref="page023" />
+    <itemref idref="page024" />
+    <itemref idref="page025" />
+    <itemref idref="page026" />
+    <itemref idref="page027" />
+    <itemref idref="page028" />
+    <itemref idref="page029" />
+    <itemref idref="page030" />
+    <itemref idref="page031" />
+    <itemref idref="page032" />
+    <itemref idref="page033" />
+    <itemref idref="page034" />
+    <itemref idref="page035" />
+    <itemref idref="page036" />
+    <itemref idref="page037" />
+    <itemref idref="page038" />
+    <itemref idref="page039" />
+    <itemref idref="page040" />
+    <itemref idref="page041" />
+    <itemref idref="page042" />
+    <itemref idref="page043" />
+    <itemref idref="page044" />
+    <itemref idref="page045" />
+    <itemref idref="page046" />
+    <itemref idref="page047" />
+    <itemref idref="page048" />
+    <itemref idref="page049" />
+    <itemref idref="page050" />
+    <itemref idref="page051" />
+    <itemref idref="page052" />
+    <itemref idref="page053" />
+    <itemref idref="page054" />
+    <itemref idref="page055" />
+    <itemref idref="page056" />
+    <itemref idref="page057" />
+    <itemref idref="page058" />
+    <itemref idref="page059" />
+    <itemref idref="page060" />
+    <itemref idref="page061" />
+    <itemref idref="page062" />
+    <itemref idref="page063" />
+    <itemref idref="page064" />
+    <itemref idref="page065" />
+    <itemref idref="page066" />
+    <itemref idref="page067" />
+    <itemref idref="page068" />
+    <itemref idref="page069" />
+    <itemref idref="page070" />
+    <itemref idref="page071" />
+    <itemref idref="page072" />
+    <itemref idref="page073" />
+    <itemref idref="page074" />
+    <itemref idref="page075" />
+    <itemref idref="page076" />
+    <itemref idref="page077" />
+    <itemref idref="page078" />
+    <itemref idref="page079" />
+    <itemref idref="page080" />
+    <itemref idref="page081" />
+    <itemref idref="page082" />
+    <itemref idref="page083" />
+    <itemref idref="page084" />
+    <itemref idref="page085" />
+    <itemref idref="page086" />
+    <itemref idref="page087" />
+    <itemref idref="page088" />
+    <itemref idref="page089" />
+    <itemref idref="page090" />
+    <itemref idref="page091" />
+    <itemref idref="page092" />
+    <itemref idref="page093" />
+    <itemref idref="page094" />
+    <itemref idref="page095" />
+    <itemref idref="page096" />
+    <itemref idref="page097" />
+    <itemref idref="page098" />
+    <itemref idref="page099" />
+    <itemref idref="page100" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page001.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page001.xhtml
new file mode 100644
index 0000000..cce48f5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page001.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 1</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 1</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page002.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page002.xhtml
new file mode 100644
index 0000000..247bdb6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page002.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 2</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 2</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page003.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page003.xhtml
new file mode 100644
index 0000000..9172f6d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page003.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 3</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 3</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page004.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page004.xhtml
new file mode 100644
index 0000000..0223501
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page004.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 4</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 4</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page005.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page005.xhtml
new file mode 100644
index 0000000..9fb5bc3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page005.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 5</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 5</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page006.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page006.xhtml
new file mode 100644
index 0000000..37f6201
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page006.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 6</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 6</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page007.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page007.xhtml
new file mode 100644
index 0000000..2ce9cd7
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page007.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 7</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 7</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page008.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page008.xhtml
new file mode 100644
index 0000000..f075174
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page008.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 8</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 8</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page009.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page009.xhtml
new file mode 100644
index 0000000..aaaf176
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page009.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 9</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 9</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page010.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page010.xhtml
new file mode 100644
index 0000000..4c7edbc
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page010.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 10</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 10</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page011.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page011.xhtml
new file mode 100644
index 0000000..9fda529
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page011.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 11</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 11</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page012.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page012.xhtml
new file mode 100644
index 0000000..5de89da
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page012.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 12</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 12</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page013.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page013.xhtml
new file mode 100644
index 0000000..c03d05d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page013.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 13</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 13</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page014.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page014.xhtml
new file mode 100644
index 0000000..0d82f8c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page014.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 14</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 14</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page015.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page015.xhtml
new file mode 100644
index 0000000..5c561ff
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page015.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 15</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 15</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page016.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page016.xhtml
new file mode 100644
index 0000000..19fbc36
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page016.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 16</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 16</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page017.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page017.xhtml
new file mode 100644
index 0000000..dc2214a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page017.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 17</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 17</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page018.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page018.xhtml
new file mode 100644
index 0000000..0612a90
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page018.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 18</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 18</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page019.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page019.xhtml
new file mode 100644
index 0000000..913be55
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page019.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 19</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 19</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page020.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page020.xhtml
new file mode 100644
index 0000000..6295ef8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page020.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 20</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 20</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page021.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page021.xhtml
new file mode 100644
index 0000000..188f3e2
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page021.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 21</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 21</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page022.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page022.xhtml
new file mode 100644
index 0000000..1c087c3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page022.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 22</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 22</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page023.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page023.xhtml
new file mode 100644
index 0000000..0793c8c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page023.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 23</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 23</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page024.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page024.xhtml
new file mode 100644
index 0000000..36072e1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page024.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 24</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 24</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page025.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page025.xhtml
new file mode 100644
index 0000000..0085ece
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page025.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 25</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 25</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page026.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page026.xhtml
new file mode 100644
index 0000000..4d258a2
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page026.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 26</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 26</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page027.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page027.xhtml
new file mode 100644
index 0000000..517a8c6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page027.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 27</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 27</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page028.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page028.xhtml
new file mode 100644
index 0000000..bd14324
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page028.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 28</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 28</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page029.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page029.xhtml
new file mode 100644
index 0000000..998a4ba
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page029.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 29</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 29</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page030.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page030.xhtml
new file mode 100644
index 0000000..4f9a60e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page030.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 30</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 30</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page031.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page031.xhtml
new file mode 100644
index 0000000..95a4d3a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page031.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 31</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 31</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page032.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page032.xhtml
new file mode 100644
index 0000000..64ff523
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page032.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 32</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 32</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page033.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page033.xhtml
new file mode 100644
index 0000000..0f38b1d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page033.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 33</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 33</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page034.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page034.xhtml
new file mode 100644
index 0000000..200cf68
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page034.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 34</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 34</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page035.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page035.xhtml
new file mode 100644
index 0000000..e29465b
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page035.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 35</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 35</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page036.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page036.xhtml
new file mode 100644
index 0000000..21dd3e8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page036.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 36</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 36</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page037.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page037.xhtml
new file mode 100644
index 0000000..636bb2f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page037.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 37</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 37</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page038.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page038.xhtml
new file mode 100644
index 0000000..b3b46fd
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page038.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 38</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 38</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page039.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page039.xhtml
new file mode 100644
index 0000000..a5f688c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page039.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 39</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 39</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page040.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page040.xhtml
new file mode 100644
index 0000000..10fc38f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page040.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 40</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 40</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page041.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page041.xhtml
new file mode 100644
index 0000000..16c0ef9
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page041.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 41</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 41</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page042.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page042.xhtml
new file mode 100644
index 0000000..d9addb8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page042.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 42</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 42</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page043.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page043.xhtml
new file mode 100644
index 0000000..dea75bb
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page043.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 43</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 43</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page044.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page044.xhtml
new file mode 100644
index 0000000..a8fa9e5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page044.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 44</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 44</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page045.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page045.xhtml
new file mode 100644
index 0000000..36c4561
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page045.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 45</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 45</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page046.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page046.xhtml
new file mode 100644
index 0000000..3f02a88
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page046.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 46</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 46</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page047.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page047.xhtml
new file mode 100644
index 0000000..1067815
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page047.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 47</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 47</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page048.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page048.xhtml
new file mode 100644
index 0000000..3d2f541
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page048.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 48</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 48</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page049.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page049.xhtml
new file mode 100644
index 0000000..182c0db
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page049.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 49</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 49</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page050.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page050.xhtml
new file mode 100644
index 0000000..6d90d7c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page050.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 50</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 50</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page051.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page051.xhtml
new file mode 100644
index 0000000..fb0ac3f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page051.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 51</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 51</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page052.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page052.xhtml
new file mode 100644
index 0000000..7eb05ce
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page052.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 52</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 52</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page053.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page053.xhtml
new file mode 100644
index 0000000..db27697
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page053.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 53</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 53</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page054.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page054.xhtml
new file mode 100644
index 0000000..1e15d7f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page054.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 54</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 54</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page055.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page055.xhtml
new file mode 100644
index 0000000..74df7fa
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page055.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 55</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 55</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page056.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page056.xhtml
new file mode 100644
index 0000000..261440e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page056.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 56</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 56</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page057.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page057.xhtml
new file mode 100644
index 0000000..f47e942
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page057.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 57</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 57</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page058.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page058.xhtml
new file mode 100644
index 0000000..77a5645
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page058.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 58</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 58</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page059.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page059.xhtml
new file mode 100644
index 0000000..ffd7df2
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page059.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 59</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 59</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page060.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page060.xhtml
new file mode 100644
index 0000000..0458000
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page060.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 60</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 60</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page061.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page061.xhtml
new file mode 100644
index 0000000..b4e5760
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page061.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 61</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 61</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page062.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page062.xhtml
new file mode 100644
index 0000000..ca63e74
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page062.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 62</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 62</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page063.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page063.xhtml
new file mode 100644
index 0000000..9bdefc4
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page063.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 63</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 63</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page064.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page064.xhtml
new file mode 100644
index 0000000..635b630
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page064.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 64</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 64</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page065.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page065.xhtml
new file mode 100644
index 0000000..231e7c2
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page065.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 65</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 65</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page066.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page066.xhtml
new file mode 100644
index 0000000..05c27f0
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page066.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 66</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 66</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page067.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page067.xhtml
new file mode 100644
index 0000000..4e2a9f9
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page067.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 67</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 67</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page068.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page068.xhtml
new file mode 100644
index 0000000..25f13e5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page068.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 68</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 68</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page069.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page069.xhtml
new file mode 100644
index 0000000..2cb4dfb
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page069.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 69</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 69</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page070.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page070.xhtml
new file mode 100644
index 0000000..ef94a7a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page070.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 70</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 70</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page071.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page071.xhtml
new file mode 100644
index 0000000..355571a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page071.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 71</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 71</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page072.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page072.xhtml
new file mode 100644
index 0000000..3de4a4f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page072.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 72</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 72</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page073.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page073.xhtml
new file mode 100644
index 0000000..dab8821
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page073.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 73</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 73</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page074.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page074.xhtml
new file mode 100644
index 0000000..f6b8767
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page074.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 74</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 74</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page075.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page075.xhtml
new file mode 100644
index 0000000..e5613b1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page075.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 75</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 75</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page076.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page076.xhtml
new file mode 100644
index 0000000..36c4a71
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page076.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 76</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 76</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page077.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page077.xhtml
new file mode 100644
index 0000000..e8d0b34
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page077.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 77</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 77</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page078.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page078.xhtml
new file mode 100644
index 0000000..bd44a63
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page078.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 78</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 78</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page079.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page079.xhtml
new file mode 100644
index 0000000..e6bfa21
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page079.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 79</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 79</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page080.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page080.xhtml
new file mode 100644
index 0000000..88246b7
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page080.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 80</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 80</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page081.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page081.xhtml
new file mode 100644
index 0000000..e0a5cb6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page081.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 81</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 81</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page082.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page082.xhtml
new file mode 100644
index 0000000..e9c3f95
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page082.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 82</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 82</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page083.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page083.xhtml
new file mode 100644
index 0000000..ebfdb36
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page083.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 83</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 83</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page084.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page084.xhtml
new file mode 100644
index 0000000..736b65d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page084.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 84</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 84</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page085.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page085.xhtml
new file mode 100644
index 0000000..45406e1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page085.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 85</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 85</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page086.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page086.xhtml
new file mode 100644
index 0000000..4e0f54e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page086.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 86</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 86</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page087.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page087.xhtml
new file mode 100644
index 0000000..036b828
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page087.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 87</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 87</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page088.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page088.xhtml
new file mode 100644
index 0000000..733ce26
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page088.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 88</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 88</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page089.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page089.xhtml
new file mode 100644
index 0000000..abf1737
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page089.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 89</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 89</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page090.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page090.xhtml
new file mode 100644
index 0000000..880b3e6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page090.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 90</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 90</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page091.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page091.xhtml
new file mode 100644
index 0000000..a613243
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page091.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 91</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 91</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page092.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page092.xhtml
new file mode 100644
index 0000000..71a4057
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page092.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 92</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 92</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page093.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page093.xhtml
new file mode 100644
index 0000000..c42fabe
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page093.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 93</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 93</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page094.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page094.xhtml
new file mode 100644
index 0000000..d2e2ee5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page094.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 94</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 94</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page095.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page095.xhtml
new file mode 100644
index 0000000..9f4d59e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page095.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 95</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 95</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page096.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page096.xhtml
new file mode 100644
index 0000000..a7f9835
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page096.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 96</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 96</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page097.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page097.xhtml
new file mode 100644
index 0000000..e3de10d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page097.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 97</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 97</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page098.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page098.xhtml
new file mode 100644
index 0000000..6b81405
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page098.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 98</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 98</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page099.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page099.xhtml
new file mode 100644
index 0000000..bbba065
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page099.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 99</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 99</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page100.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page100.xhtml
new file mode 100644
index 0000000..caaddb0
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/page100.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 100</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 100</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/toc.ncx
new file mode 100644
index 0000000..c9317ec
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page001.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/toc.xhtml
new file mode 100644
index 0000000..1863e63
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="page001.xhtml">Page 1</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_expected_results.json
new file mode 100644
index 0000000..89dde9c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_expected_results.json
@@ -0,0 +1,2789 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3.epub",
+    "filename" : "Excessive_Spine_Items_epub3.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:44",
+    "elapsedTime" : 956,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 5
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Excessive Spine Items Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 100,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 7539,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 1173,
+    "uncompressedSize" : 12037,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3fc34127e0828aa37668c2b81794fe51ed88057cc1b5797b83fd21c78c39cf",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 294,
+    "uncompressedSize" : 557,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b324945e2ef6588e881e99ec48a96949a9dcf96760d477943ff64ef063b2e63b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page001.xhtml" ]
+  }, {
+    "id" : "page001",
+    "fileName" : "OPS/page001.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 150,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7d2ab8a3ea3618e7b6ede0db69bcdf9796e82e12c8dcf4de9e516772fb707b79",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page002",
+    "fileName" : "OPS/page002.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "64d6ffb6f5b0eac4989678c7a85252341875c80d151a7a6bf19b7bd556fda5",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page003",
+    "fileName" : "OPS/page003.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 150,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "63451ed1f55127a7723328bd510dae3525c3bee2311f083fe1f4c864ee196",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page004",
+    "fileName" : "OPS/page004.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b5c1fe7d9f5fc2bc3031646c9ecdf472a524bce7fea32b29f5a1c8299319f4d",
+    "isSpineItem" : true,
+    "spineIndex" : 3,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page005",
+    "fileName" : "OPS/page005.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b2a15669d1f7ea52d8da18dda71c9dae4f6f62663ca5ebeae4fbb30a8d73abc",
+    "isSpineItem" : true,
+    "spineIndex" : 4,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page006",
+    "fileName" : "OPS/page006.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "452377d4944412c1c4ca582925d24b3b5bcfebb35302fa4da6655de137a78",
+    "isSpineItem" : true,
+    "spineIndex" : 5,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page007",
+    "fileName" : "OPS/page007.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3427944296e459c85cc9182068d2192ac7f534e3ae66aef566d5a967d08727",
+    "isSpineItem" : true,
+    "spineIndex" : 6,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page008",
+    "fileName" : "OPS/page008.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c6c1d96ff16227eefe6ad8ef693f21d5b7b1331e3812b8ba623dd8256eb",
+    "isSpineItem" : true,
+    "spineIndex" : 7,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page009",
+    "fileName" : "OPS/page009.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 150,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a3142e9867f083fb72fd3dbc2cc7e531d0198dff56f8dc6d515bf9e6dd45d",
+    "isSpineItem" : true,
+    "spineIndex" : 8,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page010",
+    "fileName" : "OPS/page010.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "8cf8924a7e5a6aab4766c0998b54ae037b9e7ef27bdac80a496ffbc3255c56",
+    "isSpineItem" : true,
+    "spineIndex" : 9,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page011",
+    "fileName" : "OPS/page011.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c99863ef3e9455c115b834c864ac4f7dc516df4b8f15b2f363a7f5a2757",
+    "isSpineItem" : true,
+    "spineIndex" : 10,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page012",
+    "fileName" : "OPS/page012.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "6c7aff599f1edcfc120488650c3f9c40cbe7ecd7f58219a112b161d66a82e",
+    "isSpineItem" : true,
+    "spineIndex" : 11,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page013",
+    "fileName" : "OPS/page013.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "91301eb941ff3cc41884eb8c4337992f2c6e4e5b19b57e50dd298081fef",
+    "isSpineItem" : true,
+    "spineIndex" : 12,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page014",
+    "fileName" : "OPS/page014.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "82a1bb4ec2b92c647bc393f3a11fa3ed65b7ccde455ea9c890371070c64767",
+    "isSpineItem" : true,
+    "spineIndex" : 13,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page015",
+    "fileName" : "OPS/page015.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "32ad872f913d74cb2b180d73070f74a7a98f58e87f43a792a1bd41f6b1b8acc",
+    "isSpineItem" : true,
+    "spineIndex" : 14,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page016",
+    "fileName" : "OPS/page016.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5427accc914bb059d9273abe5d6ca3b61d63127d956aeaac878ed2106f596",
+    "isSpineItem" : true,
+    "spineIndex" : 15,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page017",
+    "fileName" : "OPS/page017.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3458e01c339999b7c4f4b1a640dfe77535e768a8ce73e1f29717fa85149f695",
+    "isSpineItem" : true,
+    "spineIndex" : 16,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page018",
+    "fileName" : "OPS/page018.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "49f9ab1633f381b3b56ca8b483c1d2b32a7d211aa8763993f4ece118233a8620",
+    "isSpineItem" : true,
+    "spineIndex" : 17,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page019",
+    "fileName" : "OPS/page019.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5adce7dffc9c3c74c24643ec147be776fe558fd7e576865e73f5a63bfcfd9a9",
+    "isSpineItem" : true,
+    "spineIndex" : 18,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page020",
+    "fileName" : "OPS/page020.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f3bb97c37986fe195f6e74397bb5885d58b258bcb32534feacd6ca70ccd8f78d",
+    "isSpineItem" : true,
+    "spineIndex" : 19,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page021",
+    "fileName" : "OPS/page021.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7f436689c070ae2a98e1da4e3a45e3214b7b5e8b209055b5d84f7089ace223",
+    "isSpineItem" : true,
+    "spineIndex" : 20,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page022",
+    "fileName" : "OPS/page022.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5f35f0d22453c6b4bc8f3dca778a1fcdda6fd54e765a0afcbeec3f36a4e6a4c",
+    "isSpineItem" : true,
+    "spineIndex" : 21,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page023",
+    "fileName" : "OPS/page023.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1daa62312f7d05a24b3057ed1ee098841cb67b2f66365e5ebb531d3c3a928",
+    "isSpineItem" : true,
+    "spineIndex" : 22,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page024",
+    "fileName" : "OPS/page024.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "172ffe2031a35c8641e07af6f63c729066c89e6618ba9e49b617c39381a7f5ae",
+    "isSpineItem" : true,
+    "spineIndex" : 23,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page025",
+    "fileName" : "OPS/page025.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "83d84d664f747629189458658c70ce3d87a7537a4ef85463fbf256472f8123",
+    "isSpineItem" : true,
+    "spineIndex" : 24,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page026",
+    "fileName" : "OPS/page026.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1bc03887b825d5681b113b84bf262979f561c5a6bbe3b2e47059541191ff",
+    "isSpineItem" : true,
+    "spineIndex" : 25,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page027",
+    "fileName" : "OPS/page027.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "161f1ebafd3f6fa7021d73f461899ad68bea5e1591c1f3573c69f85a657ec",
+    "isSpineItem" : true,
+    "spineIndex" : 26,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page028",
+    "fileName" : "OPS/page028.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cc9aee84c822d8f15fecf82710dfccccab678a73618487d47a0f4ddfcc54f2",
+    "isSpineItem" : true,
+    "spineIndex" : 27,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page029",
+    "fileName" : "OPS/page029.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3c57673fc1a1af647ef2299ddcf2393ab49ed5575e224bcdd87f971b582f67",
+    "isSpineItem" : true,
+    "spineIndex" : 28,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page030",
+    "fileName" : "OPS/page030.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "84e3d66ef9556d946dc41bfa8fb375ed6e365f814e12f1c0dd151669ce2582",
+    "isSpineItem" : true,
+    "spineIndex" : 29,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page031",
+    "fileName" : "OPS/page031.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "bd8cf76b86646cf6e1aa7b1f9ce7bea1b94594aa08d5aef31fdd2173934065",
+    "isSpineItem" : true,
+    "spineIndex" : 30,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page032",
+    "fileName" : "OPS/page032.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "121d4a45f06c3fd7d76fc58567d161221bd57c8592539ab7f8f53ee4dd39db4",
+    "isSpineItem" : true,
+    "spineIndex" : 31,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page033",
+    "fileName" : "OPS/page033.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "421f59195f6a20bdfd1f622fb8319bc96358a4a530c89c4f4a1e905bd49216",
+    "isSpineItem" : true,
+    "spineIndex" : 32,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page034",
+    "fileName" : "OPS/page034.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "67be833a53c958f35cde18b6a7aac496fa665eb1eaafcd68a58c3cad5a1c54",
+    "isSpineItem" : true,
+    "spineIndex" : 33,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page035",
+    "fileName" : "OPS/page035.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b46c401fdce375f7fec56e93e541a970fdf35da480e2d74cdc9cd4339d50ef57",
+    "isSpineItem" : true,
+    "spineIndex" : 34,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page036",
+    "fileName" : "OPS/page036.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "efa92e205f245167b62b7dfb7373f6abb58f76b9aedfcba2c883f24523225594",
+    "isSpineItem" : true,
+    "spineIndex" : 35,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page037",
+    "fileName" : "OPS/page037.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3adcd9d2dd9844135ad807a49b5e379e869a3f8ca795b34b458c189959a13d1",
+    "isSpineItem" : true,
+    "spineIndex" : 36,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page038",
+    "fileName" : "OPS/page038.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "fa92080ab50ddf69fce95567d31ca55d46745173e307de1c28beff48fd6f2",
+    "isSpineItem" : true,
+    "spineIndex" : 37,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page039",
+    "fileName" : "OPS/page039.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5a05a22c8eb8b4b35a8058703c2bd4ce3be5a757b06cb81c9e9fbfd8457",
+    "isSpineItem" : true,
+    "spineIndex" : 38,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page040",
+    "fileName" : "OPS/page040.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "aca957d8c33639a9511bc2efaa55df4581576458b88b01da2aba121146fce",
+    "isSpineItem" : true,
+    "spineIndex" : 39,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page041",
+    "fileName" : "OPS/page041.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "995913a2c6d18182ff5c3873b7ea3747e314e8329cbbd31afd6a8fe905a",
+    "isSpineItem" : true,
+    "spineIndex" : 40,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page042",
+    "fileName" : "OPS/page042.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e7153c6f618483c2d143c4ce847f8264f5f8797233757e65aa56657c589",
+    "isSpineItem" : true,
+    "spineIndex" : 41,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page043",
+    "fileName" : "OPS/page043.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1773201a9ef5cf6cc32453685fc95aa7c93470be2396385b9415c917ea7ca6",
+    "isSpineItem" : true,
+    "spineIndex" : 42,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page044",
+    "fileName" : "OPS/page044.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5debc1fafe10fb4321b493cf3a606c7ef4d13b51d179b9eecaad618fc05561a3",
+    "isSpineItem" : true,
+    "spineIndex" : 43,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page045",
+    "fileName" : "OPS/page045.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2a3d279579658dfcd1da2c66d6ce116d8b8ba6d1e86cc6c578d1b4252aca5",
+    "isSpineItem" : true,
+    "spineIndex" : 44,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page046",
+    "fileName" : "OPS/page046.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b76ff1672b3e021854ee89a38d9ca1d74d58f56d7da49a32fbde38b70945d",
+    "isSpineItem" : true,
+    "spineIndex" : 45,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page047",
+    "fileName" : "OPS/page047.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "405ebb6ed1fe5fb0bd35bbfd4a188bbf8738a79bee3ff9991492782d2e1e696",
+    "isSpineItem" : true,
+    "spineIndex" : 46,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page048",
+    "fileName" : "OPS/page048.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c381aafc6cd24d2495f5a8337317c30122cc6ee249fa4ac7ac97b6cef81",
+    "isSpineItem" : true,
+    "spineIndex" : 47,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page049",
+    "fileName" : "OPS/page049.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b85169a8539d5719aad76a7bc55d0793e929a34278a569e45d3fb6f6eda6c8",
+    "isSpineItem" : true,
+    "spineIndex" : 48,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page050",
+    "fileName" : "OPS/page050.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c4d3925174787a9768fa2d7dca3c9b73bf5a62e62696daecc957e3648d42719",
+    "isSpineItem" : true,
+    "spineIndex" : 49,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page051",
+    "fileName" : "OPS/page051.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7674fdf7eccfacd36a277dbfde1199da967f5913d554ff323045286beda",
+    "isSpineItem" : true,
+    "spineIndex" : 50,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page052",
+    "fileName" : "OPS/page052.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "24885e81f86ca0c5f04a795ed3f485503f9dc91cfc74b10e8e2b0f22f60adf8",
+    "isSpineItem" : true,
+    "spineIndex" : 51,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page053",
+    "fileName" : "OPS/page053.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cbe7d3682cf9d93e451ec56d74d4ba6be69f21de986ae34830522882615f",
+    "isSpineItem" : true,
+    "spineIndex" : 52,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page054",
+    "fileName" : "OPS/page054.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "71a167ac84bac65f1462bb3983e1455b652b7cf1ac1d4a8d2f2e2b1d4749b8",
+    "isSpineItem" : true,
+    "spineIndex" : 53,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page055",
+    "fileName" : "OPS/page055.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2c7966bc1b8b3e4a363ff41c720c5f5f14b33e3945ad67832287d6dd7ad17b",
+    "isSpineItem" : true,
+    "spineIndex" : 54,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page056",
+    "fileName" : "OPS/page056.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5025384da7ba8385bd4c5d01b78ada6624eaff0d2557b336eb9ebd675f3a13",
+    "isSpineItem" : true,
+    "spineIndex" : 55,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page057",
+    "fileName" : "OPS/page057.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ac2824db1f68f0a212e42c826b87d35aebd746146f69cdab486a5c211745a5b",
+    "isSpineItem" : true,
+    "spineIndex" : 56,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page058",
+    "fileName" : "OPS/page058.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f98b4b77aee0272926ff429b8c875795e4caa8b1e9c96ca43794af9f1a6f7f",
+    "isSpineItem" : true,
+    "spineIndex" : 57,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page059",
+    "fileName" : "OPS/page059.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "eb27973b8ab3382385bb28adfb0a2355dda4f0d992a417d3df98148594305f",
+    "isSpineItem" : true,
+    "spineIndex" : 58,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page060",
+    "fileName" : "OPS/page060.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "9076dbacdedfdaf74c2a0a529286849da61ff566d20a6f5479813988247d444",
+    "isSpineItem" : true,
+    "spineIndex" : 59,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page061",
+    "fileName" : "OPS/page061.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "20fe9168777da1d82f27562975d2d3c5262c509a13196955e72ad8cf03a56",
+    "isSpineItem" : true,
+    "spineIndex" : 60,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page062",
+    "fileName" : "OPS/page062.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b18bbe4a9859ae318a65851bb82cde4e7c3735ad0c53eb5cb3a2ee946d681ec",
+    "isSpineItem" : true,
+    "spineIndex" : 61,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page063",
+    "fileName" : "OPS/page063.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a869284f928f933dab3d89838a67b50dd7aa7adc48a7429ebd5c4d56996f483",
+    "isSpineItem" : true,
+    "spineIndex" : 62,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page064",
+    "fileName" : "OPS/page064.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "632783cc18ab1cb5936845d1d613a58e9e7ab944976c16c7791ad967724cfa99",
+    "isSpineItem" : true,
+    "spineIndex" : 63,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page065",
+    "fileName" : "OPS/page065.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1e8a457f349f6c15ef536139c18d9ae468101ba56eee55f7f8d028344179db",
+    "isSpineItem" : true,
+    "spineIndex" : 64,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page066",
+    "fileName" : "OPS/page066.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f738af98f87f6fe5b33289d5cfdaf64d6802cdb8e88867f9ad2c452f06848a0",
+    "isSpineItem" : true,
+    "spineIndex" : 65,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page067",
+    "fileName" : "OPS/page067.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "8ba47355d9e69f388fe4f893f26cb6a3ee4f41c411e94752962a096d3a5fa5",
+    "isSpineItem" : true,
+    "spineIndex" : 66,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page068",
+    "fileName" : "OPS/page068.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e86ba831b63134deb3ce5f662045ceed19415c24e4fcad2f58bcb4241eaf",
+    "isSpineItem" : true,
+    "spineIndex" : 67,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page069",
+    "fileName" : "OPS/page069.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f61b1c14c0261e96368b6317ee586f19eec9a20846ac6fe06d7150e81b4a6e",
+    "isSpineItem" : true,
+    "spineIndex" : 68,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page070",
+    "fileName" : "OPS/page070.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "98dba438a4dce9fd69f9f653d52237ddb55b7d8bf23ebd5cc0bf98f3451df",
+    "isSpineItem" : true,
+    "spineIndex" : 69,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page071",
+    "fileName" : "OPS/page071.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "412274eab1e2b26c7b2195cf88cdb299799f388a423e885b85de169c7fe4",
+    "isSpineItem" : true,
+    "spineIndex" : 70,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page072",
+    "fileName" : "OPS/page072.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "de82868c50d9dd2c91d8834c772fd434f2f7d194f7a3d7bb47db518984b1e4",
+    "isSpineItem" : true,
+    "spineIndex" : 71,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page073",
+    "fileName" : "OPS/page073.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cda3dffac17c5e076bea4812ceb220f6f24d8f60f9ef5a3a8b1b89c85615",
+    "isSpineItem" : true,
+    "spineIndex" : 72,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page074",
+    "fileName" : "OPS/page074.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "fedce17295db5f4bf65bf73be82f948d9d2fda8c4c51aea7db43d518da8cf7",
+    "isSpineItem" : true,
+    "spineIndex" : 73,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page075",
+    "fileName" : "OPS/page075.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d44d599b894b3dbc99a7fc12c186638a78c34e16b40ae10e7f3606cc0263fca",
+    "isSpineItem" : true,
+    "spineIndex" : 74,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page076",
+    "fileName" : "OPS/page076.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e269a88ef01b868311cae7bd653db8e331eb9a39f66f80713db79af03d441383",
+    "isSpineItem" : true,
+    "spineIndex" : 75,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page077",
+    "fileName" : "OPS/page077.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a999b61423697a1cd7bdee8d104c5da7ba8c81d0c6326785ccdd51b45be8326",
+    "isSpineItem" : true,
+    "spineIndex" : 76,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page078",
+    "fileName" : "OPS/page078.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "4fde977ccd331bf6405daefed33b59775ebf66c6e9b2a35298956fee53c9c96e",
+    "isSpineItem" : true,
+    "spineIndex" : 77,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page079",
+    "fileName" : "OPS/page079.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "134d56bb4de036d968737f9d89d6426a517ac88bbdb4e902317c8d8386c8a8",
+    "isSpineItem" : true,
+    "spineIndex" : 78,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page080",
+    "fileName" : "OPS/page080.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f11147a8b209e3431c67867897c958c3fe29165b30c5667f436fc222a22a8",
+    "isSpineItem" : true,
+    "spineIndex" : 79,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page081",
+    "fileName" : "OPS/page081.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a1c6387349704fdff8342f125650cb52fb4ce9c59bf8a737a3a1ae6712208093",
+    "isSpineItem" : true,
+    "spineIndex" : 80,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page082",
+    "fileName" : "OPS/page082.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3daa5340e738bf7e1b913418f4fd4846d379ab2b98040d814b9508cb6f7f8",
+    "isSpineItem" : true,
+    "spineIndex" : 81,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page083",
+    "fileName" : "OPS/page083.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e35ddc1c2e3845b046f2ac73a6d3bac4a2abcc8899491851cb6cfd24e583b",
+    "isSpineItem" : true,
+    "spineIndex" : 82,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page084",
+    "fileName" : "OPS/page084.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e6391eff26d6694e7d6b515815bac0edfcc692784299fc542aa80406ab8e273",
+    "isSpineItem" : true,
+    "spineIndex" : 83,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page085",
+    "fileName" : "OPS/page085.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5ec49fa9fd9c911b67fff9745623ed7d543e8bdf4d8c5a148ff813ccf52e54",
+    "isSpineItem" : true,
+    "spineIndex" : 84,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page086",
+    "fileName" : "OPS/page086.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "55859fe66f31bdb8b417a2fe43a1e2968bc218a9884304310e2e7bacea179",
+    "isSpineItem" : true,
+    "spineIndex" : 85,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page087",
+    "fileName" : "OPS/page087.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d2334680ea3c33bbefce4c99c6c89daaec7c8b32461fadf133493ed6b16152ff",
+    "isSpineItem" : true,
+    "spineIndex" : 86,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page088",
+    "fileName" : "OPS/page088.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2d3d7495edda52b677acbf78293477fde2177de76f798675af2244f0e9dd61",
+    "isSpineItem" : true,
+    "spineIndex" : 87,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page089",
+    "fileName" : "OPS/page089.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cd494d5023a9bf71ac6156c34592ca365bd9b30e1dccba0e9346edeab7c",
+    "isSpineItem" : true,
+    "spineIndex" : 88,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page090",
+    "fileName" : "OPS/page090.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b3585e79565d13f9b57e49ded1fb5be5eb4065cca7bc1d53207cd0ecaeed349c",
+    "isSpineItem" : true,
+    "spineIndex" : 89,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page091",
+    "fileName" : "OPS/page091.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1d2ba9558df4a34c9ae832b86b2adb067d93f7fd7e7a86326fd4a7335b466",
+    "isSpineItem" : true,
+    "spineIndex" : 90,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page092",
+    "fileName" : "OPS/page092.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ec937edcf87d479e2cccaada9aafe9a99bffe7d93605dd94ec662cefd320",
+    "isSpineItem" : true,
+    "spineIndex" : 91,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page093",
+    "fileName" : "OPS/page093.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ef904680b26192e28dc527b52db23dd07476d1cd2e3a39f498e6d28347379dd",
+    "isSpineItem" : true,
+    "spineIndex" : 92,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page094",
+    "fileName" : "OPS/page094.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "68efdc11ef3a261246209df8d05d6bfdd7b471959b6bfaee31bc180c41fe13f",
+    "isSpineItem" : true,
+    "spineIndex" : 93,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page095",
+    "fileName" : "OPS/page095.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "8531fc15621643a8956860594c1d4915be54611a55f9c8c059d35aa43f4b8f",
+    "isSpineItem" : true,
+    "spineIndex" : 94,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page096",
+    "fileName" : "OPS/page096.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cd76f817c09986db1b7bbe93e795c2e26e9b324144c945cbf3e20e8bd5dd0",
+    "isSpineItem" : true,
+    "spineIndex" : 95,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page097",
+    "fileName" : "OPS/page097.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ba1d7e073c0ae48e628f35a434f5aa4cf71bb95762866374c14cdcf657",
+    "isSpineItem" : true,
+    "spineIndex" : 96,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page098",
+    "fileName" : "OPS/page098.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "55b94968d156902bb5f39c2ea4feb0ddc06dd1bebbf1eb29f5dcb62f5d7e2d",
+    "isSpineItem" : true,
+    "spineIndex" : 97,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page099",
+    "fileName" : "OPS/page099.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "19a21c9bdccb3e75ece20ccff9fb7ed185bc2ce29a8c7aca9724b1c61f46e",
+    "isSpineItem" : true,
+    "spineIndex" : 98,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page100",
+    "fileName" : "OPS/page100.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 232,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "fce184af67bf3c013bd3ab214ef2ec87b6fbfdae51f5f6c55f3519764ae8841",
+    "isSpineItem" : true,
+    "spineIndex" : 99,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 228,
+    "uncompressedSize" : 340,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "abfea65134638c40af501025a030475dcee4d279c061658147f71db7ba8b21a1",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page001.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 75,
+    "locations" : [ {
+      "fileName" : "OPS/page001.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page002.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page003.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page004.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page005.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page006.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page007.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page008.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page009.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page010.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page011.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page012.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page013.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page014.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page015.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page016.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page017.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page018.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page019.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page020.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page021.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page022.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page023.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page024.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page025.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "There are 75 additional locations for this message.",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "Excessive_Spine_Items_epub3.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-058",
+    "severity" : "USAGE",
+    "message" : "Spine item has no TOC entry reference.",
+    "additionalLocations" : 74,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page002.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page003.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page004.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page005.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page006.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page007.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page008.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page009.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page010.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page011.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page012.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page013.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page014.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page015.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page016.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page017.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page018.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page019.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page020.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page021.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page022.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page023.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page024.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page025.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page026.xhtml"
+    }, {
+      "fileName" : "There are 74 additional locations for this message.",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one TOC entry."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 74,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page002.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page003.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page004.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page005.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page006.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page007.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page008.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page009.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page010.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page011.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page012.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page013.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page014.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page015.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page016.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page017.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page018.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page019.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page020.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page021.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page022.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page023.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page024.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page025.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page026.xhtml"
+    }, {
+      "fileName" : "There are 74 additional locations for this message.",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/content.opf
new file mode 100644
index 0000000..e061ac0
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/content.opf
@@ -0,0 +1,216 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Excessive Spine Items Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+    <meta property="rendition:layout">pre-paginated</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page001" href="page001.xhtml" media-type="application/xhtml+xml" />
+    <item id="page002" href="page002.xhtml" media-type="application/xhtml+xml" />
+    <item id="page003" href="page003.xhtml" media-type="application/xhtml+xml" />
+    <item id="page004" href="page004.xhtml" media-type="application/xhtml+xml" />
+    <item id="page005" href="page005.xhtml" media-type="application/xhtml+xml" />
+    <item id="page006" href="page006.xhtml" media-type="application/xhtml+xml" />
+    <item id="page007" href="page007.xhtml" media-type="application/xhtml+xml" />
+    <item id="page008" href="page008.xhtml" media-type="application/xhtml+xml" />
+    <item id="page009" href="page009.xhtml" media-type="application/xhtml+xml" />
+    <item id="page010" href="page010.xhtml" media-type="application/xhtml+xml" />
+    <item id="page011" href="page011.xhtml" media-type="application/xhtml+xml" />
+    <item id="page012" href="page012.xhtml" media-type="application/xhtml+xml" />
+    <item id="page013" href="page013.xhtml" media-type="application/xhtml+xml" />
+    <item id="page014" href="page014.xhtml" media-type="application/xhtml+xml" />
+    <item id="page015" href="page015.xhtml" media-type="application/xhtml+xml" />
+    <item id="page016" href="page016.xhtml" media-type="application/xhtml+xml" />
+    <item id="page017" href="page017.xhtml" media-type="application/xhtml+xml" />
+    <item id="page018" href="page018.xhtml" media-type="application/xhtml+xml" />
+    <item id="page019" href="page019.xhtml" media-type="application/xhtml+xml" />
+    <item id="page020" href="page020.xhtml" media-type="application/xhtml+xml" />
+    <item id="page021" href="page021.xhtml" media-type="application/xhtml+xml" />
+    <item id="page022" href="page022.xhtml" media-type="application/xhtml+xml" />
+    <item id="page023" href="page023.xhtml" media-type="application/xhtml+xml" />
+    <item id="page024" href="page024.xhtml" media-type="application/xhtml+xml" />
+    <item id="page025" href="page025.xhtml" media-type="application/xhtml+xml" />
+    <item id="page026" href="page026.xhtml" media-type="application/xhtml+xml" />
+    <item id="page027" href="page027.xhtml" media-type="application/xhtml+xml" />
+    <item id="page028" href="page028.xhtml" media-type="application/xhtml+xml" />
+    <item id="page029" href="page029.xhtml" media-type="application/xhtml+xml" />
+    <item id="page030" href="page030.xhtml" media-type="application/xhtml+xml" />
+    <item id="page031" href="page031.xhtml" media-type="application/xhtml+xml" />
+    <item id="page032" href="page032.xhtml" media-type="application/xhtml+xml" />
+    <item id="page033" href="page033.xhtml" media-type="application/xhtml+xml" />
+    <item id="page034" href="page034.xhtml" media-type="application/xhtml+xml" />
+    <item id="page035" href="page035.xhtml" media-type="application/xhtml+xml" />
+    <item id="page036" href="page036.xhtml" media-type="application/xhtml+xml" />
+    <item id="page037" href="page037.xhtml" media-type="application/xhtml+xml" />
+    <item id="page038" href="page038.xhtml" media-type="application/xhtml+xml" />
+    <item id="page039" href="page039.xhtml" media-type="application/xhtml+xml" />
+    <item id="page040" href="page040.xhtml" media-type="application/xhtml+xml" />
+    <item id="page041" href="page041.xhtml" media-type="application/xhtml+xml" />
+    <item id="page042" href="page042.xhtml" media-type="application/xhtml+xml" />
+    <item id="page043" href="page043.xhtml" media-type="application/xhtml+xml" />
+    <item id="page044" href="page044.xhtml" media-type="application/xhtml+xml" />
+    <item id="page045" href="page045.xhtml" media-type="application/xhtml+xml" />
+    <item id="page046" href="page046.xhtml" media-type="application/xhtml+xml" />
+    <item id="page047" href="page047.xhtml" media-type="application/xhtml+xml" />
+    <item id="page048" href="page048.xhtml" media-type="application/xhtml+xml" />
+    <item id="page049" href="page049.xhtml" media-type="application/xhtml+xml" />
+    <item id="page050" href="page050.xhtml" media-type="application/xhtml+xml" />
+    <item id="page051" href="page051.xhtml" media-type="application/xhtml+xml" />
+    <item id="page052" href="page052.xhtml" media-type="application/xhtml+xml" />
+    <item id="page053" href="page053.xhtml" media-type="application/xhtml+xml" />
+    <item id="page054" href="page054.xhtml" media-type="application/xhtml+xml" />
+    <item id="page055" href="page055.xhtml" media-type="application/xhtml+xml" />
+    <item id="page056" href="page056.xhtml" media-type="application/xhtml+xml" />
+    <item id="page057" href="page057.xhtml" media-type="application/xhtml+xml" />
+    <item id="page058" href="page058.xhtml" media-type="application/xhtml+xml" />
+    <item id="page059" href="page059.xhtml" media-type="application/xhtml+xml" />
+    <item id="page060" href="page060.xhtml" media-type="application/xhtml+xml" />
+    <item id="page061" href="page061.xhtml" media-type="application/xhtml+xml" />
+    <item id="page062" href="page062.xhtml" media-type="application/xhtml+xml" />
+    <item id="page063" href="page063.xhtml" media-type="application/xhtml+xml" />
+    <item id="page064" href="page064.xhtml" media-type="application/xhtml+xml" />
+    <item id="page065" href="page065.xhtml" media-type="application/xhtml+xml" />
+    <item id="page066" href="page066.xhtml" media-type="application/xhtml+xml" />
+    <item id="page067" href="page067.xhtml" media-type="application/xhtml+xml" />
+    <item id="page068" href="page068.xhtml" media-type="application/xhtml+xml" />
+    <item id="page069" href="page069.xhtml" media-type="application/xhtml+xml" />
+    <item id="page070" href="page070.xhtml" media-type="application/xhtml+xml" />
+    <item id="page071" href="page071.xhtml" media-type="application/xhtml+xml" />
+    <item id="page072" href="page072.xhtml" media-type="application/xhtml+xml" />
+    <item id="page073" href="page073.xhtml" media-type="application/xhtml+xml" />
+    <item id="page074" href="page074.xhtml" media-type="application/xhtml+xml" />
+    <item id="page075" href="page075.xhtml" media-type="application/xhtml+xml" />
+    <item id="page076" href="page076.xhtml" media-type="application/xhtml+xml" />
+    <item id="page077" href="page077.xhtml" media-type="application/xhtml+xml" />
+    <item id="page078" href="page078.xhtml" media-type="application/xhtml+xml" />
+    <item id="page079" href="page079.xhtml" media-type="application/xhtml+xml" />
+    <item id="page080" href="page080.xhtml" media-type="application/xhtml+xml" />
+    <item id="page081" href="page081.xhtml" media-type="application/xhtml+xml" />
+    <item id="page082" href="page082.xhtml" media-type="application/xhtml+xml" />
+    <item id="page083" href="page083.xhtml" media-type="application/xhtml+xml" />
+    <item id="page084" href="page084.xhtml" media-type="application/xhtml+xml" />
+    <item id="page085" href="page085.xhtml" media-type="application/xhtml+xml" />
+    <item id="page086" href="page086.xhtml" media-type="application/xhtml+xml" />
+    <item id="page087" href="page087.xhtml" media-type="application/xhtml+xml" />
+    <item id="page088" href="page088.xhtml" media-type="application/xhtml+xml" />
+    <item id="page089" href="page089.xhtml" media-type="application/xhtml+xml" />
+    <item id="page090" href="page090.xhtml" media-type="application/xhtml+xml" />
+    <item id="page091" href="page091.xhtml" media-type="application/xhtml+xml" />
+    <item id="page092" href="page092.xhtml" media-type="application/xhtml+xml" />
+    <item id="page093" href="page093.xhtml" media-type="application/xhtml+xml" />
+    <item id="page094" href="page094.xhtml" media-type="application/xhtml+xml" />
+    <item id="page095" href="page095.xhtml" media-type="application/xhtml+xml" />
+    <item id="page096" href="page096.xhtml" media-type="application/xhtml+xml" />
+    <item id="page097" href="page097.xhtml" media-type="application/xhtml+xml" />
+    <item id="page098" href="page098.xhtml" media-type="application/xhtml+xml" />
+    <item id="page099" href="page099.xhtml" media-type="application/xhtml+xml" />
+    <item id="page100" href="page100.xhtml" media-type="application/xhtml+xml" />
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page001" />
+    <itemref idref="page002" />
+    <itemref idref="page003" />
+    <itemref idref="page004" />
+    <itemref idref="page005" />
+    <itemref idref="page006" />
+    <itemref idref="page007" />
+    <itemref idref="page008" />
+    <itemref idref="page009" />
+    <itemref idref="page010" />
+    <itemref idref="page011" />
+    <itemref idref="page012" />
+    <itemref idref="page013" />
+    <itemref idref="page014" />
+    <itemref idref="page015" />
+    <itemref idref="page016" />
+    <itemref idref="page017" />
+    <itemref idref="page018" />
+    <itemref idref="page019" />
+    <itemref idref="page020" />
+    <itemref idref="page021" />
+    <itemref idref="page022" />
+    <itemref idref="page023" />
+    <itemref idref="page024" />
+    <itemref idref="page025" />
+    <itemref idref="page026" />
+    <itemref idref="page027" />
+    <itemref idref="page028" />
+    <itemref idref="page029" />
+    <itemref idref="page030" />
+    <itemref idref="page031" />
+    <itemref idref="page032" />
+    <itemref idref="page033" />
+    <itemref idref="page034" />
+    <itemref idref="page035" />
+    <itemref idref="page036" />
+    <itemref idref="page037" />
+    <itemref idref="page038" />
+    <itemref idref="page039" />
+    <itemref idref="page040" />
+    <itemref idref="page041" />
+    <itemref idref="page042" />
+    <itemref idref="page043" />
+    <itemref idref="page044" />
+    <itemref idref="page045" />
+    <itemref idref="page046" />
+    <itemref idref="page047" />
+    <itemref idref="page048" />
+    <itemref idref="page049" />
+    <itemref idref="page050" />
+    <itemref idref="page051" />
+    <itemref idref="page052" />
+    <itemref idref="page053" />
+    <itemref idref="page054" />
+    <itemref idref="page055" />
+    <itemref idref="page056" />
+    <itemref idref="page057" />
+    <itemref idref="page058" />
+    <itemref idref="page059" />
+    <itemref idref="page060" />
+    <itemref idref="page061" />
+    <itemref idref="page062" />
+    <itemref idref="page063" />
+    <itemref idref="page064" />
+    <itemref idref="page065" />
+    <itemref idref="page066" />
+    <itemref idref="page067" />
+    <itemref idref="page068" />
+    <itemref idref="page069" />
+    <itemref idref="page070" />
+    <itemref idref="page071" />
+    <itemref idref="page072" />
+    <itemref idref="page073" />
+    <itemref idref="page074" />
+    <itemref idref="page075" />
+    <itemref idref="page076" />
+    <itemref idref="page077" />
+    <itemref idref="page078" />
+    <itemref idref="page079" />
+    <itemref idref="page080" />
+    <itemref idref="page081" />
+    <itemref idref="page082" />
+    <itemref idref="page083" />
+    <itemref idref="page084" />
+    <itemref idref="page085" />
+    <itemref idref="page086" />
+    <itemref idref="page087" />
+    <itemref idref="page088" />
+    <itemref idref="page089" />
+    <itemref idref="page090" />
+    <itemref idref="page091" />
+    <itemref idref="page092" />
+    <itemref idref="page093" />
+    <itemref idref="page094" />
+    <itemref idref="page095" />
+    <itemref idref="page096" />
+    <itemref idref="page097" />
+    <itemref idref="page098" />
+    <itemref idref="page099" />
+    <itemref idref="page100" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page001.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page001.xhtml
new file mode 100644
index 0000000..cce48f5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page001.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 1</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 1</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page002.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page002.xhtml
new file mode 100644
index 0000000..247bdb6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page002.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 2</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 2</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page003.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page003.xhtml
new file mode 100644
index 0000000..9172f6d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page003.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 3</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 3</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page004.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page004.xhtml
new file mode 100644
index 0000000..0223501
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page004.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 4</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 4</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page005.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page005.xhtml
new file mode 100644
index 0000000..9fb5bc3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page005.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 5</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 5</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page006.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page006.xhtml
new file mode 100644
index 0000000..37f6201
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page006.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 6</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 6</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page007.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page007.xhtml
new file mode 100644
index 0000000..2ce9cd7
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page007.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 7</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 7</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page008.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page008.xhtml
new file mode 100644
index 0000000..f075174
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page008.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 8</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 8</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page009.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page009.xhtml
new file mode 100644
index 0000000..aaaf176
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page009.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 9</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 9</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page010.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page010.xhtml
new file mode 100644
index 0000000..4c7edbc
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page010.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 10</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 10</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page011.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page011.xhtml
new file mode 100644
index 0000000..9fda529
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page011.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 11</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 11</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page012.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page012.xhtml
new file mode 100644
index 0000000..5de89da
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page012.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 12</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 12</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page013.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page013.xhtml
new file mode 100644
index 0000000..c03d05d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page013.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 13</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 13</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page014.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page014.xhtml
new file mode 100644
index 0000000..0d82f8c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page014.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 14</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 14</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page015.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page015.xhtml
new file mode 100644
index 0000000..5c561ff
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page015.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 15</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 15</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page016.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page016.xhtml
new file mode 100644
index 0000000..19fbc36
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page016.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 16</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 16</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page017.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page017.xhtml
new file mode 100644
index 0000000..dc2214a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page017.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 17</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 17</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page018.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page018.xhtml
new file mode 100644
index 0000000..0612a90
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page018.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 18</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 18</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page019.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page019.xhtml
new file mode 100644
index 0000000..913be55
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page019.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 19</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 19</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page020.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page020.xhtml
new file mode 100644
index 0000000..6295ef8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page020.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 20</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 20</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page021.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page021.xhtml
new file mode 100644
index 0000000..188f3e2
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page021.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 21</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 21</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page022.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page022.xhtml
new file mode 100644
index 0000000..1c087c3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page022.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 22</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 22</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page023.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page023.xhtml
new file mode 100644
index 0000000..0793c8c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page023.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 23</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 23</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page024.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page024.xhtml
new file mode 100644
index 0000000..36072e1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page024.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 24</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 24</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page025.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page025.xhtml
new file mode 100644
index 0000000..0085ece
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page025.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 25</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 25</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page026.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page026.xhtml
new file mode 100644
index 0000000..4d258a2
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page026.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 26</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 26</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page027.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page027.xhtml
new file mode 100644
index 0000000..517a8c6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page027.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 27</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 27</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page028.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page028.xhtml
new file mode 100644
index 0000000..bd14324
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page028.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 28</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 28</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page029.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page029.xhtml
new file mode 100644
index 0000000..998a4ba
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page029.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 29</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 29</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page030.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page030.xhtml
new file mode 100644
index 0000000..4f9a60e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page030.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 30</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 30</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page031.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page031.xhtml
new file mode 100644
index 0000000..95a4d3a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page031.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 31</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 31</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page032.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page032.xhtml
new file mode 100644
index 0000000..64ff523
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page032.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 32</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 32</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page033.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page033.xhtml
new file mode 100644
index 0000000..0f38b1d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page033.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 33</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 33</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page034.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page034.xhtml
new file mode 100644
index 0000000..200cf68
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page034.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 34</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 34</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page035.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page035.xhtml
new file mode 100644
index 0000000..e29465b
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page035.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 35</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 35</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page036.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page036.xhtml
new file mode 100644
index 0000000..21dd3e8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page036.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 36</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 36</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page037.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page037.xhtml
new file mode 100644
index 0000000..636bb2f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page037.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 37</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 37</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page038.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page038.xhtml
new file mode 100644
index 0000000..b3b46fd
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page038.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 38</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 38</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page039.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page039.xhtml
new file mode 100644
index 0000000..a5f688c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page039.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 39</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 39</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page040.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page040.xhtml
new file mode 100644
index 0000000..10fc38f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page040.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 40</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 40</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page041.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page041.xhtml
new file mode 100644
index 0000000..16c0ef9
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page041.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 41</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 41</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page042.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page042.xhtml
new file mode 100644
index 0000000..d9addb8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page042.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 42</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 42</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page043.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page043.xhtml
new file mode 100644
index 0000000..dea75bb
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page043.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 43</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 43</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page044.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page044.xhtml
new file mode 100644
index 0000000..a8fa9e5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page044.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 44</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 44</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page045.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page045.xhtml
new file mode 100644
index 0000000..36c4561
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page045.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 45</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 45</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page046.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page046.xhtml
new file mode 100644
index 0000000..3f02a88
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page046.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 46</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 46</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page047.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page047.xhtml
new file mode 100644
index 0000000..1067815
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page047.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 47</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 47</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page048.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page048.xhtml
new file mode 100644
index 0000000..3d2f541
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page048.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 48</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 48</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page049.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page049.xhtml
new file mode 100644
index 0000000..182c0db
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page049.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 49</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 49</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page050.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page050.xhtml
new file mode 100644
index 0000000..6d90d7c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page050.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 50</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 50</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page051.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page051.xhtml
new file mode 100644
index 0000000..fb0ac3f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page051.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 51</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 51</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page052.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page052.xhtml
new file mode 100644
index 0000000..7eb05ce
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page052.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 52</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 52</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page053.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page053.xhtml
new file mode 100644
index 0000000..db27697
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page053.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 53</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 53</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page054.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page054.xhtml
new file mode 100644
index 0000000..1e15d7f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page054.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 54</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 54</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page055.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page055.xhtml
new file mode 100644
index 0000000..74df7fa
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page055.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 55</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 55</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page056.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page056.xhtml
new file mode 100644
index 0000000..261440e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page056.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 56</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 56</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page057.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page057.xhtml
new file mode 100644
index 0000000..f47e942
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page057.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 57</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 57</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page058.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page058.xhtml
new file mode 100644
index 0000000..77a5645
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page058.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 58</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 58</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page059.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page059.xhtml
new file mode 100644
index 0000000..ffd7df2
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page059.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 59</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 59</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page060.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page060.xhtml
new file mode 100644
index 0000000..0458000
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page060.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 60</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 60</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page061.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page061.xhtml
new file mode 100644
index 0000000..b4e5760
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page061.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 61</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 61</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page062.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page062.xhtml
new file mode 100644
index 0000000..ca63e74
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page062.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 62</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 62</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page063.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page063.xhtml
new file mode 100644
index 0000000..9bdefc4
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page063.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 63</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 63</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page064.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page064.xhtml
new file mode 100644
index 0000000..635b630
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page064.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 64</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 64</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page065.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page065.xhtml
new file mode 100644
index 0000000..231e7c2
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page065.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 65</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 65</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page066.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page066.xhtml
new file mode 100644
index 0000000..05c27f0
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page066.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 66</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 66</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page067.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page067.xhtml
new file mode 100644
index 0000000..4e2a9f9
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page067.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 67</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 67</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page068.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page068.xhtml
new file mode 100644
index 0000000..25f13e5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page068.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 68</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 68</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page069.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page069.xhtml
new file mode 100644
index 0000000..2cb4dfb
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page069.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 69</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 69</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page070.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page070.xhtml
new file mode 100644
index 0000000..ef94a7a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page070.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 70</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 70</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page071.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page071.xhtml
new file mode 100644
index 0000000..355571a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page071.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 71</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 71</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page072.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page072.xhtml
new file mode 100644
index 0000000..3de4a4f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page072.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 72</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 72</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page073.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page073.xhtml
new file mode 100644
index 0000000..dab8821
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page073.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 73</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 73</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page074.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page074.xhtml
new file mode 100644
index 0000000..f6b8767
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page074.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 74</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 74</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page075.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page075.xhtml
new file mode 100644
index 0000000..e5613b1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page075.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 75</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 75</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page076.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page076.xhtml
new file mode 100644
index 0000000..36c4a71
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page076.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 76</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 76</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page077.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page077.xhtml
new file mode 100644
index 0000000..e8d0b34
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page077.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 77</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 77</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page078.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page078.xhtml
new file mode 100644
index 0000000..bd44a63
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page078.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 78</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 78</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page079.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page079.xhtml
new file mode 100644
index 0000000..e6bfa21
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page079.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 79</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 79</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page080.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page080.xhtml
new file mode 100644
index 0000000..88246b7
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page080.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 80</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 80</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page081.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page081.xhtml
new file mode 100644
index 0000000..e0a5cb6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page081.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 81</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 81</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page082.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page082.xhtml
new file mode 100644
index 0000000..e9c3f95
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page082.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 82</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 82</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page083.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page083.xhtml
new file mode 100644
index 0000000..ebfdb36
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page083.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 83</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 83</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page084.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page084.xhtml
new file mode 100644
index 0000000..736b65d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page084.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 84</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 84</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page085.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page085.xhtml
new file mode 100644
index 0000000..45406e1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page085.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 85</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 85</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page086.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page086.xhtml
new file mode 100644
index 0000000..4e0f54e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page086.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 86</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 86</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page087.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page087.xhtml
new file mode 100644
index 0000000..036b828
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page087.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 87</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 87</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page088.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page088.xhtml
new file mode 100644
index 0000000..733ce26
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page088.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 88</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 88</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page089.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page089.xhtml
new file mode 100644
index 0000000..abf1737
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page089.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 89</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 89</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page090.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page090.xhtml
new file mode 100644
index 0000000..880b3e6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page090.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 90</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 90</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page091.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page091.xhtml
new file mode 100644
index 0000000..a613243
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page091.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 91</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 91</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page092.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page092.xhtml
new file mode 100644
index 0000000..71a4057
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page092.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 92</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 92</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page093.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page093.xhtml
new file mode 100644
index 0000000..c42fabe
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page093.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 93</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 93</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page094.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page094.xhtml
new file mode 100644
index 0000000..d2e2ee5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page094.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 94</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 94</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page095.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page095.xhtml
new file mode 100644
index 0000000..9f4d59e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page095.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 95</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 95</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page096.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page096.xhtml
new file mode 100644
index 0000000..a7f9835
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page096.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 96</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 96</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page097.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page097.xhtml
new file mode 100644
index 0000000..e3de10d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page097.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 97</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 97</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page098.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page098.xhtml
new file mode 100644
index 0000000..6b81405
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page098.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 98</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 98</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page099.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page099.xhtml
new file mode 100644
index 0000000..bbba065
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page099.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 99</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 99</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page100.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page100.xhtml
new file mode 100644
index 0000000..caaddb0
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/page100.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 100</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 100</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/toc.ncx
new file mode 100644
index 0000000..c9317ec
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page001.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/toc.xhtml
new file mode 100644
index 0000000..1863e63
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="page001.xhtml">Page 1</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_expected_results.json
new file mode 100644
index 0000000..2b55526
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_expected_results.json
@@ -0,0 +1,2926 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format.epub",
+    "filename" : "Excessive_Spine_Items_epub3_fixed_format.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:46",
+    "elapsedTime" : 802,
+    "nFatal" : 0,
+    "nError" : 1,
+    "nWarning" : 0,
+    "nUsage" : 5
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Excessive Spine Items Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 100,
+    "checkSum" : 0,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : true,
+    "isBackwardCompatible" : false,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 7539,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 1205,
+    "uncompressedSize" : 12096,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e7ad8e7d88748c1bd9de31c316ef63a51c04ddfb1bde7dc3cb7f46bbde4b5",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 294,
+    "uncompressedSize" : 557,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b324945e2ef6588e881e99ec48a96949a9dcf96760d477943ff64ef063b2e63b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page001.xhtml" ]
+  }, {
+    "id" : "page001",
+    "fileName" : "OPS/page001.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 150,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7d2ab8a3ea3618e7b6ede0db69bcdf9796e82e12c8dcf4de9e516772fb707b79",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page002",
+    "fileName" : "OPS/page002.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "64d6ffb6f5b0eac4989678c7a85252341875c80d151a7a6bf19b7bd556fda5",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page003",
+    "fileName" : "OPS/page003.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 150,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "63451ed1f55127a7723328bd510dae3525c3bee2311f083fe1f4c864ee196",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page004",
+    "fileName" : "OPS/page004.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b5c1fe7d9f5fc2bc3031646c9ecdf472a524bce7fea32b29f5a1c8299319f4d",
+    "isSpineItem" : true,
+    "spineIndex" : 3,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page005",
+    "fileName" : "OPS/page005.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b2a15669d1f7ea52d8da18dda71c9dae4f6f62663ca5ebeae4fbb30a8d73abc",
+    "isSpineItem" : true,
+    "spineIndex" : 4,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page006",
+    "fileName" : "OPS/page006.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "452377d4944412c1c4ca582925d24b3b5bcfebb35302fa4da6655de137a78",
+    "isSpineItem" : true,
+    "spineIndex" : 5,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page007",
+    "fileName" : "OPS/page007.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3427944296e459c85cc9182068d2192ac7f534e3ae66aef566d5a967d08727",
+    "isSpineItem" : true,
+    "spineIndex" : 6,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page008",
+    "fileName" : "OPS/page008.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c6c1d96ff16227eefe6ad8ef693f21d5b7b1331e3812b8ba623dd8256eb",
+    "isSpineItem" : true,
+    "spineIndex" : 7,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page009",
+    "fileName" : "OPS/page009.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 150,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a3142e9867f083fb72fd3dbc2cc7e531d0198dff56f8dc6d515bf9e6dd45d",
+    "isSpineItem" : true,
+    "spineIndex" : 8,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page010",
+    "fileName" : "OPS/page010.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "8cf8924a7e5a6aab4766c0998b54ae037b9e7ef27bdac80a496ffbc3255c56",
+    "isSpineItem" : true,
+    "spineIndex" : 9,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page011",
+    "fileName" : "OPS/page011.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c99863ef3e9455c115b834c864ac4f7dc516df4b8f15b2f363a7f5a2757",
+    "isSpineItem" : true,
+    "spineIndex" : 10,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page012",
+    "fileName" : "OPS/page012.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "6c7aff599f1edcfc120488650c3f9c40cbe7ecd7f58219a112b161d66a82e",
+    "isSpineItem" : true,
+    "spineIndex" : 11,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page013",
+    "fileName" : "OPS/page013.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "91301eb941ff3cc41884eb8c4337992f2c6e4e5b19b57e50dd298081fef",
+    "isSpineItem" : true,
+    "spineIndex" : 12,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page014",
+    "fileName" : "OPS/page014.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "82a1bb4ec2b92c647bc393f3a11fa3ed65b7ccde455ea9c890371070c64767",
+    "isSpineItem" : true,
+    "spineIndex" : 13,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page015",
+    "fileName" : "OPS/page015.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "32ad872f913d74cb2b180d73070f74a7a98f58e87f43a792a1bd41f6b1b8acc",
+    "isSpineItem" : true,
+    "spineIndex" : 14,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page016",
+    "fileName" : "OPS/page016.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5427accc914bb059d9273abe5d6ca3b61d63127d956aeaac878ed2106f596",
+    "isSpineItem" : true,
+    "spineIndex" : 15,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page017",
+    "fileName" : "OPS/page017.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3458e01c339999b7c4f4b1a640dfe77535e768a8ce73e1f29717fa85149f695",
+    "isSpineItem" : true,
+    "spineIndex" : 16,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page018",
+    "fileName" : "OPS/page018.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "49f9ab1633f381b3b56ca8b483c1d2b32a7d211aa8763993f4ece118233a8620",
+    "isSpineItem" : true,
+    "spineIndex" : 17,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page019",
+    "fileName" : "OPS/page019.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5adce7dffc9c3c74c24643ec147be776fe558fd7e576865e73f5a63bfcfd9a9",
+    "isSpineItem" : true,
+    "spineIndex" : 18,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page020",
+    "fileName" : "OPS/page020.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f3bb97c37986fe195f6e74397bb5885d58b258bcb32534feacd6ca70ccd8f78d",
+    "isSpineItem" : true,
+    "spineIndex" : 19,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page021",
+    "fileName" : "OPS/page021.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7f436689c070ae2a98e1da4e3a45e3214b7b5e8b209055b5d84f7089ace223",
+    "isSpineItem" : true,
+    "spineIndex" : 20,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page022",
+    "fileName" : "OPS/page022.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5f35f0d22453c6b4bc8f3dca778a1fcdda6fd54e765a0afcbeec3f36a4e6a4c",
+    "isSpineItem" : true,
+    "spineIndex" : 21,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page023",
+    "fileName" : "OPS/page023.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1daa62312f7d05a24b3057ed1ee098841cb67b2f66365e5ebb531d3c3a928",
+    "isSpineItem" : true,
+    "spineIndex" : 22,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page024",
+    "fileName" : "OPS/page024.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "172ffe2031a35c8641e07af6f63c729066c89e6618ba9e49b617c39381a7f5ae",
+    "isSpineItem" : true,
+    "spineIndex" : 23,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page025",
+    "fileName" : "OPS/page025.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "83d84d664f747629189458658c70ce3d87a7537a4ef85463fbf256472f8123",
+    "isSpineItem" : true,
+    "spineIndex" : 24,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page026",
+    "fileName" : "OPS/page026.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1bc03887b825d5681b113b84bf262979f561c5a6bbe3b2e47059541191ff",
+    "isSpineItem" : true,
+    "spineIndex" : 25,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page027",
+    "fileName" : "OPS/page027.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "161f1ebafd3f6fa7021d73f461899ad68bea5e1591c1f3573c69f85a657ec",
+    "isSpineItem" : true,
+    "spineIndex" : 26,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page028",
+    "fileName" : "OPS/page028.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cc9aee84c822d8f15fecf82710dfccccab678a73618487d47a0f4ddfcc54f2",
+    "isSpineItem" : true,
+    "spineIndex" : 27,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page029",
+    "fileName" : "OPS/page029.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3c57673fc1a1af647ef2299ddcf2393ab49ed5575e224bcdd87f971b582f67",
+    "isSpineItem" : true,
+    "spineIndex" : 28,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page030",
+    "fileName" : "OPS/page030.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "84e3d66ef9556d946dc41bfa8fb375ed6e365f814e12f1c0dd151669ce2582",
+    "isSpineItem" : true,
+    "spineIndex" : 29,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page031",
+    "fileName" : "OPS/page031.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "bd8cf76b86646cf6e1aa7b1f9ce7bea1b94594aa08d5aef31fdd2173934065",
+    "isSpineItem" : true,
+    "spineIndex" : 30,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page032",
+    "fileName" : "OPS/page032.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "121d4a45f06c3fd7d76fc58567d161221bd57c8592539ab7f8f53ee4dd39db4",
+    "isSpineItem" : true,
+    "spineIndex" : 31,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page033",
+    "fileName" : "OPS/page033.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "421f59195f6a20bdfd1f622fb8319bc96358a4a530c89c4f4a1e905bd49216",
+    "isSpineItem" : true,
+    "spineIndex" : 32,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page034",
+    "fileName" : "OPS/page034.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "67be833a53c958f35cde18b6a7aac496fa665eb1eaafcd68a58c3cad5a1c54",
+    "isSpineItem" : true,
+    "spineIndex" : 33,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page035",
+    "fileName" : "OPS/page035.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b46c401fdce375f7fec56e93e541a970fdf35da480e2d74cdc9cd4339d50ef57",
+    "isSpineItem" : true,
+    "spineIndex" : 34,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page036",
+    "fileName" : "OPS/page036.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "efa92e205f245167b62b7dfb7373f6abb58f76b9aedfcba2c883f24523225594",
+    "isSpineItem" : true,
+    "spineIndex" : 35,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page037",
+    "fileName" : "OPS/page037.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3adcd9d2dd9844135ad807a49b5e379e869a3f8ca795b34b458c189959a13d1",
+    "isSpineItem" : true,
+    "spineIndex" : 36,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page038",
+    "fileName" : "OPS/page038.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "fa92080ab50ddf69fce95567d31ca55d46745173e307de1c28beff48fd6f2",
+    "isSpineItem" : true,
+    "spineIndex" : 37,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page039",
+    "fileName" : "OPS/page039.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5a05a22c8eb8b4b35a8058703c2bd4ce3be5a757b06cb81c9e9fbfd8457",
+    "isSpineItem" : true,
+    "spineIndex" : 38,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page040",
+    "fileName" : "OPS/page040.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "aca957d8c33639a9511bc2efaa55df4581576458b88b01da2aba121146fce",
+    "isSpineItem" : true,
+    "spineIndex" : 39,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page041",
+    "fileName" : "OPS/page041.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "995913a2c6d18182ff5c3873b7ea3747e314e8329cbbd31afd6a8fe905a",
+    "isSpineItem" : true,
+    "spineIndex" : 40,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page042",
+    "fileName" : "OPS/page042.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e7153c6f618483c2d143c4ce847f8264f5f8797233757e65aa56657c589",
+    "isSpineItem" : true,
+    "spineIndex" : 41,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page043",
+    "fileName" : "OPS/page043.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1773201a9ef5cf6cc32453685fc95aa7c93470be2396385b9415c917ea7ca6",
+    "isSpineItem" : true,
+    "spineIndex" : 42,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page044",
+    "fileName" : "OPS/page044.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5debc1fafe10fb4321b493cf3a606c7ef4d13b51d179b9eecaad618fc05561a3",
+    "isSpineItem" : true,
+    "spineIndex" : 43,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page045",
+    "fileName" : "OPS/page045.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2a3d279579658dfcd1da2c66d6ce116d8b8ba6d1e86cc6c578d1b4252aca5",
+    "isSpineItem" : true,
+    "spineIndex" : 44,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page046",
+    "fileName" : "OPS/page046.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b76ff1672b3e021854ee89a38d9ca1d74d58f56d7da49a32fbde38b70945d",
+    "isSpineItem" : true,
+    "spineIndex" : 45,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page047",
+    "fileName" : "OPS/page047.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "405ebb6ed1fe5fb0bd35bbfd4a188bbf8738a79bee3ff9991492782d2e1e696",
+    "isSpineItem" : true,
+    "spineIndex" : 46,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page048",
+    "fileName" : "OPS/page048.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c381aafc6cd24d2495f5a8337317c30122cc6ee249fa4ac7ac97b6cef81",
+    "isSpineItem" : true,
+    "spineIndex" : 47,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page049",
+    "fileName" : "OPS/page049.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b85169a8539d5719aad76a7bc55d0793e929a34278a569e45d3fb6f6eda6c8",
+    "isSpineItem" : true,
+    "spineIndex" : 48,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page050",
+    "fileName" : "OPS/page050.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c4d3925174787a9768fa2d7dca3c9b73bf5a62e62696daecc957e3648d42719",
+    "isSpineItem" : true,
+    "spineIndex" : 49,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page051",
+    "fileName" : "OPS/page051.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7674fdf7eccfacd36a277dbfde1199da967f5913d554ff323045286beda",
+    "isSpineItem" : true,
+    "spineIndex" : 50,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page052",
+    "fileName" : "OPS/page052.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "24885e81f86ca0c5f04a795ed3f485503f9dc91cfc74b10e8e2b0f22f60adf8",
+    "isSpineItem" : true,
+    "spineIndex" : 51,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page053",
+    "fileName" : "OPS/page053.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cbe7d3682cf9d93e451ec56d74d4ba6be69f21de986ae34830522882615f",
+    "isSpineItem" : true,
+    "spineIndex" : 52,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page054",
+    "fileName" : "OPS/page054.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "71a167ac84bac65f1462bb3983e1455b652b7cf1ac1d4a8d2f2e2b1d4749b8",
+    "isSpineItem" : true,
+    "spineIndex" : 53,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page055",
+    "fileName" : "OPS/page055.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2c7966bc1b8b3e4a363ff41c720c5f5f14b33e3945ad67832287d6dd7ad17b",
+    "isSpineItem" : true,
+    "spineIndex" : 54,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page056",
+    "fileName" : "OPS/page056.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5025384da7ba8385bd4c5d01b78ada6624eaff0d2557b336eb9ebd675f3a13",
+    "isSpineItem" : true,
+    "spineIndex" : 55,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page057",
+    "fileName" : "OPS/page057.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ac2824db1f68f0a212e42c826b87d35aebd746146f69cdab486a5c211745a5b",
+    "isSpineItem" : true,
+    "spineIndex" : 56,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page058",
+    "fileName" : "OPS/page058.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f98b4b77aee0272926ff429b8c875795e4caa8b1e9c96ca43794af9f1a6f7f",
+    "isSpineItem" : true,
+    "spineIndex" : 57,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page059",
+    "fileName" : "OPS/page059.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "eb27973b8ab3382385bb28adfb0a2355dda4f0d992a417d3df98148594305f",
+    "isSpineItem" : true,
+    "spineIndex" : 58,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page060",
+    "fileName" : "OPS/page060.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "9076dbacdedfdaf74c2a0a529286849da61ff566d20a6f5479813988247d444",
+    "isSpineItem" : true,
+    "spineIndex" : 59,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page061",
+    "fileName" : "OPS/page061.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "20fe9168777da1d82f27562975d2d3c5262c509a13196955e72ad8cf03a56",
+    "isSpineItem" : true,
+    "spineIndex" : 60,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page062",
+    "fileName" : "OPS/page062.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b18bbe4a9859ae318a65851bb82cde4e7c3735ad0c53eb5cb3a2ee946d681ec",
+    "isSpineItem" : true,
+    "spineIndex" : 61,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page063",
+    "fileName" : "OPS/page063.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a869284f928f933dab3d89838a67b50dd7aa7adc48a7429ebd5c4d56996f483",
+    "isSpineItem" : true,
+    "spineIndex" : 62,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page064",
+    "fileName" : "OPS/page064.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "632783cc18ab1cb5936845d1d613a58e9e7ab944976c16c7791ad967724cfa99",
+    "isSpineItem" : true,
+    "spineIndex" : 63,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page065",
+    "fileName" : "OPS/page065.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1e8a457f349f6c15ef536139c18d9ae468101ba56eee55f7f8d028344179db",
+    "isSpineItem" : true,
+    "spineIndex" : 64,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page066",
+    "fileName" : "OPS/page066.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f738af98f87f6fe5b33289d5cfdaf64d6802cdb8e88867f9ad2c452f06848a0",
+    "isSpineItem" : true,
+    "spineIndex" : 65,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page067",
+    "fileName" : "OPS/page067.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "8ba47355d9e69f388fe4f893f26cb6a3ee4f41c411e94752962a096d3a5fa5",
+    "isSpineItem" : true,
+    "spineIndex" : 66,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page068",
+    "fileName" : "OPS/page068.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e86ba831b63134deb3ce5f662045ceed19415c24e4fcad2f58bcb4241eaf",
+    "isSpineItem" : true,
+    "spineIndex" : 67,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page069",
+    "fileName" : "OPS/page069.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f61b1c14c0261e96368b6317ee586f19eec9a20846ac6fe06d7150e81b4a6e",
+    "isSpineItem" : true,
+    "spineIndex" : 68,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page070",
+    "fileName" : "OPS/page070.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "98dba438a4dce9fd69f9f653d52237ddb55b7d8bf23ebd5cc0bf98f3451df",
+    "isSpineItem" : true,
+    "spineIndex" : 69,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page071",
+    "fileName" : "OPS/page071.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "412274eab1e2b26c7b2195cf88cdb299799f388a423e885b85de169c7fe4",
+    "isSpineItem" : true,
+    "spineIndex" : 70,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page072",
+    "fileName" : "OPS/page072.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "de82868c50d9dd2c91d8834c772fd434f2f7d194f7a3d7bb47db518984b1e4",
+    "isSpineItem" : true,
+    "spineIndex" : 71,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page073",
+    "fileName" : "OPS/page073.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cda3dffac17c5e076bea4812ceb220f6f24d8f60f9ef5a3a8b1b89c85615",
+    "isSpineItem" : true,
+    "spineIndex" : 72,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page074",
+    "fileName" : "OPS/page074.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "fedce17295db5f4bf65bf73be82f948d9d2fda8c4c51aea7db43d518da8cf7",
+    "isSpineItem" : true,
+    "spineIndex" : 73,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page075",
+    "fileName" : "OPS/page075.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d44d599b894b3dbc99a7fc12c186638a78c34e16b40ae10e7f3606cc0263fca",
+    "isSpineItem" : true,
+    "spineIndex" : 74,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page076",
+    "fileName" : "OPS/page076.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e269a88ef01b868311cae7bd653db8e331eb9a39f66f80713db79af03d441383",
+    "isSpineItem" : true,
+    "spineIndex" : 75,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page077",
+    "fileName" : "OPS/page077.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a999b61423697a1cd7bdee8d104c5da7ba8c81d0c6326785ccdd51b45be8326",
+    "isSpineItem" : true,
+    "spineIndex" : 76,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page078",
+    "fileName" : "OPS/page078.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "4fde977ccd331bf6405daefed33b59775ebf66c6e9b2a35298956fee53c9c96e",
+    "isSpineItem" : true,
+    "spineIndex" : 77,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page079",
+    "fileName" : "OPS/page079.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "134d56bb4de036d968737f9d89d6426a517ac88bbdb4e902317c8d8386c8a8",
+    "isSpineItem" : true,
+    "spineIndex" : 78,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page080",
+    "fileName" : "OPS/page080.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f11147a8b209e3431c67867897c958c3fe29165b30c5667f436fc222a22a8",
+    "isSpineItem" : true,
+    "spineIndex" : 79,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page081",
+    "fileName" : "OPS/page081.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a1c6387349704fdff8342f125650cb52fb4ce9c59bf8a737a3a1ae6712208093",
+    "isSpineItem" : true,
+    "spineIndex" : 80,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page082",
+    "fileName" : "OPS/page082.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3daa5340e738bf7e1b913418f4fd4846d379ab2b98040d814b9508cb6f7f8",
+    "isSpineItem" : true,
+    "spineIndex" : 81,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page083",
+    "fileName" : "OPS/page083.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e35ddc1c2e3845b046f2ac73a6d3bac4a2abcc8899491851cb6cfd24e583b",
+    "isSpineItem" : true,
+    "spineIndex" : 82,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page084",
+    "fileName" : "OPS/page084.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e6391eff26d6694e7d6b515815bac0edfcc692784299fc542aa80406ab8e273",
+    "isSpineItem" : true,
+    "spineIndex" : 83,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page085",
+    "fileName" : "OPS/page085.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5ec49fa9fd9c911b67fff9745623ed7d543e8bdf4d8c5a148ff813ccf52e54",
+    "isSpineItem" : true,
+    "spineIndex" : 84,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page086",
+    "fileName" : "OPS/page086.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "55859fe66f31bdb8b417a2fe43a1e2968bc218a9884304310e2e7bacea179",
+    "isSpineItem" : true,
+    "spineIndex" : 85,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page087",
+    "fileName" : "OPS/page087.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d2334680ea3c33bbefce4c99c6c89daaec7c8b32461fadf133493ed6b16152ff",
+    "isSpineItem" : true,
+    "spineIndex" : 86,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page088",
+    "fileName" : "OPS/page088.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2d3d7495edda52b677acbf78293477fde2177de76f798675af2244f0e9dd61",
+    "isSpineItem" : true,
+    "spineIndex" : 87,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page089",
+    "fileName" : "OPS/page089.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cd494d5023a9bf71ac6156c34592ca365bd9b30e1dccba0e9346edeab7c",
+    "isSpineItem" : true,
+    "spineIndex" : 88,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page090",
+    "fileName" : "OPS/page090.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b3585e79565d13f9b57e49ded1fb5be5eb4065cca7bc1d53207cd0ecaeed349c",
+    "isSpineItem" : true,
+    "spineIndex" : 89,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page091",
+    "fileName" : "OPS/page091.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1d2ba9558df4a34c9ae832b86b2adb067d93f7fd7e7a86326fd4a7335b466",
+    "isSpineItem" : true,
+    "spineIndex" : 90,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page092",
+    "fileName" : "OPS/page092.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ec937edcf87d479e2cccaada9aafe9a99bffe7d93605dd94ec662cefd320",
+    "isSpineItem" : true,
+    "spineIndex" : 91,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page093",
+    "fileName" : "OPS/page093.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ef904680b26192e28dc527b52db23dd07476d1cd2e3a39f498e6d28347379dd",
+    "isSpineItem" : true,
+    "spineIndex" : 92,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page094",
+    "fileName" : "OPS/page094.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "68efdc11ef3a261246209df8d05d6bfdd7b471959b6bfaee31bc180c41fe13f",
+    "isSpineItem" : true,
+    "spineIndex" : 93,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page095",
+    "fileName" : "OPS/page095.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "8531fc15621643a8956860594c1d4915be54611a55f9c8c059d35aa43f4b8f",
+    "isSpineItem" : true,
+    "spineIndex" : 94,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page096",
+    "fileName" : "OPS/page096.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cd76f817c09986db1b7bbe93e795c2e26e9b324144c945cbf3e20e8bd5dd0",
+    "isSpineItem" : true,
+    "spineIndex" : 95,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page097",
+    "fileName" : "OPS/page097.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ba1d7e073c0ae48e628f35a434f5aa4cf71bb95762866374c14cdcf657",
+    "isSpineItem" : true,
+    "spineIndex" : 96,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page098",
+    "fileName" : "OPS/page098.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "55b94968d156902bb5f39c2ea4feb0ddc06dd1bebbf1eb29f5dcb62f5d7e2d",
+    "isSpineItem" : true,
+    "spineIndex" : 97,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page099",
+    "fileName" : "OPS/page099.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "19a21c9bdccb3e75ece20ccff9fb7ed185bc2ce29a8c7aca9724b1c61f46e",
+    "isSpineItem" : true,
+    "spineIndex" : 98,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page100",
+    "fileName" : "OPS/page100.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 232,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "fce184af67bf3c013bd3ab214ef2ec87b6fbfdae51f5f6c55f3519764ae8841",
+    "isSpineItem" : true,
+    "spineIndex" : 99,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 228,
+    "uncompressedSize" : 340,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "abfea65134638c40af501025a030475dcee4d279c061658147f71db7ba8b21a1",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page001.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 75,
+    "locations" : [ {
+      "fileName" : "OPS/page001.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page002.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page003.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page004.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page005.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page006.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page007.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page008.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page009.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page010.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page011.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page012.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page013.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page014.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page015.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page016.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page017.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page018.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page019.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page020.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page021.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page022.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page023.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page024.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page025.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "There are 75 additional locations for this message.",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "Excessive_Spine_Items_epub3_fixed_format.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-046",
+    "severity" : "ERROR",
+    "message" : "Fixed format item has no viewport defined.",
+    "additionalLocations" : 75,
+    "locations" : [ {
+      "fileName" : "OPS/page001.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page002.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page003.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page004.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page005.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page006.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page007.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page008.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page009.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page010.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page011.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page012.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page013.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page014.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page015.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page016.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page017.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page018.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page019.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page020.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page021.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page022.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page023.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page024.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page025.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "There are 75 additional locations for this message.",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : "A viewport declaration is required for fixed format items."
+  }, {
+    "ID" : "OPF-058",
+    "severity" : "USAGE",
+    "message" : "Spine item has no TOC entry reference.",
+    "additionalLocations" : 74,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page002.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page003.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page004.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page005.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page006.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page007.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page008.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page009.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page010.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page011.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page012.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page013.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page014.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page015.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page016.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page017.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page018.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page019.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page020.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page021.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page022.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page023.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page024.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page025.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page026.xhtml"
+    }, {
+      "fileName" : "There are 74 additional locations for this message.",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one TOC entry."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 74,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page002.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page003.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page004.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page005.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page006.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page007.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page008.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page009.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page010.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page011.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page012.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page013.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page014.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page015.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page016.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page017.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page018.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page019.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page020.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page021.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page022.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page023.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page024.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page025.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page026.xhtml"
+    }, {
+      "fileName" : "There are 74 additional locations for this message.",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/content.opf
new file mode 100644
index 0000000..e64133e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/content.opf
@@ -0,0 +1,215 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Excessive Spine Items Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page001" href="page001.xhtml" media-type="application/xhtml+xml" />
+    <item id="page002" href="page002.xhtml" media-type="application/xhtml+xml" />
+    <item id="page003" href="page003.xhtml" media-type="application/xhtml+xml" />
+    <item id="page004" href="page004.xhtml" media-type="application/xhtml+xml" />
+    <item id="page005" href="page005.xhtml" media-type="application/xhtml+xml" />
+    <item id="page006" href="page006.xhtml" media-type="application/xhtml+xml" />
+    <item id="page007" href="page007.xhtml" media-type="application/xhtml+xml" />
+    <item id="page008" href="page008.xhtml" media-type="application/xhtml+xml" />
+    <item id="page009" href="page009.xhtml" media-type="application/xhtml+xml" />
+    <item id="page010" href="page010.xhtml" media-type="application/xhtml+xml" />
+    <item id="page011" href="page011.xhtml" media-type="application/xhtml+xml" />
+    <item id="page012" href="page012.xhtml" media-type="application/xhtml+xml" />
+    <item id="page013" href="page013.xhtml" media-type="application/xhtml+xml" />
+    <item id="page014" href="page014.xhtml" media-type="application/xhtml+xml" />
+    <item id="page015" href="page015.xhtml" media-type="application/xhtml+xml" />
+    <item id="page016" href="page016.xhtml" media-type="application/xhtml+xml" />
+    <item id="page017" href="page017.xhtml" media-type="application/xhtml+xml" />
+    <item id="page018" href="page018.xhtml" media-type="application/xhtml+xml" />
+    <item id="page019" href="page019.xhtml" media-type="application/xhtml+xml" />
+    <item id="page020" href="page020.xhtml" media-type="application/xhtml+xml" />
+    <item id="page021" href="page021.xhtml" media-type="application/xhtml+xml" />
+    <item id="page022" href="page022.xhtml" media-type="application/xhtml+xml" />
+    <item id="page023" href="page023.xhtml" media-type="application/xhtml+xml" />
+    <item id="page024" href="page024.xhtml" media-type="application/xhtml+xml" />
+    <item id="page025" href="page025.xhtml" media-type="application/xhtml+xml" />
+    <item id="page026" href="page026.xhtml" media-type="application/xhtml+xml" />
+    <item id="page027" href="page027.xhtml" media-type="application/xhtml+xml" />
+    <item id="page028" href="page028.xhtml" media-type="application/xhtml+xml" />
+    <item id="page029" href="page029.xhtml" media-type="application/xhtml+xml" />
+    <item id="page030" href="page030.xhtml" media-type="application/xhtml+xml" />
+    <item id="page031" href="page031.xhtml" media-type="application/xhtml+xml" />
+    <item id="page032" href="page032.xhtml" media-type="application/xhtml+xml" />
+    <item id="page033" href="page033.xhtml" media-type="application/xhtml+xml" />
+    <item id="page034" href="page034.xhtml" media-type="application/xhtml+xml" />
+    <item id="page035" href="page035.xhtml" media-type="application/xhtml+xml" />
+    <item id="page036" href="page036.xhtml" media-type="application/xhtml+xml" />
+    <item id="page037" href="page037.xhtml" media-type="application/xhtml+xml" />
+    <item id="page038" href="page038.xhtml" media-type="application/xhtml+xml" />
+    <item id="page039" href="page039.xhtml" media-type="application/xhtml+xml" />
+    <item id="page040" href="page040.xhtml" media-type="application/xhtml+xml" />
+    <item id="page041" href="page041.xhtml" media-type="application/xhtml+xml" />
+    <item id="page042" href="page042.xhtml" media-type="application/xhtml+xml" />
+    <item id="page043" href="page043.xhtml" media-type="application/xhtml+xml" />
+    <item id="page044" href="page044.xhtml" media-type="application/xhtml+xml" />
+    <item id="page045" href="page045.xhtml" media-type="application/xhtml+xml" />
+    <item id="page046" href="page046.xhtml" media-type="application/xhtml+xml" />
+    <item id="page047" href="page047.xhtml" media-type="application/xhtml+xml" />
+    <item id="page048" href="page048.xhtml" media-type="application/xhtml+xml" />
+    <item id="page049" href="page049.xhtml" media-type="application/xhtml+xml" />
+    <item id="page050" href="page050.xhtml" media-type="application/xhtml+xml" />
+    <item id="page051" href="page051.xhtml" media-type="application/xhtml+xml" />
+    <item id="page052" href="page052.xhtml" media-type="application/xhtml+xml" />
+    <item id="page053" href="page053.xhtml" media-type="application/xhtml+xml" />
+    <item id="page054" href="page054.xhtml" media-type="application/xhtml+xml" />
+    <item id="page055" href="page055.xhtml" media-type="application/xhtml+xml" />
+    <item id="page056" href="page056.xhtml" media-type="application/xhtml+xml" />
+    <item id="page057" href="page057.xhtml" media-type="application/xhtml+xml" />
+    <item id="page058" href="page058.xhtml" media-type="application/xhtml+xml" />
+    <item id="page059" href="page059.xhtml" media-type="application/xhtml+xml" />
+    <item id="page060" href="page060.xhtml" media-type="application/xhtml+xml" />
+    <item id="page061" href="page061.xhtml" media-type="application/xhtml+xml" />
+    <item id="page062" href="page062.xhtml" media-type="application/xhtml+xml" />
+    <item id="page063" href="page063.xhtml" media-type="application/xhtml+xml" />
+    <item id="page064" href="page064.xhtml" media-type="application/xhtml+xml" />
+    <item id="page065" href="page065.xhtml" media-type="application/xhtml+xml" />
+    <item id="page066" href="page066.xhtml" media-type="application/xhtml+xml" />
+    <item id="page067" href="page067.xhtml" media-type="application/xhtml+xml" />
+    <item id="page068" href="page068.xhtml" media-type="application/xhtml+xml" />
+    <item id="page069" href="page069.xhtml" media-type="application/xhtml+xml" />
+    <item id="page070" href="page070.xhtml" media-type="application/xhtml+xml" />
+    <item id="page071" href="page071.xhtml" media-type="application/xhtml+xml" />
+    <item id="page072" href="page072.xhtml" media-type="application/xhtml+xml" />
+    <item id="page073" href="page073.xhtml" media-type="application/xhtml+xml" />
+    <item id="page074" href="page074.xhtml" media-type="application/xhtml+xml" />
+    <item id="page075" href="page075.xhtml" media-type="application/xhtml+xml" />
+    <item id="page076" href="page076.xhtml" media-type="application/xhtml+xml" />
+    <item id="page077" href="page077.xhtml" media-type="application/xhtml+xml" />
+    <item id="page078" href="page078.xhtml" media-type="application/xhtml+xml" />
+    <item id="page079" href="page079.xhtml" media-type="application/xhtml+xml" />
+    <item id="page080" href="page080.xhtml" media-type="application/xhtml+xml" />
+    <item id="page081" href="page081.xhtml" media-type="application/xhtml+xml" />
+    <item id="page082" href="page082.xhtml" media-type="application/xhtml+xml" />
+    <item id="page083" href="page083.xhtml" media-type="application/xhtml+xml" />
+    <item id="page084" href="page084.xhtml" media-type="application/xhtml+xml" />
+    <item id="page085" href="page085.xhtml" media-type="application/xhtml+xml" />
+    <item id="page086" href="page086.xhtml" media-type="application/xhtml+xml" />
+    <item id="page087" href="page087.xhtml" media-type="application/xhtml+xml" />
+    <item id="page088" href="page088.xhtml" media-type="application/xhtml+xml" />
+    <item id="page089" href="page089.xhtml" media-type="application/xhtml+xml" />
+    <item id="page090" href="page090.xhtml" media-type="application/xhtml+xml" />
+    <item id="page091" href="page091.xhtml" media-type="application/xhtml+xml" />
+    <item id="page092" href="page092.xhtml" media-type="application/xhtml+xml" />
+    <item id="page093" href="page093.xhtml" media-type="application/xhtml+xml" />
+    <item id="page094" href="page094.xhtml" media-type="application/xhtml+xml" />
+    <item id="page095" href="page095.xhtml" media-type="application/xhtml+xml" />
+    <item id="page096" href="page096.xhtml" media-type="application/xhtml+xml" />
+    <item id="page097" href="page097.xhtml" media-type="application/xhtml+xml" />
+    <item id="page098" href="page098.xhtml" media-type="application/xhtml+xml" />
+    <item id="page099" href="page099.xhtml" media-type="application/xhtml+xml" />
+    <item id="page100" href="page100.xhtml" media-type="application/xhtml+xml" />
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page001" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page002" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page003" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page004" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page005" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page006" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page007" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page008" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page009" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page010" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page011" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page012" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page013" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page014" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page015" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page016" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page017" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page018" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page019" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page020" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page021" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page022" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page023" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page024" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page025" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page026" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page027" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page028" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page029" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page030" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page031" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page032" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page033" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page034" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page035" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page036" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page037" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page038" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page039" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page040" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page041" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page042" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page043" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page044" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page045" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page046" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page047" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page048" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page049" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page050" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page051" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page052" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page053" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page054" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page055" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page056" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page057" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page058" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page059" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page060" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page061" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page062" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page063" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page064" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page065" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page066" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page067" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page068" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page069" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page070" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page071" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page072" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page073" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page074" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page075" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page076" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page077" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page078" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page079" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page080" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page081" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page082" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page083" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page084" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page085" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page086" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page087" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page088" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page089" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page090" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page091" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page092" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page093" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page094" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page095" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page096" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page097" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page098" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page099" properties="rendition:layout-pre-paginated" />
+    <itemref idref="page100" properties="rendition:layout-pre-paginated" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page001.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page001.xhtml
new file mode 100644
index 0000000..cce48f5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page001.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 1</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 1</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page002.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page002.xhtml
new file mode 100644
index 0000000..247bdb6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page002.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 2</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 2</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page003.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page003.xhtml
new file mode 100644
index 0000000..9172f6d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page003.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 3</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 3</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page004.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page004.xhtml
new file mode 100644
index 0000000..0223501
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page004.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 4</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 4</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page005.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page005.xhtml
new file mode 100644
index 0000000..9fb5bc3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page005.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 5</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 5</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page006.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page006.xhtml
new file mode 100644
index 0000000..37f6201
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page006.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 6</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 6</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page007.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page007.xhtml
new file mode 100644
index 0000000..2ce9cd7
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page007.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 7</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 7</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page008.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page008.xhtml
new file mode 100644
index 0000000..f075174
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page008.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 8</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 8</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page009.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page009.xhtml
new file mode 100644
index 0000000..aaaf176
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page009.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 9</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 9</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page010.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page010.xhtml
new file mode 100644
index 0000000..4c7edbc
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page010.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 10</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 10</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page011.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page011.xhtml
new file mode 100644
index 0000000..9fda529
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page011.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 11</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 11</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page012.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page012.xhtml
new file mode 100644
index 0000000..5de89da
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page012.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 12</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 12</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page013.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page013.xhtml
new file mode 100644
index 0000000..c03d05d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page013.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 13</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 13</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page014.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page014.xhtml
new file mode 100644
index 0000000..0d82f8c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page014.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 14</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 14</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page015.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page015.xhtml
new file mode 100644
index 0000000..5c561ff
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page015.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 15</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 15</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page016.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page016.xhtml
new file mode 100644
index 0000000..19fbc36
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page016.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 16</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 16</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page017.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page017.xhtml
new file mode 100644
index 0000000..dc2214a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page017.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 17</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 17</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page018.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page018.xhtml
new file mode 100644
index 0000000..0612a90
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page018.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 18</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 18</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page019.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page019.xhtml
new file mode 100644
index 0000000..913be55
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page019.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 19</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 19</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page020.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page020.xhtml
new file mode 100644
index 0000000..6295ef8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page020.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 20</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 20</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page021.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page021.xhtml
new file mode 100644
index 0000000..188f3e2
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page021.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 21</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 21</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page022.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page022.xhtml
new file mode 100644
index 0000000..1c087c3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page022.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 22</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 22</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page023.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page023.xhtml
new file mode 100644
index 0000000..0793c8c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page023.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 23</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 23</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page024.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page024.xhtml
new file mode 100644
index 0000000..36072e1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page024.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 24</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 24</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page025.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page025.xhtml
new file mode 100644
index 0000000..0085ece
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page025.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 25</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 25</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page026.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page026.xhtml
new file mode 100644
index 0000000..4d258a2
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page026.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 26</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 26</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page027.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page027.xhtml
new file mode 100644
index 0000000..517a8c6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page027.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 27</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 27</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page028.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page028.xhtml
new file mode 100644
index 0000000..bd14324
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page028.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 28</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 28</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page029.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page029.xhtml
new file mode 100644
index 0000000..998a4ba
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page029.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 29</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 29</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page030.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page030.xhtml
new file mode 100644
index 0000000..4f9a60e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page030.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 30</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 30</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page031.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page031.xhtml
new file mode 100644
index 0000000..95a4d3a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page031.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 31</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 31</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page032.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page032.xhtml
new file mode 100644
index 0000000..64ff523
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page032.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 32</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 32</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page033.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page033.xhtml
new file mode 100644
index 0000000..0f38b1d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page033.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 33</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 33</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page034.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page034.xhtml
new file mode 100644
index 0000000..200cf68
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page034.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 34</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 34</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page035.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page035.xhtml
new file mode 100644
index 0000000..e29465b
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page035.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 35</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 35</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page036.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page036.xhtml
new file mode 100644
index 0000000..21dd3e8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page036.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 36</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 36</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page037.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page037.xhtml
new file mode 100644
index 0000000..636bb2f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page037.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 37</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 37</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page038.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page038.xhtml
new file mode 100644
index 0000000..b3b46fd
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page038.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 38</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 38</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page039.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page039.xhtml
new file mode 100644
index 0000000..a5f688c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page039.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 39</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 39</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page040.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page040.xhtml
new file mode 100644
index 0000000..10fc38f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page040.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 40</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 40</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page041.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page041.xhtml
new file mode 100644
index 0000000..16c0ef9
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page041.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 41</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 41</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page042.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page042.xhtml
new file mode 100644
index 0000000..d9addb8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page042.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 42</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 42</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page043.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page043.xhtml
new file mode 100644
index 0000000..dea75bb
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page043.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 43</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 43</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page044.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page044.xhtml
new file mode 100644
index 0000000..a8fa9e5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page044.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 44</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 44</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page045.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page045.xhtml
new file mode 100644
index 0000000..36c4561
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page045.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 45</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 45</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page046.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page046.xhtml
new file mode 100644
index 0000000..3f02a88
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page046.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 46</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 46</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page047.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page047.xhtml
new file mode 100644
index 0000000..1067815
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page047.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 47</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 47</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page048.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page048.xhtml
new file mode 100644
index 0000000..3d2f541
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page048.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 48</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 48</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page049.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page049.xhtml
new file mode 100644
index 0000000..182c0db
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page049.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 49</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 49</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page050.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page050.xhtml
new file mode 100644
index 0000000..6d90d7c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page050.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 50</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 50</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page051.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page051.xhtml
new file mode 100644
index 0000000..fb0ac3f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page051.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 51</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 51</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page052.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page052.xhtml
new file mode 100644
index 0000000..7eb05ce
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page052.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 52</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 52</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page053.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page053.xhtml
new file mode 100644
index 0000000..db27697
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page053.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 53</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 53</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page054.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page054.xhtml
new file mode 100644
index 0000000..1e15d7f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page054.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 54</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 54</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page055.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page055.xhtml
new file mode 100644
index 0000000..74df7fa
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page055.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 55</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 55</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page056.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page056.xhtml
new file mode 100644
index 0000000..261440e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page056.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 56</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 56</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page057.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page057.xhtml
new file mode 100644
index 0000000..f47e942
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page057.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 57</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 57</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page058.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page058.xhtml
new file mode 100644
index 0000000..77a5645
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page058.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 58</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 58</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page059.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page059.xhtml
new file mode 100644
index 0000000..ffd7df2
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page059.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 59</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 59</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page060.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page060.xhtml
new file mode 100644
index 0000000..0458000
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page060.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 60</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 60</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page061.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page061.xhtml
new file mode 100644
index 0000000..b4e5760
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page061.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 61</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 61</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page062.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page062.xhtml
new file mode 100644
index 0000000..ca63e74
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page062.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 62</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 62</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page063.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page063.xhtml
new file mode 100644
index 0000000..9bdefc4
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page063.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 63</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 63</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page064.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page064.xhtml
new file mode 100644
index 0000000..635b630
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page064.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 64</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 64</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page065.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page065.xhtml
new file mode 100644
index 0000000..231e7c2
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page065.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 65</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 65</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page066.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page066.xhtml
new file mode 100644
index 0000000..05c27f0
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page066.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 66</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 66</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page067.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page067.xhtml
new file mode 100644
index 0000000..4e2a9f9
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page067.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 67</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 67</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page068.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page068.xhtml
new file mode 100644
index 0000000..25f13e5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page068.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 68</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 68</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page069.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page069.xhtml
new file mode 100644
index 0000000..2cb4dfb
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page069.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 69</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 69</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page070.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page070.xhtml
new file mode 100644
index 0000000..ef94a7a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page070.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 70</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 70</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page071.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page071.xhtml
new file mode 100644
index 0000000..355571a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page071.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 71</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 71</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page072.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page072.xhtml
new file mode 100644
index 0000000..3de4a4f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page072.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 72</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 72</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page073.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page073.xhtml
new file mode 100644
index 0000000..dab8821
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page073.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 73</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 73</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page074.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page074.xhtml
new file mode 100644
index 0000000..f6b8767
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page074.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 74</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 74</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page075.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page075.xhtml
new file mode 100644
index 0000000..e5613b1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page075.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 75</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 75</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page076.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page076.xhtml
new file mode 100644
index 0000000..36c4a71
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page076.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 76</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 76</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page077.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page077.xhtml
new file mode 100644
index 0000000..e8d0b34
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page077.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 77</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 77</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page078.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page078.xhtml
new file mode 100644
index 0000000..bd44a63
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page078.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 78</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 78</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page079.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page079.xhtml
new file mode 100644
index 0000000..e6bfa21
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page079.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 79</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 79</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page080.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page080.xhtml
new file mode 100644
index 0000000..88246b7
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page080.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 80</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 80</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page081.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page081.xhtml
new file mode 100644
index 0000000..e0a5cb6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page081.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 81</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 81</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page082.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page082.xhtml
new file mode 100644
index 0000000..e9c3f95
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page082.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 82</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 82</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page083.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page083.xhtml
new file mode 100644
index 0000000..ebfdb36
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page083.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 83</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 83</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page084.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page084.xhtml
new file mode 100644
index 0000000..736b65d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page084.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 84</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 84</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page085.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page085.xhtml
new file mode 100644
index 0000000..45406e1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page085.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 85</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 85</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page086.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page086.xhtml
new file mode 100644
index 0000000..4e0f54e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page086.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 86</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 86</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page087.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page087.xhtml
new file mode 100644
index 0000000..036b828
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page087.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 87</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 87</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page088.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page088.xhtml
new file mode 100644
index 0000000..733ce26
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page088.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 88</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 88</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page089.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page089.xhtml
new file mode 100644
index 0000000..abf1737
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page089.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 89</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 89</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page090.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page090.xhtml
new file mode 100644
index 0000000..880b3e6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page090.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 90</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 90</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page091.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page091.xhtml
new file mode 100644
index 0000000..a613243
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page091.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 91</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 91</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page092.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page092.xhtml
new file mode 100644
index 0000000..71a4057
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page092.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 92</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 92</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page093.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page093.xhtml
new file mode 100644
index 0000000..c42fabe
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page093.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 93</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 93</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page094.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page094.xhtml
new file mode 100644
index 0000000..d2e2ee5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page094.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 94</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 94</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page095.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page095.xhtml
new file mode 100644
index 0000000..9f4d59e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page095.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 95</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 95</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page096.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page096.xhtml
new file mode 100644
index 0000000..a7f9835
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page096.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 96</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 96</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page097.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page097.xhtml
new file mode 100644
index 0000000..e3de10d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page097.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 97</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 97</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page098.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page098.xhtml
new file mode 100644
index 0000000..6b81405
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page098.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 98</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 98</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page099.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page099.xhtml
new file mode 100644
index 0000000..bbba065
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page099.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 99</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 99</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page100.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page100.xhtml
new file mode 100644
index 0000000..caaddb0
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/page100.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Excessive Spine Items Page 100</title>
+</head>
+<body>
+<div>
+    <p>Excessive Spine Items Page 100</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/toc.ncx
new file mode 100644
index 0000000..c9317ec
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page001.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/toc.xhtml
new file mode 100644
index 0000000..1863e63
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="page001.xhtml">Page 1</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties_expected_results.json
new file mode 100644
index 0000000..bcf85e2
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties_expected_results.json
@@ -0,0 +1,2926 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/Excessive_Spine_Items_epub3_fixed_format_properties.epub",
+    "filename" : "Excessive_Spine_Items_epub3_fixed_format_properties.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:47",
+    "elapsedTime" : 768,
+    "nFatal" : 0,
+    "nError" : 1,
+    "nWarning" : 0,
+    "nUsage" : 5
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Excessive Spine Items Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 100,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : true,
+    "isBackwardCompatible" : false,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 7539,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 1238,
+    "uncompressedSize" : 16437,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "54d2ba719bac180625112475d81f65e23fc27e3bd5fa1a7d049d9b875bec1",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 294,
+    "uncompressedSize" : 557,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b324945e2ef6588e881e99ec48a96949a9dcf96760d477943ff64ef063b2e63b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page001.xhtml" ]
+  }, {
+    "id" : "page001",
+    "fileName" : "OPS/page001.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 150,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7d2ab8a3ea3618e7b6ede0db69bcdf9796e82e12c8dcf4de9e516772fb707b79",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page002",
+    "fileName" : "OPS/page002.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "64d6ffb6f5b0eac4989678c7a85252341875c80d151a7a6bf19b7bd556fda5",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page003",
+    "fileName" : "OPS/page003.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 150,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "63451ed1f55127a7723328bd510dae3525c3bee2311f083fe1f4c864ee196",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page004",
+    "fileName" : "OPS/page004.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b5c1fe7d9f5fc2bc3031646c9ecdf472a524bce7fea32b29f5a1c8299319f4d",
+    "isSpineItem" : true,
+    "spineIndex" : 3,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page005",
+    "fileName" : "OPS/page005.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b2a15669d1f7ea52d8da18dda71c9dae4f6f62663ca5ebeae4fbb30a8d73abc",
+    "isSpineItem" : true,
+    "spineIndex" : 4,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page006",
+    "fileName" : "OPS/page006.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "452377d4944412c1c4ca582925d24b3b5bcfebb35302fa4da6655de137a78",
+    "isSpineItem" : true,
+    "spineIndex" : 5,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page007",
+    "fileName" : "OPS/page007.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3427944296e459c85cc9182068d2192ac7f534e3ae66aef566d5a967d08727",
+    "isSpineItem" : true,
+    "spineIndex" : 6,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page008",
+    "fileName" : "OPS/page008.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c6c1d96ff16227eefe6ad8ef693f21d5b7b1331e3812b8ba623dd8256eb",
+    "isSpineItem" : true,
+    "spineIndex" : 7,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page009",
+    "fileName" : "OPS/page009.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 150,
+    "uncompressedSize" : 228,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a3142e9867f083fb72fd3dbc2cc7e531d0198dff56f8dc6d515bf9e6dd45d",
+    "isSpineItem" : true,
+    "spineIndex" : 8,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page010",
+    "fileName" : "OPS/page010.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "8cf8924a7e5a6aab4766c0998b54ae037b9e7ef27bdac80a496ffbc3255c56",
+    "isSpineItem" : true,
+    "spineIndex" : 9,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page011",
+    "fileName" : "OPS/page011.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c99863ef3e9455c115b834c864ac4f7dc516df4b8f15b2f363a7f5a2757",
+    "isSpineItem" : true,
+    "spineIndex" : 10,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page012",
+    "fileName" : "OPS/page012.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "6c7aff599f1edcfc120488650c3f9c40cbe7ecd7f58219a112b161d66a82e",
+    "isSpineItem" : true,
+    "spineIndex" : 11,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page013",
+    "fileName" : "OPS/page013.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "91301eb941ff3cc41884eb8c4337992f2c6e4e5b19b57e50dd298081fef",
+    "isSpineItem" : true,
+    "spineIndex" : 12,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page014",
+    "fileName" : "OPS/page014.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "82a1bb4ec2b92c647bc393f3a11fa3ed65b7ccde455ea9c890371070c64767",
+    "isSpineItem" : true,
+    "spineIndex" : 13,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page015",
+    "fileName" : "OPS/page015.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "32ad872f913d74cb2b180d73070f74a7a98f58e87f43a792a1bd41f6b1b8acc",
+    "isSpineItem" : true,
+    "spineIndex" : 14,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page016",
+    "fileName" : "OPS/page016.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5427accc914bb059d9273abe5d6ca3b61d63127d956aeaac878ed2106f596",
+    "isSpineItem" : true,
+    "spineIndex" : 15,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page017",
+    "fileName" : "OPS/page017.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3458e01c339999b7c4f4b1a640dfe77535e768a8ce73e1f29717fa85149f695",
+    "isSpineItem" : true,
+    "spineIndex" : 16,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page018",
+    "fileName" : "OPS/page018.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "49f9ab1633f381b3b56ca8b483c1d2b32a7d211aa8763993f4ece118233a8620",
+    "isSpineItem" : true,
+    "spineIndex" : 17,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page019",
+    "fileName" : "OPS/page019.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5adce7dffc9c3c74c24643ec147be776fe558fd7e576865e73f5a63bfcfd9a9",
+    "isSpineItem" : true,
+    "spineIndex" : 18,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page020",
+    "fileName" : "OPS/page020.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f3bb97c37986fe195f6e74397bb5885d58b258bcb32534feacd6ca70ccd8f78d",
+    "isSpineItem" : true,
+    "spineIndex" : 19,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page021",
+    "fileName" : "OPS/page021.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7f436689c070ae2a98e1da4e3a45e3214b7b5e8b209055b5d84f7089ace223",
+    "isSpineItem" : true,
+    "spineIndex" : 20,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page022",
+    "fileName" : "OPS/page022.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5f35f0d22453c6b4bc8f3dca778a1fcdda6fd54e765a0afcbeec3f36a4e6a4c",
+    "isSpineItem" : true,
+    "spineIndex" : 21,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page023",
+    "fileName" : "OPS/page023.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1daa62312f7d05a24b3057ed1ee098841cb67b2f66365e5ebb531d3c3a928",
+    "isSpineItem" : true,
+    "spineIndex" : 22,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page024",
+    "fileName" : "OPS/page024.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "172ffe2031a35c8641e07af6f63c729066c89e6618ba9e49b617c39381a7f5ae",
+    "isSpineItem" : true,
+    "spineIndex" : 23,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page025",
+    "fileName" : "OPS/page025.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "83d84d664f747629189458658c70ce3d87a7537a4ef85463fbf256472f8123",
+    "isSpineItem" : true,
+    "spineIndex" : 24,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page026",
+    "fileName" : "OPS/page026.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1bc03887b825d5681b113b84bf262979f561c5a6bbe3b2e47059541191ff",
+    "isSpineItem" : true,
+    "spineIndex" : 25,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page027",
+    "fileName" : "OPS/page027.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "161f1ebafd3f6fa7021d73f461899ad68bea5e1591c1f3573c69f85a657ec",
+    "isSpineItem" : true,
+    "spineIndex" : 26,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page028",
+    "fileName" : "OPS/page028.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cc9aee84c822d8f15fecf82710dfccccab678a73618487d47a0f4ddfcc54f2",
+    "isSpineItem" : true,
+    "spineIndex" : 27,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page029",
+    "fileName" : "OPS/page029.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3c57673fc1a1af647ef2299ddcf2393ab49ed5575e224bcdd87f971b582f67",
+    "isSpineItem" : true,
+    "spineIndex" : 28,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page030",
+    "fileName" : "OPS/page030.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "84e3d66ef9556d946dc41bfa8fb375ed6e365f814e12f1c0dd151669ce2582",
+    "isSpineItem" : true,
+    "spineIndex" : 29,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page031",
+    "fileName" : "OPS/page031.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "bd8cf76b86646cf6e1aa7b1f9ce7bea1b94594aa08d5aef31fdd2173934065",
+    "isSpineItem" : true,
+    "spineIndex" : 30,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page032",
+    "fileName" : "OPS/page032.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "121d4a45f06c3fd7d76fc58567d161221bd57c8592539ab7f8f53ee4dd39db4",
+    "isSpineItem" : true,
+    "spineIndex" : 31,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page033",
+    "fileName" : "OPS/page033.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "421f59195f6a20bdfd1f622fb8319bc96358a4a530c89c4f4a1e905bd49216",
+    "isSpineItem" : true,
+    "spineIndex" : 32,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page034",
+    "fileName" : "OPS/page034.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "67be833a53c958f35cde18b6a7aac496fa665eb1eaafcd68a58c3cad5a1c54",
+    "isSpineItem" : true,
+    "spineIndex" : 33,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page035",
+    "fileName" : "OPS/page035.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b46c401fdce375f7fec56e93e541a970fdf35da480e2d74cdc9cd4339d50ef57",
+    "isSpineItem" : true,
+    "spineIndex" : 34,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page036",
+    "fileName" : "OPS/page036.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "efa92e205f245167b62b7dfb7373f6abb58f76b9aedfcba2c883f24523225594",
+    "isSpineItem" : true,
+    "spineIndex" : 35,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page037",
+    "fileName" : "OPS/page037.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3adcd9d2dd9844135ad807a49b5e379e869a3f8ca795b34b458c189959a13d1",
+    "isSpineItem" : true,
+    "spineIndex" : 36,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page038",
+    "fileName" : "OPS/page038.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "fa92080ab50ddf69fce95567d31ca55d46745173e307de1c28beff48fd6f2",
+    "isSpineItem" : true,
+    "spineIndex" : 37,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page039",
+    "fileName" : "OPS/page039.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5a05a22c8eb8b4b35a8058703c2bd4ce3be5a757b06cb81c9e9fbfd8457",
+    "isSpineItem" : true,
+    "spineIndex" : 38,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page040",
+    "fileName" : "OPS/page040.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "aca957d8c33639a9511bc2efaa55df4581576458b88b01da2aba121146fce",
+    "isSpineItem" : true,
+    "spineIndex" : 39,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page041",
+    "fileName" : "OPS/page041.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "995913a2c6d18182ff5c3873b7ea3747e314e8329cbbd31afd6a8fe905a",
+    "isSpineItem" : true,
+    "spineIndex" : 40,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page042",
+    "fileName" : "OPS/page042.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e7153c6f618483c2d143c4ce847f8264f5f8797233757e65aa56657c589",
+    "isSpineItem" : true,
+    "spineIndex" : 41,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page043",
+    "fileName" : "OPS/page043.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1773201a9ef5cf6cc32453685fc95aa7c93470be2396385b9415c917ea7ca6",
+    "isSpineItem" : true,
+    "spineIndex" : 42,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page044",
+    "fileName" : "OPS/page044.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5debc1fafe10fb4321b493cf3a606c7ef4d13b51d179b9eecaad618fc05561a3",
+    "isSpineItem" : true,
+    "spineIndex" : 43,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page045",
+    "fileName" : "OPS/page045.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2a3d279579658dfcd1da2c66d6ce116d8b8ba6d1e86cc6c578d1b4252aca5",
+    "isSpineItem" : true,
+    "spineIndex" : 44,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page046",
+    "fileName" : "OPS/page046.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b76ff1672b3e021854ee89a38d9ca1d74d58f56d7da49a32fbde38b70945d",
+    "isSpineItem" : true,
+    "spineIndex" : 45,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page047",
+    "fileName" : "OPS/page047.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "405ebb6ed1fe5fb0bd35bbfd4a188bbf8738a79bee3ff9991492782d2e1e696",
+    "isSpineItem" : true,
+    "spineIndex" : 46,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page048",
+    "fileName" : "OPS/page048.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c381aafc6cd24d2495f5a8337317c30122cc6ee249fa4ac7ac97b6cef81",
+    "isSpineItem" : true,
+    "spineIndex" : 47,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page049",
+    "fileName" : "OPS/page049.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b85169a8539d5719aad76a7bc55d0793e929a34278a569e45d3fb6f6eda6c8",
+    "isSpineItem" : true,
+    "spineIndex" : 48,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page050",
+    "fileName" : "OPS/page050.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c4d3925174787a9768fa2d7dca3c9b73bf5a62e62696daecc957e3648d42719",
+    "isSpineItem" : true,
+    "spineIndex" : 49,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page051",
+    "fileName" : "OPS/page051.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7674fdf7eccfacd36a277dbfde1199da967f5913d554ff323045286beda",
+    "isSpineItem" : true,
+    "spineIndex" : 50,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page052",
+    "fileName" : "OPS/page052.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "24885e81f86ca0c5f04a795ed3f485503f9dc91cfc74b10e8e2b0f22f60adf8",
+    "isSpineItem" : true,
+    "spineIndex" : 51,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page053",
+    "fileName" : "OPS/page053.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cbe7d3682cf9d93e451ec56d74d4ba6be69f21de986ae34830522882615f",
+    "isSpineItem" : true,
+    "spineIndex" : 52,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page054",
+    "fileName" : "OPS/page054.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "71a167ac84bac65f1462bb3983e1455b652b7cf1ac1d4a8d2f2e2b1d4749b8",
+    "isSpineItem" : true,
+    "spineIndex" : 53,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page055",
+    "fileName" : "OPS/page055.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2c7966bc1b8b3e4a363ff41c720c5f5f14b33e3945ad67832287d6dd7ad17b",
+    "isSpineItem" : true,
+    "spineIndex" : 54,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page056",
+    "fileName" : "OPS/page056.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5025384da7ba8385bd4c5d01b78ada6624eaff0d2557b336eb9ebd675f3a13",
+    "isSpineItem" : true,
+    "spineIndex" : 55,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page057",
+    "fileName" : "OPS/page057.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ac2824db1f68f0a212e42c826b87d35aebd746146f69cdab486a5c211745a5b",
+    "isSpineItem" : true,
+    "spineIndex" : 56,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page058",
+    "fileName" : "OPS/page058.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f98b4b77aee0272926ff429b8c875795e4caa8b1e9c96ca43794af9f1a6f7f",
+    "isSpineItem" : true,
+    "spineIndex" : 57,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page059",
+    "fileName" : "OPS/page059.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "eb27973b8ab3382385bb28adfb0a2355dda4f0d992a417d3df98148594305f",
+    "isSpineItem" : true,
+    "spineIndex" : 58,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page060",
+    "fileName" : "OPS/page060.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "9076dbacdedfdaf74c2a0a529286849da61ff566d20a6f5479813988247d444",
+    "isSpineItem" : true,
+    "spineIndex" : 59,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page061",
+    "fileName" : "OPS/page061.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "20fe9168777da1d82f27562975d2d3c5262c509a13196955e72ad8cf03a56",
+    "isSpineItem" : true,
+    "spineIndex" : 60,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page062",
+    "fileName" : "OPS/page062.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b18bbe4a9859ae318a65851bb82cde4e7c3735ad0c53eb5cb3a2ee946d681ec",
+    "isSpineItem" : true,
+    "spineIndex" : 61,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page063",
+    "fileName" : "OPS/page063.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a869284f928f933dab3d89838a67b50dd7aa7adc48a7429ebd5c4d56996f483",
+    "isSpineItem" : true,
+    "spineIndex" : 62,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page064",
+    "fileName" : "OPS/page064.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "632783cc18ab1cb5936845d1d613a58e9e7ab944976c16c7791ad967724cfa99",
+    "isSpineItem" : true,
+    "spineIndex" : 63,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page065",
+    "fileName" : "OPS/page065.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1e8a457f349f6c15ef536139c18d9ae468101ba56eee55f7f8d028344179db",
+    "isSpineItem" : true,
+    "spineIndex" : 64,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page066",
+    "fileName" : "OPS/page066.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f738af98f87f6fe5b33289d5cfdaf64d6802cdb8e88867f9ad2c452f06848a0",
+    "isSpineItem" : true,
+    "spineIndex" : 65,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page067",
+    "fileName" : "OPS/page067.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "8ba47355d9e69f388fe4f893f26cb6a3ee4f41c411e94752962a096d3a5fa5",
+    "isSpineItem" : true,
+    "spineIndex" : 66,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page068",
+    "fileName" : "OPS/page068.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e86ba831b63134deb3ce5f662045ceed19415c24e4fcad2f58bcb4241eaf",
+    "isSpineItem" : true,
+    "spineIndex" : 67,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page069",
+    "fileName" : "OPS/page069.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f61b1c14c0261e96368b6317ee586f19eec9a20846ac6fe06d7150e81b4a6e",
+    "isSpineItem" : true,
+    "spineIndex" : 68,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page070",
+    "fileName" : "OPS/page070.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "98dba438a4dce9fd69f9f653d52237ddb55b7d8bf23ebd5cc0bf98f3451df",
+    "isSpineItem" : true,
+    "spineIndex" : 69,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page071",
+    "fileName" : "OPS/page071.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "412274eab1e2b26c7b2195cf88cdb299799f388a423e885b85de169c7fe4",
+    "isSpineItem" : true,
+    "spineIndex" : 70,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page072",
+    "fileName" : "OPS/page072.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "de82868c50d9dd2c91d8834c772fd434f2f7d194f7a3d7bb47db518984b1e4",
+    "isSpineItem" : true,
+    "spineIndex" : 71,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page073",
+    "fileName" : "OPS/page073.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cda3dffac17c5e076bea4812ceb220f6f24d8f60f9ef5a3a8b1b89c85615",
+    "isSpineItem" : true,
+    "spineIndex" : 72,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page074",
+    "fileName" : "OPS/page074.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "fedce17295db5f4bf65bf73be82f948d9d2fda8c4c51aea7db43d518da8cf7",
+    "isSpineItem" : true,
+    "spineIndex" : 73,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page075",
+    "fileName" : "OPS/page075.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d44d599b894b3dbc99a7fc12c186638a78c34e16b40ae10e7f3606cc0263fca",
+    "isSpineItem" : true,
+    "spineIndex" : 74,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page076",
+    "fileName" : "OPS/page076.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e269a88ef01b868311cae7bd653db8e331eb9a39f66f80713db79af03d441383",
+    "isSpineItem" : true,
+    "spineIndex" : 75,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page077",
+    "fileName" : "OPS/page077.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a999b61423697a1cd7bdee8d104c5da7ba8c81d0c6326785ccdd51b45be8326",
+    "isSpineItem" : true,
+    "spineIndex" : 76,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page078",
+    "fileName" : "OPS/page078.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "4fde977ccd331bf6405daefed33b59775ebf66c6e9b2a35298956fee53c9c96e",
+    "isSpineItem" : true,
+    "spineIndex" : 77,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page079",
+    "fileName" : "OPS/page079.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "134d56bb4de036d968737f9d89d6426a517ac88bbdb4e902317c8d8386c8a8",
+    "isSpineItem" : true,
+    "spineIndex" : 78,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page080",
+    "fileName" : "OPS/page080.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f11147a8b209e3431c67867897c958c3fe29165b30c5667f436fc222a22a8",
+    "isSpineItem" : true,
+    "spineIndex" : 79,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page081",
+    "fileName" : "OPS/page081.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a1c6387349704fdff8342f125650cb52fb4ce9c59bf8a737a3a1ae6712208093",
+    "isSpineItem" : true,
+    "spineIndex" : 80,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page082",
+    "fileName" : "OPS/page082.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3daa5340e738bf7e1b913418f4fd4846d379ab2b98040d814b9508cb6f7f8",
+    "isSpineItem" : true,
+    "spineIndex" : 81,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page083",
+    "fileName" : "OPS/page083.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e35ddc1c2e3845b046f2ac73a6d3bac4a2abcc8899491851cb6cfd24e583b",
+    "isSpineItem" : true,
+    "spineIndex" : 82,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page084",
+    "fileName" : "OPS/page084.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e6391eff26d6694e7d6b515815bac0edfcc692784299fc542aa80406ab8e273",
+    "isSpineItem" : true,
+    "spineIndex" : 83,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page085",
+    "fileName" : "OPS/page085.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5ec49fa9fd9c911b67fff9745623ed7d543e8bdf4d8c5a148ff813ccf52e54",
+    "isSpineItem" : true,
+    "spineIndex" : 84,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page086",
+    "fileName" : "OPS/page086.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "55859fe66f31bdb8b417a2fe43a1e2968bc218a9884304310e2e7bacea179",
+    "isSpineItem" : true,
+    "spineIndex" : 85,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page087",
+    "fileName" : "OPS/page087.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d2334680ea3c33bbefce4c99c6c89daaec7c8b32461fadf133493ed6b16152ff",
+    "isSpineItem" : true,
+    "spineIndex" : 86,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page088",
+    "fileName" : "OPS/page088.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2d3d7495edda52b677acbf78293477fde2177de76f798675af2244f0e9dd61",
+    "isSpineItem" : true,
+    "spineIndex" : 87,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page089",
+    "fileName" : "OPS/page089.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cd494d5023a9bf71ac6156c34592ca365bd9b30e1dccba0e9346edeab7c",
+    "isSpineItem" : true,
+    "spineIndex" : 88,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page090",
+    "fileName" : "OPS/page090.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b3585e79565d13f9b57e49ded1fb5be5eb4065cca7bc1d53207cd0ecaeed349c",
+    "isSpineItem" : true,
+    "spineIndex" : 89,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page091",
+    "fileName" : "OPS/page091.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1d2ba9558df4a34c9ae832b86b2adb067d93f7fd7e7a86326fd4a7335b466",
+    "isSpineItem" : true,
+    "spineIndex" : 90,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page092",
+    "fileName" : "OPS/page092.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ec937edcf87d479e2cccaada9aafe9a99bffe7d93605dd94ec662cefd320",
+    "isSpineItem" : true,
+    "spineIndex" : 91,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page093",
+    "fileName" : "OPS/page093.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ef904680b26192e28dc527b52db23dd07476d1cd2e3a39f498e6d28347379dd",
+    "isSpineItem" : true,
+    "spineIndex" : 92,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page094",
+    "fileName" : "OPS/page094.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "68efdc11ef3a261246209df8d05d6bfdd7b471959b6bfaee31bc180c41fe13f",
+    "isSpineItem" : true,
+    "spineIndex" : 93,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page095",
+    "fileName" : "OPS/page095.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "8531fc15621643a8956860594c1d4915be54611a55f9c8c059d35aa43f4b8f",
+    "isSpineItem" : true,
+    "spineIndex" : 94,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page096",
+    "fileName" : "OPS/page096.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cd76f817c09986db1b7bbe93e795c2e26e9b324144c945cbf3e20e8bd5dd0",
+    "isSpineItem" : true,
+    "spineIndex" : 95,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page097",
+    "fileName" : "OPS/page097.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ba1d7e073c0ae48e628f35a434f5aa4cf71bb95762866374c14cdcf657",
+    "isSpineItem" : true,
+    "spineIndex" : 96,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page098",
+    "fileName" : "OPS/page098.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "55b94968d156902bb5f39c2ea4feb0ddc06dd1bebbf1eb29f5dcb62f5d7e2d",
+    "isSpineItem" : true,
+    "spineIndex" : 97,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page099",
+    "fileName" : "OPS/page099.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 151,
+    "uncompressedSize" : 230,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "19a21c9bdccb3e75ece20ccff9fb7ed185bc2ce29a8c7aca9724b1c61f46e",
+    "isSpineItem" : true,
+    "spineIndex" : 98,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page100",
+    "fileName" : "OPS/page100.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 232,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "fce184af67bf3c013bd3ab214ef2ec87b6fbfdae51f5f6c55f3519764ae8841",
+    "isSpineItem" : true,
+    "spineIndex" : 99,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 228,
+    "uncompressedSize" : 340,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "abfea65134638c40af501025a030475dcee4d279c061658147f71db7ba8b21a1",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page001.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 75,
+    "locations" : [ {
+      "fileName" : "OPS/page001.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page002.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page003.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page004.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page005.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page006.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page007.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page008.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page009.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page010.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page011.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page012.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page013.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page014.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page015.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page016.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page017.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page018.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page019.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page020.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page021.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page022.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page023.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page024.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page025.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "There are 75 additional locations for this message.",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "Excessive_Spine_Items_epub3_fixed_format_properties.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-046",
+    "severity" : "ERROR",
+    "message" : "Fixed format item has no viewport defined.",
+    "additionalLocations" : 75,
+    "locations" : [ {
+      "fileName" : "OPS/page001.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page002.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page003.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page004.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page005.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page006.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page007.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page008.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page009.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page010.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page011.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page012.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page013.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page014.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page015.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page016.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page017.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page018.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page019.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page020.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page021.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page022.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page023.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page024.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page025.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "There are 75 additional locations for this message.",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : "A viewport declaration is required for fixed format items."
+  }, {
+    "ID" : "OPF-058",
+    "severity" : "USAGE",
+    "message" : "Spine item has no TOC entry reference.",
+    "additionalLocations" : 74,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page002.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page003.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page004.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page005.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page006.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page007.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page008.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page009.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page010.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page011.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page012.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page013.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page014.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page015.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page016.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page017.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page018.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page019.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page020.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page021.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page022.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page023.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page024.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page025.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page026.xhtml"
+    }, {
+      "fileName" : "There are 74 additional locations for this message.",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one TOC entry."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 74,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page002.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page003.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page004.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page005.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page006.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page007.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page008.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page009.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page010.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page011.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page012.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page013.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page014.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page015.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page016.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page017.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page018.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page019.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page020.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page021.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page022.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page023.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page024.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page025.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page026.xhtml"
+    }, {
+      "fileName" : "There are 74 additional locations for this message.",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub2/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub2/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub2/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub2/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub2/OPS/content.opf
new file mode 100644
index 0000000..34b51c3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub2/OPS/content.opf
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="2.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Epub2 marked as version 3</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="math" href="math.xml" fallback="math-fallback" fallback-style="no_exist" media-type="application/mathml+xml" required-namespace="http://www.w3.org/1998/Math/MathML"/>
+    <item id="math-fallback" href="fallback.xhtml" media-type="application/xhtml+xml" />
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="math" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub2/OPS/fallback.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub2/OPS/fallback.xhtml
new file mode 100644
index 0000000..5811406
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub2/OPS/fallback.xhtml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Fallback</title>
+</head>
+<body>
+  <div>
+    <h1>Fallback</h1>
+
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub2/OPS/math.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub2/OPS/math.xml
new file mode 100644
index 0000000..8819be4
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub2/OPS/math.xml
@@ -0,0 +1,19 @@
+<math xmlns="http://www.w3.org/1998/Math/MathML">
+    <apply>
+        <minus/>
+        <apply>
+            <times/>
+            <ci>x</ci>
+            <apply>
+                <plus/>
+                <apply>
+                    <divide/>
+                    <ci>a</ci>
+                    <ci>b</ci>
+                </apply>
+                <ci>c</ci>
+            </apply>
+        </apply>
+        <cn>1</cn>
+    </apply>
+</math>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub2/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub2/OPS/page01.xhtml
new file mode 100644
index 0000000..7d387d1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub2/OPS/page01.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>No Toc</title>
+</head>
+<body>
+  <div>
+    <h1>Missing ToC</h1>
+
+    <p>The opf file for this epub is missing an item in the manifest marked as nav. Since this is an epub3, this item is required.</p>
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub2/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub2/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub2/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub2/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub2/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub2/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub2_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub2_expected_results.json
new file mode 100644
index 0000000..908d29f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub2_expected_results.json
@@ -0,0 +1,234 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/Fallbacks_epub2.epub",
+    "filename" : "Fallbacks_epub2.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:52",
+    "elapsedTime" : 25,
+    "nFatal" : 0,
+    "nError" : 1,
+    "nWarning" : 0,
+    "nUsage" : 2
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Epub2 marked as version 3",
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 2,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "2.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 207,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 389,
+    "uncompressedSize" : 883,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "757c5230955b46441fa6f9635127eeeb3d6f9f89c8b426f58ceffb43515f7e",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "math",
+    "fileName" : "OPS/math.xml",
+    "media_type" : "application/mathml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 428,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "872c1bac4f91f7f52f604fe9f67ec25b4d25470f1bf3be83d23e49b4ca5182",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "math-fallback",
+    "fileName" : "OPS/fallback.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 137,
+    "uncompressedSize" : 197,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c511b2f61673a111e66e87d269ec3c5eb458a1dc7fcbee8b5442d0dfc479",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 293,
+    "uncompressedSize" : 556,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7e983f3695b1eea13cb6d3e7aacb5d84de767f2ccda456f5154d35c5f9b012",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 223,
+    "uncompressedSize" : 333,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "67d4de685f8c7abbef48e947b7b2e0b49c164c753eecbb7c4534ba43661d15",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  } ],
+  "messages" : [ {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-041",
+    "severity" : "ERROR",
+    "message" : "Fallback-style item could not be found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 11,
+      "column" : 181,
+      "context" : "math"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/math.xml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3/OPS/content.opf
new file mode 100644
index 0000000..44fe7bc
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3/OPS/content.opf
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Fallbacks Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="math" href="math.xml" fallback="math-fallback" fallback-style="no_exist" media-type="application/mathml+xml"/>
+    <item id="math-fallback" href="fallback.xhtml" media-type="application/xhtml+xml" />
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="math" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3/OPS/fallback.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3/OPS/fallback.xhtml
new file mode 100644
index 0000000..5811406
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3/OPS/fallback.xhtml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Fallback</title>
+</head>
+<body>
+  <div>
+    <h1>Fallback</h1>
+
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3/OPS/math.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3/OPS/math.xml
new file mode 100644
index 0000000..8819be4
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3/OPS/math.xml
@@ -0,0 +1,19 @@
+<math xmlns="http://www.w3.org/1998/Math/MathML">
+    <apply>
+        <minus/>
+        <apply>
+            <times/>
+            <ci>x</ci>
+            <apply>
+                <plus/>
+                <apply>
+                    <divide/>
+                    <ci>a</ci>
+                    <ci>b</ci>
+                </apply>
+                <ci>c</ci>
+            </apply>
+        </apply>
+        <cn>1</cn>
+    </apply>
+</math>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3/OPS/page01.xhtml
new file mode 100644
index 0000000..7d387d1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3/OPS/page01.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>No Toc</title>
+</head>
+<body>
+  <div>
+    <h1>Missing ToC</h1>
+
+    <p>The opf file for this epub is missing an item in the manifest marked as nav. Since this is an epub3, this item is required.</p>
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3/OPS/toc.xhtml
new file mode 100644
index 0000000..f17be2a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="page01.xhtml">Page 1</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3_expected_results.json
new file mode 100644
index 0000000..4ec86c3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Fallbacks_epub3_expected_results.json
@@ -0,0 +1,297 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/Fallbacks_epub3.epub",
+    "filename" : "Fallbacks_epub3.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:52",
+    "elapsedTime" : 154,
+    "nFatal" : 0,
+    "nError" : 1,
+    "nWarning" : 0,
+    "nUsage" : 5
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Fallbacks Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 2,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 262,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 414,
+    "uncompressedSize" : 979,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e699809952af7dfa578eee41b5fb99c6d73d54daada2a1c14bf1e661bdeb653",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "math",
+    "fileName" : "OPS/math.xml",
+    "media_type" : "application/mathml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 428,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "872c1bac4f91f7f52f604fe9f67ec25b4d25470f1bf3be83d23e49b4ca5182",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "math-fallback",
+    "fileName" : "OPS/fallback.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 137,
+    "uncompressedSize" : 197,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c511b2f61673a111e66e87d269ec3c5eb458a1dc7fcbee8b5442d0dfc479",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 293,
+    "uncompressedSize" : 556,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7e983f3695b1eea13cb6d3e7aacb5d84de767f2ccda456f5154d35c5f9b012",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 223,
+    "uncompressedSize" : 333,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "67d4de685f8c7abbef48e947b7b2e0b49c164c753eecbb7c4534ba43661d15",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 228,
+    "uncompressedSize" : 339,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c1f5f92fde356c7bbbc841fce3f768289bf47019fdf46fc33b54273fa0f0cf4",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/fallback.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "Fallbacks_epub3.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-058",
+    "severity" : "USAGE",
+    "message" : "Spine item has no TOC entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/math.xml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one TOC entry."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/math.xml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'attribute \"fallback-style\" not allowed here; expected attribute \"media-overlay\", \"media-type\" or \"properties\"'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 13,
+      "column" : 125,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/content.opf
new file mode 100644
index 0000000..15a35cd
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/content.opf
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Missing TOC Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="pict1" href="images/image1.jpg" media-type="image/jpeg"/>
+    <item id="pict2" href="images/image2.jpg" media-type="image/jpeg"/>
+    <item id="pict3" href="images/image3.jpg" media-type="image/jpeg"/>
+    <item id="pict4" href="images/image4.jpg" media-type="image/jpeg"/>
+    <item id="placeholderImage" href="images/PlaceHolder.gif" media-type="image/gif" />
+    <item id="slideshow" href="slideshow.xml" media-type="application/x-demo-slideshow"/>
+    <item id="settings" href="settings.xml" media-type="application/x-demo-popup"/>
+    <item id="valid" href="impl.xhtml" media-type="application/xhtml+xml" properties="scripted"/>
+    <item id="dupe" href="duplicate.xhtml" media-type="application/xhtml+xml" properties="scripted"/>
+    <item id="not_scripted" href="impl2.xhtml" media-type="application/xhtml+xml"/>
+    <item id="quiz" href="quiz.xml" media-type="application/x-demo-quiz"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+  </spine>
+  <bindings>
+    <mediaType handler="missing" media-type="application/no-exist"/>
+    <mediaType handler="valid" media-type="application/x-demo-slideshow"/>
+    <mediaType handler="valid" media-type="image/jpeg"/>
+    <mediaType handler="valid" media-type="application/x-demo-popup"/>
+    <mediaType handler="dupe" media-type="application/x-demo-popup"/>
+    <mediaType handler="not_scripted" media-type="application/x-demo-quiz"/>
+  </bindings>
+</package>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/duplicate.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/duplicate.xhtml
new file mode 100644
index 0000000..c76887c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/duplicate.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Duplicate Handler</title>
+    <script type="text/javascript">
+        <![CDATA[
+        alert ("Hello World");
+        ]]></script>
+</head>
+<body>
+<p>This is simply a placeholder for a media-type handler.  It doesn't actually do anything.</p>
+
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/images/PlaceHolder.gif b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/images/PlaceHolder.gif
new file mode 100644
index 0000000..18e588e
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/images/PlaceHolder.gif differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/images/image1.jpg b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/images/image1.jpg
new file mode 100644
index 0000000..1c9e32b
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/images/image1.jpg differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/images/image2.jpg b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/images/image2.jpg
new file mode 100644
index 0000000..1c9e32b
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/images/image2.jpg differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/images/image3.jpg b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/images/image3.jpg
new file mode 100644
index 0000000..1c9e32b
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/images/image3.jpg differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/images/image4.jpg b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/images/image4.jpg
new file mode 100644
index 0000000..1c9e32b
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/images/image4.jpg differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/impl.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/impl.xhtml
new file mode 100644
index 0000000..eb107fc
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/impl.xhtml
@@ -0,0 +1,61 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>No Toc</title>
+    <script type="text/javascript">
+        <![CDATA[
+        var index = -1;
+        var slides = [];
+        var img;
+
+        function showNext() {
+            index++;
+            if (index >= slides.length) {
+                index = 0;
+            }
+            var slide = slides[index];
+            img.setAttribute("src", slide.src);
+            setTimeout(showNext, slide.dur);
+        }
+
+        function load(xmldoc) {
+            var list = xmldoc.getElementsByTagName("slide");
+            for (var i = 0; i < list.length; i++) {
+                var slide = list[i];
+                var s = {};
+                s.src = slide.getAttribute("src");
+                s.dur = (slide.getAttribute("dur") - 0) * 1000;
+                slides.push(s);
+            }
+
+            showNext();
+        }
+
+        function init() {
+            img = document.getElementById("img");
+            var m = document.URL.match(/[&\?]src=([^&]*)/);
+            if (m) {
+                var src = m[1];
+                var req = new XMLHttpRequest();
+                req.open("GET", src, true);
+                req.onreadystatechange = function () {
+                    if (req.readyState == 4) {
+                        load(req.responseXML);
+                    }
+                };
+
+                req.send(null);
+            }
+        }
+
+        window.onload = init;
+        ]]></script>
+    <style type="text/css">
+        img{width: 100%}
+    </style>
+</head>
+<body>
+<img alt="slideshow" id="img" src="images/PlaceHolder.gif"/>
+
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/impl2.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/impl2.xhtml
new file mode 100644
index 0000000..fc0aadb
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/impl2.xhtml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>No Script</title>
+</head>
+<body>
+<div>This is marked as a media handler but has no script.</div>
+
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/page01.xhtml
new file mode 100644
index 0000000..51271bb
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/page01.xhtml
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Slide show</title>
+</head>
+<body>
+<div>
+    <h1>Slideshow</h1>
+
+    <object data="slideshow.xml"
+            type="application/x-demo-slideshow">
+        <img alt="image1" src="images/image1.jpg"/>
+        <img alt="image2" src="images/image2.jpg"/>
+        <img alt="image3" src="images/image3.jpg"/>
+        <img alt="image4" src="images/image4.jpg"/>
+    </object>
+
+    <!-- The following is used to generated OPF-013.  The type listed here doesn't match the type listed in the opf file.-->
+    <object data="settings.xml" type="application/x-demo-slideshow">Alt Text</object>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/quiz.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/quiz.xml
new file mode 100644
index 0000000..3916db1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/quiz.xml
@@ -0,0 +1,6 @@
+<slides>
+    <slide src="images/Hydrangeas.jpg" dur="3"/>
+    <slide src="images/Jellyfish.jpg" dur="3"/>
+    <slide src="images/Koala.jpg" dur="3"/>
+    <slide src="images/Lighthouse.jpg" dur="3"/>
+</slides>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/settings.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/settings.xml
new file mode 100644
index 0000000..3916db1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/settings.xml
@@ -0,0 +1,6 @@
+<slides>
+    <slide src="images/Hydrangeas.jpg" dur="3"/>
+    <slide src="images/Jellyfish.jpg" dur="3"/>
+    <slide src="images/Koala.jpg" dur="3"/>
+    <slide src="images/Lighthouse.jpg" dur="3"/>
+</slides>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/slideshow.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/slideshow.xml
new file mode 100644
index 0000000..3916db1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/slideshow.xml
@@ -0,0 +1,6 @@
+<slides>
+    <slide src="images/Hydrangeas.jpg" dur="3"/>
+    <slide src="images/Jellyfish.jpg" dur="3"/>
+    <slide src="images/Koala.jpg" dur="3"/>
+    <slide src="images/Lighthouse.jpg" dur="3"/>
+</slides>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/toc.xhtml
new file mode 100644
index 0000000..f17be2a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="page01.xhtml">Page 1</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler_expected_results.json
new file mode 100644
index 0000000..b290307
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Media-type_handler_expected_results.json
@@ -0,0 +1,558 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/Media-type_handler.epub",
+    "filename" : "Media-type_handler.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:48",
+    "elapsedTime" : 515,
+    "nFatal" : 0,
+    "nError" : 5,
+    "nWarning" : 0,
+    "nUsage" : 5
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Missing TOC Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : true,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : false,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 1787,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "dupe",
+    "fileName" : "OPS/duplicate.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 252,
+    "uncompressedSize" : 368,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "6b7426873e7edb3fd6c1c49e5684888e5d9fde33fddc4fa5d56674672de9",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : true,
+    "scriptSrc" : false,
+    "scriptTag" : true,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 601,
+    "uncompressedSize" : 2094,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f556d8161cbee2f66ce3bcdc19f3f6cbba8beb99da493d45f7a8e39fa4f34e",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 293,
+    "uncompressedSize" : 556,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7e983f3695b1eea13cb6d3e7aacb5d84de767f2ccda456f5154d35c5f9b012",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "not_scripted",
+    "fileName" : "OPS/impl2.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 163,
+    "uncompressedSize" : 222,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "6b39c022c0c8555a8a6acef3991eefbcef1707d951dbbf75a4108abbbceab",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 327,
+    "uncompressedSize" : 711,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c0de32e88c90fc77cc3fc952bb551adad46ab85030661420a71aa52fe69ffd",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/images/image4.jpg", "OPS/images/image1.jpg", "OPS/settings.xml", "OPS/slideshow.xml", "OPS/images/image2.jpg", "OPS/images/image3.jpg" ]
+  }, {
+    "id" : "pict1",
+    "fileName" : "OPS/images/image1.jpg",
+    "media_type" : "image/jpeg",
+    "compressedSize" : 8521,
+    "uncompressedSize" : 20337,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2b32ce706c849b90805019fb8f142c8ee67d6adffea4902aeaba89127d3636",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "pict2",
+    "fileName" : "OPS/images/image2.jpg",
+    "media_type" : "image/jpeg",
+    "compressedSize" : 8521,
+    "uncompressedSize" : 20337,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2b32ce706c849b90805019fb8f142c8ee67d6adffea4902aeaba89127d3636",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "pict3",
+    "fileName" : "OPS/images/image3.jpg",
+    "media_type" : "image/jpeg",
+    "compressedSize" : 8521,
+    "uncompressedSize" : 20337,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2b32ce706c849b90805019fb8f142c8ee67d6adffea4902aeaba89127d3636",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "pict4",
+    "fileName" : "OPS/images/image4.jpg",
+    "media_type" : "image/jpeg",
+    "compressedSize" : 8521,
+    "uncompressedSize" : 20337,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2b32ce706c849b90805019fb8f142c8ee67d6adffea4902aeaba89127d3636",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "placeholderImage",
+    "fileName" : "OPS/images/PlaceHolder.gif",
+    "media_type" : "image/gif",
+    "compressedSize" : 1885,
+    "uncompressedSize" : 2065,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2abaa734135a298442e1786538beccae5516cd2e186103c7ea07aff1f714",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "quiz",
+    "fileName" : "OPS/quiz.xml",
+    "media_type" : "application/x-demo-quiz",
+    "compressedSize" : 90,
+    "uncompressedSize" : 208,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cc484bec201bc622b7cf45f7b4111a429a9f234c422748c48f548feb1c3a084",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "settings",
+    "fileName" : "OPS/settings.xml",
+    "media_type" : "application/x-demo-popup",
+    "compressedSize" : 90,
+    "uncompressedSize" : 208,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cc484bec201bc622b7cf45f7b4111a429a9f234c422748c48f548feb1c3a084",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "slideshow",
+    "fileName" : "OPS/slideshow.xml",
+    "media_type" : "application/x-demo-slideshow",
+    "compressedSize" : 90,
+    "uncompressedSize" : 208,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cc484bec201bc622b7cf45f7b4111a429a9f234c422748c48f548feb1c3a084",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 228,
+    "uncompressedSize" : 339,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c1f5f92fde356c7bbbc841fce3f768289bf47019fdf46fc33b54273fa0f0cf4",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "valid",
+    "fileName" : "OPS/impl.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 687,
+    "uncompressedSize" : 1667,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "95a65263a5c598e919a7bce147699deda236cc688ff621b797be54cd512750",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : true,
+    "scriptSrc" : false,
+    "scriptTag" : true,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/images/PlaceHolder.gif" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/duplicate.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/impl.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/impl2.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "Media-type_handler.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-008",
+    "severity" : "ERROR",
+    "message" : "Handler binding for core Media-type 'image/jpeg' is not allowed.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 31,
+      "column" : 57,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-009",
+    "severity" : "ERROR",
+    "message" : "The media-type application/x-demo-popup has already been assigned handler 'OPS/impl.xhtml'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 33,
+      "column" : 70,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-013",
+    "severity" : "ERROR",
+    "message" : "The type property 'application/x-demo-slideshow' on the object tag does not match the declared media-type 'application/x-demo-popup' in the OPF manifest.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : 19,
+      "column" : 69,
+      "context" : "<object data=\"settings.xml\" type=\"application/x-demo-slideshow\">"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-046",
+    "severity" : "ERROR",
+    "message" : "Scripted property is not set on mediaType handler.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/impl2.xhtml",
+      "line" : 22,
+      "column" : 84,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'assertion failed:\n  manifest items referenced from the handler attribute of a bindings mediaType element must be of the 'application/xhtml+xml' type (given type was '')'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 29,
+      "column" : 69,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "SCP-002",
+    "severity" : "USAGE",
+    "message" : "Use of XMLHttpRequest in ePub scripts is a security risk.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/impl.xhtml",
+      "line" : 52,
+      "column" : 12,
+      "context" : "new XMLHttpRequest();"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "SCP-010",
+    "severity" : "USAGE",
+    "message" : "Epub 3 content file contains script.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/duplicate.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/impl.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/OPS/blank b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/OPS/blank
new file mode 100644
index 0000000..e69de29
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/OPS/content.opf
new file mode 100644
index 0000000..49f525c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/OPS/content.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="2.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Mismatched mimetypes</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="text/html" />
+    <item id="page02" href="page02.xhtml" media-type="application/xhtml"/>
+    <item id="blank" href="blank" media-type="image/png"/>
+    <item id="image1" href="image1.jpg" media-type="image/gif"/>
+    <item id="movie" href="sample.mov" media-type="video/quicktime"/>
+    <item id="style" href="css/style.css" media-type="text/x-oeb1-css"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="image1" />
+  </spine>
+</package>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/OPS/css/style.css b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/OPS/css/style.css
new file mode 100644
index 0000000..9224aa0
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/OPS/css/style.css
@@ -0,0 +1 @@
+.simple{color:#ffff00;background-color: purple}
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/OPS/image1.jpg b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/OPS/image1.jpg
new file mode 100644
index 0000000..1c9e32b
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/OPS/image1.jpg differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/OPS/page01.xhtml
new file mode 100644
index 0000000..f6949d8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/OPS/page01.xhtml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Page 1</title>
+</head>
+<body>
+<div>
+    <h1>Page 1</h1>
+
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/OPS/page02.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/OPS/page02.xhtml
new file mode 100644
index 0000000..9182cca
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/OPS/page02.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Page 2</title>
+    <link rel="stylesheet" type="text/css" href="css/style.css"/>
+</head>
+<body>
+<div class="simple">
+    <h1>Page 2</h1>
+
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/OPS/sample.mov b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/OPS/sample.mov
new file mode 100644
index 0000000..a48167c
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/OPS/sample.mov differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2_expected_results.json
new file mode 100644
index 0000000..1b1d517
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2_expected_results.json
@@ -0,0 +1,377 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub2.epub",
+    "filename" : "Mismatched_mimetypes_epub2.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:48",
+    "elapsedTime" : 54,
+    "nFatal" : 0,
+    "nError" : 5,
+    "nWarning" : 2,
+    "nUsage" : 2
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Mismatched mimetypes",
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 3,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "2.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : true,
+    "charsCount" : 30,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "blank",
+    "fileName" : "OPS/blank",
+    "media_type" : "image/png",
+    "compressedSize" : 2,
+    "uncompressedSize" : 0,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 402,
+    "uncompressedSize" : 972,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "53ab5f327e1f0b020126a21b668362f05abde95ae37fe5ab8bf180684c7b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "image1",
+    "fileName" : "OPS/image1.jpg",
+    "media_type" : "image/gif",
+    "compressedSize" : 8521,
+    "uncompressedSize" : 20337,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2b32ce706c849b90805019fb8f142c8ee67d6adffea4902aeaba89127d3636",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "movie",
+    "fileName" : "OPS/sample.mov",
+    "media_type" : "video/quicktime",
+    "compressedSize" : 69635,
+    "uncompressedSize" : 101602,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2b0dca4e0762439802ed15b84d2ff9c19c9a9a3abf63f928294ec16762a663",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 293,
+    "uncompressedSize" : 556,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7e983f3695b1eea13cb6d3e7aacb5d84de767f2ccda456f5154d35c5f9b012",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "text/html",
+    "compressedSize" : 146,
+    "uncompressedSize" : 204,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e6b6b2e3adb4e5d7f294197c4b2801eaba6de2065dfaa2611736c295f076f3",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/page02.xhtml",
+    "media_type" : "application/xhtml",
+    "compressedSize" : 196,
+    "uncompressedSize" : 285,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2df2568a1f483a3ba5dddc97cc6cae96a77ffb2e8cd8cca8195adc33a1f7",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style",
+    "fileName" : "OPS/css/style.css",
+    "media_type" : "text/x-oeb1-css",
+    "compressedSize" : 42,
+    "uncompressedSize" : 47,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "57834f509847fa3b895b51a68b41f3342322e6c15c8b4e51b256fff8c5f6188",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  } ],
+  "messages" : [ {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "MED-004",
+    "severity" : "ERROR",
+    "message" : "Image file header may be corrupted.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/blank",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-029",
+    "severity" : "ERROR",
+    "message" : "The file 'OPS/image1.jpg' does not appear to match the media type image/gif, as specified in the OPF file.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "Mismatched_mimetypes_epub2.epub",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-035",
+    "severity" : "WARNING",
+    "message" : "Media type 'text/html' is not appropriate for XHTML/OPS.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 10,
+      "column" : 68,
+      "context" : "page01"
+    } ],
+    "suggestion" : "Use 'application/xhtml+xml' instead."
+  }, {
+    "ID" : "OPF-037",
+    "severity" : "WARNING",
+    "message" : "Found deprecated media-type 'text/x-oeb1-css'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 15,
+      "column" : 73,
+      "context" : "style"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-042",
+    "severity" : "ERROR",
+    "message" : "'image/gif' is not a permissible spine media-type.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 13,
+      "column" : 65,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-043",
+    "severity" : "ERROR",
+    "message" : "Spine item with non-standard media-type 'application/xhtml' has no fallback.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 11,
+      "column" : 75,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/image1.jpg"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page02.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  }, {
+    "ID" : "PKG-021",
+    "severity" : "ERROR",
+    "message" : "Corrupted image file encountered.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/blank",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/blank"
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/OPS/blank b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/OPS/blank
new file mode 100644
index 0000000..e69de29
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/OPS/content.opf
new file mode 100644
index 0000000..653917f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/OPS/content.opf
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Missing TOC Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml" />
+    <item id="page02" href="page02.xhtml" media-type="application/xhtml+xml"/>
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="blank" href="blank" media-type="image/png"/>
+    <item id="image1" href="image1.jpg" media-type="image/gif"/>
+    <item id="movie" href="sample.mov" media-type="video/quicktime"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="image1" />
+  </spine>
+</package>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/OPS/image1.jpg b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/OPS/image1.jpg
new file mode 100644
index 0000000..1c9e32b
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/OPS/image1.jpg differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/OPS/page01.xhtml
new file mode 100644
index 0000000..f6949d8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/OPS/page01.xhtml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Page 1</title>
+</head>
+<body>
+<div>
+    <h1>Page 1</h1>
+
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/OPS/page02.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/OPS/page02.xhtml
new file mode 100644
index 0000000..02de2ad
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/OPS/page02.xhtml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Page 2</title>
+</head>
+<body>
+<div>
+    <h1>Page 2</h1>
+
+    <video controls="controls">
+        <source src="sample.mov" type="video/quicktime"/>
+        No video player available.
+    </video>
+
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/OPS/sample.mov b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/OPS/sample.mov
new file mode 100644
index 0000000..a48167c
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/OPS/sample.mov differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/OPS/toc.xhtml
new file mode 100644
index 0000000..f17be2a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="page01.xhtml">Page 1</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3_expected_results.json
new file mode 100644
index 0000000..32ff619
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3_expected_results.json
@@ -0,0 +1,423 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/Mismatched_mimetypes_epub3.epub",
+    "filename" : "Mismatched_mimetypes_epub3.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:48",
+    "elapsedTime" : 180,
+    "nFatal" : 0,
+    "nError" : 6,
+    "nWarning" : 0,
+    "nUsage" : 6
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Missing TOC Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 3,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : false,
+    "hasAudio" : false,
+    "hasVideo" : true,
+    "charsCount" : 140,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "blank",
+    "fileName" : "OPS/blank",
+    "media_type" : "image/png",
+    "compressedSize" : 2,
+    "uncompressedSize" : 0,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 442,
+    "uncompressedSize" : 1070,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cf60b5ca982aa9953f3b3943be319e88db2e9ddfc82f9139f6fde69ccf5a",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "image1",
+    "fileName" : "OPS/image1.jpg",
+    "media_type" : "image/gif",
+    "compressedSize" : 8521,
+    "uncompressedSize" : 20337,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2b32ce706c849b90805019fb8f142c8ee67d6adffea4902aeaba89127d3636",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "movie",
+    "fileName" : "OPS/sample.mov",
+    "media_type" : "video/quicktime",
+    "compressedSize" : 69635,
+    "uncompressedSize" : 101602,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2b0dca4e0762439802ed15b84d2ff9c19c9a9a3abf63f928294ec16762a663",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 293,
+    "uncompressedSize" : 556,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7e983f3695b1eea13cb6d3e7aacb5d84de767f2ccda456f5154d35c5f9b012",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml",
+    "compressedSize" : 146,
+    "uncompressedSize" : 204,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e6b6b2e3adb4e5d7f294197c4b2801eaba6de2065dfaa2611736c295f076f3",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/page02.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 222,
+    "uncompressedSize" : 343,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d3dca04cabdd6f32ca7df981c63b9595b4a1d42e4c490b6e1fea1f9cb1c3bf",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/sample.mov" ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 228,
+    "uncompressedSize" : 339,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c1f5f92fde356c7bbbc841fce3f768289bf47019fdf46fc33b54273fa0f0cf4",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page02.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "Mismatched_mimetypes_epub3.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "MED-004",
+    "severity" : "ERROR",
+    "message" : "Image file header may be corrupted.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/blank",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-029",
+    "severity" : "ERROR",
+    "message" : "The file 'OPS/image1.jpg' does not appear to match the media type image/gif, as specified in the OPF file.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "Mismatched_mimetypes_epub3.epub",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-036",
+    "severity" : "USAGE",
+    "message" : "Video type 'video/quicktime' might not be supported by reading systems ",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page02.xhtml",
+      "line" : 12,
+      "column" : 58,
+      "context" : null
+    } ],
+    "suggestion" : "Use 'video/mp4', 'video/h264' or 'video/webm' instead."
+  }, {
+    "ID" : "OPF-043",
+    "severity" : "ERROR",
+    "message" : "Spine item with non-standard media-type 'application/xhtml' has no fallback.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 11,
+      "column" : 76,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-043",
+    "severity" : "ERROR",
+    "message" : "Spine item with non-standard media-type 'image/gif' has no fallback.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 15,
+      "column" : 65,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-058",
+    "severity" : "USAGE",
+    "message" : "Spine item has no TOC entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/image1.jpg"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page02.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one TOC entry."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/image1.jpg"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page02.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  }, {
+    "ID" : "PKG-021",
+    "severity" : "ERROR",
+    "message" : "Corrupted image file encountered.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/blank",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/blank"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-010",
+    "severity" : "ERROR",
+    "message" : "Reference to non-standard resource type found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 17,
+      "column" : 36,
+      "context" : "OPS/page01.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : 11,
+      "column" : 36,
+      "context" : "OPS/page01.xhtml"
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub2/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub2/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub2/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub2/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub2/OPS/content.opf
new file mode 100644
index 0000000..9997f1f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub2/OPS/content.opf
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="2.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Missing TOC Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub2/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub2/OPS/page01.xhtml
new file mode 100644
index 0000000..35e7f0c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub2/OPS/page01.xhtml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>No Toc</title>
+</head>
+<body>
+  <div>
+    <h1>Missing ToC</h1>
+
+    <p>The opf file for this epub is missing an item in the manifest marked as nav. Since this is an epub2 this element shouldn't exist.</p>
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub2/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub2/OPS/toc.ncx
new file mode 100644
index 0000000..85afad2
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub2/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx:ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <ncx:head>
+    <ncx:meta name="dtb:uid" content=""/>
+    <ncx:meta name="dtb:depth" content="1"/>
+    <ncx:meta name="dtb:totalPageCount" content="0"/>
+    <ncx:meta name="dtb:maxPageNumber" content="0"/>
+  </ncx:head>
+  <ncx:docTitle>
+    <ncx:text>Missing TOC Test</ncx:text>
+  </ncx:docTitle>  
+  <ncx:navMap>
+    <ncx:navPoint id="np-1" playOrder="1">
+      <ncx:navLabel>
+	<ncx:text>Missing ToC Sample</ncx:text>
+      </ncx:navLabel>
+      <ncx:content src="page01.xhtml"/>
+    </ncx:navPoint>
+  </ncx:navMap>
+</ncx:ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub2/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub2/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub2/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub2_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub2_expected_results.json
new file mode 100644
index 0000000..fd9ac36
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub2_expected_results.json
@@ -0,0 +1,166 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/Missing_NAV_epub2.epub",
+    "filename" : "Missing_NAV_epub2.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:41",
+    "elapsedTime" : 48,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 1
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Missing TOC Sample Book",
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "2.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 173,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 302,
+    "uncompressedSize" : 582,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "0d8daa23fd7ee3e9294a4973cb79fdbfe3c84afa5cc52782fe9129dbf649b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 303,
+    "uncompressedSize" : 644,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "de09d88de51d54e23207297c795195c8c1c6c522d41104ea4b57d69fc01259",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 229,
+    "uncompressedSize" : 338,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c24a3daa5016e09abb5be18142e79cf6a3de1c6a7149864c4edd4a151e58df94",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  } ],
+  "messages" : [ {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 76,
+      "context" : "ncx"
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub3/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub3/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub3/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub3/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub3/OPS/content.opf
new file mode 100644
index 0000000..cc113f6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub3/OPS/content.opf
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Missing TOC Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub3/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub3/OPS/page01.xhtml
new file mode 100644
index 0000000..7d387d1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub3/OPS/page01.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>No Toc</title>
+</head>
+<body>
+  <div>
+    <h1>Missing ToC</h1>
+
+    <p>The opf file for this epub is missing an item in the manifest marked as nav. Since this is an epub3, this item is required.</p>
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub3/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub3/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub3/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub3/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub3/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub3/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub3_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub3_expected_results.json
new file mode 100644
index 0000000..ae59896
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NAV_epub3_expected_results.json
@@ -0,0 +1,202 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/Missing_NAV_epub3.epub",
+    "filename" : "Missing_NAV_epub3.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:40",
+    "elapsedTime" : 460,
+    "nFatal" : 0,
+    "nError" : 1,
+    "nWarning" : 0,
+    "nUsage" : 3
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Missing TOC Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 168,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 344,
+    "uncompressedSize" : 648,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "38724b1522da1bdc96892d96522b7e8c56ca9bc4651333a155d36df83e172",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 293,
+    "uncompressedSize" : 556,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7e983f3695b1eea13cb6d3e7aacb5d84de767f2ccda456f5154d35c5f9b012",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 223,
+    "uncompressedSize" : 333,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "67d4de685f8c7abbef48e947b7b2e0b49c164c753eecbb7c4534ba43661d15",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "Missing_NAV_epub3.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'assertion failed:\n  Exactly one manifest item must declare the 'nav' property (number of 'nav' items: 0).'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 9,
+      "column" : 13,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub2/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub2/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub2/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub2/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub2/OPS/content.opf
new file mode 100644
index 0000000..1e1f6d0
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub2/OPS/content.opf
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="2.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Missing TOC Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+  </metadata>
+  <manifest>
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+  </manifest>
+  <spine>
+    <itemref idref="page01" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub2/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub2/OPS/page01.xhtml
new file mode 100644
index 0000000..79ffda9
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub2/OPS/page01.xhtml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>No NCX</title>
+</head>
+<body>
+  <div>
+    <h1>Missing NCX</h1>
+
+    <p>The ncx file for this epub is missing. Since this is an epub2 this element is required.</p>
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub2/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub2/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub2/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub2_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub2_expected_results.json
new file mode 100644
index 0000000..d264129
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub2_expected_results.json
@@ -0,0 +1,156 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/Missing_NCX_epub2.epub",
+    "filename" : "Missing_NCX_epub2.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:41",
+    "elapsedTime" : 30,
+    "nFatal" : 0,
+    "nError" : 2,
+    "nWarning" : 0,
+    "nUsage" : 0
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Missing TOC Sample Book",
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "2.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : false,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 131,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 273,
+    "uncompressedSize" : 497,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "963bcd24c5254e97a18a96e8ff235ae5f8211ad8bff8dd5c0a984418ee740be",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 200,
+    "uncompressedSize" : 296,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "6ea38c5f6b65df90b4773372739e174518bdd3a8fae462174469dbb82e6d931",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  } ],
+  "messages" : [ {
+    "ID" : "NCX-002",
+    "severity" : "ERROR",
+    "message" : "toc attribute was not found on the spine element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'element \"spine\" missing required attribute \"toc\"'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 11,
+      "column" : 10,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub3/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub3/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub3/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub3/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub3/OPS/content.opf
new file mode 100644
index 0000000..fb5bd3e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub3/OPS/content.opf
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Missing TOC Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+  </manifest>
+  <spine>
+    <itemref idref="page01" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub3/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub3/OPS/page01.xhtml
new file mode 100644
index 0000000..7d387d1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub3/OPS/page01.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>No Toc</title>
+</head>
+<body>
+  <div>
+    <h1>Missing ToC</h1>
+
+    <p>The opf file for this epub is missing an item in the manifest marked as nav. Since this is an epub3, this item is required.</p>
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub3/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub3/OPS/toc.xhtml
new file mode 100644
index 0000000..f17be2a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub3/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="page01.xhtml">Page 1</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub3/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub3/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub3/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub3_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub3_expected_results.json
new file mode 100644
index 0000000..51873da
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_NCX_epub3_expected_results.json
@@ -0,0 +1,190 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/Missing_NCX_epub3.epub",
+    "filename" : "Missing_NCX_epub3.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:41",
+    "elapsedTime" : 301,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 3
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Missing TOC Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : false,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 223,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 337,
+    "uncompressedSize" : 653,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "40f2c1c1644b0705ba394f42ec3f2859d42ebfcc595ad56cbe9ceebd42ea6d",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 223,
+    "uncompressedSize" : 333,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "67d4de685f8c7abbef48e947b7b2e0b49c164c753eecbb7c4534ba43661d15",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 228,
+    "uncompressedSize" : 339,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c1f5f92fde356c7bbbc841fce3f768289bf47019fdf46fc33b54273fa0f0cf4",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "Missing_NCX_epub3.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "NCX-003",
+    "severity" : "USAGE",
+    "message" : "An .NCX file is required for TOC navigation on ePub v2 readers.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub2/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub2/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub2/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub2/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub2/OPS/content.opf
new file mode 100644
index 0000000..dd66eb6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub2/OPS/content.opf
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="2.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Missing Spine Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+  </metadata>
+  <manifest>
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+  </manifest>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub2/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub2/OPS/page01.xhtml
new file mode 100644
index 0000000..6eb4748
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub2/OPS/page01.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>No Spine</title>
+</head>
+<body>
+<div>
+    <h1>Missing Spine</h1>
+
+    <p>The spine element is missing in the opf file. This element is required.</p>
+
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub2/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub2/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub2/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub2/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub2/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub2/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub2_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub2_expected_results.json
new file mode 100644
index 0000000..07199c6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub2_expected_results.json
@@ -0,0 +1,190 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/Missing_Spine_epub2.epub",
+    "filename" : "Missing_Spine_epub2.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:42",
+    "elapsedTime" : 29,
+    "nFatal" : 1,
+    "nError" : 2,
+    "nWarning" : 0,
+    "nUsage" : 0
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Missing Spine Sample Book",
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 0,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "2.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 116,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 278,
+    "uncompressedSize" : 522,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e125908f64a78cf558bf9f29040d057107d9c2ca091173bb65bdba2cda2ec47",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 293,
+    "uncompressedSize" : 556,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7e983f3695b1eea13cb6d3e7aacb5d84de767f2ccda456f5154d35c5f9b012",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 188,
+    "uncompressedSize" : 281,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "aff123b20618fc054cd2bb1e7b6d62917f35bdcf825d9e13c0713a3c49c230",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  } ],
+  "messages" : [ {
+    "ID" : "NCX-002",
+    "severity" : "ERROR",
+    "message" : "toc attribute was not found on the spine element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-019",
+    "severity" : "FATAL",
+    "message" : "Spine tag was not found in the OPF file.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'element \"package\" incomplete; missing required element \"spine\"'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 12,
+      "column" : 11,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub3/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub3/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub3/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub3/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub3/OPS/content.opf
new file mode 100644
index 0000000..40750bf
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub3/OPS/content.opf
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Missing Spine Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+  </manifest>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub3/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub3/OPS/page01.xhtml
new file mode 100644
index 0000000..4811e11
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub3/OPS/page01.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>No Spine</title>
+</head>
+<body>
+  <div>
+    <h1>Missing Spine</h1>
+
+    <p>The spine element is missing in the opf file. This element is required.</p>
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub3/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub3/OPS/toc.xhtml
new file mode 100644
index 0000000..f17be2a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub3/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="page01.xhtml">Page 1</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub3/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub3/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub3/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub3_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub3_expected_results.json
new file mode 100644
index 0000000..f73e66a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub3_expected_results.json
@@ -0,0 +1,226 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/Missing_Spine_epub3.epub",
+    "filename" : "Missing_Spine_epub3.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:41",
+    "elapsedTime" : 284,
+    "nFatal" : 1,
+    "nError" : 1,
+    "nWarning" : 1,
+    "nUsage" : 3
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Missing Spine Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 0,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 175,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 320,
+    "uncompressedSize" : 603,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "735113c07c5499b9d349cc24a3be142af8d64539fdd75397daa6ddfc0144d",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 189,
+    "uncompressedSize" : 285,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d4a45b89190cd78933c3117315ee1cca9679102fbdb1a1ca957266f2def8c",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 228,
+    "uncompressedSize" : 339,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c1f5f92fde356c7bbbc841fce3f768289bf47019fdf46fc33b54273fa0f0cf4",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "Missing_Spine_epub3.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "NCX-003",
+    "severity" : "USAGE",
+    "message" : "An .NCX file is required for TOC navigation on ePub v2 readers.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-019",
+    "severity" : "FATAL",
+    "message" : "Spine tag was not found in the OPF file.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'element \"package\" incomplete; missing required element \"spine\"'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 13,
+      "column" : 11,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-011",
+    "severity" : "WARNING",
+    "message" : "Found a reference to a resource that is not a spine item.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : 11,
+      "column" : 36,
+      "context" : "OPS/page01.xhtml"
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub3_expected_results.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub3_expected_results.xml
new file mode 100644
index 0000000..8fe294c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_Spine_epub3_expected_results.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jhove xmlns="http://hul.harvard.edu/ois/xml/ns/jhove" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="epubcheck" release="4.0.0-alpha11-SNAPSHOT" date="2012-10-31">
+ <date>2014-09-05T03:15:42+02:00</date>
+ <repInfo uri="Missing_Spine_epub3.epub">
+  <created>2014-09-05T01:49:14Z</created>
+  <lastModified>2012-10-10T12:00:00Z</lastModified>
+  <format>application/epub+zip</format>
+  <version>3.0</version>
+  <status>Not well-formed</status>
+  <messages>
+   <message>OPF-019, FATAL, [Spine tag was not found in the OPF file.], OPS/content.opf</message>
+   <message>RSC-005, ERROR, [Error while parsing file 'element "package" incomplete; missing required element "spine"'.], OPS/content.opf (13-11)</message>
+   <message>RSC-011, WARN, [Found a reference to a resource that is not a spine item.], OPS/toc.xhtml (11-36)</message>
+   <message>ACC-008, HINT, [Navigation Document has no 'landmarks nav' element.], Missing_Spine_epub3.epub</message>
+   <message>ACC-007, HINT, [Content Documents do not use 'epub:type' attributes for semantic inflection.], OPS/page01.xhtml</message>
+  </messages>
+  <mimeType>application/epub+zip</mimeType>
+  <properties>
+   <property>
+    <name>CharacterCount</name>
+    <values arity="Scalar" type="Long">
+     <value>175</value>
+    </values>
+   </property>
+   <property>
+    <name>Language</name>
+    <values arity="Scalar" type="String">
+     <value>en</value>
+    </values>
+   </property>
+   <property>
+    <name>Info</name>
+    <values arity="List" type="Property">
+     <property>
+      <name>Identifier</name>
+      <values arity="Scalar" type="String">
+       <value>000000000000000000</value>
+      </values>
+     </property>
+     <property>
+      <name>CreationDate</name>
+      <values arity="Scalar" type="Date">
+       <value>2014-09-05T01:49:14Z</value>
+      </values>
+     </property>
+     <property>
+      <name>ModDate</name>
+      <values arity="Scalar" type="Date">
+       <value>2012-10-10T12:00:00Z</value>
+      </values>
+     </property>
+     <property>
+      <name>Title</name>
+      <values arity="Scalar" type="String">
+       <value>Missing Spine Sample Book</value>
+      </values>
+     </property>
+    </values>
+   </property>
+  </properties>
+ </repInfo>
+</jhove>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub2/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub2/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub2/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub2/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub2/OPS/content.opf
new file mode 100644
index 0000000..7121468
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub2/OPS/content.opf
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="2.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:epub="http://www.idpf.org/2007/opf">
+    <dc:creator id="creator" epub:role="companion">Amy Pond</dc:creator>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub2/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub2/OPS/page01.xhtml
new file mode 100644
index 0000000..35e7f0c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub2/OPS/page01.xhtml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>No Toc</title>
+</head>
+<body>
+  <div>
+    <h1>Missing ToC</h1>
+
+    <p>The opf file for this epub is missing an item in the manifest marked as nav. Since this is an epub2 this element shouldn't exist.</p>
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub2/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub2/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub2/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub2/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub2/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub2/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub2_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub2_expected_results.json
new file mode 100644
index 0000000..24bda8f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub2_expected_results.json
@@ -0,0 +1,202 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/Missing_metadata_epub2.epub",
+    "filename" : "Missing_metadata_epub2.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:44",
+    "elapsedTime" : 27,
+    "nFatal" : 0,
+    "nError" : 3,
+    "nWarning" : 0,
+    "nUsage" : 1
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : null,
+    "creator" : [ "Amy Pond" ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : null,
+    "language" : null,
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "2.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 173,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 289,
+    "uncompressedSize" : 549,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "9fd3543a5bfd79de79f0a89085f4d2acdd76557d2265b8bc8c3ead5fc264",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 293,
+    "uncompressedSize" : 556,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7e983f3695b1eea13cb6d3e7aacb5d84de767f2ccda456f5154d35c5f9b012",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 229,
+    "uncompressedSize" : 338,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c24a3daa5016e09abb5be18142e79cf6a3de1c6a7149864c4edd4a151e58df94",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  } ],
+  "messages" : [ {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-030",
+    "severity" : "ERROR",
+    "message" : "The unique-identifier 'BOGUS' was not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-052",
+    "severity" : "ERROR",
+    "message" : "Role value 'companion' is not valid.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 4,
+      "column" : 52,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'element \"metadata\" incomplete; missing required elements \"dc:identifier\", \"dc:language\" and \"dc:title\"'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 5,
+      "column" : 14,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub3/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub3/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub3/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub3/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub3/OPS/content.opf
new file mode 100644
index 0000000..883b424
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub3/OPS/content.opf
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub3/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub3/OPS/page01.xhtml
new file mode 100644
index 0000000..7d387d1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub3/OPS/page01.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>No Toc</title>
+</head>
+<body>
+  <div>
+    <h1>Missing ToC</h1>
+
+    <p>The opf file for this epub is missing an item in the manifest marked as nav. Since this is an epub3, this item is required.</p>
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub3/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub3/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub3/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub3/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub3/OPS/toc.xhtml
new file mode 100644
index 0000000..f17be2a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub3/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="page01.xhtml">Page 1</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub3/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub3/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub3/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub3_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub3_expected_results.json
new file mode 100644
index 0000000..9a08eb7
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_metadata_epub3_expected_results.json
@@ -0,0 +1,248 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/Missing_metadata_epub3.epub",
+    "filename" : "Missing_metadata_epub3.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:44",
+    "elapsedTime" : 181,
+    "nFatal" : 0,
+    "nError" : 3,
+    "nWarning" : 0,
+    "nUsage" : 3
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : null,
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : null,
+    "language" : null,
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 223,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 236,
+    "uncompressedSize" : 453,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "bbee75d8f391d6e180aa359f967b76d9ecaf95e21bd58ce9db1c3fcd3e193",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 293,
+    "uncompressedSize" : 556,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7e983f3695b1eea13cb6d3e7aacb5d84de767f2ccda456f5154d35c5f9b012",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 223,
+    "uncompressedSize" : 333,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "67d4de685f8c7abbef48e947b7b2e0b49c164c753eecbb7c4534ba43661d15",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 228,
+    "uncompressedSize" : 339,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c1f5f92fde356c7bbbc841fce3f768289bf47019fdf46fc33b54273fa0f0cf4",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "Missing_metadata_epub3.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-030",
+    "severity" : "ERROR",
+    "message" : "The unique-identifier 'BOGUS' was not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'assertion failed:\n  package element unique-identifier attribute does not resolve to a dc:identifier element (given reference was 'BOGUS')'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 2,
+      "column" : 87,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'element \"manifest\" not allowed yet; missing required element \"metadata\"'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 3,
+      "column" : 13,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_unique_id/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_unique_id/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_unique_id/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_unique_id/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_unique_id/OPS/content.opf
new file mode 100644
index 0000000..4270ede
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_unique_id/OPS/content.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Missing Unique ID</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_unique_id/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_unique_id/OPS/page01.xhtml
new file mode 100644
index 0000000..28b480d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_unique_id/OPS/page01.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Page 01</title>
+</head>
+<body>
+  <div>
+
+
+    <p>The opf file for this epub is missing the unique id attribute.  This should trigger OPF-048.</p>
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_unique_id/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_unique_id/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_unique_id/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_unique_id/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_unique_id/OPS/toc.xhtml
new file mode 100644
index 0000000..f17be2a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_unique_id/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="page01.xhtml">Page 1</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_unique_id/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_unique_id/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_unique_id/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Missing_unique_id_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_unique_id_expected_results.json
new file mode 100644
index 0000000..2a6d1b8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Missing_unique_id_expected_results.json
@@ -0,0 +1,248 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/Missing_unique_id.epub",
+    "filename" : "Missing_unique_id.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:53",
+    "elapsedTime" : 139,
+    "nFatal" : 0,
+    "nError" : 3,
+    "nWarning" : 0,
+    "nUsage" : 3
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Missing Unique ID",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : null,
+    "language" : "en",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 178,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 348,
+    "uncompressedSize" : 706,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5b4cba187aebf965e1a6a4fd3e2aa2817135428af56befdd732a97325c",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 293,
+    "uncompressedSize" : 556,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7e983f3695b1eea13cb6d3e7aacb5d84de767f2ccda456f5154d35c5f9b012",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 202,
+    "uncompressedSize" : 279,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "482b27144064142aebb7ab78682ee8722b2022359473588c9c3d82d76dc2368",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 228,
+    "uncompressedSize" : 339,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c1f5f92fde356c7bbbc841fce3f768289bf47019fdf46fc33b54273fa0f0cf4",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "Missing_unique_id.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-030",
+    "severity" : "ERROR",
+    "message" : "The unique-identifier 'null' was not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-048",
+    "severity" : "ERROR",
+    "message" : "Package tag is missing its required unique-identifier attribute and value.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 2,
+      "column" : 61,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'element \"package\" missing required attribute \"unique-identifier\"'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 2,
+      "column" : 61,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Properties/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Properties/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Properties/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Properties/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/Properties/OPS/content.opf
new file mode 100644
index 0000000..8cf22da
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Properties/OPS/content.opf
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Mismatched Properties Sample</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" properties="cover-image" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" properties="hello svg" href="page02.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" properties="switch svg" href="page03.xhtml" media-type="application/xhtml+xml" />
+    <item id="page04" properties="scripted:" href="page04.xhtml" media-type="application/xhtml+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+    <itemref idref="page04" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Properties/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Properties/OPS/page01.xhtml
new file mode 100644
index 0000000..491070d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Properties/OPS/page01.xhtml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Page 01</title>
+</head>
+<body>
+<div>
+    <h1>Page 01</h1>
+
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Properties/OPS/page02.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Properties/OPS/page02.xhtml
new file mode 100644
index 0000000..2b18050
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Properties/OPS/page02.xhtml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Page 02</title>
+</head>
+<body>
+  <div>
+    <h1>Page 02</h1>
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Properties/OPS/page03.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Properties/OPS/page03.xhtml
new file mode 100644
index 0000000..3efde3a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Properties/OPS/page03.xhtml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ops="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+<head>
+    <title>OSP Switch - Page 3</title>
+</head>
+<body id="text">
+<div>
+    <ops:switch>
+        <ops:case required-namespace="http://www.xml-cml.org/schema">
+            <p>This case requires the chemistry namespace and should not be visible.</p>
+        </ops:case>
+        <ops:case required-namespace="http://www.w3.org/2000/svg">
+            <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
+                <text x="10" y="15" fill="blue">This should be the only text on the page.</text>
+            </svg>
+        </ops:case>
+        <ops:default>
+            <p xmlns="http://www.w3.org/1999/xhtml" id="fallback">
+                This is the default case and should not be visible.
+            </p>
+        </ops:default>
+    </ops:switch>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Properties/OPS/page04.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Properties/OPS/page04.xhtml
new file mode 100644
index 0000000..3efde3a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Properties/OPS/page04.xhtml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ops="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+<head>
+    <title>OSP Switch - Page 3</title>
+</head>
+<body id="text">
+<div>
+    <ops:switch>
+        <ops:case required-namespace="http://www.xml-cml.org/schema">
+            <p>This case requires the chemistry namespace and should not be visible.</p>
+        </ops:case>
+        <ops:case required-namespace="http://www.w3.org/2000/svg">
+            <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
+                <text x="10" y="15" fill="blue">This should be the only text on the page.</text>
+            </svg>
+        </ops:case>
+        <ops:default>
+            <p xmlns="http://www.w3.org/1999/xhtml" id="fallback">
+                This is the default case and should not be visible.
+            </p>
+        </ops:default>
+    </ops:switch>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Properties/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/opf/Properties/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Properties/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Properties/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Properties/OPS/toc.xhtml
new file mode 100644
index 0000000..f17be2a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Properties/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="page01.xhtml">Page 1</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Properties/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/Properties/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Properties/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Properties_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/Properties_expected_results.json
new file mode 100644
index 0000000..a0b9587
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Properties_expected_results.json
@@ -0,0 +1,426 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/Properties.epub",
+    "filename" : "Properties.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:48",
+    "elapsedTime" : 169,
+    "nFatal" : 0,
+    "nError" : 6,
+    "nWarning" : 0,
+    "nUsage" : 6
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Mismatched Properties Sample",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 4,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 833,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 430,
+    "uncompressedSize" : 1171,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a1ec17b0a7fb3b2579046a5f21c8558793e9c9c7b9469031115d1643e070",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 293,
+    "uncompressedSize" : 556,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7e983f3695b1eea13cb6d3e7aacb5d84de767f2ccda456f5154d35c5f9b012",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 131,
+    "uncompressedSize" : 190,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "aab445945713d95f586d14a781dcd5a319af381a9bacf291f6fb8f7a0b7b5",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/page02.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 135,
+    "uncompressedSize" : 194,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ded9a11df370d550289d4c1595390e74bdfb59c31265a617ae1e1537aacd8e",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page03",
+    "fileName" : "OPS/page03.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 403,
+    "uncompressedSize" : 951,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7d998211229ebf22de56b33f987940b712b61e6de7b5c7836af56d75a99dcbe5",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page04",
+    "fileName" : "OPS/page04.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 403,
+    "uncompressedSize" : 951,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7d998211229ebf22de56b33f987940b712b61e6de7b5c7836af56d75a99dcbe5",
+    "isSpineItem" : true,
+    "spineIndex" : 3,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 228,
+    "uncompressedSize" : 339,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c1f5f92fde356c7bbbc841fce3f768289bf47019fdf46fc33b54273fa0f0cf4",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page02.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page03.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page04.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "Properties.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-043",
+    "severity" : "USAGE",
+    "message" : "SVG elements should include an xml:lang and lang attributes.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page03.xhtml",
+      "line" : 15,
+      "column" : 67,
+      "context" : "svg"
+    }, {
+      "fileName" : "OPS/page04.xhtml",
+      "line" : 15,
+      "column" : 67,
+      "context" : "svg"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-012",
+    "severity" : "ERROR",
+    "message" : "Item property 'cover-image' is not defined for media type 'application/xhtml+xml'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 11,
+      "column" : 105,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-014",
+    "severity" : "ERROR",
+    "message" : "The property 'svg' should be declared in the OPF file.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page04.xhtml",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-014",
+    "severity" : "ERROR",
+    "message" : "The property 'switch' should be declared in the OPF file.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page04.xhtml",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-015",
+    "severity" : "ERROR",
+    "message" : "The property 'svg' should not be declared in the OPF file.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page02.xhtml",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-026",
+    "severity" : "ERROR",
+    "message" : "Found malformed property value: 'scripted:'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 14,
+      "column" : 103,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-027",
+    "severity" : "ERROR",
+    "message" : "Undefined property: 'hello'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 12,
+      "column" : 103,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-058",
+    "severity" : "USAGE",
+    "message" : "Spine item has no TOC entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page02.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page03.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page04.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one TOC entry."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page02.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page03.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page04.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Publication_Metadata_epub3/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Publication_Metadata_epub3/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Publication_Metadata_epub3/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Publication_Metadata_epub3/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/Publication_Metadata_epub3/OPS/content.opf
new file mode 100644
index 0000000..5400541
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Publication_Metadata_epub3/OPS/content.opf
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="pub-id" version="3.0" prefix="foaf: http://xmlns.com/foaf/0.1/">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Publication Metadata Sample</dc:title>
+    <dc:publisher>Barnes & Noble Inc.</dc:publisher>
+    <dc:language>en</dc:language>
+    <meta property="dcterms:modified">2013-01-30T12:00:00Z</meta>
+
+    <dc:creator id="creator">John Doe</dc:creator>
+    <meta refines="#creator" property="role" scheme="marc:relators" id="role">aut</meta>
+    <meta refines="#creator" property="alternate-script" xml:lang="ja">村上 春樹</meta>
+    <meta refines="#creator" property="file-as">Doe, John</meta>
+    <dc:creator id="creator02">Jane Doe</dc:creator>
+    <meta refines="#creator02" property="role" scheme="marc:relators">ill</meta>
+    <meta refines="#creator02" property="display-seq">2</meta>
+
+    <dc:identifier id="pub-id">urn:uuid:1234-5678</dc:identifier>
+    <dc:identifier id="isbn-id">urn:isbn:1010101010101</dc:identifier>
+
+    <dc:subject>EPUB</dc:subject>
+    <dc:subject>Reading Systems</dc:subject>
+    <dc:subject>OPF</dc:subject>
+    <dc:subject>OCF</dc:subject>
+    <dc:subject>OPS</dc:subject>
+    <dc:subject>Sample eBooks</dc:subject>
+
+    <dc:description>Sample book with a plethora of metadata.</dc:description>
+
+    <dc:rights>Copyright 2013 Barnes & Noble Inc. All rights reserved.</dc:rights>
+    <link rel="xmp-record" href="http://example.org/xmp/#12389347"/>
+    <link rel="foaf:homepage" href="http://example.org/book-info/#12389347" />
+    <link rel="foaf:homepage" href="wakawaka://example.org/book-info/#12389347" />
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+  </manifest>
+  <spine toc="ncx" id="spine" page-progression-direction="ltr">
+    <itemref idref="page01" />
+  </spine>
+</package>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Publication_Metadata_epub3/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Publication_Metadata_epub3/OPS/page01.xhtml
new file mode 100644
index 0000000..d87f482
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Publication_Metadata_epub3/OPS/page01.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Page 1</title>
+</head>
+<body>
+  <div>
+    <h1>Page 1</h1>
+
+    <p>The opf file for this epub has lots of interesting metadata.</p>
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Publication_Metadata_epub3/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/opf/Publication_Metadata_epub3/OPS/toc.ncx
new file mode 100644
index 0000000..0e5c455
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Publication_Metadata_epub3/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Page01</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Publication_Metadata_epub3/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/Publication_Metadata_epub3/OPS/toc.xhtml
new file mode 100644
index 0000000..f17be2a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Publication_Metadata_epub3/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="page01.xhtml">Page 1</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Publication_Metadata_epub3/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/Publication_Metadata_epub3/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Publication_Metadata_epub3/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Publication_Metadata_epub3_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/Publication_Metadata_epub3_expected_results.json
new file mode 100644
index 0000000..3e895ef
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Publication_Metadata_epub3_expected_results.json
@@ -0,0 +1,212 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/Publication_Metadata_epub3.epub",
+    "filename" : "Publication_Metadata_epub3.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:47",
+    "elapsedTime" : 147,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 3
+  },
+  "publication" : {
+    "publisher" : "Barnes & Noble Inc.",
+    "title" : "Publication Metadata Sample",
+    "creator" : [ "John Doe", "Jane Doe" ],
+    "date" : "2013-01-30T12:00:00Z",
+    "subject" : [ "EPUB", "Reading Systems", "OPF", "OCF", "OPS", "Sample eBooks" ],
+    "description" : "Sample book with a plethora of metadata.",
+    "rights" : "Copyright 2013 Barnes & Noble Inc. All rights reserved.",
+    "identifier" : "urn:uuid:1234-5678",
+    "language" : "en",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 155,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 815,
+    "uncompressedSize" : 2075,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1dd61065cfc23c983f29cbfdc81f81232dc44df2e42780784df933b7ee036b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 287,
+    "uncompressedSize" : 544,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "4b477da5e9785ddc15a549ae4f3421654247345fdc383daaeadde29eb2ea98",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 181,
+    "uncompressedSize" : 265,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "44ac201c68614cf34597c5a508253c8a5afc8e4f83167c39c2e3fa97b11d4",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 228,
+    "uncompressedSize" : 339,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c1f5f92fde356c7bbbc841fce3f768289bf47019fdf46fc33b54273fa0f0cf4",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "Publication_Metadata_epub3.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/Publication_Metadata_epub3_expected_results.xml b/src/test/resources/com/adobe/epubcheck/test/opf/Publication_Metadata_epub3_expected_results.xml
new file mode 100644
index 0000000..2218a83
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/Publication_Metadata_epub3_expected_results.xml
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jhove xmlns="http://hul.harvard.edu/ois/xml/ns/jhove" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="epubcheck" release="4.0.0-alpha11-SNAPSHOT" date="2012-10-31">
+ <date>2014-09-05T03:15:48+02:00</date>
+ <repInfo uri="Publication_Metadata_epub3.epub">
+  <created>2014-09-05T01:49:14Z</created>
+  <lastModified>2013-01-30T12:00:00Z</lastModified>
+  <format>application/epub+zip</format>
+  <version>3.0</version>
+  <status>Well-formed</status>
+  <messages>
+   <message>HTM-010, HINT, [Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.], OPS/toc.ncx (2-68)</message>
+   <message>ACC-008, HINT, [Navigation Document has no 'landmarks nav' element.], Publication_Metadata_epub3.epub</message>
+   <message>ACC-007, HINT, [Content Documents do not use 'epub:type' attributes for semantic inflection.], OPS/page01.xhtml</message>
+  </messages>
+  <mimeType>application/epub+zip</mimeType>
+  <properties>
+   <property>
+    <name>CharacterCount</name>
+    <values arity="Scalar" type="Long">
+     <value>155</value>
+    </values>
+   </property>
+   <property>
+    <name>Language</name>
+    <values arity="Scalar" type="String">
+     <value>en</value>
+    </values>
+   </property>
+   <property>
+    <name>Info</name>
+    <values arity="List" type="Property">
+     <property>
+      <name>Identifier</name>
+      <values arity="Scalar" type="String">
+       <value>urn:uuid:1234-5678</value>
+      </values>
+     </property>
+     <property>
+      <name>CreationDate</name>
+      <values arity="Scalar" type="Date">
+       <value>2014-09-05T01:49:14Z</value>
+      </values>
+     </property>
+     <property>
+      <name>ModDate</name>
+      <values arity="Scalar" type="Date">
+       <value>2013-01-30T12:00:00Z</value>
+      </values>
+     </property>
+     <property>
+      <name>Title</name>
+      <values arity="Scalar" type="String">
+       <value>Publication Metadata Sample</value>
+      </values>
+     </property>
+     <property>
+      <name>Creator</name>
+      <values arity="Array" type="String">
+       <value>John Doe</value>
+       <value>Jane Doe</value>
+      </values>
+     </property>
+     <property>
+      <name>Publisher</name>
+      <values arity="Scalar" type="String">
+       <value>Barnes & Noble Inc.</value>
+      </values>
+     </property>
+     <property>
+      <name>Subject</name>
+      <values arity="Array" type="String">
+       <value>EPUB</value>
+       <value>Reading Systems</value>
+       <value>OPF</value>
+       <value>OCF</value>
+       <value>OPS</value>
+       <value>Sample eBooks</value>
+      </values>
+     </property>
+     <property>
+      <name>Rights</name>
+      <values arity="Scalar" type="String">
+       <value>Copyright 2013 Barnes & Noble Inc. All rights reserved.</value>
+      </values>
+     </property>
+    </values>
+   </property>
+   <property>
+    <name>References</name>
+     <values arity="List" type="Property">
+      <property>
+       <name>Reference</name>
+       <values arity="Scalar" type="String">
+        <value>http://example.org/xmp/#12389347</value>
+       </values>
+      </property>
+      <property>
+       <name>Reference</name>
+       <values arity="Scalar" type="String">
+        <value>http://example.org/book-info/#12389347</value>
+       </values>
+      </property>
+      <property>
+       <name>Reference</name>
+       <values arity="Scalar" type="String">
+        <value>wakawaka://example.org/book-info/#12389347</value>
+       </values>
+      </property>
+     </values>
+    </property>
+   </properties>
+  </repInfo>
+ </jhove>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/excessiveSpineItems.js b/src/test/resources/com/adobe/epubcheck/test/opf/excessiveSpineItems.js
new file mode 100644
index 0000000..42980ac
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/excessiveSpineItems.js
@@ -0,0 +1,59 @@
+/**
+ * Created with JetBrains WebStorm.
+ * User: apond
+ * Date: 1/15/13
+ * Time: 11:34 AM
+ * This node script was used to generate the files needed for the Excessive Spine Items test.
+ */
+var fs = require('fs');
+var path = require('path');
+
+main = function() {
+  var destination = "Excessive_Spine_Items_epub3/OPS";
+  var templateHtml = '<?xml version="1.0"?>\n' +
+    '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\n' +
+    '  <head>\n' +
+    '    <title>Excessive Spine Items Page page#</title>\n' +
+    '  </head>\n' +
+    '  <body>\n' +
+    '    <div>\n' +
+    '      <p>Excessive Spine Items Page page#</p>\n' +
+    '    </div>\n' +
+    '  </body>\n' +
+    '</html>';
+  var manifestItems = "";
+  var itemRefs = "";
+  for (var i = 1; i < 101; i++)
+  {
+    var index = i.toString();
+    while (index.length < 3)
+    {
+      index = '0' + index;
+    }
+    var spineItem = path.join(destination, "page" + index + ".xhtml");
+
+    fs.writeFile(spineItem, templateHtml.replace(/page#/g, i), function(err) {
+      if (err)
+      {
+        console.log(err);
+      }
+    });
+    manifestItems += '<item id="page' + index +'" href="page'+index+'.xhtml" media-type="application/xhtml+xml" />\n';
+    itemRefs +='<itemref idref="page'+index+'" />\n';
+  }
+  var manifestFile = path.join(destination, "manifest.txt");
+  fs.writeFile(manifestFile, manifestItems, function(err) {
+    if (err)
+    {
+      console.log(err);
+    }
+  });
+  var itemRefFile = path.join(destination, "itemRefs.txt");
+  fs.writeFile(itemRefFile, itemRefs, function(err) {
+    if (err)
+    {
+      console.log(err);
+    }
+  });
+};
+main();
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/oebps12/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/oebps12/META-INF/container.xml
new file mode 100644
index 0000000..31baf5b
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/oebps12/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+	<rootfiles>
+		<rootfile full-path="oebps12.opf" media-type="application/oebps-package+xml" />
+	</rootfiles>
+</container>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/oebps12/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/oebps12/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/oebps12/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/oebps12/oebps12.css b/src/test/resources/com/adobe/epubcheck/test/opf/oebps12/oebps12.css
new file mode 100644
index 0000000..b989460
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/oebps12/oebps12.css
@@ -0,0 +1,4 @@
+body
+{
+	font-weight: bold;
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/oebps12/oebps12.opf b/src/test/resources/com/adobe/epubcheck/test/opf/oebps12/oebps12.opf
new file mode 100644
index 0000000..36dee5a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/oebps12/oebps12.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<package unique-identifier="OverDriveGUID" xmlns="http://openebook.org/namespaces/oeb-package/1.0/" version="2.0">
+ <metadata>
+  <dc-metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:oebpackage="http://openebook.org/namespaces/oeb-package/1.0/">
+   <dc:Title>OEBPS 1.2 Sample</dc:Title> 
+   <dc:Creator role="aut" file-as="Timson, Andrew">Andrew Timson</dc:Creator>
+   <dc:Date>2011-06-06</dc:Date>
+   <dc:Language>en-us</dc:Language>
+   <dc:Identifier id="OverDriveGUID" scheme="GUID">{7D750A63-80DF-11D5-9E7A-0050BA8B3DBB}</dc:Identifier>
+  </dc-metadata>
+ </metadata>
+ <manifest>
+  <item id="page01" href="page01.html" media-type="text/x-oeb1-document" />
+  <item id="page02" href="page02.html" media-type="text/html" />
+  <item id="oebps12css" href="oebps12.css" media-type="text/x-oeb1-css" />
+  <item id="style2" href="style2.css" media-type="text/css" />
+ </manifest>
+ <spine>
+  <itemref idref="page01" />
+  <itemref idref="page02" />
+ </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/oebps12/page01.html b/src/test/resources/com/adobe/epubcheck/test/opf/oebps12/page01.html
new file mode 100644
index 0000000..7673752
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/oebps12/page01.html
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC 
+ "+//ISBN 0-9673008-1-9//DTD OEB 1.2 Document//EN"
+ "http://openebook.org/dtds/oeb-1.2/oebdoc12.dtd">
+<html>
+ <head>
+  <title>OEBPS 1.2 Sample</title>
+  <link rel="stylesheet" type="text/x-oeb1-css" href="oebps12.css" />
+ </head>
+ <body>
+  <p>This is a test.</p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/oebps12/page02.html b/src/test/resources/com/adobe/epubcheck/test/opf/oebps12/page02.html
new file mode 100644
index 0000000..f0547a2
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/oebps12/page02.html
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC 
+ "+//ISBN 0-9673008-1-9//DTD OEB 1.2 Document//EN"
+ "http://openebook.org/dtds/oeb-1.2/oebdoc12.dtd">
+<html>
+ <head>
+  <title>OEBPS 1.2 Sample</title>
+  <link rel="stylesheet" type="text/css" href="style2.css" />
+ </head>
+ <body>
+  <p>This is a test.</p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/oebps12/style2.css b/src/test/resources/com/adobe/epubcheck/test/opf/oebps12/style2.css
new file mode 100644
index 0000000..b989460
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/oebps12/style2.css
@@ -0,0 +1,4 @@
+body
+{
+	font-weight: bold;
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/oebps12_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/oebps12_expected_results.json
new file mode 100644
index 0000000..51b6a64
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/oebps12_expected_results.json
@@ -0,0 +1,311 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/oebps12.epub",
+    "filename" : "oebps12.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:49",
+    "elapsedTime" : 3614,
+    "nFatal" : 1,
+    "nError" : 3,
+    "nWarning" : 2,
+    "nUsage" : 3
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : null,
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : null,
+    "language" : null,
+    "nSpines" : 2,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "2.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : false,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 62,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 152,
+    "uncompressedSize" : 227,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "767eabbe43ffd7e3a1978bdb9c66bbb7621603daef1c9c59937cd632951b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:oebps12.opf",
+    "fileName" : "oebps12.opf",
+    "media_type" : null,
+    "compressedSize" : 469,
+    "uncompressedSize" : 1011,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ea522fa6d160d9347faa7a8229df19b0891bdc327b53b53d11f3ef87e52bc5b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "oebps12css",
+    "fileName" : "oebps12.css",
+    "media_type" : "text/x-oeb1-css",
+    "compressedSize" : 31,
+    "uncompressedSize" : 29,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5721db2f1f9294994e1882348423c5e4ab0f47724ff1e6c1ccea61c51d3",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page01",
+    "fileName" : "page01.html",
+    "media_type" : "text/x-oeb1-document",
+    "compressedSize" : 257,
+    "uncompressedSize" : 342,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d0d49799f134ef8e3b7a5f72b0b924f41e8441681ae878a993213d328cdb46f",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "oebps12.css" ]
+  }, {
+    "id" : "page02",
+    "fileName" : "page02.html",
+    "media_type" : "text/html",
+    "compressedSize" : 249,
+    "uncompressedSize" : 334,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "70ed83579711988d1150b5d054e8fda9b869ba66c2ab19768d7cdaa0ce7db31c",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "style2.css" ]
+  }, {
+    "id" : "style2",
+    "fileName" : "style2.css",
+    "media_type" : "text/css",
+    "compressedSize" : 31,
+    "uncompressedSize" : 29,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5721db2f1f9294994e1882348423c5e4ab0f47724ff1e6c1ccea61c51d3",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  } ],
+  "messages" : [ {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://openebook.org/namespaces/oeb-package/1.0/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "oebps12.opf",
+      "line" : 2,
+      "column" : 115,
+      "context" : ""
+    }, {
+      "fileName" : "oebps12.opf",
+      "line" : 4,
+      "column" : 128,
+      "context" : "oebpackage"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "NCX-003",
+    "severity" : "USAGE",
+    "message" : "An .NCX file is required for TOC navigation on ePub v2 readers.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "oebps12.opf",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-019",
+    "severity" : "FATAL",
+    "message" : "Spine tag was not found in the OPF file.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "oebps12.opf",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-024",
+    "severity" : "ERROR",
+    "message" : "Found unknown ePub version 0.0.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "oebps12.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-030",
+    "severity" : "ERROR",
+    "message" : "The unique-identifier 'OverDriveGUID' was not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "oebps12.opf",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-038",
+    "severity" : "WARNING",
+    "message" : "Media type 'text/html' is not appropriate for an OEBPS 1.2 context; Use 'text/x-oeb1-document' instead.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "oebps12.opf",
+      "line" : 14,
+      "column" : 65,
+      "context" : "page02"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-039",
+    "severity" : "WARNING",
+    "message" : "Media-type 'text/css' is not appropriate in an OEBPS 1.2 context. Use 'text/x-oeb1-css' instead.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "oebps12.opf",
+      "line" : 16,
+      "column" : 63,
+      "context" : "style2"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-047",
+    "severity" : "USAGE",
+    "message" : "OPF file is using OEBPS 1.2 syntax allowing backwards compatibility.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "oebps12.opf",
+      "line" : 2,
+      "column" : 115,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'attribute \"version\" not allowed here; expected attribute \"id\"'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "oebps12.opf",
+      "line" : 2,
+      "column" : 115,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid/OPS/content.opf
new file mode 100644
index 0000000..ae9ad2e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid/OPS/content.opf
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Missing TOC Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+    <meta property="rendition:layout">pre-paginated</meta>
+    <meta property="rendition:orientation">landscape</meta>
+    <meta property="rendition:spread">landscape</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="page02.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" href="page03.xhtml" media-type="application/xhtml+xml" />
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" properties="rendition:orientation-auto"/>
+    <itemref idref="page02" properties="rendition:layout-reflowable"/>
+    <itemref idref="page03" properties="rendition:spread-both"/>
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid/OPS/page01.xhtml
new file mode 100644
index 0000000..87ec1a5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid/OPS/page01.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Rendition Valid</title>
+</head>
+<body>
+  <div>
+    <h1>Rendition Portrait</h1>
+
+    <p></p>
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid/OPS/page02.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid/OPS/page02.xhtml
new file mode 100644
index 0000000..87ec1a5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid/OPS/page02.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Rendition Valid</title>
+</head>
+<body>
+  <div>
+    <h1>Rendition Portrait</h1>
+
+    <p></p>
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid/OPS/page03.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid/OPS/page03.xhtml
new file mode 100644
index 0000000..67fb70a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid/OPS/page03.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Rendition Valid</title>
+</head>
+<body>
+  <div>
+    <h1>Rendition Spread</h1>
+
+    <p></p>
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid/OPS/toc.xhtml
new file mode 100644
index 0000000..f17be2a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="page01.xhtml">Page 1</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid_expected_results.json
new file mode 100644
index 0000000..41b5a56
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/rendition_valid_expected_results.json
@@ -0,0 +1,317 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/rendition_valid.epub",
+    "filename" : "rendition_valid.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:43",
+    "elapsedTime" : 255,
+    "nFatal" : 0,
+    "nError" : 1,
+    "nWarning" : 0,
+    "nUsage" : 5
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Missing TOC Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 3,
+    "checkSum" : 0,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "landscape",
+    "renditionSpread" : "landscape",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : true,
+    "isBackwardCompatible" : false,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 236,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 462,
+    "uncompressedSize" : 1247,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c6e2a918178d62a4c9b1fcd2e69dcade252f1c69a41252e16bba6e1ff36dfab",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 293,
+    "uncompressedSize" : 556,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7e983f3695b1eea13cb6d3e7aacb5d84de767f2ccda456f5154d35c5f9b012",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 154,
+    "uncompressedSize" : 226,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "63baae55416878d67daf642b5e81df6f115d8a3dd8a2d6aa59d49eca991c94",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "landscape",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/page02.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 154,
+    "uncompressedSize" : 226,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "63baae55416878d67daf642b5e81df6f115d8a3dd8a2d6aa59d49eca991c94",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "landscape",
+    "renditionSpread" : "landscape",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page03",
+    "fileName" : "OPS/page03.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 153,
+    "uncompressedSize" : 224,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3c5f8829c589908c39893b77b32ddcfb67ab5870e3a6f8983702ab371121bc5",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "landscape",
+    "renditionSpread" : "both",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 228,
+    "uncompressedSize" : 339,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c1f5f92fde356c7bbbc841fce3f768289bf47019fdf46fc33b54273fa0f0cf4",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page02.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page03.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "rendition_valid.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-046",
+    "severity" : "ERROR",
+    "message" : "Fixed format item has no viewport defined.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page03.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    } ],
+    "suggestion" : "A viewport declaration is required for fixed format items."
+  }, {
+    "ID" : "OPF-058",
+    "severity" : "USAGE",
+    "message" : "Spine item has no TOC entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page02.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page03.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one TOC entry."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page02.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page03.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/content.opf
new file mode 100644
index 0000000..8a07ee0
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/content.opf
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="viewport" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>viewport test Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="viewport">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+    <meta property="rendition:layout">pre-paginated</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page001" href="page001.xhtml" media-type="application/xhtml+xml" />
+    <item id="page002" href="page002.xhtml" media-type="application/xhtml+xml" />
+    <item id="page003" href="page003.xhtml" media-type="application/xhtml+xml" />
+    <item id="page004" href="page004.xhtml" media-type="application/xhtml+xml" />
+    <item id="page005a" href="page005.xhtml" media-type="application/xhtml+xml" />
+    <item id="page005" href="page005.svg" media-type="image/svg+xml" />
+    <item id="page006" href="page006.svg" media-type="image/svg+xml" />
+    <item id="page007" href="page007.svg" media-type="image/svg+xml" />
+    <item id="page008" href="page008.svg" media-type="image/svg+xml" />
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="toc" />
+    <itemref idref="page001" />
+    <itemref idref="page002" />
+    <itemref idref="page003" />
+    <itemref idref="page004" />
+    <itemref idref="page005a" properties="rendition:layout-reflowable"/>
+    <itemref idref="page005" properties="page-spread-left"/>
+    <itemref idref="page006" properties="page-spread-left"/>
+    <itemref idref="page007" properties="page-spread-left"/>
+    <itemref idref="page008" properties="page-spread-left"/>
+  </spine>
+</package>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page001.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page001.xhtml
new file mode 100644
index 0000000..8c58e77
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page001.xhtml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Viewport Page 1</title>
+    <meta name="viewport" content="width=1200, height=600"/>
+</head>
+<body>
+<div>
+    <p>Viewport Page 1</p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page002.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page002.xhtml
new file mode 100644
index 0000000..367452f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page002.xhtml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Viewport Page 2</title>
+    <meta name="viewport" content="invalid"/>
+</head>
+<body>
+<div>
+    <p>Viewport Page 2</p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page003.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page003.xhtml
new file mode 100644
index 0000000..bc0fa8e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page003.xhtml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Viewport Page 3</title>
+    <meta name="viewport" content="width=1200"/>
+</head>
+<body>
+<div>
+    <p>Viewport Page 3</p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page004.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page004.xhtml
new file mode 100644
index 0000000..ef5221b
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page004.xhtml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Viewport Page 4</title>
+    <meta name="viewport" />
+</head>
+<body>
+<div>
+    <p>Viewport Page 4</p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page005.svg b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page005.svg
new file mode 100644
index 0000000..ec63f1a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page005.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="625" width="1000">
+<rect width="1000" height="625" fill="#fff"/>
+<rect width="429" height="246" fill="#002d62"/>
+<rect width="429" height="246" fill="#d21034" y="379"/>
+<rect width="429" height="246" fill="#002d62" y="379" x="571"/>
+<rect width="429" height="246" fill="#d21034" x="571"/>
+</svg>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page005.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page005.xhtml
new file mode 100644
index 0000000..5e521fa
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page005.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Viewport Page 5</title>
+</head>
+<body>
+<div>
+    <p>This page is reflowable</p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page006.svg b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page006.svg
new file mode 100644
index 0000000..ec63f1a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page006.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="625" width="1000">
+<rect width="1000" height="625" fill="#fff"/>
+<rect width="429" height="246" fill="#002d62"/>
+<rect width="429" height="246" fill="#d21034" y="379"/>
+<rect width="429" height="246" fill="#002d62" y="379" x="571"/>
+<rect width="429" height="246" fill="#d21034" x="571"/>
+</svg>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page007.svg b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page007.svg
new file mode 100644
index 0000000..ec63f1a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page007.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="625" width="1000">
+<rect width="1000" height="625" fill="#fff"/>
+<rect width="429" height="246" fill="#002d62"/>
+<rect width="429" height="246" fill="#d21034" y="379"/>
+<rect width="429" height="246" fill="#002d62" y="379" x="571"/>
+<rect width="429" height="246" fill="#d21034" x="571"/>
+</svg>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page008.svg b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page008.svg
new file mode 100644
index 0000000..ec63f1a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/page008.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="625" width="1000">
+<rect width="1000" height="625" fill="#fff"/>
+<rect width="429" height="246" fill="#002d62"/>
+<rect width="429" height="246" fill="#d21034" y="379"/>
+<rect width="429" height="246" fill="#002d62" y="379" x="571"/>
+<rect width="429" height="246" fill="#d21034" x="571"/>
+</svg>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/toc.ncx
new file mode 100644
index 0000000..ec90265
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/toc.ncx
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="9"/>
+    <meta name="dtb:maxPageNumber" content="9"/>
+  </head>
+  <docTitle>
+    <text>missing viewport</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="toc" playOrder="1">
+      <navLabel>
+	<text>Viewport Sample 1</text>
+      </navLabel>
+      <content src="toc.xhtml"/>
+    </navPoint>
+    <navPoint id="page001" playOrder="2">
+      <navLabel>
+	<text>Viewport Sample 1</text>
+      </navLabel>
+      <content src="page001.xhtml"/>
+    </navPoint>
+    <navPoint id="page002" playOrder="3">
+      <navLabel>
+	<text>Viewport Sample 2</text>
+      </navLabel>
+      <content src="page002.xhtml"/>
+    </navPoint>
+    <navPoint id="page003" playOrder="4">
+      <navLabel>
+	<text>Viewport Sample 3</text>
+      </navLabel>
+      <content src="page003.xhtml"/>
+    </navPoint>
+    <navPoint id="page004" playOrder="5">
+      <navLabel>
+	<text>Viewport Sample 4</text>
+      </navLabel>
+      <content src="page004.xhtml"/>
+    </navPoint>
+    <navPoint id="page005" playOrder="6">
+      <navLabel>
+	<text>Viewport Sample 5</text>
+      </navLabel>
+      <content src="page005.svg"/>
+    </navPoint>
+    <navPoint id="page006" playOrder="7">
+      <navLabel>
+	<text>Viewport Sample 6</text>
+      </navLabel>
+      <content src="page006.svg"/>
+    </navPoint>
+    <navPoint id="page007" playOrder="8">
+      <navLabel>
+	<text>Viewport Sample 7</text>
+      </navLabel>
+      <content src="page007.svg"/>
+    </navPoint>
+    <navPoint id="page008" playOrder="9">
+      <navLabel>
+	<text>Viewport Sample 8</text>
+      </navLabel>
+      <content src="page008.svg"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/toc.xhtml
new file mode 100644
index 0000000..f6face9
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/OPS/toc.xhtml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+    <meta name="viewport" content="width=1200, height=600"/>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="toc.xhtml">Table of Contents</a></li>
+        <li><a href="page001.xhtml">Page 1</a></li>
+        <li><a href="page002.xhtml">Page 2</a></li>
+        <li><a href="page003.xhtml">Page 3</a></li>
+        <li><a href="page004.xhtml">Page 4</a></li>
+        <li><a href="page005.xhtml">Page 5a</a></li>
+        <li><a href="page005.svg">Page 5</a></li>
+        <li><a href="page006.svg">Page 6</a></li>
+        <li><a href="page007.svg">Page 7</a></li>
+        <li><a href="page008.svg">Page 8</a></li>
+    </ol>
+</nav>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/OPS/content.opf
new file mode 100644
index 0000000..50b2102
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/OPS/content.opf
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="viewport" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>viewport test Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="viewport">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+    <meta property="rendition:layout">reflowable</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page001" href="page001.xhtml" media-type="application/xhtml+xml" />
+    <item id="page002" href="page002.xhtml" media-type="application/xhtml+xml" />
+    <item id="page003" href="page003.xhtml" media-type="application/xhtml+xml" />
+    <item id="page004" href="page004.xhtml" media-type="application/xhtml+xml" />
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="toc" />
+    <itemref idref="page001" />
+    <itemref idref="page002" properties="rendition:layout-pre-paginated"/>
+    <itemref idref="page003" properties="rendition:layout-pre-paginated"/>
+    <itemref idref="page004" properties="rendition:layout-pre-paginated"/>
+  </spine>
+</package>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/OPS/page001.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/OPS/page001.xhtml
new file mode 100644
index 0000000..26dcfdd
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/OPS/page001.xhtml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Viewport Page 1</title>
+    <meta name="viewport" content="width=1200, height=600"/>
+</head>
+<body>
+<div>
+    <p>Re-flowable document with a viewport specified.</p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/OPS/page002.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/OPS/page002.xhtml
new file mode 100644
index 0000000..75d8d28
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/OPS/page002.xhtml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Viewport Page 2</title>
+</head>
+<body>
+<div>
+    <p>Fixed format document with a missing viewport</p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/OPS/page003.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/OPS/page003.xhtml
new file mode 100644
index 0000000..e68459c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/OPS/page003.xhtml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Viewport Page 3</title>
+    <meta name="viewport" content="width=1200"/>
+</head>
+<body>
+<div>
+    <p>Fixed format with a partial viewport</p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/OPS/page004.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/OPS/page004.xhtml
new file mode 100644
index 0000000..fee119a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/OPS/page004.xhtml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Viewport Page 4</title>
+    <meta name="viewport" content="width=1200, height=600"/>
+</head>
+<body>
+<div>
+    <p>Fixed format with a valid viewport</p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/OPS/toc.ncx
new file mode 100644
index 0000000..a879b23
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/OPS/toc.ncx
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="9"/>
+    <meta name="dtb:maxPageNumber" content="9"/>
+  </head>
+  <docTitle>
+    <text>missing viewport</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="toc" playOrder="1">
+      <navLabel>
+	<text>Viewport Sample 1</text>
+      </navLabel>
+      <content src="toc.xhtml"/>
+    </navPoint>
+    <navPoint id="page001" playOrder="2">
+      <navLabel>
+	<text>Viewport Sample 1</text>
+      </navLabel>
+      <content src="page001.xhtml"/>
+    </navPoint>
+    <navPoint id="page002" playOrder="3">
+      <navLabel>
+	<text>Viewport Sample 2</text>
+      </navLabel>
+      <content src="page002.xhtml"/>
+    </navPoint>
+    <navPoint id="page003" playOrder="4">
+      <navLabel>
+	<text>Viewport Sample 3</text>
+      </navLabel>
+      <content src="page003.xhtml"/>
+    </navPoint>
+    <navPoint id="page004" playOrder="5">
+      <navLabel>
+        <text>Viewport Sample 4</text>
+      </navLabel>
+      <content src="page004.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/OPS/toc.xhtml
new file mode 100644
index 0000000..3582d5e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/OPS/toc.xhtml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+    <meta name="viewport" content="width=1200, height=600"/>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="toc.xhtml">Table of Contents</a></li>
+        <li><a href="page001.xhtml">Page 1</a></li>
+        <li><a href="page002.xhtml">Page 2</a></li>
+        <li><a href="page003.xhtml">Page 3</a></li>
+        <li><a href="page004.xhtml">Page 4</a></li>
+    </ol>
+</nav>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/mimetype b/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport2/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport2_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/viewport2_expected_results.json
new file mode 100644
index 0000000..bdb3755
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport2_expected_results.json
@@ -0,0 +1,317 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/viewport2.epub",
+    "filename" : "viewport2.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:43",
+    "elapsedTime" : 244,
+    "nFatal" : 0,
+    "nError" : 2,
+    "nWarning" : 0,
+    "nUsage" : 3
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "viewport test Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 5,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : true,
+    "isBackwardCompatible" : false,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 436,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 431,
+    "uncompressedSize" : 1298,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "bfdde6e596cf151b3f50887d1f15933f74fc1bc85f104bd0f29bc58989ba33f",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 354,
+    "uncompressedSize" : 1206,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "431f6353c0b5fd84b73a6b2514301c4d60b3d143d4b44e625a384d52edce15",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/toc.xhtml", "OPS/page003.xhtml", "OPS/page001.xhtml", "OPS/page004.xhtml", "OPS/page002.xhtml" ]
+  }, {
+    "id" : "page001",
+    "fileName" : "OPS/page001.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 205,
+    "uncompressedSize" : 296,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "4f44e47d7a1b6dea1ebe63d0b2d23fe7c43d467eae6d325403135ed8738bb43",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page002",
+    "fileName" : "OPS/page002.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 167,
+    "uncompressedSize" : 233,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c3cb2db53c82738283fd48f5223d3c962734beddd654f4f72533bdbb348d3",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : 3,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page003",
+    "fileName" : "OPS/page003.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 187,
+    "uncompressedSize" : 273,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e93b30442af075eb4542fbe519bd7dbafdabff5dea66de53e7e5c762ccefa0b8",
+    "isSpineItem" : true,
+    "spineIndex" : 3,
+    "isLinear" : true,
+    "navigationOrder" : 4,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page004",
+    "fileName" : "OPS/page004.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 196,
+    "uncompressedSize" : 283,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "6635a97c1b4626438f38184ab0f33a3f6080f04d267b0e357d1424d21ff37d8",
+    "isSpineItem" : true,
+    "spineIndex" : 4,
+    "isLinear" : true,
+    "navigationOrder" : 5,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 293,
+    "uncompressedSize" : 617,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "4768074f99534c5592e33a1f6ab1f5dbfad718aeb0598482461e84f2b0b75b",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : true,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/page003.xhtml", "OPS/page001.xhtml", "OPS/page004.xhtml", "OPS/page002.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page001.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page002.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page003.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page004.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "viewport2.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-046",
+    "severity" : "ERROR",
+    "message" : "Fixed format item has no viewport defined.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page002.xhtml",
+      "line" : 5,
+      "column" : 8,
+      "context" : null
+    } ],
+    "suggestion" : "A viewport declaration is required for fixed format items."
+  }, {
+    "ID" : "HTM-047",
+    "severity" : "ERROR",
+    "message" : "Html viewport is missing height and/or width.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page003.xhtml",
+      "line" : 5,
+      "column" : 49,
+      "context" : "meta"
+    } ],
+    "suggestion" : "The viewport declaration must declare both width and height."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/opf/viewport_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/opf/viewport_expected_results.json
new file mode 100644
index 0000000..29f2fde
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/opf/viewport_expected_results.json
@@ -0,0 +1,528 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/opf/viewport.epub",
+    "filename" : "viewport.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:43",
+    "elapsedTime" : 295,
+    "nFatal" : 0,
+    "nError" : 3,
+    "nWarning" : 0,
+    "nUsage" : 5
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "viewport test Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 10,
+    "checkSum" : 0,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : true,
+    "isBackwardCompatible" : false,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 494,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 498,
+    "uncompressedSize" : 1860,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c8b3bdf46f367ab14622f2dc2eb23d73e241242baddb11c8185785bea51fe6b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 396,
+    "uncompressedSize" : 1839,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d7867ae396e313cfac9f4770e6219364360fb735d9d7c99cfb6af417fe703b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page008.svg", "OPS/toc.xhtml", "OPS/page003.xhtml", "OPS/page005.svg", "OPS/page007.svg", "OPS/page001.xhtml", "OPS/page004.xhtml", "OPS/page002.xhtml", "OPS/page006.svg" ]
+  }, {
+    "id" : "page001",
+    "fileName" : "OPS/page001.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 175,
+    "uncompressedSize" : 264,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "205324cd0c2cb2ddaa5f62653b3e13a633bd49ed39fa9381da9c6e6fa1f",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page002",
+    "fileName" : "OPS/page002.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 163,
+    "uncompressedSize" : 249,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b53e1535c9dcded83029613cefd1bd817a80941964fd8d53e8afbc9b31d4bd5",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : 3,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page003",
+    "fileName" : "OPS/page003.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 165,
+    "uncompressedSize" : 252,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "154ef4ad14998e4d9e418bc075eb411bb4a8a7e3c8fc30b216402c1b9d4488fe",
+    "isSpineItem" : true,
+    "spineIndex" : 3,
+    "isLinear" : true,
+    "navigationOrder" : 4,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page004",
+    "fileName" : "OPS/page004.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 152,
+    "uncompressedSize" : 232,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e8a1a7d1626ac2c549cca2ebd22c54dec8a542c2cff53ea78942bc70362b72",
+    "isSpineItem" : true,
+    "spineIndex" : 4,
+    "isLinear" : true,
+    "navigationOrder" : 5,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page005",
+    "fileName" : "OPS/page005.svg",
+    "media_type" : "image/svg+xml",
+    "compressedSize" : 178,
+    "uncompressedSize" : 399,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c03236693efa4a5a0ac7ef2c623838e8f7940f46edbb59f544713b1434ddff",
+    "isSpineItem" : true,
+    "spineIndex" : 6,
+    "isLinear" : true,
+    "navigationOrder" : 6,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page005a",
+    "fileName" : "OPS/page005.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 153,
+    "uncompressedSize" : 211,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "885b2f12dec91a226e6a722a3c8fa01132df82eae2c06c391d77773bdb0d2",
+    "isSpineItem" : true,
+    "spineIndex" : 5,
+    "isLinear" : true,
+    "navigationOrder" : 6,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page006",
+    "fileName" : "OPS/page006.svg",
+    "media_type" : "image/svg+xml",
+    "compressedSize" : 178,
+    "uncompressedSize" : 399,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c03236693efa4a5a0ac7ef2c623838e8f7940f46edbb59f544713b1434ddff",
+    "isSpineItem" : true,
+    "spineIndex" : 7,
+    "isLinear" : true,
+    "navigationOrder" : 7,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page007",
+    "fileName" : "OPS/page007.svg",
+    "media_type" : "image/svg+xml",
+    "compressedSize" : 178,
+    "uncompressedSize" : 399,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c03236693efa4a5a0ac7ef2c623838e8f7940f46edbb59f544713b1434ddff",
+    "isSpineItem" : true,
+    "spineIndex" : 8,
+    "isLinear" : true,
+    "navigationOrder" : 8,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page008",
+    "fileName" : "OPS/page008.svg",
+    "media_type" : "image/svg+xml",
+    "compressedSize" : 178,
+    "uncompressedSize" : 399,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c03236693efa4a5a0ac7ef2c623838e8f7940f46edbb59f544713b1434ddff",
+    "isSpineItem" : true,
+    "spineIndex" : 9,
+    "isLinear" : true,
+    "navigationOrder" : 9,
+    "isHTML5" : false,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 321,
+    "uncompressedSize" : 870,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "8279eee993765cf4c96372fcd4fc851d953ea3df7ba69fbaad70992c26d22a1",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : true,
+    "isFixedFormat" : true,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "pre-paginated",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/page008.svg", "OPS/page003.xhtml", "OPS/page005.svg", "OPS/page007.svg", "OPS/page001.xhtml", "OPS/page005.xhtml", "OPS/page004.xhtml", "OPS/page002.xhtml", "OPS/page006.svg" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page001.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page002.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page003.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page004.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page005.svg",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page005.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page006.svg",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page007.svg",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page008.svg",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "viewport.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.w3.org/2000/svg' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page005.svg",
+      "line" : 2,
+      "column" : 67,
+      "context" : ""
+    }, {
+      "fileName" : "OPS/page006.svg",
+      "line" : 2,
+      "column" : 67,
+      "context" : ""
+    }, {
+      "fileName" : "OPS/page007.svg",
+      "line" : 2,
+      "column" : 67,
+      "context" : ""
+    }, {
+      "fileName" : "OPS/page008.svg",
+      "line" : 2,
+      "column" : 67,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-047",
+    "severity" : "ERROR",
+    "message" : "Html viewport is missing height and/or width.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page002.xhtml",
+      "line" : 5,
+      "column" : 46,
+      "context" : "meta"
+    }, {
+      "fileName" : "OPS/page003.xhtml",
+      "line" : 5,
+      "column" : 49,
+      "context" : "meta"
+    }, {
+      "fileName" : "OPS/page004.xhtml",
+      "line" : 5,
+      "column" : 29,
+      "context" : "meta"
+    } ],
+    "suggestion" : "The viewport declaration must declare both width and height."
+  }, {
+    "ID" : "HTM-048",
+    "severity" : "ERROR",
+    "message" : "SVG ViewBox is missing on fixed format document.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page005.svg",
+      "line" : 2,
+      "column" : 67,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page006.svg",
+      "line" : 2,
+      "column" : 67,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page007.svg",
+      "line" : 2,
+      "column" : 67,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page008.svg",
+      "line" : 2,
+      "column" : 67,
+      "context" : null
+    } ],
+    "suggestion" : "A viewBox declaration is required for fixed format documents."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page005.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'element \"meta\" missing required attribute \"content\"'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page004.xhtml",
+      "line" : 5,
+      "column" : 29,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/PlaceHolder.epub b/src/test/resources/com/adobe/epubcheck/test/package/PlaceHolder.epub
new file mode 100644
index 0000000..18e588e
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/package/PlaceHolder.epub differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/blank.epub b/src/test/resources/com/adobe/epubcheck/test/package/blank.epub
new file mode 100644
index 0000000..e69de29
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/corrupt_file.epub b/src/test/resources/com/adobe/epubcheck/test/package/corrupt_file.epub
new file mode 100644
index 0000000..88b4746
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/package/corrupt_file.epub differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/corrupt_file_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/package/corrupt_file_expected_results.json
new file mode 100644
index 0000000..249a328
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/corrupt_file_expected_results.json
@@ -0,0 +1,56 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/package/corrupt_file.epub",
+    "filename" : "corrupt_file.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:58",
+    "elapsedTime" : 1,
+    "nFatal" : 1,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 0
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : null,
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : null,
+    "language" : null,
+    "nSpines" : 0,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : null,
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 0,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ ],
+  "messages" : [ {
+    "ID" : "PKG-008",
+    "severity" : "FATAL",
+    "message" : "Unable to read file 'error in opening zip file'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "corrupt_file.epub",
+      "line" : 0,
+      "column" : 0,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/empty_archive.epub b/src/test/resources/com/adobe/epubcheck/test/package/empty_archive.epub
new file mode 100644
index 0000000..15cb0ec
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/package/empty_archive.epub differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/empty_archive_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/package/empty_archive_expected_results.json
new file mode 100644
index 0000000..9235125
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/empty_archive_expected_results.json
@@ -0,0 +1,57 @@
+{
+  "checker" : {
+    "path" : "com.adobe.epubcheck\\target\\test-classes\\com\\adobe\\epubcheck\\test\\package\\empty_archive.epub",
+    "filename" : "empty_archive.epub",
+    "checkerVersion" : "3.0.10-SNAPSHOT",
+    "checkDate" : "04-11-2013 16:35:48",
+    "elapsedTime" : 0,
+    "nFatal" : 0,
+    "nError" : 2,
+    "nWarning" : 0,
+    "nUsage" : 0
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : null,
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : null,
+    "language" : null,
+    "nSpines" : 0,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : null,
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true
+  },
+  "items" : [ ],
+  "messages" : [ {
+    "ID" : "PKG-003",
+    "severity" : "ERROR",
+    "message" : "Unable to read ePub file header.  This is likely a corrupted ePub file.",
+    "locations" : [ {
+      "fileName" : "empty_archive.epub",
+      "line" : 0,
+      "column" : 0,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "PKG-008",
+    "severity" : "ERROR",
+    "message" : "Unable to read file 'error in opening zip file'.",
+    "locations" : [ {
+      "fileName" : "empty_archive.epub",
+      "line" : 0,
+      "column" : 0,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  } ]
+}
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/empty_dir.epub b/src/test/resources/com/adobe/epubcheck/test/package/empty_dir.epub
new file mode 100644
index 0000000..b690a14
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/package/empty_dir.epub differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/empty_dir_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/package/empty_dir_expected_results.json
new file mode 100644
index 0000000..d70914d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/empty_dir_expected_results.json
@@ -0,0 +1,80 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/package/empty_dir.epub",
+    "filename" : "empty_dir.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:58",
+    "elapsedTime" : 1,
+    "nFatal" : 1,
+    "nError" : 2,
+    "nWarning" : 0,
+    "nUsage" : 0
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : null,
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : null,
+    "language" : null,
+    "nSpines" : 0,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : null,
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 0,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ ],
+  "messages" : [ {
+    "ID" : "PKG-006",
+    "severity" : "ERROR",
+    "message" : "Mimetype file entry is missing or is not the first file in the archive.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "empty_dir.epub",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-001",
+    "severity" : "ERROR",
+    "message" : "File 'META-INF/container.xml' is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "empty_dir.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-002",
+    "severity" : "FATAL",
+    "message" : "Required META-INF/container.xml resource is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "empty_dir.epub",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/empty_mimetype/mime.type b/src/test/resources/com/adobe/epubcheck/test/package/empty_mimetype/mime.type
new file mode 100644
index 0000000..e69de29
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/empty_mimetype_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/package/empty_mimetype_expected_results.json
new file mode 100644
index 0000000..a80dd3f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/empty_mimetype_expected_results.json
@@ -0,0 +1,80 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/package/empty_mimetype.epub",
+    "filename" : "empty_mimetype.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:56",
+    "elapsedTime" : 1,
+    "nFatal" : 1,
+    "nError" : 2,
+    "nWarning" : 0,
+    "nUsage" : 0
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : null,
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : null,
+    "language" : null,
+    "nSpines" : 0,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : null,
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 0,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ ],
+  "messages" : [ {
+    "ID" : "PKG-006",
+    "severity" : "ERROR",
+    "message" : "Mimetype file entry is missing or is not the first file in the archive.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "empty_mimetype.epub",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-001",
+    "severity" : "ERROR",
+    "message" : "File 'META-INF/container.xml' is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "empty_mimetype.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-002",
+    "severity" : "FATAL",
+    "message" : "Required META-INF/container.xml resource is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "empty_mimetype.epub",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/image_types/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/package/image_types/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/image_types/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/content.opf
new file mode 100644
index 0000000..f6ef83f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/content.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Image Types Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="image01" href="images/kitty.jpeg" media-type="image/jpeg"/>
+    <item id="image02" href="images/BigRed.png" media-type="image/png"/>
+    <item id="image03" href="images/PlaceHolder.gif" media-type="image/gif"/>
+    <item id="image04" href="images/PlaceHolder.png" media-type="image/gif"/>
+    <item id="image05" href="images/PrincessBrideReunion.png" media-type="image/png"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/images/BigRed.png b/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/images/BigRed.png
new file mode 100644
index 0000000..0c15f70
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/images/BigRed.png differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/images/PlaceHolder.gif b/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/images/PlaceHolder.gif
new file mode 100644
index 0000000..18e588e
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/images/PlaceHolder.gif differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/images/PlaceHolder.png b/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/images/PlaceHolder.png
new file mode 100644
index 0000000..18e588e
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/images/PlaceHolder.png differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/images/PrincessBrideReunion.png b/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/images/PrincessBrideReunion.png
new file mode 100644
index 0000000..f0a4448
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/images/PrincessBrideReunion.png differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/images/kitty.jpeg b/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/images/kitty.jpeg
new file mode 100644
index 0000000..319b02a
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/images/kitty.jpeg differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/page01.xhtml
new file mode 100644
index 0000000..e7debb2
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/page01.xhtml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Page 01</title>
+</head>
+<body>
+  <div>
+    <h1>Page 01</h1>
+
+    <img src="images/kitty.jpeg" alt="jpg with odd extension"/>
+      <img src="images/PlaceHolder.gif" alt="transparent gif"/>
+      <img src="images/PlaceHolder.png" alt="gif with wrong extension"/>
+      <img src="images/BigRed.png" alt="tall and wide"/>
+      <img src="images/PrincessBrideReunion.png" alt="big file"/>
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/toc.xhtml
new file mode 100644
index 0000000..f17be2a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/image_types/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="page01.xhtml">Page 1</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/image_types/mimetype b/src/test/resources/com/adobe/epubcheck/test/package/image_types/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/image_types/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/image_types_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/package/image_types_expected_results.json
new file mode 100644
index 0000000..3c44aa7
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/image_types_expected_results.json
@@ -0,0 +1,334 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/package/image_types.epub",
+    "filename" : "image_types.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:56",
+    "elapsedTime" : 1119,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 1,
+    "nUsage" : 3
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Image Types Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 125,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 452,
+    "uncompressedSize" : 1128,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d53b9584b7d5644b4b4e777dd36623c0acf33f3c187c9d6bdce431047aa8b1",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "image01",
+    "fileName" : "OPS/images/kitty.jpeg",
+    "media_type" : "image/jpeg",
+    "compressedSize" : 5751,
+    "uncompressedSize" : 10995,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "bec3ea5018efc92863947cde4f752a04f3b9e63a271af30394ff966bab41f7",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "image02",
+    "fileName" : "OPS/images/BigRed.png",
+    "media_type" : "image/png",
+    "compressedSize" : 348,
+    "uncompressedSize" : 31984,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a06cb5b1e896d6768ac2b3d8d65188db2517ed3fc22e313df42acc861f081",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "image03",
+    "fileName" : "OPS/images/PlaceHolder.gif",
+    "media_type" : "image/gif",
+    "compressedSize" : 1885,
+    "uncompressedSize" : 2065,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2abaa734135a298442e1786538beccae5516cd2e186103c7ea07aff1f714",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "image04",
+    "fileName" : "OPS/images/PlaceHolder.png",
+    "media_type" : "image/gif",
+    "compressedSize" : 1885,
+    "uncompressedSize" : 2065,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2abaa734135a298442e1786538beccae5516cd2e186103c7ea07aff1f714",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "image05",
+    "fileName" : "OPS/images/PrincessBrideReunion.png",
+    "media_type" : "image/png",
+    "compressedSize" : 6801562,
+    "uncompressedSize" : 6800022,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "88f751a496b636497be5ed254eb2eb93dfd7ca88a866f75d25a47c91f823c14",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 293,
+    "uncompressedSize" : 556,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7e983f3695b1eea13cb6d3e7aacb5d84de767f2ccda456f5154d35c5f9b012",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 263,
+    "uncompressedSize" : 519,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f553878558dbaab5bf35dad01457175a49f31a1ecd58aae4699bb61efe42224c",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/images/PrincessBrideReunion.png", "OPS/images/BigRed.png", "OPS/images/kitty.jpeg", "OPS/images/PlaceHolder.gif", "OPS/images/PlaceHolder.png" ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 228,
+    "uncompressedSize" : 339,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c1f5f92fde356c7bbbc841fce3f768289bf47019fdf46fc33b54273fa0f0cf4",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "image_types.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "PKG-022",
+    "severity" : "WARNING",
+    "message" : "Wrong file extension for image. The image is a 'gif' file but has the file extension 'png'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/images/PlaceHolder.png",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/images/PlaceHolder.png"
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub2/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub2/META-INF/container.xml
new file mode 100644
index 0000000..a63b9be
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub2/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS Content/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub2/OPS Content/More XHTML Content/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub2/OPS Content/More XHTML Content/page01.xhtml
new file mode 100644
index 0000000..ffd89f9
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub2/OPS Content/More XHTML Content/page01.xhtml	
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+        "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Sample page 1</title>
+</head>
+<body>
+<div>
+    <h1>Epub 2</h1>
+
+    <p>This a file in a relative path with spaces.</p>
+    <a href="../../XHTML%20Content/page02.xhtml">Link to Page 2</a>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub2/OPS Content/content.opf b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub2/OPS Content/content.opf
new file mode 100644
index 0000000..55d05cc
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub2/OPS Content/content.opf	
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="2.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Epub2 with interesting paths</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="More%20XHTML%20Content/page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="../XHTML%20Content/page02.xhtml" media-type="application/xhtml+xml" />
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub2/OPS Content/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub2/OPS Content/toc.ncx
new file mode 100644
index 0000000..87bf517
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub2/OPS Content/toc.ncx	
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Page 1</text>
+      </navLabel>
+      <content src="More%20XHTML%20Content/page01.xhtml"/>
+    </navPoint>
+        <navPoint id="np-2" playOrder="2">
+          <navLabel>
+    	<text>Page 2</text>
+          </navLabel>
+          <content src="../XHTML%20Content/page02.xhtml"/>
+        </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub2/XHTML Content/page02.xhtml b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub2/XHTML Content/page02.xhtml
new file mode 100644
index 0000000..fe89835
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub2/XHTML Content/page02.xhtml	
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+        "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Sample page 2</title>
+</head>
+<body>
+  <div>
+    <h1>Epub 2</h1>
+
+    <p>This a file in a relative path with spaces.</p>
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub2/mimetype b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub2/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub2/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub2_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub2_expected_results.json
new file mode 100644
index 0000000..f3f6b51
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub2_expected_results.json
@@ -0,0 +1,215 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/package/interesting_paths_epub2.epub",
+    "filename" : "interesting_paths_epub2.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:56",
+    "elapsedTime" : 33,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 1,
+    "nUsage" : 1
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Epub2 with interesting paths",
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 2,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "2.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 193,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 177,
+    "uncompressedSize" : 262,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2bfa908719af425388e089d065635c99f26a2a4d9d19c7db760c9c9c81315",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS Content/content.opf",
+    "fileName" : "OPS Content/content.opf",
+    "media_type" : null,
+    "compressedSize" : 344,
+    "uncompressedSize" : 740,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "82f879c1b7e5ae74f9ce885c5be91a51616d26c85e2e4d1cec268efa4c742c",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS Content/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 339,
+    "uncompressedSize" : 757,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "328212a6ce1e1d417835e676df7cd524fdcf31f4b4bb23f6ca8936322ae2054",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS Content/More XHTML Content/page01.xhtml", "XHTML Content/page02.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS Content/More XHTML Content/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 280,
+    "uncompressedSize" : 424,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "78b2e984a154c1cd2a12332966cb392f88fc3ab03feda864db69b210c8df20",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "XHTML Content/page02.xhtml" ]
+  }, {
+    "id" : "page02",
+    "fileName" : "XHTML Content/page02.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 241,
+    "uncompressedSize" : 360,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "132b326f4265c5ac186d9cbf7761a43a4f17b2c2fae2d3d4ccba6309e7438f1",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  } ],
+  "messages" : [ {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS Content/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "PKG-010",
+    "severity" : "WARNING",
+    "message" : "Filename contains spaces, therefore URI escaping is necessary. Consider removing spaces from filename.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS Content/More XHTML Content/page01.xhtml",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    }, {
+      "fileName" : "OPS Content/content.opf",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    }, {
+      "fileName" : "OPS Content/toc.ncx",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    }, {
+      "fileName" : "XHTML Content/page02.xhtml",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub2_expected_results.xml b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub2_expected_results.xml
new file mode 100644
index 0000000..e413a7b
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub2_expected_results.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jhove xmlns="http://hul.harvard.edu/ois/xml/ns/jhove" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="epubcheck" release="4.0.0-alpha11-SNAPSHOT" date="2012-10-31">
+ <date>2014-09-05T03:15:56+02:00</date>
+ <repInfo uri="interesting_paths_epub2.epub">
+  <created>2014-09-05T01:49:14Z</created>
+  <format>application/epub+zip</format>
+  <version>2.0</version>
+  <status>Well-formed</status>
+  <messages>
+   <message>PKG-010, WARN, [Filename contains spaces, therefore URI escaping is necessary. Consider removing spaces from filename.], OPS Content/More XHTML Content/page01.xhtml</message>
+   <message>PKG-010, WARN, [Filename contains spaces, therefore URI escaping is necessary. Consider removing spaces from filename.], OPS Content/content.opf</message>
+   <message>PKG-010, WARN, [Filename contains spaces, therefore URI escaping is necessary. Consider removing spaces from filename.], XHTML Content/page02.xhtml</message>
+   <message>PKG-010, WARN, [Filename contains spaces, therefore URI escaping is necessary. Consider removing spaces from filename.], OPS Content/toc.ncx</message>
+   <message>HTM-010, HINT, [Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.], OPS Content/toc.ncx (2-68)</message>
+  </messages>
+  <mimeType>application/epub+zip</mimeType>
+  <properties>
+   <property>
+    <name>CharacterCount</name>
+    <values arity="Scalar" type="Long">
+     <value>193</value>
+    </values>
+   </property>
+   <property>
+    <name>Language</name>
+    <values arity="Scalar" type="String">
+     <value>en</value>
+    </values>
+   </property>
+   <property>
+    <name>Info</name>
+    <values arity="List" type="Property">
+     <property>
+      <name>Identifier</name>
+      <values arity="Scalar" type="String">
+       <value>000000000000000000</value>
+      </values>
+     </property>
+     <property>
+      <name>CreationDate</name>
+      <values arity="Scalar" type="Date">
+       <value>2014-09-05T01:49:14Z</value>
+      </values>
+     </property>
+     <property>
+      <name>Title</name>
+      <values arity="Scalar" type="String">
+       <value>Epub2 with interesting paths</value>
+      </values>
+     </property>
+    </values>
+   </property>
+  </properties>
+ </repInfo>
+</jhove>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/META-INF/container.xml
new file mode 100644
index 0000000..a63b9be
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS Content/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/OPS Content/Cyrillic_phi.xhtml b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/OPS Content/Cyrillic_phi.xhtml
new file mode 100644
index 0000000..62ae924
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/OPS Content/Cyrillic_phi.xhtml	
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Sample page 1</title>
+    <link rel="stylesheet" type="text/css" href="../style."/>
+</head>
+<body>
+<div>
+    <h1>Epub 3</h1>
+
+    <p>This a file in a relative path with spaces.</p>
+    <a href="../../XHTML%20Content/page%2002.xhtml">Link to Page 2</a>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/OPS Content/More XHTML Content/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/OPS Content/More XHTML Content/page01.xhtml
new file mode 100644
index 0000000..ce80a19
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/OPS Content/More XHTML Content/page01.xhtml	
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Sample page 1</title>
+</head>
+<body>
+<div>
+    <h1>Epub 3</h1>
+
+    <p>This a file in a relative path with spaces.</p>
+    <a href="../../XHTML%20Content/page%2002.xhtml">Link to Page 2</a>
+    <a href="../Cyrillic_Ф.xhtml">Link to Page 4</a>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/OPS Content/content.opf b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/OPS Content/content.opf
new file mode 100644
index 0000000..60f29cc
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/OPS Content/content.opf	
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Interesting Paths Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="More%20XHTML%20Content/page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="../XHTML%20Content/page%2002.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" href="page{03}.xhtml" media-type="application/xhtml+xml" />
+    <item id="page04" href="Cyrillic_phi.html" media-type="application/xhtml+xml"  />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="style" href="style." media-type="text/css"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+    <itemref idref="page04" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/OPS Content/page{03}.xhtml b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/OPS Content/page{03}.xhtml
new file mode 100644
index 0000000..4945598
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/OPS Content/page{03}.xhtml	
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Sample page 3</title>
+</head>
+<body>
+<div>
+    <h1>Page 3</h1>
+
+    <p>This a file in a relative path with spaces.</p>
+    <a href="../XHTML%20Content/page%2002.xhtml">Link to Page 2</a>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/OPS Content/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/OPS Content/toc.ncx
new file mode 100644
index 0000000..18759b0
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/OPS Content/toc.ncx	
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Page 1</text>
+      </navLabel>
+      <content src="More%20XHTML%20Content/page01.xhtml"/>
+    </navPoint>
+        <navPoint id="np-2" playOrder="2">
+          <navLabel>
+    	<text>Page 2</text>
+          </navLabel>
+          <content src="../XHTML%20Content/page%2002.xhtml"/>
+        </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/OPS Content/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/OPS Content/toc.xhtml
new file mode 100644
index 0000000..9dc312c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/OPS Content/toc.xhtml	
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="More%20XHTML%20Content/page01.xhtml">Page 1</a></li>
+        <li><a href="../XHTML%20Content/page%2002.xhtml">Page 2</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/XHTML Content/page 02.xhtml b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/XHTML Content/page 02.xhtml
new file mode 100644
index 0000000..c3f2a12
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/XHTML Content/page 02.xhtml	
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Sample page 2</title>
+</head>
+<body>
+  <div>
+    <h1>Epub 3</h1>
+
+    <p>This a file in a relative path with spaces.</p>
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/mimetype b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3_expected_results.json
new file mode 100644
index 0000000..d4c77b8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3_expected_results.json
@@ -0,0 +1,480 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/package/interesting_paths_epub3.epub",
+    "filename" : "interesting_paths_epub3.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:56",
+    "elapsedTime" : 125,
+    "nFatal" : 0,
+    "nError" : 4,
+    "nWarning" : 3,
+    "nUsage" : 5
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Interesting Paths Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 4,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 386,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 177,
+    "uncompressedSize" : 262,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2bfa908719af425388e089d065635c99f26a2a4d9d19c7db760c9c9c81315",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS Content/Cyrillic_phi.xhtml",
+    "fileName" : "OPS Content/Cyrillic_phi.xhtml",
+    "media_type" : null,
+    "compressedSize" : 269,
+    "uncompressedSize" : 399,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "273a71c33973855f16c37bf19210c5b82ecc6d6144aec1eb723492a378f0a5f",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS Content/content.opf",
+    "fileName" : "OPS Content/content.opf",
+    "media_type" : null,
+    "compressedSize" : 465,
+    "uncompressedSize" : 1189,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "9b404342568361fe8e43ea6ef9f1c92b932bcb316e4255bc283a167f59a1b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS Content/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 341,
+    "uncompressedSize" : 760,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a0d1972ed294dbeee6d3f717a8de125fd4caa15cbea91f6f96e7dc0f94a48c6",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS Content/More XHTML Content/page01.xhtml", "XHTML Content/page 02.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS Content/More XHTML Content/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 260,
+    "uncompressedSize" : 391,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "de148a31d29571eff742beba8ec539a6491286743f1e3a2d955a55bce16ae5",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS Content/Cyrillic_\u0424.xhtml", "XHTML Content/page 02.xhtml" ]
+  }, {
+    "id" : "page02",
+    "fileName" : "XHTML Content/page 02.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 193,
+    "uncompressedSize" : 270,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "4f652039ffaad6957e83c0aeb73e72e9ae92334ce4826341bd367b76e563be0",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page03",
+    "fileName" : "OPS Content/page{03}.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 232,
+    "uncompressedSize" : 334,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d22b5e7d212a058adc7b7696a1a85cd0774abf5aaf9f678325d81acaa5159",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "XHTML Content/page 02.xhtml" ]
+  }, {
+    "id" : "page04",
+    "fileName" : "OPS Content/Cyrillic_phi.html",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 0,
+    "uncompressedSize" : 0,
+    "compressionMethod" : null,
+    "checkSum" : null,
+    "isSpineItem" : true,
+    "spineIndex" : 3,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style",
+    "fileName" : "OPS Content/style.",
+    "media_type" : "text/css",
+    "compressedSize" : 0,
+    "uncompressedSize" : 0,
+    "compressionMethod" : null,
+    "checkSum" : null,
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS Content/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 260,
+    "uncompressedSize" : 435,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "31d2bb091c8d762471888b378219ec7eb2dccc8ba1a6c32ad3c21c1e54184e",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS Content/More XHTML Content/page01.xhtml", "XHTML Content/page 02.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS Content/More XHTML Content/page01.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS Content/page{03}.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "XHTML Content/page 02.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "interesting_paths_epub3.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS Content/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-014a",
+    "severity" : "WARNING",
+    "message" : "XHTML Content Document file name 'OPS Content/Cyrillic_phi.html' should have the extension '.xhtml'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS Content/content.opf",
+      "line" : 14,
+      "column" : 86,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-003",
+    "severity" : "WARNING",
+    "message" : "Item 'OPS Content/Cyrillic_phi.xhtml' exists in the ePub, but is not declared in the OPF manifest.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "interesting_paths_epub3.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-058",
+    "severity" : "USAGE",
+    "message" : "Spine item has no TOC entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS Content/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS Content/Cyrillic_phi.html"
+    }, {
+      "fileName" : "OPS Content/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS Content/page{03}.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one TOC entry."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS Content/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS Content/Cyrillic_phi.html"
+    }, {
+      "fileName" : "OPS Content/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS Content/page{03}.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  }, {
+    "ID" : "PKG-009",
+    "severity" : "ERROR",
+    "message" : "File name contains characters that are not allowed in OCF file names: '\"{\",\"}\"'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS Content/page{03}.xhtml",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "PKG-010",
+    "severity" : "WARNING",
+    "message" : "Filename contains spaces, therefore URI escaping is necessary. Consider removing spaces from filename.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS Content/Cyrillic_phi.xhtml",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    }, {
+      "fileName" : "OPS Content/More XHTML Content/page01.xhtml",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    }, {
+      "fileName" : "OPS Content/content.opf",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    }, {
+      "fileName" : "OPS Content/page{03}.xhtml",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    }, {
+      "fileName" : "OPS Content/toc.ncx",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    }, {
+      "fileName" : "OPS Content/toc.xhtml",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    }, {
+      "fileName" : "XHTML Content/page 02.xhtml",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-001",
+    "severity" : "ERROR",
+    "message" : "File 'OPS Content/Cyrillic_phi.html' is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "interesting_paths_epub3.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-001",
+    "severity" : "ERROR",
+    "message" : "File 'OPS Content/style.' is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "interesting_paths_epub3.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-007",
+    "severity" : "ERROR",
+    "message" : "Referenced resource is not found in the ePub.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS Content/More XHTML Content/page01.xhtml",
+      "line" : 13,
+      "column" : 35,
+      "context" : "OPS Content/Cyrillic_\u0424.xhtml"
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3_expected_results.xml b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3_expected_results.xml
new file mode 100644
index 0000000..bb609e3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/interesting_paths_epub3_expected_results.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jhove xmlns="http://hul.harvard.edu/ois/xml/ns/jhove" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="epubcheck" release="4.0.0-alpha11-SNAPSHOT" date="2012-10-31">
+ <date>2014-09-05T03:15:56+02:00</date>
+ <repInfo uri="interesting_paths_epub3.epub">
+  <created>2014-09-05T01:49:14Z</created>
+  <lastModified>2012-10-10T12:00:00Z</lastModified>
+  <format>application/epub+zip</format>
+  <version>3.0</version>
+  <status>Not well-formed</status>
+  <messages>
+   <message>RSC-001, ERROR, [File 'OPS Content/Cyrillic_phi.html' is not found.], interesting_paths_epub3.epub</message>
+   <message>RSC-001, ERROR, [File 'OPS Content/style.' is not found.], interesting_paths_epub3.epub</message>
+   <message>RSC-007, ERROR, [Referenced resource is not found in the ePub.], OPS Content/More XHTML Content/page01.xhtml (13-35)</message>
+   <message>PKG-009, ERROR, [File name contains characters that are not allowed in OCF file names: '"{","}"'.], OPS Content/page{03}.xhtml</message>
+   <message>HTM-014a, WARN, [XHTML Content Document file name 'OPS Content/Cyrillic_phi.html' should have the extension '.xhtml'.], OPS Content/content.opf (14-86)</message>
+   <message>PKG-010, WARN, [Filename contains spaces, therefore URI escaping is necessary. Consider removing spaces from filename.], OPS Content/More XHTML Content/page01.xhtml</message>
+   <message>PKG-010, WARN, [Filename contains spaces, therefore URI escaping is necessary. Consider removing spaces from filename.], OPS Content/toc.xhtml</message>
+   <message>PKG-010, WARN, [Filename contains spaces, therefore URI escaping is necessary. Consider removing spaces from filename.], OPS Content/page{03}.xhtml</message>
+   <message>PKG-010, WARN, [Filename contains spaces, therefore URI escaping is necessary. Consider removing spaces from filename.], OPS Content/Cyrillic_phi.xhtml</message>
+   <message>PKG-010, WARN, [Filename contains spaces, therefore URI escaping is necessary. Consider removing spaces from filename.], OPS Content/content.opf</message>
+   <message>PKG-010, WARN, [Filename contains spaces, therefore URI escaping is necessary. Consider removing spaces from filename.], XHTML Content/page 02.xhtml</message>
+   <message>PKG-010, WARN, [Filename contains spaces, therefore URI escaping is necessary. Consider removing spaces from filename.], OPS Content/toc.ncx</message>
+   <message>OPF-003, WARN, [Item 'OPS Content/Cyrillic_phi.xhtml' exists in the ePub, but is not declared in the OPF manifest.], interesting_paths_epub3.epub</message>
+   <message>OPF-058, HINT, [Spine item has no TOC entry reference.], OPS Content/toc.xhtml</message>
+   <message>OPF-058, HINT, [Spine item has no TOC entry reference.], OPS Content/toc.xhtml</message>
+   <message>HTM-010, HINT, [Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.], OPS Content/toc.ncx (2-68)</message>
+   <message>OPF-059, HINT, [Spine item has no NAV entry reference.], OPS Content/toc.ncx</message>
+   <message>OPF-059, HINT, [Spine item has no NAV entry reference.], OPS Content/toc.ncx</message>
+   <message>ACC-008, HINT, [Navigation Document has no 'landmarks nav' element.], interesting_paths_epub3.epub</message>
+   <message>ACC-007, HINT, [Content Documents do not use 'epub:type' attributes for semantic inflection.], OPS Content/More XHTML Content/page01.xhtml</message>
+   <message>ACC-007, HINT, [Content Documents do not use 'epub:type' attributes for semantic inflection.], XHTML Content/page 02.xhtml</message>
+   <message>ACC-007, HINT, [Content Documents do not use 'epub:type' attributes for semantic inflection.], OPS Content/page{03}.xhtml</message>
+  </messages>
+  <mimeType>application/epub+zip</mimeType>
+  <properties>
+   <property>
+    <name>CharacterCount</name>
+    <values arity="Scalar" type="Long">
+     <value>386</value>
+    </values>
+   </property>
+   <property>
+    <name>Language</name>
+    <values arity="Scalar" type="String">
+     <value>en</value>
+    </values>
+   </property>
+   <property>
+    <name>Info</name>
+    <values arity="List" type="Property">
+     <property>
+      <name>Identifier</name>
+      <values arity="Scalar" type="String">
+       <value>000000000000000000</value>
+      </values>
+     </property>
+     <property>
+      <name>CreationDate</name>
+      <values arity="Scalar" type="Date">
+       <value>2014-09-05T01:49:14Z</value>
+      </values>
+     </property>
+     <property>
+      <name>ModDate</name>
+      <values arity="Scalar" type="Date">
+       <value>2012-10-10T12:00:00Z</value>
+      </values>
+     </property>
+     <property>
+      <name>Title</name>
+      <values arity="Scalar" type="String">
+       <value>Interesting Paths Sample Book</value>
+      </values>
+     </property>
+    </values>
+   </property>
+  </properties>
+ </repInfo>
+</jhove>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/mimetype b/src/test/resources/com/adobe/epubcheck/test/package/mimetype
new file mode 100644
index 0000000..e69de29
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub2/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub2/OPS/content.opf
new file mode 100644
index 0000000..9997f1f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub2/OPS/content.opf
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="2.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Missing TOC Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub2/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub2/OPS/page01.xhtml
new file mode 100644
index 0000000..35e7f0c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub2/OPS/page01.xhtml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>No Toc</title>
+</head>
+<body>
+  <div>
+    <h1>Missing ToC</h1>
+
+    <p>The opf file for this epub is missing an item in the manifest marked as nav. Since this is an epub2 this element shouldn't exist.</p>
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub2/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub2/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub2/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub2/mimetype b/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub2/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub2/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub2_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub2_expected_results.json
new file mode 100644
index 0000000..f63e0ef
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub2_expected_results.json
@@ -0,0 +1,68 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/package/missing_container_file_epub2.epub",
+    "filename" : "missing_container_file_epub2.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:56",
+    "elapsedTime" : 2,
+    "nFatal" : 1,
+    "nError" : 1,
+    "nWarning" : 0,
+    "nUsage" : 0
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : null,
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : null,
+    "language" : null,
+    "nSpines" : 0,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : null,
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 0,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ ],
+  "messages" : [ {
+    "ID" : "RSC-001",
+    "severity" : "ERROR",
+    "message" : "File 'META-INF/container.xml' is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "missing_container_file_epub2.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-002",
+    "severity" : "FATAL",
+    "message" : "Required META-INF/container.xml resource is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "missing_container_file_epub2.epub",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub3/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub3/OPS/content.opf
new file mode 100644
index 0000000..5f10b45
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub3/OPS/content.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Missing TOC Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub3/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub3/OPS/page01.xhtml
new file mode 100644
index 0000000..08aeab5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub3/OPS/page01.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>No epub type attribute in the toc</title>
+</head>
+<body>
+  <div>
+    <h1>Missing epub:type in Toc file</h1>
+
+    <p>The toc (nav) file is missing the epub:type attribute.</p>
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub3/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub3/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub3/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub3/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub3/OPS/toc.xhtml
new file mode 100644
index 0000000..77f90c7
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub3/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="page01.xhtml">Page1</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub3/mimetype b/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub3/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub3/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub3_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub3_expected_results.json
new file mode 100644
index 0000000..75dbc83
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_container_file_epub3_expected_results.json
@@ -0,0 +1,68 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/package/missing_container_file_epub3.epub",
+    "filename" : "missing_container_file_epub3.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:56",
+    "elapsedTime" : 3,
+    "nFatal" : 1,
+    "nError" : 1,
+    "nWarning" : 0,
+    "nUsage" : 0
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : null,
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : null,
+    "language" : null,
+    "nSpines" : 0,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : null,
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 0,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ ],
+  "messages" : [ {
+    "ID" : "RSC-001",
+    "severity" : "ERROR",
+    "message" : "File 'META-INF/container.xml' is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "missing_container_file_epub3.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-002",
+    "severity" : "FATAL",
+    "message" : "Required META-INF/container.xml resource is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "missing_container_file_epub3.epub",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_file_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/package/missing_file_expected_results.json
new file mode 100644
index 0000000..bbb393e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_file_expected_results.json
@@ -0,0 +1,56 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/package/no_existence.epub",
+    "filename" : "no_existence.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:58",
+    "elapsedTime" : 0,
+    "nFatal" : 1,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 0
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : null,
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : null,
+    "language" : null,
+    "nSpines" : 0,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : null,
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 0,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ ],
+  "messages" : [ {
+    "ID" : "PKG-018",
+    "severity" : "FATAL",
+    "message" : "The ePub file is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "no_existence.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub2/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub2/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub2/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub2/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub2/OPS/content.opf
new file mode 100644
index 0000000..9997f1f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub2/OPS/content.opf
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="2.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Missing TOC Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub2/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub2/OPS/page01.xhtml
new file mode 100644
index 0000000..35e7f0c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub2/OPS/page01.xhtml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>No Toc</title>
+</head>
+<body>
+  <div>
+    <h1>Missing ToC</h1>
+
+    <p>The opf file for this epub is missing an item in the manifest marked as nav. Since this is an epub2 this element shouldn't exist.</p>
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub2/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub2/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub2/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub2_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub2_expected_results.json
new file mode 100644
index 0000000..fb398ca
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub2_expected_results.json
@@ -0,0 +1,156 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/package/missing_mimetype_file_epub2.epub",
+    "filename" : "missing_mimetype_file_epub2.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:56",
+    "elapsedTime" : 17,
+    "nFatal" : 0,
+    "nError" : 1,
+    "nWarning" : 0,
+    "nUsage" : 1
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Missing TOC Sample Book",
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "2.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 173,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 302,
+    "uncompressedSize" : 582,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "0d8daa23fd7ee3e9294a4973cb79fdbfe3c84afa5cc52782fe9129dbf649b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 293,
+    "uncompressedSize" : 556,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7e983f3695b1eea13cb6d3e7aacb5d84de767f2ccda456f5154d35c5f9b012",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 229,
+    "uncompressedSize" : 338,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c24a3daa5016e09abb5be18142e79cf6a3de1c6a7149864c4edd4a151e58df94",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  } ],
+  "messages" : [ {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "PKG-006",
+    "severity" : "ERROR",
+    "message" : "Mimetype file entry is missing or is not the first file in the archive.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "missing_mimetype_file_epub2.epub",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub3/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub3/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub3/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub3/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub3/OPS/content.opf
new file mode 100644
index 0000000..5f10b45
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub3/OPS/content.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Missing TOC Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub3/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub3/OPS/page01.xhtml
new file mode 100644
index 0000000..08aeab5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub3/OPS/page01.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>No epub type attribute in the toc</title>
+</head>
+<body>
+  <div>
+    <h1>Missing epub:type in Toc file</h1>
+
+    <p>The toc (nav) file is missing the epub:type attribute.</p>
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub3/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub3/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub3/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub3/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub3/OPS/toc.xhtml
new file mode 100644
index 0000000..77f90c7
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub3/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="page01.xhtml">Page1</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub3_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub3_expected_results.json
new file mode 100644
index 0000000..96f2606
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_mimetype_file_epub3_expected_results.json
@@ -0,0 +1,202 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/package/missing_mimetype_file_epub3.epub",
+    "filename" : "missing_mimetype_file_epub3.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:56",
+    "elapsedTime" : 119,
+    "nFatal" : 0,
+    "nError" : 1,
+    "nWarning" : 0,
+    "nUsage" : 3
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Missing TOC Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 198,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 362,
+    "uncompressedSize" : 738,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2a3c9d65eedc19ceab372c2c8cdefba6996d60d7f8d88e8cc6bb43e6b6a222b1",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 293,
+    "uncompressedSize" : 556,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7e983f3695b1eea13cb6d3e7aacb5d84de767f2ccda456f5154d35c5f9b012",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 201,
+    "uncompressedSize" : 309,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cd21287c82c9983c37ffd8f03e1dbba727440d06e89784fda673fb9b493f173",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 227,
+    "uncompressedSize" : 338,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d2509bfd8cff04a2f71424bc2e3f9981c894e3cc9de0f1cbdb4eb671fb341",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "missing_mimetype_file_epub3.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "PKG-006",
+    "severity" : "ERROR",
+    "message" : "Mimetype file entry is missing or is not the first file in the archive.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "missing_mimetype_file_epub3.epub",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_ncx_file/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/package/missing_ncx_file/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_ncx_file/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_ncx_file/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/package/missing_ncx_file/OPS/content.opf
new file mode 100644
index 0000000..d01e9df
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_ncx_file/OPS/content.opf
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="2.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Missing Spine Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+  </metadata>
+  <manifest>
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+  </manifest>
+   <spine toc="ncx">
+      <itemref idref="page01" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_ncx_file/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/package/missing_ncx_file/OPS/page01.xhtml
new file mode 100644
index 0000000..6eb4748
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_ncx_file/OPS/page01.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>No Spine</title>
+</head>
+<body>
+<div>
+    <h1>Missing Spine</h1>
+
+    <p>The spine element is missing in the opf file. This element is required.</p>
+
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_ncx_file/mimetype b/src/test/resources/com/adobe/epubcheck/test/package/missing_ncx_file/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_ncx_file/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_ncx_file_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/package/missing_ncx_file_expected_results.json
new file mode 100644
index 0000000..9a28b52
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_ncx_file_expected_results.json
@@ -0,0 +1,166 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/package/missing_ncx_file.epub",
+    "filename" : "missing_ncx_file.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:55",
+    "elapsedTime" : 16,
+    "nFatal" : 0,
+    "nError" : 1,
+    "nWarning" : 0,
+    "nUsage" : 0
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Missing Spine Sample Book",
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "2.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 116,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 301,
+    "uncompressedSize" : 589,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cc7494711b0ce66e0b33dfd5f74e390804613d71cc9806777db31d12e75b428",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 0,
+    "uncompressedSize" : 0,
+    "compressionMethod" : null,
+    "checkSum" : null,
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 188,
+    "uncompressedSize" : 281,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "aff123b20618fc054cd2bb1e7b6d62917f35bdcf825d9e13c0713a3c49c230",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  } ],
+  "messages" : [ {
+    "ID" : "RSC-001",
+    "severity" : "ERROR",
+    "message" : "File 'OPS/toc.ncx' is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "missing_ncx_file.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_opf_epub_file_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/package/missing_opf_epub_file_expected_results.json
new file mode 100644
index 0000000..0214e04
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_opf_epub_file_expected_results.json
@@ -0,0 +1,56 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/package/missing_opf_file",
+    "filename" : "missing_opf_file",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:58",
+    "elapsedTime" : 2,
+    "nFatal" : 0,
+    "nError" : 1,
+    "nWarning" : 0,
+    "nUsage" : 0
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : null,
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : null,
+    "language" : null,
+    "nSpines" : 0,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : null,
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 0,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ ],
+  "messages" : [ {
+    "ID" : "PKG-020",
+    "severity" : "ERROR",
+    "message" : "OPF file 'test_single_opf' is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "missing_opf_file",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_opf_file/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/package/missing_opf_file/META-INF/container.xml
new file mode 100644
index 0000000..2b8f1ef
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_opf_file/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/missing.opf" media-type="application/oebps-package+xml"/>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_opf_file/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/package/missing_opf_file/OPS/content.opf
new file mode 100644
index 0000000..f23f57b
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_opf_file/OPS/content.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Missing OPF Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_opf_file/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/package/missing_opf_file/OPS/page01.xhtml
new file mode 100644
index 0000000..08aeab5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_opf_file/OPS/page01.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>No epub type attribute in the toc</title>
+</head>
+<body>
+  <div>
+    <h1>Missing epub:type in Toc file</h1>
+
+    <p>The toc (nav) file is missing the epub:type attribute.</p>
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_opf_file/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/package/missing_opf_file/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_opf_file/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_opf_file/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/package/missing_opf_file/OPS/toc.xhtml
new file mode 100644
index 0000000..77f90c7
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_opf_file/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="page01.xhtml">Page1</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_opf_file/mimetype b/src/test/resources/com/adobe/epubcheck/test/package/missing_opf_file/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_opf_file/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_opf_file_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/package/missing_opf_file_expected_results.json
new file mode 100644
index 0000000..d622a01
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_opf_file_expected_results.json
@@ -0,0 +1,158 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/package/missing_opf_file.epub",
+    "filename" : "missing_opf_file.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:56",
+    "elapsedTime" : 17,
+    "nFatal" : 1,
+    "nError" : 1,
+    "nWarning" : 0,
+    "nUsage" : 2
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : null,
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : null,
+    "language" : null,
+    "nSpines" : 0,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : null,
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 0,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 0,
+    "uncompressedSize" : 0,
+    "compressionMethod" : null,
+    "checkSum" : null,
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/page01.xhtml",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : null,
+    "compressedSize" : 0,
+    "uncompressedSize" : 0,
+    "compressionMethod" : null,
+    "checkSum" : null,
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/toc.xhtml",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : null,
+    "compressedSize" : 0,
+    "uncompressedSize" : 0,
+    "compressionMethod" : null,
+    "checkSum" : null,
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "missing_opf_file.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-002",
+    "severity" : "FATAL",
+    "message" : "The OPF file 'OPS/missing.opf' was not found in the ePub.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "META-INF/container.xml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-001",
+    "severity" : "ERROR",
+    "message" : "File 'OPS/missing.opf' is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "missing_opf_file.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_toc_file/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/package/missing_toc_file/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_toc_file/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_toc_file/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/package/missing_toc_file/OPS/content.opf
new file mode 100644
index 0000000..5f10b45
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_toc_file/OPS/content.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Missing TOC Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_toc_file/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/package/missing_toc_file/OPS/page01.xhtml
new file mode 100644
index 0000000..08aeab5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_toc_file/OPS/page01.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>No epub type attribute in the toc</title>
+</head>
+<body>
+  <div>
+    <h1>Missing epub:type in Toc file</h1>
+
+    <p>The toc (nav) file is missing the epub:type attribute.</p>
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_toc_file/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/package/missing_toc_file/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_toc_file/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_toc_file/mimetype b/src/test/resources/com/adobe/epubcheck/test/package/missing_toc_file/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_toc_file/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/missing_toc_file_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/package/missing_toc_file_expected_results.json
new file mode 100644
index 0000000..1dcafc3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/missing_toc_file_expected_results.json
@@ -0,0 +1,224 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/package/missing_toc_file.epub",
+    "filename" : "missing_toc_file.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:55",
+    "elapsedTime" : 105,
+    "nFatal" : 0,
+    "nError" : 1,
+    "nWarning" : 0,
+    "nUsage" : 3
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Missing TOC Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 144,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 362,
+    "uncompressedSize" : 738,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2a3c9d65eedc19ceab372c2c8cdefba6996d60d7f8d88e8cc6bb43e6b6a222b1",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 293,
+    "uncompressedSize" : 556,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7e983f3695b1eea13cb6d3e7aacb5d84de767f2ccda456f5154d35c5f9b012",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 201,
+    "uncompressedSize" : 309,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cd21287c82c9983c37ffd8f03e1dbba727440d06e89784fda673fb9b493f173",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 0,
+    "uncompressedSize" : 0,
+    "compressionMethod" : null,
+    "checkSum" : null,
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "missing_toc_file.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-001",
+    "severity" : "ERROR",
+    "message" : "File 'OPS/toc.xhtml' is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "missing_toc_file.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/A.xhtml b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/A.xhtml
new file mode 100644
index 0000000..be94798
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/A.xhtml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>File with image link</title>
+</head>
+<body>
+<h1>Path Resolution File</h1>
+
+<p>Ensure that paths are resolved correctly when the opf file is in the root.</p>
+<img src="Hydrangeas.jpg" alt="Hydrangeas"/>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/Hydrangeas.jpg b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/Hydrangeas.jpg
new file mode 100644
index 0000000..a587c96
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/Hydrangeas.jpg differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/META-INF/container.xml
new file mode 100644
index 0000000..f4ad536
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/MathML2.xhtml b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/MathML2.xhtml
new file mode 100644
index 0000000..79335a3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/MathML2.xhtml
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xml:lang="en-us" lang="en-us" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta charset="utf-8"/>
+    <title>Math ML test</title>
+    <style type="text/css">
+        h1 {
+            text-align: center;
+        }
+        h2 {
+            text-align: left;
+        }
+    </style>
+</head>
+<body id="page">
+<h1>Basic math</h1>
+<h2>Equation 1</h2>
+<math xmlns="http://www.w3.org/1998/Math/MathML" display='block' altimg="OPS/images/equation_1.png" alttext="myequation" altimg-width="200px" altimg-height="100px" ><mrow><mi>eq1x</mi><mo>=</mo><mfrac><mrow><mo>&#x2212;</mo><mi>b</mi><mo>&#x00B1;</mo><msqrt><mrow><msup><mi>b</mi><mn>2</mn></msup><mo>&#x2212;</mo><mn>4</mn><mi>a</mi><mi>c</mi></mrow></msqrt></mrow><mrow><mn>2</mn><mi>a</mi></mrow></mfrac></mrow></math>
+<h2>Equation 2</h2>
+<math xmlns="http://www.w3.org/1998/Math/MathML" display='block' altimg="equation_2.png" alttext="myequation" altimg-width="200px" altimg-height="100px" ><mrow><mi>eq2x</mi><mo>=</mo><mfrac><mrow><mo>&#x2212;</mo><mi>b</mi><mo>&#x00B1;</mo><msqrt><mrow><msup><mi>b</mi><mn>2</mn></msup><mo>&#x2212;</mo><mn>4</mn><mi>a</mi><mi>c</mi></mrow></msqrt></mrow><mrow><mn>2</mn><mi>a</mi></mrow></mfrac></mrow></math>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/OPS/Description.xhtml b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/OPS/Description.xhtml
new file mode 100644
index 0000000..e09ad9f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/OPS/Description.xhtml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Description</title>
+</head>
+<body>
+<h1>Path Resolution</h1>
+
+<p>Ensure that paths are resolved correctly when the opf file is in the root.</p>
+<img src="images/Lighthouse.jpg" alt="Lighthouse"/>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/OPS/MathML1.xhtml b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/OPS/MathML1.xhtml
new file mode 100644
index 0000000..c0f48c9
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/OPS/MathML1.xhtml
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xml:lang="en-us" lang="en-us" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta charset="utf-8"/>
+    <title>Math ML test</title>
+    <style type="text/css">
+        h1 {
+            text-align: center;
+        }
+        h2 {
+            text-align: left;
+        }
+    </style>
+</head>
+<body id="page">
+<h1>Basic math</h1>
+<h2>Equation 1</h2>
+<math xmlns="http://www.w3.org/1998/Math/MathML" display='block' altimg="images/equation_1.png" alttext="myequation" altimg-width="200px" altimg-height="100px" ><mrow><mi>eq1x</mi><mo>=</mo><mfrac><mrow><mo>&#x2212;</mo><mi>b</mi><mo>&#x00B1;</mo><msqrt><mrow><msup><mi>b</mi><mn>2</mn></msup><mo>&#x2212;</mo><mn>4</mn><mi>a</mi><mi>c</mi></mrow></msqrt></mrow><mrow><mn>2</mn><mi>a</mi></mrow></mfrac></mrow></math>
+<h2>Equation 2</h2>
+<math xmlns="http://www.w3.org/1998/Math/MathML" display='block' altimg="../equation_2.png" alttext="myequation" altimg-width="200px" altimg-height="100px" ><mrow><mi>eq2x</mi><mo>=</mo><mfrac><mrow><mo>&#x2212;</mo><mi>b</mi><mo>&#x00B1;</mo><msqrt><mrow><msup><mi>b</mi><mn>2</mn></msup><mo>&#x2212;</mo><mn>4</mn><mi>a</mi><mi>c</mi></mrow></msqrt></mrow><mrow><mn>2</mn><mi>a</mi></mrow></mfrac></mrow></math>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/OPS/images/Lighthouse.jpg b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/OPS/images/Lighthouse.jpg
new file mode 100644
index 0000000..494be09
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/OPS/images/Lighthouse.jpg differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/OPS/images/equation_1.png b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/OPS/images/equation_1.png
new file mode 100644
index 0000000..0e973ea
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/OPS/images/equation_1.png differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/OPS/toc.ncx
new file mode 100644
index 0000000..4df2fce
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/OPS/toc.ncx
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ncx PUBLIC "-//NISO//DTD ncx 2005-1//EN" "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd">
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Path Resolution</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	    <text>Description.xhtml</text>
+      </navLabel>
+      <content src="Description.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/OPS/toc.xhtml
new file mode 100644
index 0000000..5f9fc09
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/OPS/toc.xhtml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>TOC</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="Description.xhtml">Description</a></li>
+        <li><a href="../A.xhtml">A</a></li>
+        <li><a href="MathML1.xhtml">MathML1</a></li>
+        <li><a href="../MathML2.xhtml">MathML2</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/content.opf b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/content.opf
new file mode 100644
index 0000000..43ba99c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/content.opf
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Path Resolution</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2014-27-03T12:00:00Z</meta>
+  </metadata>
+    <manifest>
+        <item id="ncx" href="OPS/toc.ncx" media-type="application/x-dtbncx+xml" />
+        <item id="toc" properties="nav" href="OPS/toc.xhtml" media-type="application/xhtml+xml" />
+        <item id="test_description" href="OPS/Description.xhtml" media-type="application/xhtml+xml" />
+        <item id="A" href="A.xhtml" media-type="application/xhtml+xml" />
+        <item id="MathML1" properties="mathml" href="OPS/MathML1.xhtml" media-type="application/xhtml+xml" />
+        <item id="MathML2" properties="mathml" href="MathML2.xhtml" media-type="application/xhtml+xml" />
+        <item id="lighthouse" href="OPS/images/Lighthouse.jpg" media-type="image/jpeg" />
+        <item id="Hydrangeas" href="Hydrangeas.jpg" media-type="image/jpeg" />
+        <item id="equation1" href="OPS/images/equation_1.png" media-type="image/png" />
+        <item id="equation2" href="equation_2.png" media-type="image/png" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="toc" />
+        <itemref idref="test_description" />
+        <itemref idref="A" />
+        <itemref idref="MathML1" />
+        <itemref idref="MathML2" />
+    </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/equation_2.png b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/equation_2.png
new file mode 100644
index 0000000..c6ca094
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/equation_2.png differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/mimetype b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/path_resolution_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution_expected_results.json
new file mode 100644
index 0000000..f682c7a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/path_resolution_expected_results.json
@@ -0,0 +1,413 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/package/path_resolution.epub",
+    "filename" : "path_resolution.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:57",
+    "elapsedTime" : 321,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 4
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Path Resolution",
+    "creator" : [ ],
+    "date" : "2014-27-03T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 5,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : false,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 754,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "A",
+    "fileName" : "A.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 250,
+    "uncompressedSize" : 359,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "4c4930d2949ee978e7a8d7cfb3b735dcf546ca191bdb1a1f7b152384885e362",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "Hydrangeas.jpg" ]
+  }, {
+    "id" : "Hydrangeas",
+    "fileName" : "Hydrangeas.jpg",
+    "media_type" : "image/jpeg",
+    "compressedSize" : 593128,
+    "uncompressedSize" : 595284,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3b92fede8f9bec92afc58831191b5b8ccbaf6732352fd7a8b445d1e9f0bd",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "MathML1",
+    "fileName" : "OPS/MathML1.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 445,
+    "uncompressedSize" : 1261,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ec2c5e44abadae5056b8e6abcff69465a8b13f2c145b71438b9988542476",
+    "isSpineItem" : true,
+    "spineIndex" : 3,
+    "isLinear" : true,
+    "navigationOrder" : 3,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "MathML2",
+    "fileName" : "MathML2.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 447,
+    "uncompressedSize" : 1262,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "8c5c4aeea3488909cfca6cb735839e99cff5731966572e24fb452fdb13f3379",
+    "isSpineItem" : true,
+    "spineIndex" : 4,
+    "isLinear" : true,
+    "navigationOrder" : 4,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 167,
+    "uncompressedSize" : 250,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "501d85376f8b3d5ec3d6b37a384c6beddca5f675f88af51885d43e5dfcdd0c0",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:content.opf",
+    "fileName" : "content.opf",
+    "media_type" : null,
+    "compressedSize" : 495,
+    "uncompressedSize" : 1550,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "191937f482fe0b426e0e56d371e3f81d8787228b5526adc4a34ddb28460c1",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "equation1",
+    "fileName" : "OPS/images/equation_1.png",
+    "media_type" : "image/png",
+    "compressedSize" : 3402,
+    "uncompressedSize" : 3469,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "19bb6927a870f276b01a8ae5dbf3fc328e63f2313e281141ebae09243867ec8",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "equation2",
+    "fileName" : "equation_2.png",
+    "media_type" : "image/png",
+    "compressedSize" : 3593,
+    "uncompressedSize" : 3672,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "132ed251d1e8fcd7c5d47e7bbddf2cb6ba875414ff62e770e84fd532249e78",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "lighthouse",
+    "fileName" : "OPS/images/Lighthouse.jpg",
+    "media_type" : "image/jpeg",
+    "compressedSize" : 558553,
+    "uncompressedSize" : 561276,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ff86372ce43519d675b8d8d29c98e9ccbe905d40ba057c8544fa01fa4d8e73",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 332,
+    "uncompressedSize" : 647,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d0b7eecbe9951345b188736dd9217babe4eb6f98bcf236dc9d792a456f972f0",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/Description.xhtml" ]
+  }, {
+    "id" : "test_description",
+    "fileName" : "OPS/Description.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 246,
+    "uncompressedSize" : 352,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7bd8955e11b2dd404f497e23689b3b7b4444bd0cbbeab68542471896b59c774",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/images/Lighthouse.jpg" ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 253,
+    "uncompressedSize" : 488,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2d4906510c8b9553e676caff66ad59ba6405d86edb67c2825eb90b627c46ace",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "A.xhtml", "OPS/MathML1.xhtml", "OPS/Description.xhtml", "MathML2.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "A.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "MathML2.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/Description.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/MathML1.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "path_resolution.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 3,
+      "column" : 51,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/A.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/MathML2.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/OPS/Description.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/OPS/MathML1.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/OPS/toc.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/period.js b/src/test/resources/com/adobe/epubcheck/test/package/period.js
new file mode 100644
index 0000000..aae3e1b
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/period.js
@@ -0,0 +1,19 @@
+var fs = require("fs");
+
+var create = function() {
+  fs.writeFile('style.', 'div{color:purple;}', function(err) {
+    if (err) throw err;
+    console.log('file created');
+  });
+};
+
+var remove = function() {
+  fs.unlink('style.', function() {
+    console.log('file deleted');
+    fs.exists('style.', function(exists) {
+      console.log('Existance: ' + exists);
+    });
+  });
+};
+
+remove();
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/wrong_extension.zip b/src/test/resources/com/adobe/epubcheck/test/package/wrong_extension.zip
new file mode 100644
index 0000000..d3e3136
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/package/wrong_extension.zip differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/wrong_extension_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/package/wrong_extension_expected_results.json
new file mode 100644
index 0000000..2b3bbc5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/wrong_extension_expected_results.json
@@ -0,0 +1,281 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/package/wrong_extension.zip",
+    "filename" : "wrong_extension.zip",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:58",
+    "elapsedTime" : 46,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 2,
+    "nUsage" : 0
+  },
+  "publication" : {
+    "publisher" : "NoPub",
+    "title" : "Link Test",
+    "creator" : [ "Anonymous" ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : "\u00A9 2011, but never enforced",
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 4,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "2.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 289,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 470,
+    "uncompressedSize" : 1247,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e9ed418b1bfdd410a4489ea6afdefee21b4f7a16a8d370a9ec303b6adf77f5",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 326,
+    "uncompressedSize" : 624,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "913b6f1c2783e126ab6b175bd8547e236d2736d9228503c1470e1213957d85e",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/Test1.xhtml" ]
+  }, {
+    "id" : "pg01",
+    "fileName" : "OPS/Test1.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 454,
+    "uncompressedSize" : 938,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "395688226f452e55b1b08b7dc0614dfed856f49e72dbbd8a36ab3f342684863d",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/LinkTarget1.xhtml", "OPS/images/ColorStripes.png", "OPS/LinkTarget2.xhtml" ]
+  }, {
+    "id" : "pg02",
+    "fileName" : "OPS/FillerPage.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 157,
+    "uncompressedSize" : 207,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1f7ce958d0f9ecc2896bb854a55737eb57d53227c8cbf8079cf8c16294ec87",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "pg03",
+    "fileName" : "OPS/LinkTarget1.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 188,
+    "uncompressedSize" : 255,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "9c1b21eb41f9b3d4db981ae1490f81acdd775f79ee4cea5223be44ba161",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/Test1.xhtml" ]
+  }, {
+    "id" : "pg04",
+    "fileName" : "OPS/LinkTarget2.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 188,
+    "uncompressedSize" : 255,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "68dd9840f210d310f4304d13da7398ca28382982914e74bc886d12692c16e617",
+    "isSpineItem" : true,
+    "spineIndex" : 3,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/Test1.xhtml" ]
+  }, {
+    "id" : "stripes",
+    "fileName" : "OPS/images/ColorStripes.png",
+    "media_type" : "image/png",
+    "compressedSize" : 2360,
+    "uncompressedSize" : 5276,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "fa45a6f9c9c29ddcc6aa7abe095b298c2493bb8ecd0ae9884b4e83851c218",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  } ],
+  "messages" : [ {
+    "ID" : "HTM-016",
+    "severity" : "WARNING",
+    "message" : "HTML5 DOCTYPE definition within ePub v2.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "FillerPage.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "LinkTarget1.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "LinkTarget2.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "Test1.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "PKG-017",
+    "severity" : "WARNING",
+    "message" : "Uncommon ePub file extension.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "wrong_extension.zip",
+      "line" : -1,
+      "column" : -1,
+      "context" : "zip"
+    } ],
+    "suggestion" : "For maximum compatibility, use '.epub'."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/package/wrong_type_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/package/wrong_type_expected_results.json
new file mode 100644
index 0000000..d9f6686
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/package/wrong_type_expected_results.json
@@ -0,0 +1,68 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/package/PlaceHolder.epub",
+    "filename" : "PlaceHolder.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:15:58",
+    "elapsedTime" : 0,
+    "nFatal" : 2,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 0
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : null,
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : null,
+    "language" : null,
+    "nSpines" : 0,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : null,
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 0,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ ],
+  "messages" : [ {
+    "ID" : "PKG-004",
+    "severity" : "FATAL",
+    "message" : "Corrupted ePub ZIP header.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "PlaceHolder.epub",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "PKG-008",
+    "severity" : "FATAL",
+    "message" : "Unable to read file 'error in opening zip file'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "PlaceHolder.epub",
+      "line" : 0,
+      "column" : 0,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/OPS/Test.txt b/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/OPS/Test.txt
new file mode 100644
index 0000000..c57eff5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/OPS/Test.txt
@@ -0,0 +1 @@
+Hello World!
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/OPS/content.opf
new file mode 100644
index 0000000..2e8618f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/OPS/content.opf
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>XMLHttpRequest Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" properties="scripted" href="inline_script.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" properties="scripted" href="external_script.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" properties="scripted" href="script_tag.xhtml" media-type="application/xhtml+xml" />
+    <item id="sample_script" href="sample.js" media-type="text/javascript"/>
+    <item id="text" href="Test.txt" media-type="text/plain"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/OPS/external_script.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/OPS/external_script.xhtml
new file mode 100644
index 0000000..ff73562
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/OPS/external_script.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>External Script with Eval</title>
+    <script src="sample.js" type="text/javascript"></script>
+</head>
+<body>
+<div>
+    <h1>External Script</h1>
+
+    <p>This page contains a reference to a script file in the head element.</p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/OPS/inline_script.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/OPS/inline_script.xhtml
new file mode 100644
index 0000000..14f5398
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/OPS/inline_script.xhtml
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Inline Script using XMLHttpRequest</title>
+</head>
+<body>
+<p>No way to have XMLHttpRequest script in inline functions.</p>
+<input type="button" onclick="alert('click')" value="click me"/>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/OPS/sample.js b/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/OPS/sample.js
new file mode 100644
index 0000000..efc7e4e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/OPS/sample.js
@@ -0,0 +1,8 @@
+function log(message) {
+    var client = new XMLHttpRequest();
+    client.open("POST", "/log");
+    client.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
+    client.send(message);
+}
+
+log("Book being read!");
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/OPS/script_tag.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/OPS/script_tag.xhtml
new file mode 100644
index 0000000..d693f40
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/OPS/script_tag.xhtml
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Script Tag using XMLHttpRequest</title>
+    <script>
+        function showMessage() {
+            if (str.length == 0) {
+                document.getElementById("txtMessage").innerHTML = "";
+                return;
+            }
+               if (!document.getElementById("txtMessage"))
+               {
+                   window.setTimeout(function(){showMessage();}, 500);
+                   return;
+               }
+            if (window.XMLHttpRequest) {
+                xmlHttp = new XMLHttpRequest();
+            }
+            else // for older IE 5/6
+            {
+                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
+            }
+            var url = "Test.txt;";
+            url = url + "&sid=" + Math.random();
+            xmlHttp.open("GET", url, false);
+            xmlHttp.send();
+            document.getElementById("txtMessage").innerText = xmlHttp.responseText;
+        }
+        window.onload = showMessage();
+    </script>
+
+</head>
+<body>
+<p>This contains script in a script element.</p>
+
+<div id="txtMessage"></div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/OPS/toc.ncx
new file mode 100644
index 0000000..616b205
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Script Properties Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>External Script Sample</text>
+      </navLabel>
+      <content src="external_script.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/OPS/toc.xhtml
new file mode 100644
index 0000000..98357df
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/OPS/toc.xhtml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="external_script.xhtml">External Script</a></li>
+        <li><a href="inline_script.xhtml">Inline Script</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/mimetype b/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest_expected_results.json
new file mode 100644
index 0000000..ce697cc
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/XMLHttpRequest_expected_results.json
@@ -0,0 +1,460 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/scripts/XMLHttpRequest.epub",
+    "filename" : "XMLHttpRequest.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:20",
+    "elapsedTime" : 93,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 13
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "XMLHttpRequest Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 3,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : true,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : false,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 1314,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 458,
+    "uncompressedSize" : 1188,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "76754c5540125d822818aff9f4fa8fff573eb6c9c6aab977b5c2cc198b7df17",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 303,
+    "uncompressedSize" : 575,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d22b4cd5479c4e6b2389af1ce3db19314982cda4d81a6f5ec2faf1499bea33",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/external_script.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/inline_script.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 220,
+    "uncompressedSize" : 306,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "dc3857dd5cd4a342d571aa8017f4757bbe86d328f8aa3ec54ceac67ad2950ac",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : true,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/external_script.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 227,
+    "uncompressedSize" : 357,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2d2446772d95e9e58fc5d31029d947dd751c4d7df4063249ee366bec46a4",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : true,
+    "scriptSrc" : true,
+    "scriptTag" : true,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/sample.js" ]
+  }, {
+    "id" : "page03",
+    "fileName" : "OPS/script_tag.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 498,
+    "uncompressedSize" : 1174,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "918c1395feb6eeb97a9eaada63230dfeebc58a44c51bc31003025becd9ce",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : true,
+    "scriptSrc" : false,
+    "scriptTag" : true,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "sample_script",
+    "fileName" : "OPS/sample.js",
+    "media_type" : "text/javascript",
+    "compressedSize" : 162,
+    "uncompressedSize" : 222,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "07313e36a92851dcef22dcbc98102b31a62133d1be98cd6f9273b38c37114",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : true,
+    "scriptSrc" : true,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "text",
+    "fileName" : "OPS/Test.txt",
+    "media_type" : "text/plain",
+    "compressedSize" : 14,
+    "uncompressedSize" : 12,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd20126d9069",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 252,
+    "uncompressedSize" : 422,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f7f393288393b534e897f6e0fd91111774fee263ff5e795916c10cc4de4bc5d",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/external_script.xhtml", "OPS/inline_script.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_script.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "XMLHttpRequest.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-006",
+    "severity" : "USAGE",
+    "message" : "An XHTML Named Entity was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : 24,
+      "column" : 25,
+      "context" : "url = url + \"&sid=\" + Math.ra"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-028",
+    "severity" : "USAGE",
+    "message" : "Input html elements should include an id.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 8,
+      "column" : 65,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-058",
+    "severity" : "USAGE",
+    "message" : "Spine item has no TOC entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/script_tag.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one TOC entry."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/inline_script.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/script_tag.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  }, {
+    "ID" : "SCP-002",
+    "severity" : "USAGE",
+    "message" : "Use of XMLHttpRequest in ePub scripts is a security risk.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/sample.js",
+      "line" : 2,
+      "column" : 17,
+      "context" : "new XMLHttpRequest();"
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : 17,
+      "column" : 48,
+      "context" : "new XMLHttpRequest();"
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : 21,
+      "column" : 66,
+      "context" : "Microsoft.XMLHTTP\");"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "SCP-006",
+    "severity" : "USAGE",
+    "message" : "Inline scripts found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 8,
+      "column" : 65,
+      "context" : "onclick"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "SCP-007",
+    "severity" : "USAGE",
+    "message" : "Script references 'innerHtml'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : 9,
+      "column" : 24,
+      "context" : "innerHTML = \"\";"
+    } ],
+    "suggestion" : "Use a DOM instead."
+  }, {
+    "ID" : "SCP-008",
+    "severity" : "USAGE",
+    "message" : "Script references 'innerText'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : 27,
+      "column" : 84,
+      "context" : "innerText = xmlHttp.responseText;"
+    } ],
+    "suggestion" : "Use 'textContent' instead."
+  }, {
+    "ID" : "SCP-009",
+    "severity" : "USAGE",
+    "message" : "Content file uses mouse event handlers.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 8,
+      "column" : 65,
+      "context" : "onclick"
+    } ],
+    "suggestion" : "Ensure that all mouse driven functionality is accessible from the keyboard and touch devices."
+  }, {
+    "ID" : "SCP-010",
+    "severity" : "USAGE",
+    "message" : "Epub 3 content file contains script.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_script.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/sample.js",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/epub2/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/scripts/epub2/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/epub2/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/epub2/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/scripts/epub2/OPS/content.opf
new file mode 100644
index 0000000..cb352f3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/epub2/OPS/content.opf
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="2.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Script in epub 2 Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="inline_script.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="external_script.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" href="script_tag.xhtml" media-type="application/xhtml+xml" />
+    <item id="sample_script" href="sample.js" media-type="text/javascript"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/epub2/OPS/external_script.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/epub2/OPS/external_script.xhtml
new file mode 100644
index 0000000..0983e5c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/epub2/OPS/external_script.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>External Script</title>
+    <script src="sample.js" type="text/javascript"></script>
+</head>
+<body>
+<div>
+    <h1>External Script</h1>
+
+    <p>This page contains a reference to a script file in the head element.</p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/epub2/OPS/inline_script.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/epub2/OPS/inline_script.xhtml
new file mode 100644
index 0000000..e601759
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/epub2/OPS/inline_script.xhtml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Inline Script</title>
+
+</head>
+<body>
+<div>
+    <p>File with inline script.</p>
+    <div onmousedown="alert('click')">Click Me!</div>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/epub2/OPS/sample.js b/src/test/resources/com/adobe/epubcheck/test/scripts/epub2/OPS/sample.js
new file mode 100644
index 0000000..5002b40
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/epub2/OPS/sample.js
@@ -0,0 +1,6 @@
+function hello()
+{
+    console.log("hello");
+}
+
+window.onload=hello;
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/epub2/OPS/script_tag.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/epub2/OPS/script_tag.xhtml
new file mode 100644
index 0000000..4d4af8e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/epub2/OPS/script_tag.xhtml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Script Tag</title>
+    <script type="text/javascript">
+        var epubcheck = epubcheck || {};
+        epubcheck.test = epubcheck.test || {};
+        epubcheck.test.Sample = {};
+
+        epubcheck.test.Sample = function (name) {
+            this.name = name;
+        };
+
+        epubcheck.test.Sample.prototype.sayHello = function () {
+            window.alert("hello" + this.name);
+        };
+
+        windows.onload = function(){var used = new epubcheck.test.Sample("Marsha"); used.sayHello();};
+    </script>
+</head>
+<body>
+<div>
+    <h1>Script Tag</h1>
+
+    <p>This has script defined in the head tag</p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/epub2/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/scripts/epub2/OPS/toc.ncx
new file mode 100644
index 0000000..2ee6dd8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/epub2/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Script in epub version 2</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="inline_script.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/epub2/mimetype b/src/test/resources/com/adobe/epubcheck/test/scripts/epub2/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/epub2/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/epub2_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/scripts/epub2_expected_results.json
new file mode 100644
index 0000000..466670c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/epub2_expected_results.json
@@ -0,0 +1,312 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/scripts/epub2.epub",
+    "filename" : "epub2.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:20",
+    "elapsedTime" : 27,
+    "nFatal" : 0,
+    "nError" : 2,
+    "nWarning" : 0,
+    "nUsage" : 4
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Script in epub 2 Sample Book",
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 3,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "2.0",
+    "isScripted" : true,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : false,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 731,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 364,
+    "uncompressedSize" : 906,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "52fd26d1b217e5f51b927617d84165939cc39c2c94b4113cd3b0438acb6b909d",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 305,
+    "uncompressedSize" : 571,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c76f5a179935fd9f51862eebaa83028ec30aad3213ff467dc55eacc2ff41d44",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/inline_script.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/inline_script.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 185,
+    "uncompressedSize" : 265,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "640471bdf78992511a3231574bcc8a16de9b6d6aee69f8657ecf6c33dbc2",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : true,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/external_script.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 220,
+    "uncompressedSize" : 347,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ba4cdacd27ce26f31e5d9ed89ae6d668446c1dd792a60683eb4cdf746b9e73f",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : true,
+    "scriptSrc" : true,
+    "scriptTag" : true,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page03",
+    "fileName" : "OPS/script_tag.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 341,
+    "uncompressedSize" : 741,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "be8ed3cf77925066e232b325c8c826341bb826725b3435d41f9903451526b53",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : true,
+    "scriptSrc" : false,
+    "scriptTag" : true,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "sample_script",
+    "fileName" : "OPS/sample.js",
+    "media_type" : "text/javascript",
+    "compressedSize" : 63,
+    "uncompressedSize" : 69,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e78b19f0e0ddad974183e9d7355ecfc247d7d13c565c475747516a177f7fb6",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : true,
+    "scriptSrc" : true,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  } ],
+  "messages" : [ {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/external_script.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/script_tag.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'attribute \"onmousedown\" not allowed here; expected attribute \"class\", \"dir\", \"id\", \"lang\", \"style\", \"title\" or \"xml:lang\"'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 10,
+      "column" : 39,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "SCP-004",
+    "severity" : "ERROR",
+    "message" : "Content file contains script which is not supported in ePub v2.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_script.xhtml",
+      "line" : 5,
+      "column" : 52,
+      "context" : "script"
+    }, {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 10,
+      "column" : 39,
+      "context" : "onmousedown"
+    }, {
+      "fileName" : "OPS/sample.js",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : 5,
+      "column" : 36,
+      "context" : "script"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "SCP-006",
+    "severity" : "USAGE",
+    "message" : "Inline scripts found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 10,
+      "column" : 39,
+      "context" : "onmousedown"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "SCP-009",
+    "severity" : "USAGE",
+    "message" : "Content file uses mouse event handlers.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 10,
+      "column" : 39,
+      "context" : "onmousedown"
+    } ],
+    "suggestion" : "Ensure that all mouse driven functionality is accessible from the keyboard and touch devices."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/eval/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/scripts/eval/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/eval/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/eval/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/scripts/eval/OPS/content.opf
new file mode 100644
index 0000000..125d184
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/eval/OPS/content.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Eval Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" properties="scripted" href="inline_script.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" properties="scripted" href="external_script.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" properties="scripted" href="script_tag.xhtml" media-type="application/xhtml+xml" />
+    <item id="sample_script" href="sample.js" media-type="text/javascript"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/eval/OPS/external_script.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/eval/OPS/external_script.xhtml
new file mode 100644
index 0000000..ff73562
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/eval/OPS/external_script.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>External Script with Eval</title>
+    <script src="sample.js" type="text/javascript"></script>
+</head>
+<body>
+<div>
+    <h1>External Script</h1>
+
+    <p>This page contains a reference to a script file in the head element.</p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/eval/OPS/inline_script.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/eval/OPS/inline_script.xhtml
new file mode 100644
index 0000000..79961d0
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/eval/OPS/inline_script.xhtml
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Inline Script using eval</title>
+</head>
+<body>
+<input type="button" onmouseover="document.body.insertAdjacentHTML('beforeend', '<br/>' + eval('2+2'));"
+       value="eval"/>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/eval/OPS/sample.js b/src/test/resources/com/adobe/epubcheck/test/scripts/eval/OPS/sample.js
new file mode 100644
index 0000000..a3272c3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/eval/OPS/sample.js
@@ -0,0 +1,7 @@
+function testEval() {
+    var str = "if ( a ) { 1+1; } else { 1+2; }";
+    var a = true;
+    return eval (str);
+}
+
+alert(testEval());
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/eval/OPS/script_tag.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/eval/OPS/script_tag.xhtml
new file mode 100644
index 0000000..7285113
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/eval/OPS/script_tag.xhtml
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Script Tag using Eval</title>
+</head>
+<body>
+
+<script>
+
+    eval("x=10;y=20;document.body.insertAdjacentHTML('beforeend', x*y)");
+    document.body.insertAdjacentHTML("beforeend", "<br/>" + eval("2+2"));
+    document.body.insertAdjacentHTML("beforeend", "<br/>" + eval(x + 17));
+
+</script>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/eval/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/scripts/eval/OPS/toc.ncx
new file mode 100644
index 0000000..616b205
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/eval/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Script Properties Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>External Script Sample</text>
+      </navLabel>
+      <content src="external_script.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/eval/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/eval/OPS/toc.xhtml
new file mode 100644
index 0000000..98357df
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/eval/OPS/toc.xhtml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="external_script.xhtml">External Script</a></li>
+        <li><a href="inline_script.xhtml">Inline Script</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/eval/mimetype b/src/test/resources/com/adobe/epubcheck/test/scripts/eval/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/eval/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/eval_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/scripts/eval_expected_results.json
new file mode 100644
index 0000000..ef032c0
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/eval_expected_results.json
@@ -0,0 +1,449 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/scripts/eval.epub",
+    "filename" : "eval.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:20",
+    "elapsedTime" : 100,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 11
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Eval Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 3,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : true,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : false,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 518,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 431,
+    "uncompressedSize" : 1116,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f51cf1d483b7292e646a3d7820eb6db2491a8ffbe4b6e713a73a67d0b8a5d33c",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 303,
+    "uncompressedSize" : 575,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d22b4cd5479c4e6b2389af1ce3db19314982cda4d81a6f5ec2faf1499bea33",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/external_script.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/inline_script.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 229,
+    "uncompressedSize" : 299,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "29ae421026c4888a97c78583fd90e55921dfe6efa964397a2558f8d6948d460",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : true,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/external_script.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 227,
+    "uncompressedSize" : 357,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2d2446772d95e9e58fc5d31029d947dd751c4d7df4063249ee366bec46a4",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : true,
+    "scriptSrc" : true,
+    "scriptTag" : true,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/sample.js" ]
+  }, {
+    "id" : "page03",
+    "fileName" : "OPS/script_tag.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 240,
+    "uncompressedSize" : 420,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "27663acec8d6ab29733444be2292e647bb0c7ee3a3cd933f803166c97f511",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : true,
+    "scriptSrc" : false,
+    "scriptTag" : true,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "sample_script",
+    "fileName" : "OPS/sample.js",
+    "media_type" : "text/javascript",
+    "compressedSize" : 97,
+    "uncompressedSize" : 133,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ae2a707a434d706c20c69ec6487fdca9fb4e39c099f685d3d1aeb72c97cd16",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : true,
+    "scriptSrc" : true,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 252,
+    "uncompressedSize" : 422,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f7f393288393b534e897f6e0fd91111774fee263ff5e795916c10cc4de4bc5d",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/external_script.xhtml", "OPS/inline_script.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_script.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "eval.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-006",
+    "severity" : "USAGE",
+    "message" : "An XHTML Named Entity was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 7,
+      "column" : 81,
+      "context" : "tHTML('beforeend', '<br/>' + eval("
+    }, {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 7,
+      "column" : 88,
+      "context" : "beforeend', '<br/>' + eval('2+2'))"
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : 11,
+      "column" : 51,
+      "context" : "tHTML(\"beforeend\", \"<br/>\" + eval("
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : 11,
+      "column" : 58,
+      "context" : "beforeend\", \"<br/>\" + eval(\"2+2\"))"
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : 12,
+      "column" : 51,
+      "context" : "tHTML(\"beforeend\", \"<br/>\" + eval("
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : 12,
+      "column" : 58,
+      "context" : "beforeend\", \"<br/>\" + eval(x + 17)"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-028",
+    "severity" : "USAGE",
+    "message" : "Input html elements should include an id.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 8,
+      "column" : 22,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-058",
+    "severity" : "USAGE",
+    "message" : "Spine item has no TOC entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/script_tag.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one TOC entry."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/inline_script.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/script_tag.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  }, {
+    "ID" : "SCP-001",
+    "severity" : "USAGE",
+    "message" : "Use of Javascript eval() function in ePub scripts is a security risk.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 8,
+      "column" : 22,
+      "context" : "eval('2+2'));"
+    }, {
+      "fileName" : "OPS/sample.js",
+      "line" : 4,
+      "column" : 10,
+      "context" : "eval (str);"
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : 11,
+      "column" : 52,
+      "context" : "eval(\"x=10;y=20;document.body.insertAdjacentHTML('beforeend'"
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : 12,
+      "column" : 52,
+      "context" : "eval(\"2+2\"));"
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : 14,
+      "column" : 1,
+      "context" : "eval(x + 17));"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "SCP-006",
+    "severity" : "USAGE",
+    "message" : "Inline scripts found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 8,
+      "column" : 22,
+      "context" : "onmouseover"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "SCP-009",
+    "severity" : "USAGE",
+    "message" : "Content file uses mouse event handlers.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 8,
+      "column" : 22,
+      "context" : "onmouseover"
+    } ],
+    "suggestion" : "Ensure that all mouse driven functionality is accessible from the keyboard and touch devices."
+  }, {
+    "ID" : "SCP-010",
+    "severity" : "USAGE",
+    "message" : "Epub 3 content file contains script.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_script.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/sample.js",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/properties/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/scripts/properties/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/properties/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/content.opf
new file mode 100644
index 0000000..b39bf96
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/content.opf
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Properties Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" properties="scripted" href="inline_script.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" properties="scripted" href="external_script.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" properties="scripted" href="script_tag.xhtml" media-type="application/xhtml+xml" />
+    <item id="page04" href="inline_script_not_marked.xhtml" media-type="application/xhtml+xml" />
+    <item id="page05" href="external_script_not_marked.xhtml" media-type="application/xhtml+xml" />
+    <item id="page06" href="script_tag_not_marked.xhtml" media-type="application/xhtml+xml" />
+    <item id="sample_script" href="sample.js" media-type="text/javascript"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+    <itemref idref="page04" />
+    <itemref idref="page05" />
+    <itemref idref="page06" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/external_script.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/external_script.xhtml
new file mode 100644
index 0000000..0983e5c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/external_script.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>External Script</title>
+    <script src="sample.js" type="text/javascript"></script>
+</head>
+<body>
+<div>
+    <h1>External Script</h1>
+
+    <p>This page contains a reference to a script file in the head element.</p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/external_script_not_marked.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/external_script_not_marked.xhtml
new file mode 100644
index 0000000..0983e5c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/external_script_not_marked.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>External Script</title>
+    <script src="sample.js" type="text/javascript"></script>
+</head>
+<body>
+<div>
+    <h1>External Script</h1>
+
+    <p>This page contains a reference to a script file in the head element.</p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/inline_script.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/inline_script.xhtml
new file mode 100644
index 0000000..71eb1d9
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/inline_script.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Script Properties</title>
+</head>
+<body>
+<div>
+    <h1>Script Properties Inline Script</h1>
+    <label id="missing_for">Click button</label><input type="button" onclick="alert('click')" value="missing id"/>
+    <input type="button" onclick="alert('noIdclick')" value="missing Id"/>
+    <input id="no_label" type="button" onclick="alert('noLabelclick')" value="missing label"/>
+    <label id="missing_input" for="nothing">No input</label>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/inline_script_not_marked.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/inline_script_not_marked.xhtml
new file mode 100644
index 0000000..518314d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/inline_script_not_marked.xhtml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Script Properties</title>
+</head>
+<body>
+<div>
+    <h1>Script Properties Inline Script</h1>
+
+    <label for="test">Tes button</label> <input id="test" type="button" onclick="alert('click')" value="click me"/>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/sample.js b/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/sample.js
new file mode 100644
index 0000000..5002b40
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/sample.js
@@ -0,0 +1,6 @@
+function hello()
+{
+    console.log("hello");
+}
+
+window.onload=hello;
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/script_tag.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/script_tag.xhtml
new file mode 100644
index 0000000..935153d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/script_tag.xhtml
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Script Properties</title>
+    <script type="text/javascript">
+        function foo() {
+            var greeting = "hello";
+            console.log(greeting);
+        }
+        window.onload = foo;
+    </script>
+</head>
+<body>
+<div>
+    <h1>Script Properties Inline Script</h1>
+
+    <p>This has script defined in the head tag</p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/script_tag_not_marked.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/script_tag_not_marked.xhtml
new file mode 100644
index 0000000..935153d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/script_tag_not_marked.xhtml
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Script Properties</title>
+    <script type="text/javascript">
+        function foo() {
+            var greeting = "hello";
+            console.log(greeting);
+        }
+        window.onload = foo;
+    </script>
+</head>
+<body>
+<div>
+    <h1>Script Properties Inline Script</h1>
+
+    <p>This has script defined in the head tag</p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/toc.ncx
new file mode 100644
index 0000000..616b205
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Script Properties Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>External Script Sample</text>
+      </navLabel>
+      <content src="external_script.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/toc.xhtml
new file mode 100644
index 0000000..98357df
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/properties/OPS/toc.xhtml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="external_script.xhtml">External Script</a></li>
+        <li><a href="inline_script.xhtml">Inline Script</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/properties/mimetype b/src/test/resources/com/adobe/epubcheck/test/scripts/properties/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/properties/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/properties_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/scripts/properties_expected_results.json
new file mode 100644
index 0000000..c4db16e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/properties_expected_results.json
@@ -0,0 +1,621 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/scripts/properties.epub",
+    "filename" : "properties.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:19",
+    "elapsedTime" : 138,
+    "nFatal" : 0,
+    "nError" : 3,
+    "nWarning" : 0,
+    "nUsage" : 11
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Properties Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 6,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : true,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : false,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 1035,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 468,
+    "uncompressedSize" : 1508,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "373ea3ca16ad8dac18254c6be1136477bbbad247f10680f5b2b27ea5d083",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 303,
+    "uncompressedSize" : 575,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d22b4cd5479c4e6b2389af1ce3db19314982cda4d81a6f5ec2faf1499bea33",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/external_script.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/inline_script.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 274,
+    "uncompressedSize" : 569,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d6853a854db0f758ab5cca5eeb1d3c542e4569af9c4225f2271ad135d994f5c",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : true,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/external_script.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 220,
+    "uncompressedSize" : 347,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ba4cdacd27ce26f31e5d9ed89ae6d668446c1dd792a60683eb4cdf746b9e73f",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : true,
+    "scriptSrc" : true,
+    "scriptTag" : true,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/sample.js" ]
+  }, {
+    "id" : "page03",
+    "fileName" : "OPS/script_tag.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 269,
+    "uncompressedSize" : 460,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "9a35487ea3c836beed3734d667b5161a68f256173f8e50c61381dae89a13d5",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : true,
+    "scriptSrc" : false,
+    "scriptTag" : true,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page04",
+    "fileName" : "OPS/inline_script_not_marked.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 220,
+    "uncompressedSize" : 340,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "8dbd313a37bd459f7a5ff7ecc1c555d32b2027efea4bcc78ca99e9209f9349db",
+    "isSpineItem" : true,
+    "spineIndex" : 3,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : true,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page05",
+    "fileName" : "OPS/external_script_not_marked.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 220,
+    "uncompressedSize" : 347,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ba4cdacd27ce26f31e5d9ed89ae6d668446c1dd792a60683eb4cdf746b9e73f",
+    "isSpineItem" : true,
+    "spineIndex" : 4,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : true,
+    "scriptSrc" : true,
+    "scriptTag" : true,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/sample.js" ]
+  }, {
+    "id" : "page06",
+    "fileName" : "OPS/script_tag_not_marked.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 269,
+    "uncompressedSize" : 460,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "9a35487ea3c836beed3734d667b5161a68f256173f8e50c61381dae89a13d5",
+    "isSpineItem" : true,
+    "spineIndex" : 5,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : true,
+    "scriptSrc" : false,
+    "scriptTag" : true,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "sample_script",
+    "fileName" : "OPS/sample.js",
+    "media_type" : "text/javascript",
+    "compressedSize" : 63,
+    "uncompressedSize" : 69,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e78b19f0e0ddad974183e9d7355ecfc247d7d13c565c475747516a177f7fb6",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : true,
+    "scriptSrc" : true,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 252,
+    "uncompressedSize" : 422,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f7f393288393b534e897f6e0fd91111774fee263ff5e795916c10cc4de4bc5d",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/external_script.xhtml", "OPS/inline_script.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-002",
+    "severity" : "USAGE",
+    "message" : "'input' HTML element is not referenced by a corresponding label element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 11,
+      "column" : 95,
+      "context" : "no_label"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_script.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/external_script_not_marked.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_script_not_marked.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/script_tag_not_marked.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "properties.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-028",
+    "severity" : "USAGE",
+    "message" : "Input html elements should include an id.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 9,
+      "column" : 115,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 10,
+      "column" : 75,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-029",
+    "severity" : "USAGE",
+    "message" : "Label html elements should include a 'for' attribute referencing the id of an input element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 9,
+      "column" : 29,
+      "context" : "label"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-014",
+    "severity" : "ERROR",
+    "message" : "The property 'scripted' should be declared in the OPF file.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_script_not_marked.xhtml",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_script_not_marked.xhtml",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    }, {
+      "fileName" : "OPS/script_tag_not_marked.xhtml",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-058",
+    "severity" : "USAGE",
+    "message" : "Spine item has no TOC entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/external_script_not_marked.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/inline_script_not_marked.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/script_tag.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/script_tag_not_marked.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one TOC entry."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/external_script_not_marked.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/inline_script.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/inline_script_not_marked.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/script_tag.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/script_tag_not_marked.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'assertion failed:\n  The for attribute does not refer to an allowed target element (expecting: button|keygen|meter|output|progress|select|textarea|input[not(@type='hidden')]).'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 12,
+      "column" : 45,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "SCP-005",
+    "severity" : "ERROR",
+    "message" : "Content file contains script but it is not marked as scripted.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_script_not_marked.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_script_not_marked.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/script_tag_not_marked.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "SCP-006",
+    "severity" : "USAGE",
+    "message" : "Inline scripts found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 9,
+      "column" : 115,
+      "context" : "onclick"
+    }, {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 10,
+      "column" : 75,
+      "context" : "onclick"
+    }, {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 11,
+      "column" : 95,
+      "context" : "onclick"
+    }, {
+      "fileName" : "OPS/inline_script_not_marked.xhtml",
+      "line" : 10,
+      "column" : 116,
+      "context" : "onclick"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "SCP-009",
+    "severity" : "USAGE",
+    "message" : "Content file uses mouse event handlers.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 9,
+      "column" : 115,
+      "context" : "onclick"
+    }, {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 10,
+      "column" : 75,
+      "context" : "onclick"
+    }, {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 11,
+      "column" : 95,
+      "context" : "onclick"
+    }, {
+      "fileName" : "OPS/inline_script_not_marked.xhtml",
+      "line" : 10,
+      "column" : 116,
+      "context" : "onclick"
+    } ],
+    "suggestion" : "Ensure that all mouse driven functionality is accessible from the keyboard and touch devices."
+  }, {
+    "ID" : "SCP-010",
+    "severity" : "USAGE",
+    "message" : "Epub 3 content file contains script.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_script.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/external_script_not_marked.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_script_not_marked.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/sample.js",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/script_tag_not_marked.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/storage/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/scripts/storage/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/storage/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/storage/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/scripts/storage/OPS/content.opf
new file mode 100644
index 0000000..823d96f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/storage/OPS/content.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Storage Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" properties="scripted" href="inline_script.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" properties="scripted" href="external_script.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" properties="scripted" href="script_tag.xhtml" media-type="application/xhtml+xml" />
+    <item id="sample_script" href="sample.js" media-type="text/javascript"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/storage/OPS/external_script.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/storage/OPS/external_script.xhtml
new file mode 100644
index 0000000..cd37064
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/storage/OPS/external_script.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>External Script using Local Storage</title>
+    <script src="sample.js" type="text/javascript"></script>
+</head>
+<body>
+<div>
+    <h1>External Script using Local Storage</h1>
+
+    <p>This page contains a reference to a script file in the head element.</p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/storage/OPS/inline_script.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/storage/OPS/inline_script.xhtml
new file mode 100644
index 0000000..f211780
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/storage/OPS/inline_script.xhtml
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Inline Script using Local Storage</title>
+</head>
+<body>
+<h1>Inline Script using Local Storage</h1>
+<input type="button" onclick="localStorage.click=true"
+       value="Local Storage"/>
+<input type="button" onclick="sessionStorage.click=true"
+       value="Session Storage"/>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/storage/OPS/sample.js b/src/test/resources/com/adobe/epubcheck/test/scripts/storage/OPS/sample.js
new file mode 100644
index 0000000..080779d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/storage/OPS/sample.js
@@ -0,0 +1,14 @@
+function testStorage() {
+    if(typeof(Storage)!=="undefined")
+    {
+        localStorage.lastname="Noble";
+        sessionStorage.firstName="Donna";
+        return + localStorage.lastname + ", " + sessionStorage.firstName;
+    }
+    else
+    {
+        document.getElementById("result").innerHTML="Sorry, your browser does not support web storage...";
+    }
+}
+
+alert(testEval());
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/storage/OPS/script_tag.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/storage/OPS/script_tag.xhtml
new file mode 100644
index 0000000..ef1baf3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/storage/OPS/script_tag.xhtml
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Script Tag using Local Storage</title>
+</head>
+<body>
+<h1>Script Tag using Local Storage</h1>
+<div id="result"></div>
+<script>
+    if(typeof(Storage)!=="undefined")
+    {
+        localStorage.lastname="Smith";
+        sessionStorage.firstName="Sarah Jane";
+        document.getElementById("result").innerHTML="Name: " + localStorage.lastname + ", " + sessionStorage.firstName;
+    }
+    else
+    {
+        document.getElementById("result").innerHTML="Sorry, your browser does not support web storage...";
+    }
+</script>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/storage/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/scripts/storage/OPS/toc.ncx
new file mode 100644
index 0000000..616b205
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/storage/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Script Properties Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>External Script Sample</text>
+      </navLabel>
+      <content src="external_script.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/storage/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/storage/OPS/toc.xhtml
new file mode 100644
index 0000000..98357df
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/storage/OPS/toc.xhtml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="external_script.xhtml">External Script</a></li>
+        <li><a href="inline_script.xhtml">Inline Script</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/storage/mimetype b/src/test/resources/com/adobe/epubcheck/test/scripts/storage/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/storage/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/storage_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/scripts/storage_expected_results.json
new file mode 100644
index 0000000..d4cc15a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/storage_expected_results.json
@@ -0,0 +1,474 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/scripts/storage.epub",
+    "filename" : "storage.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:20",
+    "elapsedTime" : 100,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 11
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Storage Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 3,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : true,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : false,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 791,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 432,
+    "uncompressedSize" : 1119,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "807b7e2d3dd78df985c3b398c74da8a2b886424bd105d6be31e72ef3b21d9ea",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 303,
+    "uncompressedSize" : 575,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d22b4cd5479c4e6b2389af1ce3db19314982cda4d81a6f5ec2faf1499bea33",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/external_script.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/inline_script.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 207,
+    "uncompressedSize" : 394,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5c213a3dc93d17152c3b0ddc4aa9d997bb7ae67944c40cfca26453f8dfdc019",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : true,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/external_script.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 232,
+    "uncompressedSize" : 387,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d17938ce518b268dcda0ff64d315eb1eac5fe469c08562e5466e44209dd3c8",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : true,
+    "scriptSrc" : true,
+    "scriptTag" : true,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/sample.js" ]
+  }, {
+    "id" : "page03",
+    "fileName" : "OPS/script_tag.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 335,
+    "uncompressedSize" : 639,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1de869e1e2db9510d71fb78220296d2b08c272e7dff08a7c7b6abbc26476db",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : true,
+    "scriptSrc" : false,
+    "scriptTag" : true,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "sample_script",
+    "fileName" : "OPS/sample.js",
+    "media_type" : "text/javascript",
+    "compressedSize" : 222,
+    "uncompressedSize" : 379,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c18e18c241bce6f6a7e167db5b9095e3a3d99bde54ca3b61651463f21546a71d",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : true,
+    "scriptSrc" : true,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 252,
+    "uncompressedSize" : 422,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f7f393288393b534e897f6e0fd91111774fee263ff5e795916c10cc4de4bc5d",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/external_script.xhtml", "OPS/inline_script.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_script.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "storage.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-028",
+    "severity" : "USAGE",
+    "message" : "Input html elements should include an id.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 9,
+      "column" : 31,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 11,
+      "column" : 33,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-058",
+    "severity" : "USAGE",
+    "message" : "Spine item has no TOC entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/script_tag.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one TOC entry."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/inline_script.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/script_tag.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  }, {
+    "ID" : "SCP-003",
+    "severity" : "USAGE",
+    "message" : "Local and Session Storage is not currently supported.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 9,
+      "column" : 31,
+      "context" : "localStorage.click=true"
+    }, {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 11,
+      "column" : 33,
+      "context" : "sessionStorage.click=true"
+    }, {
+      "fileName" : "OPS/sample.js",
+      "line" : 4,
+      "column" : 8,
+      "context" : "localStorage.lastname=\"Noble\";"
+    }, {
+      "fileName" : "OPS/sample.js",
+      "line" : 5,
+      "column" : 8,
+      "context" : "sessionStorage.firstName=\"Donna\";"
+    }, {
+      "fileName" : "OPS/sample.js",
+      "line" : 6,
+      "column" : 17,
+      "context" : "localStorage.lastname + \", \" + sessionStorage.firstName;"
+    }, {
+      "fileName" : "OPS/sample.js",
+      "line" : 6,
+      "column" : 48,
+      "context" : "sessionStorage.firstName;"
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : 13,
+      "column" : 47,
+      "context" : "localStorage.lastname=\"Smith\";"
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : 13,
+      "column" : 47,
+      "context" : "sessionStorage.firstName=\"Sarah Jane\";"
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : 15,
+      "column" : 6,
+      "context" : "localStorage.lastname + \", \" + sessionStorage.firstName;"
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : 15,
+      "column" : 6,
+      "context" : "sessionStorage.firstName;"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "SCP-006",
+    "severity" : "USAGE",
+    "message" : "Inline scripts found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 9,
+      "column" : 31,
+      "context" : "onclick"
+    }, {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 11,
+      "column" : 33,
+      "context" : "onclick"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "SCP-007",
+    "severity" : "USAGE",
+    "message" : "Script references 'innerHtml'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/sample.js",
+      "line" : 10,
+      "column" : 42,
+      "context" : "innerHTML=\"Sorry, your browser does not support web storage."
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : 15,
+      "column" : 6,
+      "context" : "innerHTML=\"Name: \" + localStorage.lastname + \", \" + sessionS"
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : 19,
+      "column" : 6,
+      "context" : "innerHTML=\"Sorry, your browser does not support web storage."
+    } ],
+    "suggestion" : "Use a DOM instead."
+  }, {
+    "ID" : "SCP-009",
+    "severity" : "USAGE",
+    "message" : "Content file uses mouse event handlers.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 9,
+      "column" : 31,
+      "context" : "onclick"
+    }, {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 11,
+      "column" : 33,
+      "context" : "onclick"
+    } ],
+    "suggestion" : "Ensure that all mouse driven functionality is accessible from the keyboard and touch devices."
+  }, {
+    "ID" : "SCP-010",
+    "severity" : "USAGE",
+    "message" : "Epub 3 content file contains script.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_script.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/sample.js",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/unused/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/scripts/unused/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/unused/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/unused/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/scripts/unused/OPS/content.opf
new file mode 100644
index 0000000..8bac425
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/unused/OPS/content.opf
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Hyperlink Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" properties="scripted" href="inline_script.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" properties="scripted" href="external_script.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" properties="scripted" href="script_tag.xhtml" media-type="application/xhtml+xml" />
+    <item id="sample_script" href="sample.js" media-type="text/javascript"/>
+    <item id="unused_script" href="unused.js" media-type="text/javascript"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/unused/OPS/external_script.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/unused/OPS/external_script.xhtml
new file mode 100644
index 0000000..c4965e5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/unused/OPS/external_script.xhtml
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>External Script</title>
+    <script src="sample.js" type="text/javascript"></script>
+    <script type="text/javascript" src="unused.js"></script>
+    <script type="text/javascript">
+        function sayHi()
+        {
+            var sample = new epubcheck.test.Sample("Dave");
+            sample.sayHello();
+        }
+    </script>
+</head>
+<body>
+<div>
+    <h1>External Script</h1>
+
+    <p>This page contains a reference to a script file in the head element.</p>
+    <input type="button" onclick="sayHi()"/>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/unused/OPS/inline_script.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/unused/OPS/inline_script.xhtml
new file mode 100644
index 0000000..823c869
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/unused/OPS/inline_script.xhtml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Inline Script Unused</title>
+
+</head>
+<body>
+<div>
+    <p>No way to have unused script in inline functions.</p>
+    <input type="button" onclick="alert('click')" value="click me"/>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/unused/OPS/sample.js b/src/test/resources/com/adobe/epubcheck/test/scripts/unused/OPS/sample.js
new file mode 100644
index 0000000..015c6dc
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/unused/OPS/sample.js
@@ -0,0 +1,20 @@
+var epubcheck = epubcheck || {};
+epubcheck.test = epubcheck.test || {};
+epubcheck.test.Sample = {};
+epubcheck.test.Unused = {};
+
+epubcheck.test.Sample = function (name) {
+    this.name = name;
+};
+
+epubcheck.test.Sample.prototype.sayHello = function () {
+    window.alert("hello" + this.name);
+};
+
+epubcheck.test.Unused = function (name) {
+    this.name = name;
+};
+
+epubcheck.test.Unused.prototype.sayHello = function () {
+    window.alert("Hello " + this.name);
+};
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/unused/OPS/script_tag.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/unused/OPS/script_tag.xhtml
new file mode 100644
index 0000000..70d8509
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/unused/OPS/script_tag.xhtml
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Script Properties</title>
+    <script type="text/javascript">
+        var epubcheck = epubcheck || {};
+        epubcheck.test = epubcheck.test || {};
+        epubcheck.test.Sample = {};
+        epubcheck.test.Unused = {};
+
+        epubcheck.test.Sample = function (name) {
+            this.name = name;
+        };
+
+        epubcheck.test.Sample.prototype.sayHello = function () {
+            window.alert("hello" + this.name);
+        };
+
+        epubcheck.test.Unused = function (name) {
+            this.name = name;
+        };
+
+        epubcheck.test.Unused.prototype.sayHello = function () {
+            window.alert("Hello " + this.name);
+        };
+        windows.onload = function(){var used = new epubcheck.test.Sample("Marsha"); used.sayHello();};
+    </script>
+</head>
+<body>
+<div>
+    <h1>Script Properties Inline Script</h1>
+
+    <p>This has script defined in the head tag</p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/unused/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/scripts/unused/OPS/toc.ncx
new file mode 100644
index 0000000..616b205
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/unused/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Script Properties Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>External Script Sample</text>
+      </navLabel>
+      <content src="external_script.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/unused/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/scripts/unused/OPS/toc.xhtml
new file mode 100644
index 0000000..98357df
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/unused/OPS/toc.xhtml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="external_script.xhtml">External Script</a></li>
+        <li><a href="inline_script.xhtml">Inline Script</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/unused/OPS/unused.js b/src/test/resources/com/adobe/epubcheck/test/scripts/unused/OPS/unused.js
new file mode 100644
index 0000000..5002b40
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/unused/OPS/unused.js
@@ -0,0 +1,6 @@
+function hello()
+{
+    console.log("hello");
+}
+
+window.onload=hello;
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/unused/mimetype b/src/test/resources/com/adobe/epubcheck/test/scripts/unused/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/unused/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/scripts/unused_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/scripts/unused_expected_results.json
new file mode 100644
index 0000000..d13075b
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/scripts/unused_expected_results.json
@@ -0,0 +1,422 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/scripts/unused.epub",
+    "filename" : "unused.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:19",
+    "elapsedTime" : 103,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 9
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Hyperlink Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 3,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : true,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : false,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 1276,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 445,
+    "uncompressedSize" : 1198,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1326d1a7422e5265aa92a6d6aa4392ff29ff763dd252dc92c72743a89df5b0",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 303,
+    "uncompressedSize" : 575,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d22b4cd5479c4e6b2389af1ce3db19314982cda4d81a6f5ec2faf1499bea33",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/external_script.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/inline_script.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 215,
+    "uncompressedSize" : 312,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "6864486592ff14a758429a2b797506354c378a1bf9d697d249640318b7b1414",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : true,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/external_script.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 331,
+    "uncompressedSize" : 639,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b3bc278c19cf0bdf52829a52c3736b2b253ac6e8e9ee591eff67dd48be2c3",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : true,
+    "scriptSrc" : true,
+    "scriptTag" : true,
+    "scriptInline" : true,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/unused.js", "OPS/sample.js" ]
+  }, {
+    "id" : "page03",
+    "fileName" : "OPS/script_tag.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 380,
+    "uncompressedSize" : 1021,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c56732acf022d42ede5973d902ce2bf4bbf3923ca2f6454ac5ba47ff7e8f5f",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : true,
+    "scriptSrc" : false,
+    "scriptTag" : true,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "sample_script",
+    "fileName" : "OPS/sample.js",
+    "media_type" : "text/javascript",
+    "compressedSize" : 158,
+    "uncompressedSize" : 464,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ec56c01de223856f1e77840617f8ffed1b847b459a860ab9478543b7e596c0",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : true,
+    "scriptSrc" : true,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 252,
+    "uncompressedSize" : 422,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f7f393288393b534e897f6e0fd91111774fee263ff5e795916c10cc4de4bc5d",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/external_script.xhtml", "OPS/inline_script.xhtml" ]
+  }, {
+    "id" : "unused_script",
+    "fileName" : "OPS/unused.js",
+    "media_type" : "text/javascript",
+    "compressedSize" : 63,
+    "uncompressedSize" : 69,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e78b19f0e0ddad974183e9d7355ecfc247d7d13c565c475747516a177f7fb6",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : true,
+    "scriptSrc" : true,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_script.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "unused.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-028",
+    "severity" : "USAGE",
+    "message" : "Input html elements should include an id.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_script.xhtml",
+      "line" : 20,
+      "column" : 45,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 10,
+      "column" : 69,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-058",
+    "severity" : "USAGE",
+    "message" : "Spine item has no TOC entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/script_tag.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one TOC entry."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/inline_script.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/script_tag.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  }, {
+    "ID" : "SCP-006",
+    "severity" : "USAGE",
+    "message" : "Inline scripts found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_script.xhtml",
+      "line" : 20,
+      "column" : 45,
+      "context" : "onclick"
+    }, {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 10,
+      "column" : 69,
+      "context" : "onclick"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "SCP-009",
+    "severity" : "USAGE",
+    "message" : "Content file uses mouse event handlers.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_script.xhtml",
+      "line" : 20,
+      "column" : 45,
+      "context" : "onclick"
+    }, {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : 10,
+      "column" : 69,
+      "context" : "onclick"
+    } ],
+    "suggestion" : "Ensure that all mouse driven functionality is accessible from the keyboard and touch devices."
+  }, {
+    "ID" : "SCP-010",
+    "severity" : "USAGE",
+    "message" : "Epub 3 content file contains script.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_script.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_script.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/sample.js",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/script_tag.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/unused.js",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/toc/fragments/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/toc/fragments/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/toc/fragments/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/toc/fragments/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/toc/fragments/OPS/content.opf
new file mode 100644
index 0000000..c2800f4
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/toc/fragments/OPS/content.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>TOC with fragments</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="page02.xhtml" media-type="application/xhtml+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/toc/fragments/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/toc/fragments/OPS/page01.xhtml
new file mode 100644
index 0000000..71da08a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/toc/fragments/OPS/page01.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Fragments</title>
+</head>
+<body>
+  <div>
+    <h1 id="sec1">Section 1</h1>
+
+    <p>Section1</p>
+      <h2 id="sec1.1">Section 1.1</h2>
+      <h2 id="sec1.2">Section 1.2</h2>
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/toc/fragments/OPS/page02.xhtml b/src/test/resources/com/adobe/epubcheck/test/toc/fragments/OPS/page02.xhtml
new file mode 100644
index 0000000..1f296f7
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/toc/fragments/OPS/page02.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Fragments</title>
+</head>
+<body>
+  <div>
+    <h1 id="sec2">Section 2</h1>
+
+    <p>Section1</p>
+      <h2 id="sec2.1">Section 2.1</h2>
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/toc/fragments/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/toc/fragments/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/toc/fragments/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/toc/fragments/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/toc/fragments/OPS/toc.xhtml
new file mode 100644
index 0000000..376fd66
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/toc/fragments/OPS/toc.xhtml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:opf="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+    <style type="text/css">
+        ol.sublist{list-style-type: lower-alpha;}
+    </style>
+</head>
+<body>
+<nav opf:type="toc">
+    <h1>Table of Contents</h1>
+    <ol>
+        <li><a href="page01.xhtml#sec1">Section 1</a>
+            <ol class="sublist">
+                <li><a href="page01.xhtml#sec1.1">Section 1.1</a></li>
+                <li><a href="page01.xhtml#sec1.2">Section 1.2</a></li>
+            </ol>
+        </li>
+        <li><a href="page02.xhtml#sec2">Section 2</a>
+            <ol class="sublist">
+                <li><a href="page02.xhtml#sec2.1">Section 2.1</a></li>
+            </ol>
+        </li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/toc/fragments/mimetype b/src/test/resources/com/adobe/epubcheck/test/toc/fragments/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/toc/fragments/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/toc/fragments_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/toc/fragments_expected_results.json
new file mode 100644
index 0000000..aa44ad8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/toc/fragments_expected_results.json
@@ -0,0 +1,251 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/toc/fragments.epub",
+    "filename" : "fragments.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:23",
+    "elapsedTime" : 90,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 4
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "TOC with fragments",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 2,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 472,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 368,
+    "uncompressedSize" : 844,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "93529d53f99344fcf7478f72938b9c8dbfc1470aa14f22ca6ac6545f9c0b660",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 293,
+    "uncompressedSize" : 556,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7e983f3695b1eea13cb6d3e7aacb5d84de767f2ccda456f5154d35c5f9b012",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 175,
+    "uncompressedSize" : 306,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ec8ea378d90aed3bae50e808f5632638b984e6168eb774b3660bc21a31026",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/page02.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 170,
+    "uncompressedSize" : 267,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7daa64ba631569878e76e6597e3b4de47ae732c448b9d0e54a5ed130b4dab2",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 349,
+    "uncompressedSize" : 859,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "6f8a87eb2dda45a9dd9317477ab31cde50beba666e7e56318c8beeda3d19e28a",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page02.xhtml", "OPS/page01.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page02.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "fragments.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page02.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/toc/invalid_ncx/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/toc/invalid_ncx/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/toc/invalid_ncx/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/toc/invalid_ncx/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/toc/invalid_ncx/OPS/content.opf
new file mode 100644
index 0000000..5f10b45
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/toc/invalid_ncx/OPS/content.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Missing TOC Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/toc/invalid_ncx/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/toc/invalid_ncx/OPS/page01.xhtml
new file mode 100644
index 0000000..7d387d1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/toc/invalid_ncx/OPS/page01.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>No Toc</title>
+</head>
+<body>
+  <div>
+    <h1>Missing ToC</h1>
+
+    <p>The opf file for this epub is missing an item in the manifest marked as nav. Since this is an epub3, this item is required.</p>
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/toc/invalid_ncx/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/toc/invalid_ncx/OPS/toc.ncx
new file mode 100644
index 0000000..7fccd7f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/toc/invalid_ncx/OPS/toc.ncx
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	    <text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+    <navPoint id="np-2" playOrder="5">
+      <navLabel>
+    	<text>Missing ToC Sample</text>
+      </navLabel>
+    </navPoint>
+    <navPoint id="np-3" playOrder="1">
+      <navLabel>
+        <text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="toc.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/toc/invalid_ncx/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/toc/invalid_ncx/OPS/toc.xhtml
new file mode 100644
index 0000000..f17be2a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/toc/invalid_ncx/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="page01.xhtml">Page 1</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/toc/invalid_ncx/mimetype b/src/test/resources/com/adobe/epubcheck/test/toc/invalid_ncx/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/toc/invalid_ncx/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/toc/invalid_ncx_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/toc/invalid_ncx_expected_results.json
new file mode 100644
index 0000000..c06d1dc
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/toc/invalid_ncx_expected_results.json
@@ -0,0 +1,265 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/toc/invalid_ncx.epub",
+    "filename" : "invalid_ncx.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:23",
+    "elapsedTime" : 82,
+    "nFatal" : 0,
+    "nError" : 3,
+    "nWarning" : 1,
+    "nUsage" : 3
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Missing TOC Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 223,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 362,
+    "uncompressedSize" : 738,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2a3c9d65eedc19ceab372c2c8cdefba6996d60d7f8d88e8cc6bb43e6b6a222b1",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 317,
+    "uncompressedSize" : 809,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5a1d94ba3bc2fd3f2efbb43256558e9fec417e67d189205833bfcc88d3820",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/toc.xhtml", "OPS/page01.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 223,
+    "uncompressedSize" : 333,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "67d4de685f8c7abbef48e947b7b2e0b49c164c753eecbb7c4534ba43661d15",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 228,
+    "uncompressedSize" : 339,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c1f5f92fde356c7bbbc841fce3f768289bf47019fdf46fc33b54273fa0f0cf4",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : 1,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "invalid_ncx.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'assertion failed:\n  identical playOrder values for navPoint/navTarget/pageTarget that do not refer to same target'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 12,
+      "column" : 39,
+      "context" : null
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 23,
+      "column" : 39,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'assertion failed:\n  playOrder sequence has gaps'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 18,
+      "column" : 39,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'element \"navPoint\" incomplete; missing required element \"content\"'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 22,
+      "column" : 16,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-011",
+    "severity" : "WARNING",
+    "message" : "Found a reference to a resource that is not a spine item.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 27,
+      "column" : 33,
+      "context" : "OPS/toc.xhtml"
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/toc/missing_epub_type/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/toc/missing_epub_type/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/toc/missing_epub_type/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/toc/missing_epub_type/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/toc/missing_epub_type/OPS/content.opf
new file mode 100644
index 0000000..5f10b45
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/toc/missing_epub_type/OPS/content.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Missing TOC Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/toc/missing_epub_type/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/toc/missing_epub_type/OPS/page01.xhtml
new file mode 100644
index 0000000..08aeab5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/toc/missing_epub_type/OPS/page01.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>No epub type attribute in the toc</title>
+</head>
+<body>
+  <div>
+    <h1>Missing epub:type in Toc file</h1>
+
+    <p>The toc (nav) file is missing the epub:type attribute.</p>
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/toc/missing_epub_type/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/toc/missing_epub_type/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/toc/missing_epub_type/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/toc/missing_epub_type/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/toc/missing_epub_type/OPS/toc.xhtml
new file mode 100644
index 0000000..8fe21e2
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/toc/missing_epub_type/OPS/toc.xhtml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav>
+    <h1>Table of Contents</h1>
+    <ol>
+        <li><a href="page01.xhtml">Page 1</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/toc/missing_epub_type/mimetype b/src/test/resources/com/adobe/epubcheck/test/toc/missing_epub_type/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/toc/missing_epub_type/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/toc/missing_epub_type_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/toc/missing_epub_type_expected_results.json
new file mode 100644
index 0000000..3a1f9d8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/toc/missing_epub_type_expected_results.json
@@ -0,0 +1,241 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/toc/missing_epub_type.epub",
+    "filename" : "missing_epub_type.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:23",
+    "elapsedTime" : 85,
+    "nFatal" : 0,
+    "nError" : 1,
+    "nWarning" : 0,
+    "nUsage" : 4
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Missing TOC Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 221,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 362,
+    "uncompressedSize" : 738,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2a3c9d65eedc19ceab372c2c8cdefba6996d60d7f8d88e8cc6bb43e6b6a222b1",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 293,
+    "uncompressedSize" : 556,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7e983f3695b1eea13cb6d3e7aacb5d84de767f2ccda456f5154d35c5f9b012",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 201,
+    "uncompressedSize" : 309,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cd21287c82c9983c37ffd8f03e1dbba727440d06e89784fda673fb9b493f173",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 204,
+    "uncompressedSize" : 312,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "722620a45cd880fab48c6fcf866bfd3fc467aa0eba6c75afa87fd69daec80",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "missing_epub_type.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-058",
+    "severity" : "USAGE",
+    "message" : "Spine item has no TOC entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/page01.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one TOC entry."
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'assertion failed:\n  Exactly one 'toc' nav element must be present'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : 8,
+      "column" : 7,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media/OPS/audio.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media/OPS/audio.xhtml
new file mode 100644
index 0000000..b8e0c32
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media/OPS/audio.xhtml
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>External Audio Source</title>
+</head>
+<body>
+<h1>External Audio</h1>
+
+<div id="audio_frame">
+    <audio controls="controls" autoplay="autoplay">
+        <source src="http://wwww.thisdomaindoesntexist.org/books/media/sample.m4a" type="audio/mpeg"/>
+        Audio is not supported.
+    </audio>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media/OPS/content.opf
new file mode 100644
index 0000000..435ee46
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media/OPS/content.opf
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Video Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" properties="remote-resources" href="video.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" properties="remote-resources" href="audio.xhtml" media-type="application/xhtml+xml" />
+    <item id="image01" href="sample.jpg" media-type="image/jpeg"/>
+    <item id="remoteVideo" href="http://wwww.thisdomaindoesntexist.org/books/media/sample.mp4" media-type="video/mp4"/>
+    <item id="remoteAudio" href="http://wwww.thisdomaindoesntexist.org/books/media/sample.m4a" media-type="audio/m4a"/>
+    <item id="remoteAudioBadScheme" href="wakawaka://wwww.thisdomaindoesntexist.org/books/media/sample.m4a" media-type="audio/m4a"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media/OPS/sample.jpg b/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media/OPS/sample.jpg
new file mode 100644
index 0000000..1c9e32b
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media/OPS/sample.jpg differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media/OPS/toc.ncx
new file mode 100644
index 0000000..2369dfa
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>External Media Sample Book</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Cover</text>
+      </navLabel>
+      <content src="video.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media/OPS/toc.xhtml
new file mode 100644
index 0000000..e748623
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media/OPS/toc.xhtml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="video.xhtml">External Video</a></li>
+        <li><a href="audio.xhtml">External Audio</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media/OPS/video.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media/OPS/video.xhtml
new file mode 100644
index 0000000..6157d4a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media/OPS/video.xhtml
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>External Video Source</title>
+</head>
+<body>
+<h1>External Video</h1>
+
+<div id="video_frame">
+    <video id="video" controls="controls" poster="sample.jpg" width="720">
+        <source src="http://wwww.thisdomaindoesntexist.org/books/media/sample.mp4" type="video/mp4"/>
+        Video is not supported.
+    </video>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media/mimetype b/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media_expected_results.json
new file mode 100644
index 0000000..d1a7a88
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/External_media_expected_results.json
@@ -0,0 +1,339 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/xhtml/External_media.epub",
+    "filename" : "External_media.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:28",
+    "elapsedTime" : 105,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 4
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Video Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 2,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : false,
+    "hasAudio" : true,
+    "hasVideo" : true,
+    "charsCount" : 286,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 495,
+    "uncompressedSize" : 1341,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3eba833fb8f92c83d48c2a3b682aaf6655dd2440b4194c42f5cfcd25e6ee8",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "image01",
+    "fileName" : "OPS/sample.jpg",
+    "media_type" : "image/jpeg",
+    "compressedSize" : 8521,
+    "uncompressedSize" : 20337,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2b32ce706c849b90805019fb8f142c8ee67d6adffea4902aeaba89127d3636",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 296,
+    "uncompressedSize" : 552,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1d3c3b2f5650c3c66f67c2f86ed8ec3a088d8d415a048786cb3bfa29a5ba6a5",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/video.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/video.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 283,
+    "uncompressedSize" : 462,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "17ffb98f5426882dbf20ff9b8de68dc318eba1c8aab4fe7aacaa5fca9445b",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : true,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/sample.jpg", "http://wwww.thisdomaindoesntexist.org/books/media/sample.mp4" ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/audio.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 272,
+    "uncompressedSize" : 440,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d16e7afd6eebaddf4a302916226e4979bb10288d89f691e3f2956c313f85f2",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : true,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "http://wwww.thisdomaindoesntexist.org/books/media/sample.m4a" ]
+  }, {
+    "id" : "remoteAudio",
+    "fileName" : "http://wwww.thisdomaindoesntexist.org/books/media/sample.m4a",
+    "media_type" : "audio/m4a",
+    "compressedSize" : 0,
+    "uncompressedSize" : 0,
+    "compressionMethod" : null,
+    "checkSum" : null,
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "remoteAudioBadScheme",
+    "fileName" : "wakawaka://wwww.thisdomaindoesntexist.org/books/media/sample.m4a",
+    "media_type" : "audio/m4a",
+    "compressedSize" : 0,
+    "uncompressedSize" : 0,
+    "compressionMethod" : null,
+    "checkSum" : null,
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "remoteVideo",
+    "fileName" : "http://wwww.thisdomaindoesntexist.org/books/media/sample.mp4",
+    "media_type" : "video/mp4",
+    "compressedSize" : 0,
+    "uncompressedSize" : 0,
+    "compressionMethod" : null,
+    "checkSum" : null,
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 245,
+    "uncompressedSize" : 404,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "85629dee5d62c3a48bce2e8578c4bcbaf0fac7452b745e555242b5c01315",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/video.xhtml", "OPS/audio.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/audio.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/video.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "External_media.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/audio.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/OPS/ImageMap_target.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/OPS/ImageMap_target.xhtml
new file mode 100644
index 0000000..4c847cc
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/OPS/ImageMap_target.xhtml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>About the XYZ Reader</title>
+</head>
+<body>
+<h1>The Reader</h1>
+
+<h3>by XYZ</h3>
+<table style="page-break-inside: avoid;">
+    <tr>
+        <td>
+            <p id="TheReaderPlusPlus">ReaderPlusPlus is ultra-portable and small enough to slip into your purse, backpack, or briefcase.
+                Can’t plug
+                in? No problem. Get up to 10 hours of use on a single charge.
+            </p>
+            <a href="Navigation_ImageMap.xhtml">< Back</a>
+        </td>
+    </tr>
+    <tr>
+        <td>
+            <p id="TheReaderPlus">Breakthrough E Ink® display for the best just-like-paper reading—even in bright sun—with our
+                proprietary
+                Best-Text Technology™ that produces super-sharp fonts. Hands down, it's the best Reader.</p>
+            <a href="Navigation_ImageMap.xhtml">< Back</a>
+        </td>
+    </tr>
+    <tr>
+        <td>
+            <p id="TheReader">The Reader's display is best-in-class, with brilliant color, ultra-crisp definition, and minimal
+                glare.
+                Pictures and video look spectacular from every angle and each word is crystal clear.</p>
+            <a href="Navigation_ImageMap.xhtml">< Back</a>
+        </td>
+    </tr>
+</table>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/OPS/Navigation_ImageMap.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/OPS/Navigation_ImageMap.xhtml
new file mode 100644
index 0000000..0ee707f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/OPS/Navigation_ImageMap.xhtml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Image-map with Navigation</title>
+</head>
+<body>
+<div style="text-align:center;">
+    <h1>Image-map with Navigation</h1>
+
+    <p>Clicking on a hotspot in the image-map below will navigate to another page in the book.</p>
+
+    <div style="text-align:center; margin-left:auto; margin-right:auto;">
+        <img id="Devices_image" src="images/devices2.jpg" usemap="#Device_Map" width="479" height="312"
+             alt=""/>
+        <map id="Device_Map">
+            <area shape="rect" coords="55,101,129,284" href="ImageMap_target.xhtml#TheReaderPlus" alt="Touch" title="Touch"/>
+            <area shape="rect" coords="153,23,270,279" href="ImageMap_target.xhtml#TheReaderPlusPlus" title="HDPlus"/>
+            <area shape="rect" coords="273,79,395,273" href="ImageMap_target.xhtml#TheReader"/>
+        </map>
+    </div>
+</div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/OPS/content.opf
new file mode 100644
index 0000000..b15ec58
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/OPS/content.opf
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Missing TOC Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="Navigation_ImageMap.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" href="ImageMap_target.xhtml" media-type="application/xhtml+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="devices2-image" href="images/devices2.jpg" media-type="image/jpeg"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" linear="no" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/OPS/images/devices2.jpg b/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/OPS/images/devices2.jpg
new file mode 100644
index 0000000..4ef3d03
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/OPS/images/devices2.jpg differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/OPS/page01.xhtml
new file mode 100644
index 0000000..8679d63
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/OPS/page01.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Page 01</title>
+</head>
+<body>
+<div>
+    <h1>Page 01</h1>
+
+    <p>The following image has no alt attribute.</p>
+    <img id="Devices_image" src="images/devices2.jpg" width="479" height="312"/>
+
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/OPS/toc.xhtml
new file mode 100644
index 0000000..f17be2a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="page01.xhtml">Page 1</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/mimetype b/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility_expected_results.json
new file mode 100644
index 0000000..4a079d2
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/accessibility_expected_results.json
@@ -0,0 +1,417 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/xhtml/accessibility.epub",
+    "filename" : "accessibility.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:29",
+    "elapsedTime" : 140,
+    "nFatal" : 0,
+    "nError" : 2,
+    "nWarning" : 0,
+    "nUsage" : 8
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Missing TOC Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 3,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 1270,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "devices2-image",
+    "fileName" : "OPS/images/devices2.jpg",
+    "media_type" : "image/jpeg",
+    "compressedSize" : 35154,
+    "uncompressedSize" : 36298,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e59ade79b60e843deb41a616f3b826f327808968a23a3e77ef4c5f9562e34",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 443,
+    "uncompressedSize" : 1077,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "aaddade2cdd082cd68c3808a16e113a73c76ed305e71a029aa68acdc0bc7b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 293,
+    "uncompressedSize" : 556,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7e983f3695b1eea13cb6d3e7aacb5d84de767f2ccda456f5154d35c5f9b012",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 220,
+    "uncompressedSize" : 325,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d8e9e6e51d62cba8e90a7ad2d15df1aaa60c911881a6848ab2b701a314632a7",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/images/devices2.jpg" ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/Navigation_ImageMap.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 479,
+    "uncompressedSize" : 983,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b75ea4b3331096cc1f2c3495a01239df4c9cec4f3959e69097e39a5e7bdc57b1",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/images/devices2.jpg" ]
+  }, {
+    "id" : "page03",
+    "fileName" : "OPS/ImageMap_target.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 664,
+    "uncompressedSize" : 1400,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "79cc5f97a3dce22616773f75149a54b814fbfcfa3da7e5582bf9d7e1e1370ad",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/Navigation_ImageMap.xhtml" ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 228,
+    "uncompressedSize" : 339,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c1f5f92fde356c7bbbc841fce3f768289bf47019fdf46fc33b54273fa0f0cf4",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-001",
+    "severity" : "USAGE",
+    "message" : "'img' or 'area' HTML element has no 'alt' attribute.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/Navigation_ImageMap.xhtml",
+      "line" : 18,
+      "column" : 119,
+      "context" : "area"
+    }, {
+      "fileName" : "OPS/Navigation_ImageMap.xhtml",
+      "line" : 19,
+      "column" : 96,
+      "context" : "area"
+    }, {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : 11,
+      "column" : 81,
+      "context" : "img"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/ImageMap_target.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/Navigation_ImageMap.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "accessibility.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-013",
+    "severity" : "USAGE",
+    "message" : "Content file contains at least one inline style declaration.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/ImageMap_target.xhtml",
+      "line" : 11,
+      "column" : 42,
+      "context" : "page-break-inside: avoid;"
+    }, {
+      "fileName" : "OPS/Navigation_ImageMap.xhtml",
+      "line" : 8,
+      "column" : 33,
+      "context" : "text-align:center;"
+    }, {
+      "fileName" : "OPS/Navigation_ImageMap.xhtml",
+      "line" : 13,
+      "column" : 74,
+      "context" : "text-align:center; margin-left:auto; margin-right:auto;"
+    } ],
+    "suggestion" : "Inline styles are not compatible with accessibility settings and display personalization. Use CSS Styles instead."
+  }, {
+    "ID" : "HTM-006",
+    "severity" : "USAGE",
+    "message" : "An XHTML Named Entity was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/ImageMap_target.xhtml",
+      "line" : 18,
+      "column" : 48,
+      "context" : "ion_ImageMap.xhtml\">< Back</a"
+    }, {
+      "fileName" : "OPS/ImageMap_target.xhtml",
+      "line" : 26,
+      "column" : 48,
+      "context" : "ion_ImageMap.xhtml\">< Back</a"
+    }, {
+      "fileName" : "OPS/ImageMap_target.xhtml",
+      "line" : 34,
+      "column" : 48,
+      "context" : "ion_ImageMap.xhtml\">< Back</a"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-058",
+    "severity" : "USAGE",
+    "message" : "Spine item has no TOC entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/ImageMap_target.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/Navigation_ImageMap.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one TOC entry."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/ImageMap_target.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/Navigation_ImageMap.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'element \"area\" missing required attribute \"alt\"'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/Navigation_ImageMap.xhtml",
+      "line" : 18,
+      "column" : 119,
+      "context" : null
+    }, {
+      "fileName" : "OPS/Navigation_ImageMap.xhtml",
+      "line" : 19,
+      "column" : 96,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'element \"map\" missing required attribute \"name\"'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/Navigation_ImageMap.xhtml",
+      "line" : 16,
+      "column" : 30,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/content.opf
new file mode 100644
index 0000000..64eb9a5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/content.opf
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>DTD Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" href="internal_dtd.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="external_dtd.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" href="inline_dtd.xhtml" media-type="application/xhtml+xml" />
+    <item id="page05" href="internal_dtd2.xhtml" media-type="application/xhtml+xml" />
+    <item id="page04" href="internal_xhtml_dtd.xml" media-type="application/xhtml+xml" />
+    <item id="mydtd" href="sample.dtd" media-type="application/xml-dtd" />
+    <item id="xhtmldtd" href="xhtml1-strict.dtd" media-type="application/xml-dtd" />
+    <item id="lat-ent" href="xhtml-lat1.ent" media-type="application/xml-dtd" />
+    <item id="special-ent" href="xhtml-special.ent" media-type="application/xml-dtd" />
+    <item id="symbol-ent" href="xhtml-symbol.ent" media-type="application/xml-dtd" />
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+    <itemref idref="page04" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/external_dtd.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/external_dtd.xhtml
new file mode 100644
index 0000000..1055000
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/external_dtd.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+        "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>External DTD</title>
+</head>
+<body>
+  <div>
+    <h1>External DTD</h1>
+
+    <p>This has an external DTD reference. ¢</p>
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/inline_dtd.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/inline_dtd.xhtml
new file mode 100644
index 0000000..2b71c74
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/inline_dtd.xhtml
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!DOCTYPE html [<!ENTITY nbsp   " ">
+        <!ENTITY cent   "¢">
+        <!ENTITY arwen "Å®ωËÑ">]>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Inline DTD</title>
+</head>
+<body>
+<div>
+    <h1>Inline DTD</h1>
+
+    <p>This has an internal DTD reference. ¢</p>
+    <p>&arwen;</p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/internal_dtd.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/internal_dtd.xhtml
new file mode 100644
index 0000000..9e6165f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/internal_dtd.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE html SYSTEM "sample.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Internal DTD</title>
+</head>
+<body>
+<div>
+    <h1>Internal DTD</h1>
+
+    <p>This has an internal DTD reference. ¢</p>
+    <p>&arwen;</p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/internal_dtd2.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/internal_dtd2.xhtml
new file mode 100644
index 0000000..468850a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/internal_dtd2.xhtml
@@ -0,0 +1,17 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE html
+        [<!ENTITY arwen SYSTEM "sample.dtd">
+         <!ENTITY cent SYSTEM "sample.dtd">]>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Internal DTD</title>
+</head>
+<body>
+<div>
+    <h1>Internal DTD</h1>
+
+    <p>This has an internal DTD reference. ¢</p>
+    <p>&arwen;</p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/internal_xhtml_dtd.xml b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/internal_xhtml_dtd.xml
new file mode 100644
index 0000000..ce74e77
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/internal_xhtml_dtd.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE html SYSTEM "xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+  <head>
+    <title>Internal XHTML DTD</title>
+  </head>
+  <body>
+    <div>
+      <h1>Internal XHTML DTD</h1>
+
+      <p>     This has a reference to a local copy of the xhtml strict dtd.</p>
+      <p>¢</p>
+    </div>
+  </body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/sample.dtd b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/sample.dtd
new file mode 100644
index 0000000..71f8d63
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/sample.dtd
@@ -0,0 +1,14 @@
+<!ENTITY nbsp   " ">
+<!ENTITY iexcl  "¡">
+<!ENTITY cent   "¢">
+<!ENTITY pound  "£">
+<!ENTITY curren "¤">
+<!ENTITY yen    "¥">
+<!ENTITY arwen "Å®ωËÑ">
+<!ELEMENT head ANY>
+<!ELEMENT title ANY>
+<!ELEMENT body ANY>
+<!ELEMENT p ANY>
+<!ELEMENT h1 ANY>
+<!ELEMENT div ANY>
+<!ELEMENT html ANY>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/toc.ncx
new file mode 100644
index 0000000..64b8967
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/toc.ncx
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ncx PUBLIC "-//NISO//DTD ncx 2005-1//EN" "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd">
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>DTD Sample Book</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>No lang specified</text>
+      </navLabel>
+      <content src="internal_dtd.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/toc.xhtml
new file mode 100644
index 0000000..7b3ee22
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/toc.xhtml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="internal_dtd.xhtml">Internal DTD</a></li>
+        <li><a href="external_dtd.xhtml">External DTD</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/xhtml-lat1.ent b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/xhtml-lat1.ent
new file mode 100644
index 0000000..929aa3d
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/xhtml-lat1.ent
@@ -0,0 +1,121 @@
+<!-- ...................................................................... -->
+<!-- XML-compatible ISO Latin 1 Character Entity Set for XHTML ............ -->
+<!-- file: xhtml-lat1.ent
+
+     Typical invocation:
+
+       <!ENTITY % xhtml-lat1
+           PUBLIC "-//W3C//ENTITIES Latin 1 for XHTML//EN"
+                  "xhtml-lat1.ent" >
+       %xhtml-lat1;
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+       PUBLIC "-//W3C//ENTITIES Latin 1 for XHTML//EN"
+       SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-lat1.ent"
+
+     Revision:  $Id: xhtml-lat1.ent,v 4.1 2001/04/10 09:34:14 altheim Exp $ SMI
+
+     Portions (C) International Organization for Standardization 1986:
+     Permission to copy in any form is granted for use with conforming
+     SGML systems and applications as defined in ISO 8879, provided
+     this notice is included in all copies.
+-->
+
+<!ENTITY nbsp   " " ><!-- no-break space = non-breaking space, U+00A0 ISOnum -->
+<!ENTITY iexcl  "¡" ><!-- inverted exclamation mark, U+00A1 ISOnum -->
+<!ENTITY cent   "¢" ><!-- cent sign, U+00A2 ISOnum -->
+<!ENTITY pound  "£" ><!-- pound sign, U+00A3 ISOnum -->
+<!ENTITY curren "¤" ><!-- currency sign, U+00A4 ISOnum -->
+<!ENTITY yen    "¥" ><!-- yen sign = yuan sign, U+00A5 ISOnum -->
+<!ENTITY brvbar "¦" ><!-- broken bar = broken vertical bar, U+00A6 ISOnum -->
+<!ENTITY sect   "§" ><!-- section sign, U+00A7 ISOnum -->
+<!ENTITY uml    "¨" ><!-- diaeresis = spacing diaeresis, U+00A8 ISOdia -->
+<!ENTITY copy   "©" ><!-- copyright sign, U+00A9 ISOnum -->
+<!ENTITY ordf   "ª" ><!-- feminine ordinal indicator, U+00AA ISOnum -->
+<!ENTITY laquo  "«" ><!-- left-pointing double angle quotation mark = left pointing guillemet, U+00AB ISOnum -->
+<!ENTITY not    "¬" ><!-- not sign, U+00AC ISOnum -->
+<!ENTITY shy    "­" ><!-- soft hyphen = discretionary hyphen, U+00AD ISOnum -->
+<!ENTITY reg    "®" ><!-- registered sign = registered trade mark sign, U+00AE ISOnum -->
+<!ENTITY macr   "¯" ><!-- macron = spacing macron = overline = APL overbar, U+00AF ISOdia -->
+<!ENTITY deg    "°" ><!-- degree sign, U+00B0 ISOnum -->
+<!ENTITY plusmn "±" ><!-- plus-minus sign = plus-or-minus sign, U+00B1 ISOnum -->
+<!ENTITY sup2   "²" ><!-- superscript two = superscript digit two = squared, U+00B2 ISOnum -->
+<!ENTITY sup3   "³" ><!-- superscript three = superscript digit three = cubed, U+00B3 ISOnum -->
+<!ENTITY acute  "´" ><!-- acute accent = spacing acute, U+00B4 ISOdia -->
+<!ENTITY micro  "µ" ><!-- micro sign, U+00B5 ISOnum -->
+<!ENTITY para   "¶" ><!-- pilcrow sign = paragraph sign, U+00B6 ISOnum -->
+<!ENTITY middot "·" ><!-- middle dot = Georgian comma = Greek middle dot, U+00B7 ISOnum -->
+<!ENTITY cedil  "¸" ><!-- cedilla = spacing cedilla, U+00B8 ISOdia -->
+<!ENTITY sup1   "¹" ><!-- superscript one = superscript digit one, U+00B9 ISOnum -->
+<!ENTITY ordm   "º" ><!-- masculine ordinal indicator, U+00BA ISOnum -->
+<!ENTITY raquo  "»" ><!-- right-pointing double angle quotation mark = right pointing guillemet, U+00BB ISOnum -->
+<!ENTITY frac14 "¼" ><!-- vulgar fraction one quarter = fraction one quarter, U+00BC ISOnum -->
+<!ENTITY frac12 "½" ><!-- vulgar fraction one half = fraction one half, U+00BD ISOnum -->
+<!ENTITY frac34 "¾" ><!-- vulgar fraction three quarters = fraction three quarters, U+00BE ISOnum -->
+<!ENTITY iquest "¿" ><!-- inverted question mark = turned question mark, U+00BF ISOnum -->
+<!ENTITY Agrave "À" ><!-- latin capital A with grave = latin capital A grave, U+00C0 ISOlat1 -->
+<!ENTITY Aacute "Á" ><!-- latin capital A with acute, U+00C1 ISOlat1 -->
+<!ENTITY Acirc  "Â" ><!-- latin capital A with circumflex, U+00C2 ISOlat1 -->
+<!ENTITY Atilde "Ã" ><!-- latin capital A with tilde, U+00C3 ISOlat1 -->
+<!ENTITY Auml   "Ä" ><!-- latin capital A with diaeresis, U+00C4 ISOlat1 -->
+<!ENTITY Aring  "Å" ><!-- latin capital A with ring above = latin capital A ring, U+00C5 ISOlat1 -->
+<!ENTITY AElig  "Æ" ><!-- latin capital AE = latin capital ligature AE, U+00C6 ISOlat1 -->
+<!ENTITY Ccedil "Ç" ><!-- latin capital C with cedilla, U+00C7 ISOlat1 -->
+<!ENTITY Egrave "È" ><!-- latin capital E with grave, U+00C8 ISOlat1 -->
+<!ENTITY Eacute "É" ><!-- latin capital E with acute, U+00C9 ISOlat1 -->
+<!ENTITY Ecirc  "Ê" ><!-- latin capital E with circumflex, U+00CA ISOlat1 -->
+<!ENTITY Euml   "Ë" ><!-- latin capital E with diaeresis, U+00CB ISOlat1 -->
+<!ENTITY Igrave "Ì" ><!-- latin capital I with grave, U+00CC ISOlat1 -->
+<!ENTITY Iacute "Í" ><!-- latin capital I with acute, U+00CD ISOlat1 -->
+<!ENTITY Icirc  "Î" ><!-- latin capital I with circumflex, U+00CE ISOlat1 -->
+<!ENTITY Iuml   "Ï" ><!-- latin capital I with diaeresis, U+00CF ISOlat1 -->
+<!ENTITY ETH    "Ð" ><!-- latin capital ETH, U+00D0 ISOlat1 -->
+<!ENTITY Ntilde "Ñ" ><!-- latin capital N with tilde, U+00D1 ISOlat1 -->
+<!ENTITY Ograve "Ò" ><!-- latin capital O with grave, U+00D2 ISOlat1 -->
+<!ENTITY Oacute "Ó" ><!-- latin capital O with acute, U+00D3 ISOlat1 -->
+<!ENTITY Ocirc  "Ô" ><!-- latin capital O with circumflex, U+00D4 ISOlat1 -->
+<!ENTITY Otilde "Õ" ><!-- latin capital O with tilde, U+00D5 ISOlat1 -->
+<!ENTITY Ouml   "Ö" ><!-- latin capital O with diaeresis, U+00D6 ISOlat1 -->
+<!ENTITY times  "×" ><!-- multiplication sign, U+00D7 ISOnum -->
+<!ENTITY Oslash "Ø" ><!-- latin capital O with stroke = latin capital O slash, U+00D8 ISOlat1 -->
+<!ENTITY Ugrave "Ù" ><!-- latin capital U with grave, U+00D9 ISOlat1 -->
+<!ENTITY Uacute "Ú" ><!-- latin capital U with acute, U+00DA ISOlat1 -->
+<!ENTITY Ucirc  "Û" ><!-- latin capital U with circumflex, U+00DB ISOlat1 -->
+<!ENTITY Uuml   "Ü" ><!-- latin capital U with diaeresis, U+00DC ISOlat1 -->
+<!ENTITY Yacute "Ý" ><!-- latin capital Y with acute, U+00DD ISOlat1 -->
+<!ENTITY THORN  "Þ" ><!-- latin capital THORN, U+00DE ISOlat1 -->
+<!ENTITY szlig  "ß" ><!-- latin small sharp s = ess-zed, U+00DF ISOlat1 -->
+<!ENTITY agrave "à" ><!-- latin small a with grave = latin small a grave, U+00E0 ISOlat1 -->
+<!ENTITY aacute "á" ><!-- latin small a with acute, U+00E1 ISOlat1 -->
+<!ENTITY acirc  "â" ><!-- latin small a with circumflex, U+00E2 ISOlat1 -->
+<!ENTITY atilde "ã" ><!-- latin small a with tilde, U+00E3 ISOlat1 -->
+<!ENTITY auml   "ä" ><!-- latin small a with diaeresis, U+00E4 ISOlat1 -->
+<!ENTITY aring  "å" ><!-- latin small a with ring above = latin small a ring, U+00E5 ISOlat1 -->
+<!ENTITY aelig  "æ" ><!-- latin small ae = latin small ligature ae, U+00E6 ISOlat1 -->
+<!ENTITY ccedil "ç" ><!-- latin small c with cedilla, U+00E7 ISOlat1 -->
+<!ENTITY egrave "è" ><!-- latin small e with grave, U+00E8 ISOlat1 -->
+<!ENTITY eacute "é" ><!-- latin small e with acute, U+00E9 ISOlat1 -->
+<!ENTITY ecirc  "ê" ><!-- latin small e with circumflex, U+00EA ISOlat1 -->
+<!ENTITY euml   "ë" ><!-- latin small e with diaeresis, U+00EB ISOlat1 -->
+<!ENTITY igrave "ì" ><!-- latin small i with grave, U+00EC ISOlat1 -->
+<!ENTITY iacute "í" ><!-- latin small i with acute, U+00ED ISOlat1 -->
+<!ENTITY icirc  "î" ><!-- latin small i with circumflex, U+00EE ISOlat1 -->
+<!ENTITY iuml   "ï" ><!-- latin small i with diaeresis, U+00EF ISOlat1 -->
+<!ENTITY eth    "ð" ><!-- latin small eth, U+00F0 ISOlat1 -->
+<!ENTITY ntilde "ñ" ><!-- latin small n with tilde, U+00F1 ISOlat1 -->
+<!ENTITY ograve "ò" ><!-- latin small o with grave, U+00F2 ISOlat1 -->
+<!ENTITY oacute "ó" ><!-- latin small o with acute, U+00F3 ISOlat1 -->
+<!ENTITY ocirc  "ô" ><!-- latin small o with circumflex, U+00F4 ISOlat1 -->
+<!ENTITY otilde "õ" ><!-- latin small o with tilde, U+00F5 ISOlat1 -->
+<!ENTITY ouml   "ö" ><!-- latin small o with diaeresis, U+00F6 ISOlat1 -->
+<!ENTITY divide "÷" ><!-- division sign, U+00F7 ISOnum -->
+<!ENTITY oslash "ø" ><!-- latin small o with stroke, = latin small o slash, U+00F8 ISOlat1 -->
+<!ENTITY ugrave "ù" ><!-- latin small u with grave, U+00F9 ISOlat1 -->
+<!ENTITY uacute "ú" ><!-- latin small u with acute, U+00FA ISOlat1 -->
+<!ENTITY ucirc  "û" ><!-- latin small u with circumflex, U+00FB ISOlat1 -->
+<!ENTITY uuml   "ü" ><!-- latin small u with diaeresis, U+00FC ISOlat1 -->
+<!ENTITY yacute "ý" ><!-- latin small y with acute, U+00FD ISOlat1 -->
+<!ENTITY thorn  "þ" ><!-- latin small thorn with, U+00FE ISOlat1 -->
+<!ENTITY yuml   "ÿ" ><!-- latin small y with diaeresis, U+00FF ISOlat1 -->
+<!-- end of xhtml-lat1.ent -->
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/xhtml-special.ent b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/xhtml-special.ent
new file mode 100644
index 0000000..0af4654
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/xhtml-special.ent
@@ -0,0 +1,82 @@
+<!-- ...................................................................... -->
+<!-- XML-compatible ISO Special Character Entity Set for XHTML ............ -->
+<!-- file: xhtml-special.ent
+
+     Typical invocation:
+
+       <!ENTITY % xhtml-special
+           PUBLIC "-//W3C//ENTITIES Special for XHTML//EN"
+                  "xhtml-special.ent" >
+       %xhtml-special;
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+       PUBLIC "-//W3C//ENTITIES Special for XHTML//EN"
+       SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-special.ent"
+
+     Revision:  $Id: xhtml-special.ent,v 4.1 2001/04/10 09:34:14 altheim Exp $ SMI
+
+     Portions (C) International Organization for Standardization 1986:
+     Permission to copy in any form is granted for use with conforming
+     SGML systems and applications as defined in ISO 8879, provided
+     this notice is included in all copies.
+
+     Revisions:
+2000-10-28: added ' and altered XML Predefined Entities for compatibility
+-->
+
+<!-- Relevant ISO entity set is given unless names are newly introduced.
+     New names (i.e., not in ISO 8879 [SGML] list) do not clash with
+     any existing ISO 8879 entity names. ISO 10646 [ISO10646] character
+     numbers are given for each character, in hex. Entity values are
+     decimal conversions of the ISO 10646 values and refer to the
+     document character set. Names are Unicode [UNICODE] names.
+-->
+
+<!-- C0 Controls and Basic Latin -->
+<!ENTITY lt      "&#60;" ><!-- less-than sign, U+003C ISOnum -->
+<!ENTITY gt      ">" ><!-- greater-than sign, U+003E ISOnum -->
+<!ENTITY amp     "&#38;" ><!-- ampersand, U+0026 ISOnum -->
+<!ENTITY apos    "'" ><!-- The Apostrophe (Apostrophe Quote, APL Quote), U+0027 ISOnum -->
+<!ENTITY quot    """ ><!-- quotation mark (Quote Double), U+0022 ISOnum -->
+
+<!-- Latin Extended-A -->
+<!ENTITY OElig   "Œ" ><!-- latin capital ligature OE, U+0152 ISOlat2 -->
+<!ENTITY oelig   "œ" ><!-- latin small ligature oe, U+0153 ISOlat2 -->
+
+<!-- ligature is a misnomer, this is a separate character in some languages -->
+<!ENTITY Scaron  "Š" ><!-- latin capital letter S with caron, U+0160 ISOlat2 -->
+<!ENTITY scaron  "š" ><!-- latin small letter s with caron, U+0161 ISOlat2 -->
+<!ENTITY Yuml    "Ÿ" ><!-- latin capital letter Y with diaeresis, U+0178 ISOlat2 -->
+
+<!-- Spacing Modifier Letters -->
+<!ENTITY circ    "ˆ" ><!-- modifier letter circumflex accent, U+02C6 ISOpub -->
+<!ENTITY tilde   "˜" ><!-- small tilde, U+02DC ISOdia -->
+
+<!-- General Punctuation -->
+<!ENTITY ensp    " " ><!-- en space, U+2002 ISOpub -->
+<!ENTITY emsp    " " ><!-- em space, U+2003 ISOpub -->
+<!ENTITY thinsp  " " ><!-- thin space, U+2009 ISOpub -->
+<!ENTITY zwnj    "‌" ><!-- zero width non-joiner, U+200C NEW RFC 2070 -->
+<!ENTITY zwj     "‍" ><!-- zero width joiner, U+200D NEW RFC 2070 -->
+<!ENTITY lrm     "‎" ><!-- left-to-right mark, U+200E NEW RFC 2070 -->
+<!ENTITY rlm     "‏" ><!-- right-to-left mark, U+200F NEW RFC 2070 -->
+<!ENTITY ndash   "–" ><!-- en dash, U+2013 ISOpub -->
+<!ENTITY mdash   "—" ><!-- em dash, U+2014 ISOpub -->
+<!ENTITY lsquo   "‘" ><!-- left single quotation mark, U+2018 ISOnum -->
+<!ENTITY rsquo   "’" ><!-- right single quotation mark, U+2019 ISOnum -->
+<!ENTITY sbquo   "‚" ><!-- single low-9 quotation mark, U+201A NEW -->
+<!ENTITY ldquo   "“" ><!-- left double quotation mark, U+201C ISOnum -->
+<!ENTITY rdquo   "”" ><!-- right double quotation mark, U+201D ISOnum -->
+<!ENTITY bdquo   "„" ><!-- double low-9 quotation mark, U+201E NEW -->
+<!ENTITY dagger  "†" ><!-- dagger, U+2020 ISOpub -->
+<!ENTITY Dagger  "‡" ><!-- double dagger, U+2021 ISOpub -->
+<!ENTITY permil  "‰" ><!-- per mille sign, U+2030 ISOtech -->
+
+<!-- lsaquo is proposed but not yet ISO standardized -->
+<!ENTITY lsaquo  "‹" ><!-- single left-pointing angle quotation mark, U+2039 ISO proposed -->
+<!-- rsaquo is proposed but not yet ISO standardized -->
+<!ENTITY rsaquo  "›" ><!-- single right-pointing angle quotation mark, U+203A ISO proposed -->
+<!ENTITY euro    "€" ><!-- euro sign, U+20AC NEW -->
+
+<!-- end of xhtml-special.ent -->
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/xhtml-symbol.ent b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/xhtml-symbol.ent
new file mode 100644
index 0000000..e92a1c7
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/xhtml-symbol.ent
@@ -0,0 +1,204 @@
+<!-- ...................................................................... -->
+<!-- ISO Math, Greek and Symbolic Character Entity Set for XHTML .......... -->
+<!-- file: xhtml-symbol.ent
+
+     Typical invocation:
+
+       <!ENTITY % xhtml-symbol
+           PUBLIC "-//W3C//ENTITIES Symbols for XHTML//EN"
+                  "xhtml-symbol.ent" >
+       %xhtml-symbol;
+
+     This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+       PUBLIC "-//W3C//ENTITIES Symbols for XHTML//EN"
+       SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml-symbol.ent"
+
+     Revision:  $Id: xhtml-symbol.ent,v 4.1 2001/04/10 09:34:14 altheim Exp $ SMI
+
+     Portions (C) International Organization for Standardization 1986:
+     Permission to copy in any form is granted for use with conforming
+     SGML systems and applications as defined in ISO 8879, provided
+     this notice is included in all copies.
+-->
+
+<!-- Relevant ISO entity set is given unless names are newly introduced.
+     New names (i.e., not in ISO 8879 [SGML] list) do not clash with
+     any existing ISO 8879 entity names. ISO 10646 [ISO10646] character
+     numbers are given for each character, in hex. Entity values are
+     decimal conversions of the ISO 10646 values and refer to the
+     document character set. Names are Unicode [UNICODE] names.
+-->
+
+<!-- Latin Extended-B -->
+<!ENTITY fnof     "ƒ" ><!-- latin small f with hook = function
+                              = florin, U+0192 ISOtech -->
+
+<!-- Greek -->
+<!ENTITY Alpha    "Α" ><!-- greek capital letter alpha, U+0391 -->
+<!ENTITY Beta     "Β" ><!-- greek capital letter beta, U+0392 -->
+<!ENTITY Gamma    "Γ" ><!-- greek capital letter gamma, U+0393 ISOgrk3 -->
+<!ENTITY Delta    "Δ" ><!-- greek capital letter delta, U+0394 ISOgrk3 -->
+<!ENTITY Epsilon  "Ε" ><!-- greek capital letter epsilon, U+0395 -->
+<!ENTITY Zeta     "Ζ" ><!-- greek capital letter zeta, U+0396 -->
+<!ENTITY Eta      "Η" ><!-- greek capital letter eta, U+0397 -->
+<!ENTITY Theta    "Θ" ><!-- greek capital letter theta, U+0398 ISOgrk3 -->
+<!ENTITY Iota     "Ι" ><!-- greek capital letter iota, U+0399 -->
+<!ENTITY Kappa    "Κ" ><!-- greek capital letter kappa, U+039A -->
+<!ENTITY Lambda   "Λ" ><!-- greek capital letter lambda, U+039B ISOgrk3 -->
+<!ENTITY Mu       "Μ" ><!-- greek capital letter mu, U+039C -->
+<!ENTITY Nu       "Ν" ><!-- greek capital letter nu, U+039D -->
+<!ENTITY Xi       "Ξ" ><!-- greek capital letter xi, U+039E ISOgrk3 -->
+<!ENTITY Omicron  "Ο" ><!-- greek capital letter omicron, U+039F -->
+<!ENTITY Pi       "Π" ><!-- greek capital letter pi, U+03A0 ISOgrk3 -->
+<!ENTITY Rho      "Ρ" ><!-- greek capital letter rho, U+03A1 -->
+<!-- there is no Sigmaf, and no U+03A2 character either -->
+<!ENTITY Sigma    "Σ" ><!-- greek capital letter sigma, U+03A3 ISOgrk3 -->
+<!ENTITY Tau      "Τ" ><!-- greek capital letter tau, U+03A4 -->
+<!ENTITY Upsilon  "Υ" ><!-- greek capital letter upsilon,
+                              U+03A5 ISOgrk3 -->
+<!ENTITY Phi      "Φ" ><!-- greek capital letter phi, U+03A6 ISOgrk3 -->
+<!ENTITY Chi      "Χ" ><!-- greek capital letter chi, U+03A7 -->
+<!ENTITY Psi      "Ψ" ><!-- greek capital letter psi, U+03A8 ISOgrk3 -->
+<!ENTITY Omega    "Ω" ><!-- greek capital letter omega, U+03A9 ISOgrk3 -->
+<!ENTITY alpha    "α" ><!-- greek small letter alpha, U+03B1 ISOgrk3 -->
+<!ENTITY beta     "β" ><!-- greek small letter beta, U+03B2 ISOgrk3 -->
+<!ENTITY gamma    "γ" ><!-- greek small letter gamma, U+03B3 ISOgrk3 -->
+<!ENTITY delta    "δ" ><!-- greek small letter delta, U+03B4 ISOgrk3 -->
+<!ENTITY epsilon  "ε" ><!-- greek small letter epsilon, U+03B5 ISOgrk3 -->
+<!ENTITY zeta     "ζ" ><!-- greek small letter zeta, U+03B6 ISOgrk3 -->
+<!ENTITY eta      "η" ><!-- greek small letter eta, U+03B7 ISOgrk3 -->
+<!ENTITY theta    "θ" ><!-- greek small letter theta, U+03B8 ISOgrk3 -->
+<!ENTITY iota     "ι" ><!-- greek small letter iota, U+03B9 ISOgrk3 -->
+<!ENTITY kappa    "κ" ><!-- greek small letter kappa, U+03BA ISOgrk3 -->
+<!ENTITY lambda   "λ" ><!-- greek small letter lambda, U+03BB ISOgrk3 -->
+<!ENTITY mu       "μ" ><!-- greek small letter mu, U+03BC ISOgrk3 -->
+<!ENTITY nu       "ν" ><!-- greek small letter nu, U+03BD ISOgrk3 -->
+<!ENTITY xi       "ξ" ><!-- greek small letter xi, U+03BE ISOgrk3 -->
+<!ENTITY omicron  "ο" ><!-- greek small letter omicron, U+03BF NEW -->
+<!ENTITY pi       "π" ><!-- greek small letter pi, U+03C0 ISOgrk3 -->
+<!ENTITY rho      "ρ" ><!-- greek small letter rho, U+03C1 ISOgrk3 -->
+<!ENTITY sigmaf   "ς" ><!-- greek small letter final sigma, U+03C2 ISOgrk3 -->
+<!ENTITY sigma    "σ" ><!-- greek small letter sigma, U+03C3 ISOgrk3 -->
+<!ENTITY tau      "τ" ><!-- greek small letter tau, U+03C4 ISOgrk3 -->
+<!ENTITY upsilon  "υ" ><!-- greek small letter upsilon, U+03C5 ISOgrk3 -->
+<!ENTITY phi      "φ" ><!-- greek small letter phi, U+03C6 ISOgrk3 -->
+<!ENTITY chi      "χ" ><!-- greek small letter chi, U+03C7 ISOgrk3 -->
+<!ENTITY psi      "ψ" ><!-- greek small letter psi, U+03C8 ISOgrk3 -->
+<!ENTITY omega    "ω" ><!-- greek small letter omega, U+03C9 ISOgrk3 -->
+<!ENTITY thetasym "ϑ" ><!-- greek small letter theta symbol, U+03D1 NEW -->
+<!ENTITY upsih    "ϒ" ><!-- greek upsilon with hook symbol, U+03D2 NEW -->
+<!ENTITY piv      "ϖ" ><!-- greek pi symbol, U+03D6 ISOgrk3 -->
+
+<!-- General Punctuation -->
+<!ENTITY bull     "•" ><!-- bullet = black small circle, U+2022 ISOpub  -->
+<!-- bullet is NOT the same as bullet operator, U+2219 -->
+<!ENTITY hellip   "…" ><!-- horizontal ellipsis = three dot leader, U+2026 ISOpub  -->
+<!ENTITY prime    "′" ><!-- prime = minutes = feet, U+2032 ISOtech -->
+<!ENTITY Prime    "″" ><!-- double prime = seconds = inches, U+2033 ISOtech -->
+<!ENTITY oline    "‾" ><!-- overline = spacing overscore, U+203E NEW -->
+<!ENTITY frasl    "⁄" ><!-- fraction slash, U+2044 NEW -->
+
+<!-- Letterlike Symbols -->
+<!ENTITY weierp   "℘" ><!-- script capital P = power set = Weierstrass p, U+2118 ISOamso -->
+<!ENTITY image    "ℑ" ><!-- blackletter capital I = imaginary part, U+2111 ISOamso -->
+<!ENTITY real     "ℜ" ><!-- blackletter capital R = real part symbol, U+211C ISOamso -->
+<!ENTITY trade    "™" ><!-- trade mark sign, U+2122 ISOnum -->
+<!ENTITY alefsym  "ℵ" ><!-- alef symbol = first transfinite cardinal, U+2135 NEW -->
+<!-- alef symbol is NOT the same as hebrew letter alef, U+05D0 although
+     the same glyph could be used to depict both characters -->
+
+<!-- Arrows -->
+<!ENTITY larr     "←" ><!-- leftwards arrow, U+2190 ISOnum -->
+<!ENTITY uarr     "↑" ><!-- upwards arrow, U+2191 ISOnum-->
+<!ENTITY rarr     "→" ><!-- rightwards arrow, U+2192 ISOnum -->
+<!ENTITY darr     "↓" ><!-- downwards arrow, U+2193 ISOnum -->
+<!ENTITY harr     "↔" ><!-- left right arrow, U+2194 ISOamsa -->
+<!ENTITY crarr    "↵" ><!-- downwards arrow with corner leftwards
+                               = carriage return, U+21B5 NEW -->
+<!ENTITY lArr     "⇐" ><!-- leftwards double arrow, U+21D0 ISOtech -->
+<!-- Unicode does not say that lArr is the same as the 'is implied by' arrow
+    but also does not have any other character for that function. So ? lArr can
+    be used for 'is implied by' as ISOtech suggests -->
+<!ENTITY uArr     "⇑" ><!-- upwards double arrow, U+21D1 ISOamsa -->
+<!ENTITY rArr     "⇒" ><!-- rightwards double arrow, U+21D2 ISOtech -->
+<!-- Unicode does not say this is the 'implies' character but does not have
+     another character with this function so ?
+     rArr can be used for 'implies' as ISOtech suggests -->
+<!ENTITY dArr     "⇓" ><!-- downwards double arrow, U+21D3 ISOamsa -->
+<!ENTITY hArr     "⇔" ><!-- left right double arrow, U+21D4 ISOamsa -->
+
+<!-- Mathematical Operators -->
+<!ENTITY forall   "∀" ><!-- for all, U+2200 ISOtech -->
+<!ENTITY part     "∂" ><!-- partial differential, U+2202 ISOtech  -->
+<!ENTITY exist    "∃" ><!-- there exists, U+2203 ISOtech -->
+<!ENTITY empty    "∅" ><!-- empty set = null set, U+2205 ISOamso -->
+<!ENTITY nabla    "∇" ><!-- nabla = backward difference, U+2207 ISOtech -->
+<!ENTITY isin     "∈" ><!-- element of, U+2208 ISOtech -->
+<!ENTITY notin    "∉" ><!-- not an element of, U+2209 ISOtech -->
+<!ENTITY ni       "∋" ><!-- contains as member, U+220B ISOtech -->
+<!-- should there be a more memorable name than 'ni'? -->
+<!ENTITY prod     "∏" ><!-- n-ary product = product sign, U+220F ISOamsb -->
+<!-- prod is NOT the same character as U+03A0 'greek capital letter pi' though
+     the same glyph might be used for both -->
+<!ENTITY sum      "∑" ><!-- n-ary sumation, U+2211 ISOamsb -->
+<!-- sum is NOT the same character as U+03A3 'greek capital letter sigma'
+     though the same glyph might be used for both -->
+<!ENTITY minus    "−" ><!-- minus sign, U+2212 ISOtech -->
+<!ENTITY lowast   "∗" ><!-- asterisk operator, U+2217 ISOtech -->
+<!ENTITY radic    "√" ><!-- square root = radical sign, U+221A ISOtech -->
+<!ENTITY prop     "∝" ><!-- proportional to, U+221D ISOtech -->
+<!ENTITY infin    "∞" ><!-- infinity, U+221E ISOtech -->
+<!ENTITY ang      "∠" ><!-- angle, U+2220 ISOamso -->
+<!ENTITY and      "∧" ><!-- logical and = wedge, U+2227 ISOtech -->
+<!ENTITY or       "∨" ><!-- logical or = vee, U+2228 ISOtech -->
+<!ENTITY cap      "∩" ><!-- intersection = cap, U+2229 ISOtech -->
+<!ENTITY cup      "∪" ><!-- union = cup, U+222A ISOtech -->
+<!ENTITY int      "∫" ><!-- integral, U+222B ISOtech -->
+<!ENTITY there4   "∴" ><!-- therefore, U+2234 ISOtech -->
+<!ENTITY sim      "∼" ><!-- tilde operator = varies with = similar to, U+223C ISOtech -->
+<!-- tilde operator is NOT the same character as the tilde, U+007E,
+     although the same glyph might be used to represent both  -->
+<!ENTITY cong     "≅" ><!-- approximately equal to, U+2245 ISOtech -->
+<!ENTITY asymp    "≈" ><!-- almost equal to = asymptotic to, U+2248 ISOamsr -->
+<!ENTITY ne       "≠" ><!-- not equal to, U+2260 ISOtech -->
+<!ENTITY equiv    "≡" ><!-- identical to, U+2261 ISOtech -->
+<!ENTITY le       "≤" ><!-- less-than or equal to, U+2264 ISOtech -->
+<!ENTITY ge       "≥" ><!-- greater-than or equal to, U+2265 ISOtech -->
+<!ENTITY sub      "⊂" ><!-- subset of, U+2282 ISOtech -->
+<!ENTITY sup      "⊃" ><!-- superset of, U+2283 ISOtech -->
+<!-- note that nsup, 'not a superset of, U+2283' is not covered by the Symbol
+     font encoding and is not included. Should it be, for symmetry?
+     It is in ISOamsn  -->
+<!ENTITY nsub     "⊄" ><!-- not a subset of, U+2284 ISOamsn -->
+<!ENTITY sube     "⊆" ><!-- subset of or equal to, U+2286 ISOtech -->
+<!ENTITY supe     "⊇" ><!-- superset of or equal to, U+2287 ISOtech -->
+<!ENTITY oplus    "⊕" ><!-- circled plus = direct sum, U+2295 ISOamsb -->
+<!ENTITY otimes   "⊗" ><!-- circled times = vector product, U+2297 ISOamsb -->
+<!ENTITY perp     "⊥" ><!-- up tack = orthogonal to = perpendicular, U+22A5 ISOtech -->
+<!ENTITY sdot     "⋅" ><!-- dot operator, U+22C5 ISOamsb -->
+<!-- dot operator is NOT the same character as U+00B7 middle dot -->
+
+<!-- Miscellaneous Technical -->
+<!ENTITY lceil    "⌈" ><!-- left ceiling = apl upstile, U+2308 ISOamsc  -->
+<!ENTITY rceil    "⌉" ><!-- right ceiling, U+2309 ISOamsc  -->
+<!ENTITY lfloor   "⌊" ><!-- left floor = apl downstile, U+230A ISOamsc  -->
+<!ENTITY rfloor   "⌋" ><!-- right floor, U+230B ISOamsc  -->
+<!ENTITY lang     "〈" ><!-- left-pointing angle bracket = bra, U+2329 ISOtech -->
+<!-- lang is NOT the same character as U+003C 'less than'
+     or U+2039 'single left-pointing angle quotation mark' -->
+<!ENTITY rang     "〉" ><!-- right-pointing angle bracket = ket, U+232A ISOtech -->
+<!-- rang is NOT the same character as U+003E 'greater than'
+     or U+203A 'single right-pointing angle quotation mark' -->
+
+<!-- Geometric Shapes -->
+<!ENTITY loz      "◊" ><!-- lozenge, U+25CA ISOpub -->
+
+<!-- Miscellaneous Symbols -->
+<!ENTITY spades   "♠" ><!-- black spade suit, U+2660 ISOpub -->
+<!-- black here seems to mean filled as opposed to hollow -->
+<!ENTITY clubs    "♣" ><!-- black club suit = shamrock, U+2663 ISOpub -->
+<!ENTITY hearts   "♥" ><!-- black heart suit = valentine, U+2665 ISOpub -->
+<!ENTITY diams    "♦" ><!-- black diamond suit, U+2666 ISOpub -->
+
+<!-- end of xhtml-symbol.ent -->
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/xhtml1-strict.dtd b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/xhtml1-strict.dtd
new file mode 100644
index 0000000..7384d55
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/OPS/xhtml1-strict.dtd
@@ -0,0 +1,979 @@
+<!--
+   Extensible HTML version 1.0 Strict DTD
+
+   This is the same as HTML 4 Strict except for
+   changes due to the differences between XML and SGML.
+
+   Namespace = http://www.w3.org/1999/xhtml
+
+   For further information, see: http://www.w3.org/TR/xhtml1
+
+   Copyright (c) 1998-2002 W3C (MIT, INRIA, Keio),
+   All Rights Reserved. 
+
+   This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+   PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+   SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
+
+   $Revision: 1.1 $
+   $Date: 2002/08/01 13:56:03 $
+
+-->
+
+<!--================ Character mnemonic entities =========================-->
+
+<!ENTITY % HTMLlat1 PUBLIC
+   "-//W3C//ENTITIES Latin 1 for XHTML//EN"
+   "xhtml-lat1.ent">
+%HTMLlat1;
+
+<!ENTITY % HTMLsymbol PUBLIC
+   "-//W3C//ENTITIES Symbols for XHTML//EN"
+   "xhtml-symbol.ent">
+%HTMLsymbol;
+
+<!ENTITY % HTMLspecial PUBLIC
+   "-//W3C//ENTITIES Special for XHTML//EN"
+   "xhtml-special.ent">
+%HTMLspecial;
+
+<!--================== Imported Names ====================================-->
+
+<!ENTITY % ContentType "CDATA">
+    <!-- media type, as per [RFC2045] -->
+
+<!ENTITY % ContentTypes "CDATA">
+    <!-- comma-separated list of media types, as per [RFC2045] -->
+
+<!ENTITY % Charset "CDATA">
+    <!-- a character encoding, as per [RFC2045] -->
+
+<!ENTITY % Charsets "CDATA">
+    <!-- a space separated list of character encodings, as per [RFC2045] -->
+
+<!ENTITY % LanguageCode "NMTOKEN">
+    <!-- a language code, as per [RFC3066] -->
+
+<!ENTITY % Character "CDATA">
+    <!-- a single character, as per section 2.2 of [XML] -->
+
+<!ENTITY % Number "CDATA">
+    <!-- one or more digits -->
+
+<!ENTITY % LinkTypes "CDATA">
+    <!-- space-separated list of link types -->
+
+<!ENTITY % MediaDesc "CDATA">
+    <!-- single or comma-separated list of media descriptors -->
+
+<!ENTITY % URI "CDATA">
+    <!-- a Uniform Resource Identifier, see [RFC2396] -->
+
+<!ENTITY % UriList "CDATA">
+    <!-- a space separated list of Uniform Resource Identifiers -->
+
+<!ENTITY % Datetime "CDATA">
+    <!-- date and time information. ISO date format -->
+
+<!ENTITY % Script "CDATA">
+    <!-- script expression -->
+
+<!ENTITY % StyleSheet "CDATA">
+    <!-- style sheet data -->
+
+<!ENTITY % Text "CDATA">
+    <!-- used for titles etc. -->
+
+<!ENTITY % Length "CDATA">
+    <!-- nn for pixels or nn% for percentage length -->
+
+<!ENTITY % MultiLength "CDATA">
+    <!-- pixel, percentage, or relative -->
+
+<!ENTITY % Pixels "CDATA">
+    <!-- integer representing length in pixels -->
+
+<!-- these are used for image maps -->
+
+<!ENTITY % Shape "(rect|circle|poly|default)">
+
+<!ENTITY % Coords "CDATA">
+    <!-- comma separated list of lengths -->
+
+<!--=================== Generic Attributes ===============================-->
+
+<!-- core attributes common to most elements
+  id       document-wide unique id
+  class    space separated list of classes
+  style    associated style info
+  title    advisory title/amplification
+-->
+<!ENTITY % coreattrs
+ "id          ID             #IMPLIED
+  class       CDATA          #IMPLIED
+  style       %StyleSheet;   #IMPLIED
+  title       %Text;         #IMPLIED"
+  >
+
+<!-- internationalization attributes
+  lang        language code (backwards compatible)
+  xml:lang    language code (as per XML 1.0 spec)
+  dir         direction for weak/neutral text
+-->
+<!ENTITY % i18n
+ "lang        %LanguageCode; #IMPLIED
+  xml:lang    %LanguageCode; #IMPLIED
+  dir         (ltr|rtl)      #IMPLIED"
+  >
+
+<!-- attributes for common UI events
+  onclick     a pointer button was clicked
+  ondblclick  a pointer button was double clicked
+  onmousedown a pointer button was pressed down
+  onmouseup   a pointer button was released
+  onmousemove a pointer was moved onto the element
+  onmouseout  a pointer was moved away from the element
+  onkeypress  a key was pressed and released
+  onkeydown   a key was pressed down
+  onkeyup     a key was released
+-->
+<!ENTITY % events
+ "onclick     %Script;       #IMPLIED
+  ondblclick  %Script;       #IMPLIED
+  onmousedown %Script;       #IMPLIED
+  onmouseup   %Script;       #IMPLIED
+  onmouseover %Script;       #IMPLIED
+  onmousemove %Script;       #IMPLIED
+  onmouseout  %Script;       #IMPLIED
+  onkeypress  %Script;       #IMPLIED
+  onkeydown   %Script;       #IMPLIED
+  onkeyup     %Script;       #IMPLIED"
+  >
+
+<!-- attributes for elements that can get the focus
+  accesskey   accessibility key character
+  tabindex    position in tabbing order
+  onfocus     the element got the focus
+  onblur      the element lost the focus
+-->
+<!ENTITY % focus
+ "accesskey   %Character;    #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED"
+  >
+
+<!ENTITY % attrs "%coreattrs; %i18n; %events;">
+
+<!--=================== Text Elements ====================================-->
+
+<!ENTITY % special.pre
+   "br | span | bdo | map">
+
+
+<!ENTITY % special
+   "%special.pre; | object | img ">
+
+<!ENTITY % fontstyle "tt | i | b | big | small ">
+
+<!ENTITY % phrase "em | strong | dfn | code | q |
+                   samp | kbd | var | cite | abbr | acronym | sub | sup ">
+
+<!ENTITY % inline.forms "input | select | textarea | label | button">
+
+<!-- these can occur at block or inline level -->
+<!ENTITY % misc.inline "ins | del | script">
+
+<!-- these can only occur at block level -->
+<!ENTITY % misc "noscript | %misc.inline;">
+
+<!ENTITY % inline "a | %special; | %fontstyle; | %phrase; | %inline.forms;">
+
+<!-- %Inline; covers inline or "text-level" elements -->
+<!ENTITY % Inline "(#PCDATA | %inline; | %misc.inline;)*">
+
+<!--================== Block level elements ==============================-->
+
+<!ENTITY % heading "h1|h2|h3|h4|h5|h6">
+<!ENTITY % lists "ul | ol | dl">
+<!ENTITY % blocktext "pre | hr | blockquote | address">
+
+<!ENTITY % block
+     "p | %heading; | div | %lists; | %blocktext; | fieldset | table">
+
+<!ENTITY % Block "(%block; | form | %misc;)*">
+
+<!-- %Flow; mixes block and inline and is used for list items etc. -->
+<!ENTITY % Flow "(#PCDATA | %block; | form | %inline; | %misc;)*">
+
+<!--================== Content models for exclusions =====================-->
+
+<!-- a elements use %Inline; excluding a -->
+
+<!ENTITY % a.content
+   "(#PCDATA | %special; | %fontstyle; | %phrase; | %inline.forms; | %misc.inline;)*">
+
+<!-- pre uses %Inline excluding big, small, sup or sup -->
+
+<!ENTITY % pre.content
+   "(#PCDATA | a | %fontstyle; | %phrase; | %special.pre; | %misc.inline;
+      | %inline.forms;)*">
+
+<!-- form uses %Block; excluding form -->
+
+<!ENTITY % form.content "(%block; | %misc;)*">
+
+<!-- button uses %Flow; but excludes a, form and form controls -->
+
+<!ENTITY % button.content
+   "(#PCDATA | p | %heading; | div | %lists; | %blocktext; |
+    table | %special; | %fontstyle; | %phrase; | %misc;)*">
+
+<!--================ Document Structure ==================================-->
+
+<!-- the namespace URI designates the document profile -->
+
+<!ELEMENT html (head, body)>
+<!ATTLIST html
+  %i18n;
+  id          ID             #IMPLIED
+  xmlns       %URI;          #FIXED 'http://www.w3.org/1999/xhtml'
+  >
+
+<!--================ Document Head =======================================-->
+
+<!ENTITY % head.misc "(script|style|meta|link|object)*">
+
+<!-- content model is %head.misc; combined with a single
+     title and an optional base element in any order -->
+
+<!ELEMENT head (%head.misc;,
+     ((title, %head.misc;, (base, %head.misc;)?) |
+      (base, %head.misc;, (title, %head.misc;))))>
+
+<!ATTLIST head
+  %i18n;
+  id          ID             #IMPLIED
+  profile     %URI;          #IMPLIED
+  >
+
+<!-- The title element is not considered part of the flow of text.
+       It should be displayed, for example as the page header or
+       window title. Exactly one title is required per document.
+    -->
+<!ELEMENT title (#PCDATA)>
+<!ATTLIST title 
+  %i18n;
+  id          ID             #IMPLIED
+  >
+
+<!-- document base URI -->
+
+<!ELEMENT base EMPTY>
+<!ATTLIST base
+  href        %URI;          #REQUIRED
+  id          ID             #IMPLIED
+  >
+
+<!-- generic metainformation -->
+<!ELEMENT meta EMPTY>
+<!ATTLIST meta
+  %i18n;
+  id          ID             #IMPLIED
+  http-equiv  CDATA          #IMPLIED
+  name        CDATA          #IMPLIED
+  content     CDATA          #REQUIRED
+  scheme      CDATA          #IMPLIED
+  >
+
+<!--
+  Relationship values can be used in principle:
+
+   a) for document specific toolbars/menus when used
+      with the link element in document head e.g.
+        start, contents, previous, next, index, end, help
+   b) to link to a separate style sheet (rel="stylesheet")
+   c) to make a link to a script (rel="script")
+   d) by stylesheets to control how collections of
+      html nodes are rendered into printed documents
+   e) to make a link to a printable version of this document
+      e.g. a PostScript or PDF version (rel="alternate" media="print")
+-->
+
+<!ELEMENT link EMPTY>
+<!ATTLIST link
+  %attrs;
+  charset     %Charset;      #IMPLIED
+  href        %URI;          #IMPLIED
+  hreflang    %LanguageCode; #IMPLIED
+  type        %ContentType;  #IMPLIED
+  rel         %LinkTypes;    #IMPLIED
+  rev         %LinkTypes;    #IMPLIED
+  media       %MediaDesc;    #IMPLIED
+  >
+
+<!-- style info, which may include CDATA sections -->
+<!ELEMENT style (#PCDATA)>
+<!ATTLIST style
+  %i18n;
+  id          ID             #IMPLIED
+  type        %ContentType;  #REQUIRED
+  media       %MediaDesc;    #IMPLIED
+  title       %Text;         #IMPLIED
+  xml:space   (preserve)     #FIXED 'preserve'
+  >
+
+<!-- script statements, which may include CDATA sections -->
+<!ELEMENT script (#PCDATA)>
+<!ATTLIST script
+  id          ID             #IMPLIED
+  charset     %Charset;      #IMPLIED
+  type        %ContentType;  #REQUIRED
+  src         %URI;          #IMPLIED
+  defer       (defer)        #IMPLIED
+  xml:space   (preserve)     #FIXED 'preserve'
+  >
+
+<!-- alternate content container for non script-based rendering -->
+
+<!ELEMENT noscript %Block;>
+<!ATTLIST noscript
+  %attrs;
+  >
+
+<!--=================== Document Body ====================================-->
+
+<!ELEMENT body %Block;>
+<!ATTLIST body
+  %attrs;
+  onload          %Script;   #IMPLIED
+  onunload        %Script;   #IMPLIED
+  >
+
+<!ELEMENT div %Flow;>  <!-- generic language/style container -->
+<!ATTLIST div
+  %attrs;
+  >
+
+<!--=================== Paragraphs =======================================-->
+
+<!ELEMENT p %Inline;>
+<!ATTLIST p
+  %attrs;
+  >
+
+<!--=================== Headings =========================================-->
+
+<!--
+  There are six levels of headings from h1 (the most important)
+  to h6 (the least important).
+-->
+
+<!ELEMENT h1  %Inline;>
+<!ATTLIST h1
+   %attrs;
+   >
+
+<!ELEMENT h2 %Inline;>
+<!ATTLIST h2
+   %attrs;
+   >
+
+<!ELEMENT h3 %Inline;>
+<!ATTLIST h3
+   %attrs;
+   >
+
+<!ELEMENT h4 %Inline;>
+<!ATTLIST h4
+   %attrs;
+   >
+
+<!ELEMENT h5 %Inline;>
+<!ATTLIST h5
+   %attrs;
+   >
+
+<!ELEMENT h6 %Inline;>
+<!ATTLIST h6
+   %attrs;
+   >
+
+<!--=================== Lists ============================================-->
+
+<!-- Unordered list -->
+
+<!ELEMENT ul (li)+>
+<!ATTLIST ul
+  %attrs;
+  >
+
+<!-- Ordered (numbered) list -->
+
+<!ELEMENT ol (li)+>
+<!ATTLIST ol
+  %attrs;
+  >
+
+<!-- list item -->
+
+<!ELEMENT li %Flow;>
+<!ATTLIST li
+  %attrs;
+  >
+
+<!-- definition lists - dt for term, dd for its definition -->
+
+<!ELEMENT dl (dt|dd)+>
+<!ATTLIST dl
+  %attrs;
+  >
+
+<!ELEMENT dt %Inline;>
+<!ATTLIST dt
+  %attrs;
+  >
+
+<!ELEMENT dd %Flow;>
+<!ATTLIST dd
+  %attrs;
+  >
+
+<!--=================== Address ==========================================-->
+
+<!-- information on author -->
+
+<!ELEMENT address %Inline;>
+<!ATTLIST address
+  %attrs;
+  >
+
+<!--=================== Horizontal Rule ==================================-->
+
+<!ELEMENT hr EMPTY>
+<!ATTLIST hr
+  %attrs;
+  >
+
+<!--=================== Preformatted Text ================================-->
+
+<!-- content is %Inline; excluding "img|object|big|small|sub|sup" -->
+
+<!ELEMENT pre %pre.content;>
+<!ATTLIST pre
+  %attrs;
+  xml:space (preserve) #FIXED 'preserve'
+  >
+
+<!--=================== Block-like Quotes ================================-->
+
+<!ELEMENT blockquote %Block;>
+<!ATTLIST blockquote
+  %attrs;
+  cite        %URI;          #IMPLIED
+  >
+
+<!--=================== Inserted/Deleted Text ============================-->
+
+<!--
+  ins/del are allowed in block and inline content, but its
+  inappropriate to include block content within an ins element
+  occurring in inline content.
+-->
+<!ELEMENT ins %Flow;>
+<!ATTLIST ins
+  %attrs;
+  cite        %URI;          #IMPLIED
+  datetime    %Datetime;     #IMPLIED
+  >
+
+<!ELEMENT del %Flow;>
+<!ATTLIST del
+  %attrs;
+  cite        %URI;          #IMPLIED
+  datetime    %Datetime;     #IMPLIED
+  >
+
+<!--================== The Anchor Element ================================-->
+
+<!-- content is %Inline; except that anchors shouldn't be nested -->
+
+<!ELEMENT a %a.content;>
+<!ATTLIST a
+  %attrs;
+  %focus;
+  charset     %Charset;      #IMPLIED
+  type        %ContentType;  #IMPLIED
+  name        NMTOKEN        #IMPLIED
+  href        %URI;          #IMPLIED
+  hreflang    %LanguageCode; #IMPLIED
+  rel         %LinkTypes;    #IMPLIED
+  rev         %LinkTypes;    #IMPLIED
+  shape       %Shape;        "rect"
+  coords      %Coords;       #IMPLIED
+  >
+
+<!--===================== Inline Elements ================================-->
+
+<!ELEMENT span %Inline;> <!-- generic language/style container -->
+<!ATTLIST span
+  %attrs;
+  >
+
+<!ELEMENT bdo %Inline;>  <!-- I18N BiDi over-ride -->
+<!ATTLIST bdo
+  %coreattrs;
+  %events;
+  lang        %LanguageCode; #IMPLIED
+  xml:lang    %LanguageCode; #IMPLIED
+  dir         (ltr|rtl)      #REQUIRED
+  >
+
+<!ELEMENT br EMPTY>   <!-- forced line break -->
+<!ATTLIST br
+  %coreattrs;
+  >
+
+<!ELEMENT em %Inline;>   <!-- emphasis -->
+<!ATTLIST em %attrs;>
+
+<!ELEMENT strong %Inline;>   <!-- strong emphasis -->
+<!ATTLIST strong %attrs;>
+
+<!ELEMENT dfn %Inline;>   <!-- definitional -->
+<!ATTLIST dfn %attrs;>
+
+<!ELEMENT code %Inline;>   <!-- program code -->
+<!ATTLIST code %attrs;>
+
+<!ELEMENT samp %Inline;>   <!-- sample -->
+<!ATTLIST samp %attrs;>
+
+<!ELEMENT kbd %Inline;>  <!-- something user would type -->
+<!ATTLIST kbd %attrs;>
+
+<!ELEMENT var %Inline;>   <!-- variable -->
+<!ATTLIST var %attrs;>
+
+<!ELEMENT cite %Inline;>   <!-- citation -->
+<!ATTLIST cite %attrs;>
+
+<!ELEMENT abbr %Inline;>   <!-- abbreviation -->
+<!ATTLIST abbr %attrs;>
+
+<!ELEMENT acronym %Inline;>   <!-- acronym -->
+<!ATTLIST acronym %attrs;>
+
+<!ELEMENT q %Inline;>   <!-- inlined quote -->
+<!ATTLIST q
+  %attrs;
+  cite        %URI;          #IMPLIED
+  >
+
+<!ELEMENT sub %Inline;> <!-- subscript -->
+<!ATTLIST sub %attrs;>
+
+<!ELEMENT sup %Inline;> <!-- superscript -->
+<!ATTLIST sup %attrs;>
+
+<!ELEMENT tt %Inline;>   <!-- fixed pitch font -->
+<!ATTLIST tt %attrs;>
+
+<!ELEMENT i %Inline;>   <!-- italic font -->
+<!ATTLIST i %attrs;>
+
+<!ELEMENT b %Inline;>   <!-- bold font -->
+<!ATTLIST b %attrs;>
+
+<!ELEMENT big %Inline;>   <!-- bigger font -->
+<!ATTLIST big %attrs;>
+
+<!ELEMENT small %Inline;>   <!-- smaller font -->
+<!ATTLIST small %attrs;>
+
+<!--==================== Object ======================================-->
+<!--
+  object is used to embed objects as part of HTML pages.
+  param elements should precede other content. Parameters
+  can also be expressed as attribute/value pairs on the
+  object element itself when brevity is desired.
+-->
+
+<!ELEMENT object (#PCDATA | param | %block; | form | %inline; | %misc;)*>
+<!ATTLIST object
+  %attrs;
+  declare     (declare)      #IMPLIED
+  classid     %URI;          #IMPLIED
+  codebase    %URI;          #IMPLIED
+  data        %URI;          #IMPLIED
+  type        %ContentType;  #IMPLIED
+  codetype    %ContentType;  #IMPLIED
+  archive     %UriList;      #IMPLIED
+  standby     %Text;         #IMPLIED
+  height      %Length;       #IMPLIED
+  width       %Length;       #IMPLIED
+  usemap      %URI;          #IMPLIED
+  name        NMTOKEN        #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  >
+
+<!--
+  param is used to supply a named property value.
+  In XML it would seem natural to follow RDF and support an
+  abbreviated syntax where the param elements are replaced
+  by attribute value pairs on the object start tag.
+-->
+<!ELEMENT param EMPTY>
+<!ATTLIST param
+  id          ID             #IMPLIED
+  name        CDATA          #IMPLIED
+  value       CDATA          #IMPLIED
+  valuetype   (data|ref|object) "data"
+  type        %ContentType;  #IMPLIED
+  >
+
+<!--=================== Images ===========================================-->
+
+<!--
+   To avoid accessibility problems for people who aren't
+   able to see the image, you should provide a text
+   description using the alt and longdesc attributes.
+   In addition, avoid the use of server-side image maps.
+   Note that in this DTD there is no name attribute. That
+   is only available in the transitional and frameset DTD.
+-->
+
+<!ELEMENT img EMPTY>
+<!ATTLIST img
+  %attrs;
+  src         %URI;          #REQUIRED
+  alt         %Text;         #REQUIRED
+  longdesc    %URI;          #IMPLIED
+  height      %Length;       #IMPLIED
+  width       %Length;       #IMPLIED
+  usemap      %URI;          #IMPLIED
+  ismap       (ismap)        #IMPLIED
+  >
+
+<!-- usemap points to a map element which may be in this document
+  or an external document, although the latter is not widely supported -->
+
+<!--================== Client-side image maps ============================-->
+
+<!-- These can be placed in the same document or grouped in a
+     separate document although this isn't yet widely supported -->
+
+<!ELEMENT map ((%block; | form | %misc;)+ | area+)>
+<!ATTLIST map
+  %i18n;
+  %events;
+  id          ID             #REQUIRED
+  class       CDATA          #IMPLIED
+  style       %StyleSheet;   #IMPLIED
+  title       %Text;         #IMPLIED
+  name        NMTOKEN        #IMPLIED
+  >
+
+<!ELEMENT area EMPTY>
+<!ATTLIST area
+  %attrs;
+  %focus;
+  shape       %Shape;        "rect"
+  coords      %Coords;       #IMPLIED
+  href        %URI;          #IMPLIED
+  nohref      (nohref)       #IMPLIED
+  alt         %Text;         #REQUIRED
+  >
+
+<!--================ Forms ===============================================-->
+<!ELEMENT form %form.content;>   <!-- forms shouldn't be nested -->
+
+<!ATTLIST form
+  %attrs;
+  action      %URI;          #REQUIRED
+  method      (get|post)     "get"
+  enctype     %ContentType;  "application/x-www-form-urlencoded"
+  onsubmit    %Script;       #IMPLIED
+  onreset     %Script;       #IMPLIED
+  accept      %ContentTypes; #IMPLIED
+  accept-charset %Charsets;  #IMPLIED
+  >
+
+<!--
+  Each label must not contain more than ONE field
+  Label elements shouldn't be nested.
+-->
+<!ELEMENT label %Inline;>
+<!ATTLIST label
+  %attrs;
+  for         IDREF          #IMPLIED
+  accesskey   %Character;    #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  >
+
+<!ENTITY % InputType
+  "(text | password | checkbox |
+    radio | submit | reset |
+    file | hidden | image | button)"
+   >
+
+<!-- the name attribute is required for all but submit & reset -->
+
+<!ELEMENT input EMPTY>     <!-- form control -->
+<!ATTLIST input
+  %attrs;
+  %focus;
+  type        %InputType;    "text"
+  name        CDATA          #IMPLIED
+  value       CDATA          #IMPLIED
+  checked     (checked)      #IMPLIED
+  disabled    (disabled)     #IMPLIED
+  readonly    (readonly)     #IMPLIED
+  size        CDATA          #IMPLIED
+  maxlength   %Number;       #IMPLIED
+  src         %URI;          #IMPLIED
+  alt         CDATA          #IMPLIED
+  usemap      %URI;          #IMPLIED
+  onselect    %Script;       #IMPLIED
+  onchange    %Script;       #IMPLIED
+  accept      %ContentTypes; #IMPLIED
+  >
+
+<!ELEMENT select (optgroup|option)+>  <!-- option selector -->
+<!ATTLIST select
+  %attrs;
+  name        CDATA          #IMPLIED
+  size        %Number;       #IMPLIED
+  multiple    (multiple)     #IMPLIED
+  disabled    (disabled)     #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  onchange    %Script;       #IMPLIED
+  >
+
+<!ELEMENT optgroup (option)+>   <!-- option group -->
+<!ATTLIST optgroup
+  %attrs;
+  disabled    (disabled)     #IMPLIED
+  label       %Text;         #REQUIRED
+  >
+
+<!ELEMENT option (#PCDATA)>     <!-- selectable choice -->
+<!ATTLIST option
+  %attrs;
+  selected    (selected)     #IMPLIED
+  disabled    (disabled)     #IMPLIED
+  label       %Text;         #IMPLIED
+  value       CDATA          #IMPLIED
+  >
+
+<!ELEMENT textarea (#PCDATA)>     <!-- multi-line text field -->
+<!ATTLIST textarea
+  %attrs;
+  %focus;
+  name        CDATA          #IMPLIED
+  rows        %Number;       #REQUIRED
+  cols        %Number;       #REQUIRED
+  disabled    (disabled)     #IMPLIED
+  readonly    (readonly)     #IMPLIED
+  onselect    %Script;       #IMPLIED
+  onchange    %Script;       #IMPLIED
+  >
+
+<!--
+  The fieldset element is used to group form fields.
+  Only one legend element should occur in the content
+  and if present should only be preceded by whitespace.
+-->
+<!ELEMENT fieldset (#PCDATA | legend | %block; | form | %inline; | %misc;)*>
+<!ATTLIST fieldset
+  %attrs;
+  >
+
+<!ELEMENT legend %Inline;>     <!-- fieldset label -->
+<!ATTLIST legend
+  %attrs;
+  accesskey   %Character;    #IMPLIED
+  >
+
+<!--
+ Content is %Flow; excluding a, form and form controls
+--> 
+<!ELEMENT button %button.content;>  <!-- push button -->
+<!ATTLIST button
+  %attrs;
+  %focus;
+  name        CDATA          #IMPLIED
+  value       CDATA          #IMPLIED
+  type        (button|submit|reset) "submit"
+  disabled    (disabled)     #IMPLIED
+  >
+
+<!--======================= Tables =======================================-->
+
+<!-- Derived from IETF HTML table standard, see [RFC1942] -->
+
+<!--
+ The border attribute sets the thickness of the frame around the
+ table. The default units are screen pixels.
+
+ The frame attribute specifies which parts of the frame around
+ the table should be rendered. The values are not the same as
+ CALS to avoid a name clash with the valign attribute.
+-->
+<!ENTITY % TFrame "(void|above|below|hsides|lhs|rhs|vsides|box|border)">
+
+<!--
+ The rules attribute defines which rules to draw between cells:
+
+ If rules is absent then assume:
+     "none" if border is absent or border="0" otherwise "all"
+-->
+
+<!ENTITY % TRules "(none | groups | rows | cols | all)">
+  
+<!-- horizontal alignment attributes for cell contents
+
+  char        alignment char, e.g. char=':'
+  charoff     offset for alignment char
+-->
+<!ENTITY % cellhalign
+  "align      (left|center|right|justify|char) #IMPLIED
+   char       %Character;    #IMPLIED
+   charoff    %Length;       #IMPLIED"
+  >
+
+<!-- vertical alignment attributes for cell contents -->
+<!ENTITY % cellvalign
+  "valign     (top|middle|bottom|baseline) #IMPLIED"
+  >
+
+<!ELEMENT table
+     (caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))>
+<!ELEMENT caption  %Inline;>
+<!ELEMENT thead    (tr)+>
+<!ELEMENT tfoot    (tr)+>
+<!ELEMENT tbody    (tr)+>
+<!ELEMENT colgroup (col)*>
+<!ELEMENT col      EMPTY>
+<!ELEMENT tr       (th|td)+>
+<!ELEMENT th       %Flow;>
+<!ELEMENT td       %Flow;>
+
+<!ATTLIST table
+  %attrs;
+  summary     %Text;         #IMPLIED
+  width       %Length;       #IMPLIED
+  border      %Pixels;       #IMPLIED
+  frame       %TFrame;       #IMPLIED
+  rules       %TRules;       #IMPLIED
+  cellspacing %Length;       #IMPLIED
+  cellpadding %Length;       #IMPLIED
+  >
+
+<!ATTLIST caption
+  %attrs;
+  >
+
+<!--
+colgroup groups a set of col elements. It allows you to group
+several semantically related columns together.
+-->
+<!ATTLIST colgroup
+  %attrs;
+  span        %Number;       "1"
+  width       %MultiLength;  #IMPLIED
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!--
+ col elements define the alignment properties for cells in
+ one or more columns.
+
+ The width attribute specifies the width of the columns, e.g.
+
+     width=64        width in screen pixels
+     width=0.5*      relative width of 0.5
+
+ The span attribute causes the attributes of one
+ col element to apply to more than one column.
+-->
+<!ATTLIST col
+  %attrs;
+  span        %Number;       "1"
+  width       %MultiLength;  #IMPLIED
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!--
+    Use thead to duplicate headers when breaking table
+    across page boundaries, or for static headers when
+    tbody sections are rendered in scrolling panel.
+
+    Use tfoot to duplicate footers when breaking table
+    across page boundaries, or for static footers when
+    tbody sections are rendered in scrolling panel.
+
+    Use multiple tbody sections when rules are needed
+    between groups of table rows.
+-->
+<!ATTLIST thead
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!ATTLIST tfoot
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!ATTLIST tbody
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!ATTLIST tr
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+
+<!-- Scope is simpler than headers attribute for common tables -->
+<!ENTITY % Scope "(row|col|rowgroup|colgroup)">
+
+<!-- th is for headers, td for data and for cells acting as both -->
+
+<!ATTLIST th
+  %attrs;
+  abbr        %Text;         #IMPLIED
+  axis        CDATA          #IMPLIED
+  headers     IDREFS         #IMPLIED
+  scope       %Scope;        #IMPLIED
+  rowspan     %Number;       "1"
+  colspan     %Number;       "1"
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!ATTLIST td
+  %attrs;
+  abbr        %Text;         #IMPLIED
+  axis        CDATA          #IMPLIED
+  headers     IDREFS         #IMPLIED
+  scope       %Scope;        #IMPLIED
+  rowspan     %Number;       "1"
+  colspan     %Number;       "1"
+  %cellhalign;
+  %cellvalign;
+  >
+
+
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/mimetype b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd_expected_results.json
new file mode 100644
index 0000000..2215c1f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/dtd_expected_results.json
@@ -0,0 +1,644 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/xhtml/dtd.epub",
+    "filename" : "dtd.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:28",
+    "elapsedTime" : 105,
+    "nFatal" : 0,
+    "nError" : 6,
+    "nWarning" : 3,
+    "nUsage" : 6
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "DTD Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 4,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 260,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 481,
+    "uncompressedSize" : 1591,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "31f7e9cff7dca6132e9dd1678f37dfdba9f94f94068a28fb68be481852dab",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "lat-ent",
+    "fileName" : "OPS/xhtml-lat1.ent",
+    "media_type" : "application/xml-dtd",
+    "compressedSize" : 2149,
+    "uncompressedSize" : 8758,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3535a3cf7672ab1a511e4edd94e8e1da8b5874aba8ee8851bd2861d25b0dfd9",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "mydtd",
+    "fileName" : "OPS/sample.dtd",
+    "media_type" : "application/xml-dtd",
+    "compressedSize" : 149,
+    "uncompressedSize" : 339,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "08aa2d7866d4f9ce978c2a50e796d55b1bb15d844f8f24c723bfe31fef06d",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 349,
+    "uncompressedSize" : 661,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b21dfb53538a9457e1ca5b9498f8c610e7bcb1137ef6598d6a5cafa5083e979",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/internal_dtd.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/internal_dtd.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 220,
+    "uncompressedSize" : 325,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2c5c92c37757525f3d4214cf64e0e31134056b39d86dfadad66c3896ddcf73",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/external_dtd.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 235,
+    "uncompressedSize" : 364,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3caf48e4b68b3ef6981cb5b8d7dc59fef751ae8a1349937c4ddbd43c0d2ddf6",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page03",
+    "fileName" : "OPS/inline_dtd.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 255,
+    "uncompressedSize" : 404,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "73bbe38530ab6144dd8487661cef716eee7992191288fbd6799abd37f85855b8",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page04",
+    "fileName" : "OPS/internal_xhtml_dtd.xml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 256,
+    "uncompressedSize" : 414,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f67e75e68f5cd14b298c812df08a43966528fe6218cac0e69915102f54b4fa",
+    "isSpineItem" : true,
+    "spineIndex" : 3,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page05",
+    "fileName" : "OPS/internal_dtd2.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 245,
+    "uncompressedSize" : 395,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "77543998b26f140bda385eaa19948508eeccc1acb1b496d7c86977d3b509c",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "special-ent",
+    "fileName" : "OPS/xhtml-special.ent",
+    "media_type" : "application/xml-dtd",
+    "compressedSize" : 1524,
+    "uncompressedSize" : 4259,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "348d06519736b764a86fd24aed49ad35114f030ede0f263d3c4638f4e1217",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "symbol-ent",
+    "fileName" : "OPS/xhtml-symbol.ent",
+    "media_type" : "application/xml-dtd",
+    "compressedSize" : 3631,
+    "uncompressedSize" : 12771,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5b17303c47aba7879397bccdd23ef240eb7578c6345a84f345361741b7e7d",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 246,
+    "uncompressedSize" : 414,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "9bb4d6e8d8a1dd27694a1469a51b8ef9af065c8b74d5ba289832d3a9976297",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/external_dtd.xhtml", "OPS/internal_dtd.xhtml" ]
+  }, {
+    "id" : "xhtmldtd",
+    "fileName" : "OPS/xhtml1-strict.dtd",
+    "media_type" : "application/xml-dtd",
+    "compressedSize" : 6760,
+    "uncompressedSize" : 25473,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "5887cf989685d6faf5ca2f1823df7c7040657ba11ff579af759de125143e2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_dtd.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/inline_dtd.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "dtd.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-003",
+    "severity" : "ERROR",
+    "message" : "External entities are not allowed in ePub v3 documents. External entity declaration found: arwen.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/internal_dtd2.xhtml",
+      "line" : 3,
+      "column" : 45,
+      "context" : "arwen"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-003",
+    "severity" : "ERROR",
+    "message" : "External entities are not allowed in ePub v3 documents. External entity declaration found: cent.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/internal_dtd2.xhtml",
+      "line" : 4,
+      "column" : 44,
+      "context" : "cent"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-004",
+    "severity" : "ERROR",
+    "message" : "Irregular DOCTYPE: found '-//W3C//DTD XHTML 1.1//EN', expected '<!DOCTYPE html>'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_dtd.xhtml",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-004",
+    "severity" : "ERROR",
+    "message" : "Irregular DOCTYPE: found 'null', expected '<!DOCTYPE html>'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/internal_dtd.xhtml",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    }, {
+      "fileName" : "OPS/internal_xhtml_dtd.xml",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 3,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-014a",
+    "severity" : "WARNING",
+    "message" : "XHTML Content Document file name 'OPS/internal_xhtml_dtd.xml' should have the extension '.xhtml'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 16,
+      "column" : 90,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-015",
+    "severity" : "WARNING",
+    "message" : "HTML4 DOCTYPE definition within ePub v3.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "external_dtd.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "internal_xhtml_dtd.xml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-023",
+    "severity" : "WARNING",
+    "message" : "An invalid XHTML Named Entity was found: '&arwen;'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/inline_dtd.xhtml",
+      "line" : 14,
+      "column" : 7,
+      "context" : "<p>&arwen;</p"
+    }, {
+      "fileName" : "OPS/internal_dtd.xhtml",
+      "line" : 12,
+      "column" : 7,
+      "context" : "<p>&arwen;</p"
+    }, {
+      "fileName" : "OPS/internal_dtd2.xhtml",
+      "line" : 14,
+      "column" : 7,
+      "context" : "<p>&arwen;</p"
+    } ],
+    "suggestion" : "Check the spelling or use numbered entities instead."
+  }, {
+    "ID" : "HTM-024",
+    "severity" : "USAGE",
+    "message" : "An XHTML Named Entity was found. Only '&' ''' '"e;' '<' or '>' are allowed.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/external_dtd.xhtml",
+      "line" : 12,
+      "column" : 43,
+      "context" : "rnal DTD reference. ¢</p"
+    }, {
+      "fileName" : "OPS/inline_dtd.xhtml",
+      "line" : 13,
+      "column" : 43,
+      "context" : "rnal DTD reference. ¢</p"
+    }, {
+      "fileName" : "OPS/internal_dtd.xhtml",
+      "line" : 11,
+      "column" : 43,
+      "context" : "rnal DTD reference. ¢</p"
+    }, {
+      "fileName" : "OPS/internal_dtd2.xhtml",
+      "line" : 13,
+      "column" : 43,
+      "context" : "rnal DTD reference. ¢</p"
+    }, {
+      "fileName" : "OPS/internal_xhtml_dtd.xml",
+      "line" : 11,
+      "column" : 9,
+      "context" : "<p>     T"
+    }, {
+      "fileName" : "OPS/internal_xhtml_dtd.xml",
+      "line" : 11,
+      "column" : 15,
+      "context" : "<p>     T"
+    }, {
+      "fileName" : "OPS/internal_xhtml_dtd.xml",
+      "line" : 11,
+      "column" : 21,
+      "context" : "<p>     Th"
+    }, {
+      "fileName" : "OPS/internal_xhtml_dtd.xml",
+      "line" : 11,
+      "column" : 27,
+      "context" : "p>     This has"
+    }, {
+      "fileName" : "OPS/internal_xhtml_dtd.xml",
+      "line" : 11,
+      "column" : 33,
+      "context" : "p;    This has a ref"
+    }, {
+      "fileName" : "OPS/internal_xhtml_dtd.xml",
+      "line" : 12,
+      "column" : 9,
+      "context" : "<p>¢</p"
+    } ],
+    "suggestion" : "Check the spelling or use numbered entities instead."
+  }, {
+    "ID" : "OPF-058",
+    "severity" : "USAGE",
+    "message" : "Spine item has no TOC entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/inline_dtd.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/internal_xhtml_dtd.xml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one TOC entry."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/external_dtd.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/inline_dtd.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/internal_xhtml_dtd.xml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  }, {
+    "ID" : "RSC-001",
+    "severity" : "ERROR",
+    "message" : "File 'sample.dtd' is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/internal_dtd.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/internal_dtd2.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-001",
+    "severity" : "ERROR",
+    "message" : "File 'xhtml1-strict.dtd' is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/internal_xhtml_dtd.xml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/epubcfi/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/xhtml/epubcfi/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/epubcfi/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/epubcfi/OPS/Intra_Publication.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/epubcfi/OPS/Intra_Publication.xhtml
new file mode 100644
index 0000000..05452a6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/epubcfi/OPS/Intra_Publication.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>#epubcfi - Intra Publication</title>
+</head>
+<body>
+  <div>
+    <h1>#epubcfi - Intra Publication</h1>
+      <a href="content.opf#epubcfi(/6/4!/4)">valid absolute cfi location</a>
+      <a href="Outer_Publication.xhtml#epubcfi(/4/2/2)">valid relative cfi location</a>
+      <a href="content.opf#epubcfi(/6/8!/4)">invalid cfi location</a>
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/epubcfi/OPS/Outer_Publication.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/epubcfi/OPS/Outer_Publication.xhtml
new file mode 100644
index 0000000..0a29867
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/epubcfi/OPS/Outer_Publication.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>#epubcfi - Outer Publication</title>
+</head>
+<body>
+<div>
+    <h1>#epubcfi - Outer Publication</h1>
+
+    <a href="lang.epub#epubcfi(/6/4!/4)">valid  cfi location</a>
+    <a href="lang.epub#epubcfi(/6/18!/4)">invalid cfi location</a>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/epubcfi/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/xhtml/epubcfi/OPS/content.opf
new file mode 100644
index 0000000..dd286c2
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/epubcfi/OPS/content.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Epub cfi Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" href="Intra_Publication.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="Outer_Publication.xhtml" media-type="application/xhtml+xml" />
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/epubcfi/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/xhtml/epubcfi/OPS/toc.ncx
new file mode 100644
index 0000000..15dea73
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/epubcfi/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Hyperlink Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Hyperlink Sample</text>
+      </navLabel>
+      <content src="Intra_Publication.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/epubcfi/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/epubcfi/OPS/toc.xhtml
new file mode 100644
index 0000000..4725471
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/epubcfi/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="Intra_Publication.xhtml">Hyperling Sample</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/epubcfi/mimetype b/src/test/resources/com/adobe/epubcheck/test/xhtml/epubcfi/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/epubcfi/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/epubcfi_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/xhtml/epubcfi_expected_results.json
new file mode 100644
index 0000000..f4257ed
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/epubcfi_expected_results.json
@@ -0,0 +1,302 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/xhtml/epubcfi.epub",
+    "filename" : "epubcfi.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:28",
+    "elapsedTime" : 82,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 7
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Epub cfi Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 2,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 361,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 384,
+    "uncompressedSize" : 868,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "6f5c5753a861b5aabea6b95364326e7243ab4724dde596dffd8b1526491dc6",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 299,
+    "uncompressedSize" : 563,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a8b3fe211f1f2ced1e594898a8804d289cc074f7cba8df2e1839d579adf5b69",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/Intra_Publication.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/Intra_Publication.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 240,
+    "uncompressedSize" : 471,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7b8fd1edc9eaef57f41d8cf6e8b11d8ea4df6caca809536866ac6a927622f2",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/Outer_Publication.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 200,
+    "uncompressedSize" : 364,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a1d4232461dd116471e688169f5472608a219043de9e3984e81bea319ccebd",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 246,
+    "uncompressedSize" : 360,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "28cb9bd4ac313b3198c9580f9b0568391f615b1c47a36df43ce6327851ace",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/Intra_Publication.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/Intra_Publication.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/Outer_Publication.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "epubcfi.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-012",
+    "severity" : "USAGE",
+    "message" : "Found a link to a CFI in an external book.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/Outer_Publication.xhtml",
+      "line" : 10,
+      "column" : 42,
+      "context" : "lang.epub#epubcfi(/6/4!/4)"
+    }, {
+      "fileName" : "OPS/Outer_Publication.xhtml",
+      "line" : 11,
+      "column" : 43,
+      "context" : "lang.epub#epubcfi(/6/18!/4)"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-013",
+    "severity" : "USAGE",
+    "message" : "Intra-Publication CFIs found in document.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/Intra_Publication.xhtml",
+      "line" : 9,
+      "column" : 46,
+      "context" : "content.opf#epubcfi(/6/4!/4)"
+    }, {
+      "fileName" : "OPS/Intra_Publication.xhtml",
+      "line" : 10,
+      "column" : 57,
+      "context" : "Outer_Publication.xhtml#epubcfi(/4/2/2)"
+    }, {
+      "fileName" : "OPS/Intra_Publication.xhtml",
+      "line" : 11,
+      "column" : 46,
+      "context" : "content.opf#epubcfi(/6/8!/4)"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-058",
+    "severity" : "USAGE",
+    "message" : "Spine item has no TOC entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/Outer_Publication.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one TOC entry."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/Outer_Publication.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_deprecated_epub3/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_deprecated_epub3/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_deprecated_epub3/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_deprecated_epub3/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_deprecated_epub3/OPS/content.opf
new file mode 100644
index 0000000..abe9d8f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_deprecated_epub3/OPS/content.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>HTML 5 Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" href="html5.xhtml" media-type="application/xhtml+xml" />
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_deprecated_epub3/OPS/html5.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_deprecated_epub3/OPS/html5.xhtml
new file mode 100644
index 0000000..b858767
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_deprecated_epub3/OPS/html5.xhtml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>HTML5</title>
+</head>
+<body>
+<div>
+    <article>
+        <h1>Internet Explorer 9</h1>
+        <p>Windows Internet Explorer 9 (abbreviated as IE9) was released to
+            the  public on March 14, 2011 at 21:00 PDT.....</p>
+    </article>
+
+    <aside>
+        <h4>Epcot Center</h4>
+        <p>The Epcot Center is a theme park in Disney World, Florida.</p>
+    </aside>
+
+    <strike>This text is in a strike tag.</strike>
+    <center>This text is in a center tag.</center>
+    <big>This text is in a big tag.</big>
+    Can I get this <acronym title="as soon as possible">ASAP</acronym>?
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_deprecated_epub3/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_deprecated_epub3/OPS/toc.ncx
new file mode 100644
index 0000000..ecc0bf3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_deprecated_epub3/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>HTML5 Testing</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>HTML5 Sample</text>
+      </navLabel>
+      <content src="html5.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_deprecated_epub3/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_deprecated_epub3/OPS/toc.xhtml
new file mode 100644
index 0000000..52991bf
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_deprecated_epub3/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="html5.xhtml">HTML5</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_deprecated_epub3/mimetype b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_deprecated_epub3/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_deprecated_epub3/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_deprecated_epub3_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_deprecated_epub3_expected_results.json
new file mode 100644
index 0000000..9334dc9
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_deprecated_epub3_expected_results.json
@@ -0,0 +1,260 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/xhtml/html5_deprecated_epub3.epub",
+    "filename" : "html5_deprecated_epub3.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:27",
+    "elapsedTime" : 86,
+    "nFatal" : 0,
+    "nError" : 4,
+    "nWarning" : 0,
+    "nUsage" : 3
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "HTML 5 Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : false,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 466,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 363,
+    "uncompressedSize" : 732,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3e02e8d3b65ec5fb08a6299ec94926af346afb7a1532e9c82f8ea9d7b6e0f1",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 288,
+    "uncompressedSize" : 546,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "73a729f831143549b9dbe5bc082edc31f7fe9d02bd6539e9ebf9546ad517b43",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/html5.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/html5.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 403,
+    "uncompressedSize" : 735,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "81b63e3fa59669554fadc2228b655e4b5d2c6a2f39e3ee5fd1c9cfa7f59acbd4",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : true,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 230,
+    "uncompressedSize" : 337,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "adc4b543b3f07f6d69207b619f3404a73c469a3d17fa81c536d79032daf270",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/html5.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/html5.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "html5_deprecated_epub3.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'element \"acronym\" not allowed here; expected the element end-tag, text or element \"a\", \"abbr\", \"address\", \"area\", \"article\", \"aside\", \"audio\", \"b\", \"bdi\", \"bdo\", \"blockquote\", \"br\", \"button\", \"canvas\", \"cite\", \"code\", \"command\", \"datalist\", \"del\", \"details\", \"dfn\", \"div\", \"dl\", \"em\", \"embed\", \"fieldset\", \"figure\", \"footer\", \"form\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"heade [...]
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/html5.xhtml",
+      "line" : 23,
+      "column" : 57,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'element \"big\" not allowed here; expected the element end-tag, text or element \"a\", \"abbr\", \"address\", \"area\", \"article\", \"aside\", \"audio\", \"b\", \"bdi\", \"bdo\", \"blockquote\", \"br\", \"button\", \"canvas\", \"cite\", \"code\", \"command\", \"datalist\", \"del\", \"details\", \"dfn\", \"div\", \"dl\", \"em\", \"embed\", \"fieldset\", \"figure\", \"footer\", \"form\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"header\", [...]
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/html5.xhtml",
+      "line" : 22,
+      "column" : 10,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'element \"center\" not allowed here; expected the element end-tag, text or element \"a\", \"abbr\", \"address\", \"area\", \"article\", \"aside\", \"audio\", \"b\", \"bdi\", \"bdo\", \"blockquote\", \"br\", \"button\", \"canvas\", \"cite\", \"code\", \"command\", \"datalist\", \"del\", \"details\", \"dfn\", \"div\", \"dl\", \"em\", \"embed\", \"fieldset\", \"figure\", \"footer\", \"form\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"header [...]
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/html5.xhtml",
+      "line" : 21,
+      "column" : 13,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'element \"strike\" not allowed here; expected the element end-tag, text or element \"a\", \"abbr\", \"address\", \"area\", \"article\", \"aside\", \"audio\", \"b\", \"bdi\", \"bdo\", \"blockquote\", \"br\", \"button\", \"canvas\", \"cite\", \"code\", \"command\", \"datalist\", \"del\", \"details\", \"dfn\", \"div\", \"dl\", \"em\", \"embed\", \"fieldset\", \"figure\", \"footer\", \"form\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"header [...]
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/html5.xhtml",
+      "line" : 20,
+      "column" : 13,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub2/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub2/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub2/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub2/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub2/OPS/content.opf
new file mode 100644
index 0000000..3147e43
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub2/OPS/content.opf
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="2.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>HTML 5 Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="html5.xhtml" media-type="application/xhtml+xml" />
+    <item id="sample" href="sample.m4a" media-type="audio/m4a"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+  </spine>
+</package>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub2/OPS/html5.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub2/OPS/html5.xhtml
new file mode 100644
index 0000000..f98dafc
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub2/OPS/html5.xhtml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>HTML5</title>
+</head>
+<body>
+ <div>
+     <article>
+         <h1>Internet Explorer 9</h1>
+         <p>Windows Internet Explorer 9 (abbreviated as IE9) was released to
+             the  public on March 14, 2011 at 21:00 PDT.....</p>
+     </article>
+
+     <aside>
+         <h4>Epcot Center</h4>
+         <p>The Epcot Center is a theme park in Disney World, Florida.</p>
+     </aside>
+
+     <audio  controls="controls" autoplay="autoplay">
+         <source src="sample.m4a" type="audio/mpeg"/>
+         Your browser does not support the audio tag.
+     </audio>
+ </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub2/OPS/sample.m4a b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub2/OPS/sample.m4a
new file mode 100644
index 0000000..f65e5ab
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub2/OPS/sample.m4a differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub2/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub2/OPS/toc.ncx
new file mode 100644
index 0000000..ecc0bf3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub2/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>HTML5 Testing</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>HTML5 Sample</text>
+      </navLabel>
+      <content src="html5.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub2/mimetype b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub2/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub2/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub2_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub2_expected_results.json
new file mode 100644
index 0000000..f2b937a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub2_expected_results.json
@@ -0,0 +1,244 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/xhtml/html5_epub2.epub",
+    "filename" : "html5_epub2.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:27",
+    "elapsedTime" : 22,
+    "nFatal" : 0,
+    "nError" : 3,
+    "nWarning" : 0,
+    "nUsage" : 1
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "HTML 5 Sample Book",
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "2.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : false,
+    "hasAudio" : true,
+    "hasVideo" : false,
+    "charsCount" : 375,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 322,
+    "uncompressedSize" : 642,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c6f865ae988debe9e4ad7ece1d93818cd22e10ea34e86e76f49cebd73be74d",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 288,
+    "uncompressedSize" : 546,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "73a729f831143549b9dbe5bc082edc31f7fe9d02bd6539e9ebf9546ad517b43",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/html5.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/html5.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 391,
+    "uncompressedSize" : 690,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c0a08d52d31a64c93ff7d5b47c6b7d141f926bfed511118df86abd98d9f5",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : true,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "sample",
+    "fileName" : "OPS/sample.m4a",
+    "media_type" : "audio/m4a",
+    "compressedSize" : 19030,
+    "uncompressedSize" : 43256,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "50c56b1bd5b886f9cacddf584594d72a18e53f48fc9872498589906a5deca0",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  } ],
+  "messages" : [ {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'element \"article\" not allowed anywhere; expected the element end-tag, text or element \"a\", \"abbr\", \"acronym\", \"address\", \"applet\", \"b\", \"bdo\", \"big\", \"blockquote\", \"br\", \"cite\", \"code\", \"del\", \"dfn\", \"div\", \"dl\", \"em\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"hr\", \"i\", \"iframe\", \"img\", \"ins\", \"kbd\", \"map\", \"noscript\", \"ns:svg\", \"object\", \"ol\", \"p\", \"pre\", \"q\", \"samp\", \"sc [...]
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/html5.xhtml",
+      "line" : 8,
+      "column" : 15,
+      "context" : null
+    }, {
+      "fileName" : "OPS/html5.xhtml",
+      "line" : 9,
+      "column" : 38,
+      "context" : null
+    }, {
+      "fileName" : "OPS/html5.xhtml",
+      "line" : 11,
+      "column" : 65,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'element \"aside\" not allowed anywhere; expected the element end-tag, text or element \"a\", \"abbr\", \"acronym\", \"address\", \"applet\", \"b\", \"bdo\", \"big\", \"blockquote\", \"br\", \"cite\", \"code\", \"del\", \"dfn\", \"div\", \"dl\", \"em\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"hr\", \"i\", \"iframe\", \"img\", \"ins\", \"kbd\", \"map\", \"noscript\", \"ns:svg\", \"object\", \"ol\", \"p\", \"pre\", \"q\", \"samp\", \"scri [...]
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/html5.xhtml",
+      "line" : 14,
+      "column" : 13,
+      "context" : null
+    }, {
+      "fileName" : "OPS/html5.xhtml",
+      "line" : 15,
+      "column" : 31,
+      "context" : null
+    }, {
+      "fileName" : "OPS/html5.xhtml",
+      "line" : 16,
+      "column" : 75,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'element \"audio\" not allowed anywhere; expected the element end-tag, text or element \"a\", \"abbr\", \"acronym\", \"address\", \"applet\", \"b\", \"bdo\", \"big\", \"blockquote\", \"br\", \"cite\", \"code\", \"del\", \"dfn\", \"div\", \"dl\", \"em\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"hr\", \"i\", \"iframe\", \"img\", \"ins\", \"kbd\", \"map\", \"noscript\", \"ns:svg\", \"object\", \"ol\", \"p\", \"pre\", \"q\", \"samp\", \"scri [...]
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/html5.xhtml",
+      "line" : 19,
+      "column" : 54,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3/OPS/content.opf
new file mode 100644
index 0000000..a3db161
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3/OPS/content.opf
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>HTML 5 Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" href="html5.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="xml_version.xhtml" media-type="application/xhtml+xml" />
+    <item id="sample" href="sample.m4a" media-type="audio/m4a"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+  </spine>
+</package>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3/OPS/html5.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3/OPS/html5.xhtml
new file mode 100644
index 0000000..a090eb7
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3/OPS/html5.xhtml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>HTML5</title>
+</head>
+<body>
+<div>
+    <article>
+        <h1>Internet Explorer 9</h1>
+        <p>Windows Internet Explorer 9 (abbreviated as IE9) was released to
+            the  public on March 14, 2011 at 21:00 PDT.....</p>
+    </article>
+
+    <aside>
+        <h4>Epcot Center</h4>
+        <p>The Epcot Center is a theme park in Disney World, Florida.</p>
+    </aside>
+
+    <audio  controls="controls" autoplay="autoplay">
+        <source src="sample.m4a" type="audio/mpeg"/>
+        Your browser does not support the audio tag.
+    </audio>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3/OPS/sample.m4a b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3/OPS/sample.m4a
new file mode 100644
index 0000000..f65e5ab
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3/OPS/sample.m4a differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3/OPS/toc.ncx
new file mode 100644
index 0000000..ecc0bf3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>HTML5 Testing</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>HTML5 Sample</text>
+      </navLabel>
+      <content src="html5.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3/OPS/toc.xhtml
new file mode 100644
index 0000000..52991bf
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="html5.xhtml">HTML5</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3/OPS/xml_version.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3/OPS/xml_version.xhtml
new file mode 100644
index 0000000..470e4cb
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3/OPS/xml_version.xhtml
@@ -0,0 +1,12 @@
+<?xml?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>HTML5</title>
+</head>
+<body>
+<div>
+<p>The xml processing instruction has no version.  This should trigger HTM-002</p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3/mimetype b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3_expected_results.json
new file mode 100644
index 0000000..37c251c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/html5_epub3_expected_results.json
@@ -0,0 +1,333 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/xhtml/html5_epub3.epub",
+    "filename" : "html5_epub3.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:27",
+    "elapsedTime" : 81,
+    "nFatal" : 1,
+    "nError" : 1,
+    "nWarning" : 0,
+    "nUsage" : 7
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "HTML 5 Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 2,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : false,
+    "hasAudio" : true,
+    "hasVideo" : false,
+    "charsCount" : 414,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 403,
+    "uncompressedSize" : 914,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "be4ad8930844c6a61f116deb7925eb76ec3fd5c462e084256e94db43eff51",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 288,
+    "uncompressedSize" : 546,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "73a729f831143549b9dbe5bc082edc31f7fe9d02bd6539e9ebf9546ad517b43",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/html5.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/html5.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 399,
+    "uncompressedSize" : 691,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "923c2fe8205b3ef968c0352c4845fd409bf51595c5e6d988431d8c229ef8f221",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : true,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/sample.m4a" ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/xml_version.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 186,
+    "uncompressedSize" : 251,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2cbf2f2bd35db74e388f3ea1bbd2da56eccde30f217f5da77ad48abb20e130",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "sample",
+    "fileName" : "OPS/sample.m4a",
+    "media_type" : "audio/m4a",
+    "compressedSize" : 19030,
+    "uncompressedSize" : 43256,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "50c56b1bd5b886f9cacddf584594d72a18e53f48fc9872498589906a5deca0",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 230,
+    "uncompressedSize" : 337,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "adc4b543b3f07f6d69207b619f3404a73c469a3d17fa81c536d79032daf270",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/html5.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/html5.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "html5_epub3.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-020",
+    "severity" : "USAGE",
+    "message" : "Content file doesn't contain xml:lang attribute.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/xml_version.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-021",
+    "severity" : "USAGE",
+    "message" : "Content file doesn't contain lang attribute.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/xml_version.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-058",
+    "severity" : "USAGE",
+    "message" : "Spine item has no TOC entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/xml_version.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one TOC entry."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/xml_version.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'The version is required in the XML declaration.'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/xml_version.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/xml_version.xhtml",
+      "line" : 0,
+      "column" : 0,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-016",
+    "severity" : "FATAL",
+    "message" : "Fatal Error while parsing file 'The version is required in the XML declaration.'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/xml_version.xhtml",
+      "line" : 1,
+      "column" : 6,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/content.opf
new file mode 100644
index 0000000..0f8b046
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/content.opf
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Hyperlink Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" href="links.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="link_target.xhtml" media-type="application/xhtml+xml" properties="svg" />
+    <item id="page03" href="svg_links.xhtml" media-type="application/xhtml+xml" properties="svg" />
+    <item id="page04" href="mathMl.xhtml" media-type="application/xhtml+xml" properties="mathml" />
+    <item id="pict1" href="images/sample.jpg" media-type="image/jpeg"/>
+    <item id="pict2" href="images/mathml.png" media-type="image/png"/>
+    <item id="style" href="style.css" media-type="text/css"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+    <itemref idref="page04" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/images/mathml.png b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/images/mathml.png
new file mode 100644
index 0000000..ad70ea2
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/images/mathml.png differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/images/sample.jpg b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/images/sample.jpg
new file mode 100644
index 0000000..1c9e32b
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/images/sample.jpg differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/link_target.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/link_target.xhtml
new file mode 100644
index 0000000..a7da158
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/link_target.xhtml
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Hyperlinks</title>
+</head>
+<body>
+  <div>
+    <h1>Hyperlinks Page 2</h1>
+
+    <p>This is a target for hyperlinks from the first page.</p>
+    <p id="target">Here is a link target element.</p>
+      <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
+
+      <symbol id="redCircle">
+          <circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" ></circle>
+      </symbol>
+      </svg>
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/links.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/links.xhtml
new file mode 100644
index 0000000..eb61f58
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/links.xhtml
@@ -0,0 +1,61 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Hyperlinks</title>
+    <link rel="stylesheet" type="text/css" href="style.css#frag"/>
+</head>
+<body>
+<div>
+    <h1>Hyperlinks</h1>
+
+    <p>Here is a link to another place in this spine item: <a href="#local_ref">link 1</a></p>
+
+    <div>
+      <p id="local_ref">This is a relative link target</p>
+    </div>
+    <p>Here is a link to a different spine item: <a href="link_target.xhtml">link 2</a></p>
+    
+    <p>Here is a link to a different spine item element: <a href="link_target.xhtml#target">link 3</a></p>
+     
+    <p>Here is an external link: <a href="http://www.barnesandnoble.com/">link 4</a></p>
+
+    <p>Here is a link in plain text http://www.barnesandnoble.com </p>
+    <p>Here is a link to an image <img src="images/sample.jpg" alt="Koala"></img> </p>
+    <p>Here is a link to an image that includes a fragment <img src="images/sample.jpg#hello" alt="Sample"></img> </p>
+    <p>Here is a link to an image with no src <img src="" alt="Koala"></img> </p>
+    <p>Here is a link with an unrecognized scheme <a href="wakawaka://wwww.thisdomaindoesntexist.org/books/media/sample.m4a">Media</a></p>
+    <p>Here is a link to svg symbol <a href="svg_links.xhtml#redCircle">svg</a></p>
+    <p>Here is a link to svg clip path <a href="svg_links.xhtml#hex-mask">svg</a></p>
+    <p>These links are added to invoke the Max location code.</p>
+    <ul>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+        <li><a href="http://www.barnesandnoble.com/">link 4</a></li>
+    </ul>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/mathMl.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/mathMl.xhtml
new file mode 100644
index 0000000..00617e9
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/mathMl.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:m="http://www.w3.org/1998/Math/MathML" xml:lang="en" lang="en">
+<head>
+  <title>Hyperlinks</title>
+</head>
+<body>
+<div>
+  <h1>MathML Page</h1>
+
+  <p>This is a sample with math ml.</p>
+  <p><span class="inlineequation"><m:math display="inline" alttext="" altimg="images/mathml.png" altimg-width="137" altimg-height="38"><m:mrow><m:mfrac><m:mrow><m:mn>40</m:mn><m:mo>×</m:mo><m:mn>10</m:mn></m:mrow><m:mrow><m:mn>4.5</m:mn></m:mrow></m:mfrac><m:mo>=</m:mo><m:mn>89</m:mn><m:msup><m:mrow><m:mi>μm</m:mi></m:mrow><m:mrow><m:mn>3</m:mn></m:mrow></m:msup></m:mrow></m:math></span></p>
+  <p><span class="inlineequation"><m:math display="inline" alttext="" altimg="images/missing.png" altimg-width="137" altimg-height="38"><m:mrow><m:mfrac><m:mrow><m:mn>40</m:mn><m:mo>×</m:mo><m:mn>10</m:mn></m:mrow><m:mrow><m:mn>5</m:mn></m:mrow></m:mfrac><m:mo>=</m:mo><m:mn>80</m:mn><m:msup><m:mrow><m:mi>μm</m:mi></m:mrow><m:mrow><m:mn>3</m:mn></m:mrow></m:msup></m:mrow></m:math></span></p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/style.css b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/style.css
new file mode 100644
index 0000000..dbf16e5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/style.css
@@ -0,0 +1,3 @@
+div{
+    color: #006400;
+}
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/svg_links.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/svg_links.xhtml
new file mode 100644
index 0000000..d13af9f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/svg_links.xhtml
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xlink="http://www.w3.org/1999/xlink" xml:lang="en" lang="en">
+<head>
+    <title>SVG use tag</title>
+</head>
+<body>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
+
+    <symbol id="redCircle">
+        <circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" ></circle>
+    </symbol>
+    <g>
+        <clipPath id="hex-mask">
+            <polygon points="270,0 0,160 0,485 270,645 560,485 560,160" />
+        </clipPath>
+    </g>
+
+    <use id="one" x="100" y="100" xlink:href="#redCircle"></use>
+    <use id="two" x="200" y="200" xlink:href="#redCircle"></use>
+    <use id="three" x="300" y="300" xlink:href="#redCircle"></use>
+
+    <use id="four" x="400" y="400" xlink:href="#oops"></use>
+    <use id="five" x="400" y="400" xlink:href="link_target.xhtml"></use>
+    <use id="six" x="400" y="400" xlink:href="link_target.xhtml#redCircle"></use>
+
+
+</svg>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/toc.ncx
new file mode 100644
index 0000000..b421c8a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/toc.ncx
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Hyperlink Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Hyperlink Sample</text>
+      </navLabel>
+      <content src="links.xhtml"/>
+    </navPoint>
+    <navPoint id="np-2" playOrder="2">
+      <navLabel>
+	<text>MathML Sample</text>
+      </navLabel>
+      <content src="mathMl.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/toc.xhtml
new file mode 100644
index 0000000..74fdc26
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/OPS/toc.xhtml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+      <li><a href="links.xhtml">Hyperlink Sample</a></li>
+      <li><a href="mathMl.xhtml">MathML Sample</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/mimetype b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks_expected_results.json
new file mode 100644
index 0000000..2b14ca3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/hyperlinks_expected_results.json
@@ -0,0 +1,723 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/xhtml/hyperlinks.epub",
+    "filename" : "hyperlinks.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:27",
+    "elapsedTime" : 120,
+    "nFatal" : 0,
+    "nError" : 8,
+    "nWarning" : 2,
+    "nUsage" : 10
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Hyperlink Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 4,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 1604,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 481,
+    "uncompressedSize" : 1335,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a5403656f3ebcbd52597ffe18c3a4c5975de4d9c3fe318a3a76c7bfe64194",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 311,
+    "uncompressedSize" : 705,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "18d8db93a168fb36eb650e85edbecec5951dd11c343a552a1493fd33583b0c5",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/links.xhtml", "OPS/mathMl.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/links.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 615,
+    "uncompressedSize" : 3355,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3c4270521795e36c4ace4c503db9b3f56ae3ea032f6ab3ff420d7e8d93f273a",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/style.css", "OPS/images/sample.jpg", "OPS/svg_links.xhtml", "OPS/link_target.xhtml", "OPS/" ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/link_target.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 301,
+    "uncompressedSize" : 542,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "4990f7aa633c56c51ca5188391941928aa12374e9c8332fb7e204794dc3b60",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page03",
+    "fileName" : "OPS/svg_links.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 396,
+    "uncompressedSize" : 963,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61d03edc41cd36a3e599827530e084dfbee1be3f6f1731eae3ada7bafab8342c",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/link_target.xhtml" ]
+  }, {
+    "id" : "page04",
+    "fileName" : "OPS/mathMl.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 359,
+    "uncompressedSize" : 1071,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c8224cc43811b282cedf8e630376c9fe5d6b0ba2eb1fe20afef7b98f83d1b",
+    "isSpineItem" : true,
+    "spineIndex" : 3,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "pict1",
+    "fileName" : "OPS/images/sample.jpg",
+    "media_type" : "image/jpeg",
+    "compressedSize" : 8521,
+    "uncompressedSize" : 20337,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2b32ce706c849b90805019fb8f142c8ee67d6adffea4902aeaba89127d3636",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "pict2",
+    "fileName" : "OPS/images/mathml.png",
+    "media_type" : "image/png",
+    "compressedSize" : 2790,
+    "uncompressedSize" : 4957,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "545c3263b96b5ec09daf4b53572fc3853d8f3873cc53938ac85c7534ef15e3",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "style",
+    "fileName" : "OPS/style.css",
+    "media_type" : "text/css",
+    "compressedSize" : 26,
+    "uncompressedSize" : 26,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "47279656de77e39f7637841c79dd19de6bedbdab93649741fb791eff47b1427",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 250,
+    "uncompressedSize" : 402,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "9ac6d16a43416d134ff88f97391c292a5ebfc34a75f02c13a57dc0bd3761c0",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/links.xhtml", "OPS/mathMl.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/link_target.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/mathMl.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/svg_links.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "hyperlinks.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-025",
+    "severity" : "USAGE",
+    "message" : "CSS class Selector is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/mathMl.xhtml",
+      "line" : 11,
+      "column" : 35,
+      "context" : ".inlineequation"
+    }, {
+      "fileName" : "OPS/mathMl.xhtml",
+      "line" : 12,
+      "column" : 35,
+      "context" : ".inlineequation"
+    } ],
+    "suggestion" : "Check for typos or define a class selector to document the use of the class."
+  }, {
+    "ID" : "HTM-005",
+    "severity" : "USAGE",
+    "message" : "An external reference was found.",
+    "additionalLocations" : 3,
+    "locations" : [ {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 20,
+      "column" : 75,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 31,
+      "column" : 54,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 32,
+      "column" : 54,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 33,
+      "column" : 54,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 34,
+      "column" : 54,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 35,
+      "column" : 54,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 36,
+      "column" : 54,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 37,
+      "column" : 54,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 38,
+      "column" : 54,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 39,
+      "column" : 54,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 40,
+      "column" : 54,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 41,
+      "column" : 54,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 42,
+      "column" : 54,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 43,
+      "column" : 54,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 44,
+      "column" : 54,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 45,
+      "column" : 54,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 46,
+      "column" : 54,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 47,
+      "column" : 54,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 48,
+      "column" : 54,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 49,
+      "column" : 54,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 50,
+      "column" : 54,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 51,
+      "column" : 54,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 52,
+      "column" : 54,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 53,
+      "column" : 54,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 54,
+      "column" : 54,
+      "context" : "http://www.barnesandnoble.com/"
+    }, {
+      "fileName" : "There are 3 additional locations for this message.",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-008",
+    "severity" : "ERROR",
+    "message" : "The src attribute is required.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 25,
+      "column" : 71,
+      "context" : "img"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.w3.org/1998/Math/MathML' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/mathMl.xhtml",
+      "line" : 2,
+      "column" : 113,
+      "context" : "xmlns:m"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.w3.org/1999/xlink' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/svg_links.xhtml",
+      "line" : 2,
+      "column" : 111,
+      "context" : "xmlns:xlink"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-025",
+    "severity" : "WARNING",
+    "message" : "Non-registered URI scheme type found in href.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 26,
+      "column" : 126,
+      "context" : "wakawaka://wwww.thisdomaindoesntexist.org/books/media/sample.m4a"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-043",
+    "severity" : "USAGE",
+    "message" : "SVG elements should include an xml:lang and lang attributes.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/link_target.xhtml",
+      "line" : 12,
+      "column" : 61,
+      "context" : "svg"
+    }, {
+      "fileName" : "OPS/svg_links.xhtml",
+      "line" : 7,
+      "column" : 55,
+      "context" : "svg"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-058",
+    "severity" : "USAGE",
+    "message" : "Spine item has no TOC entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/link_target.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/svg_links.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one TOC entry."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/link_target.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/svg_links.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  }, {
+    "ID" : "RSC-001",
+    "severity" : "ERROR",
+    "message" : "File '' is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 25,
+      "column" : 71,
+      "context" : "img"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-007",
+    "severity" : "ERROR",
+    "message" : "Referenced resource is not found in the ePub.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 25,
+      "column" : 71,
+      "context" : "OPS/"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-009",
+    "severity" : "ERROR",
+    "message" : "A fragment identifier should not be used with an img src attribute.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 24,
+      "column" : 108,
+      "context" : "OPS/images/sample.jpg#hello"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-012",
+    "severity" : "ERROR",
+    "message" : "Fragment identifier is not defined.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 5,
+      "column" : 67,
+      "context" : "OPS/style.css#frag"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 24,
+      "column" : 108,
+      "context" : "OPS/images/sample.jpg#hello"
+    }, {
+      "fileName" : "OPS/svg_links.xhtml",
+      "line" : 22,
+      "column" : 55,
+      "context" : "OPS/svg_links.xhtml#oops"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-013",
+    "severity" : "ERROR",
+    "message" : "Fragment identifier is used in a reference to a stylesheet resource.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 5,
+      "column" : 67,
+      "context" : "OPS/style.css#frag"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-014",
+    "severity" : "ERROR",
+    "message" : "Fragment identifier defines an incompatible resource type.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 27,
+      "column" : 73,
+      "context" : "OPS/svg_links.xhtml#redCircle"
+    }, {
+      "fileName" : "OPS/links.xhtml",
+      "line" : 28,
+      "column" : 75,
+      "context" : "OPS/svg_links.xhtml#hex-mask"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-015",
+    "severity" : "ERROR",
+    "message" : "A fragment identifier is required for svg use tag references.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/svg_links.xhtml",
+      "line" : 23,
+      "column" : 67,
+      "context" : "OPS/link_target.xhtml"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-018",
+    "severity" : "WARNING",
+    "message" : "Altimg file 'images/missing.png' is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/mathMl.xhtml",
+      "line" : 12,
+      "column" : 137,
+      "context" : "altimg"
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lang/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/xhtml/lang/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lang/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lang/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/xhtml/lang/OPS/content.opf
new file mode 100644
index 0000000..70cb445
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lang/OPS/content.opf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Lang Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" href="no_lang.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="invalid_lang.xhtml" media-type="application/xhtml+xml" />
+    <item id="page03" href="mismatched_lang.xhtml" media-type="application/xhtml+xml" />
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+    <itemref idref="page03" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lang/OPS/invalid_lang.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/lang/OPS/invalid_lang.xhtml
new file mode 100644
index 0000000..051e4a8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lang/OPS/invalid_lang.xhtml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="x-klingon" lang="x-klingon">
+<head>
+    <title>Invalid language declaration</title>
+</head>
+<body>
+<div>
+    <h1>Invalid language declaration</h1>
+
+    <p>This has klingon as the specified language. </p>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lang/OPS/mismatched_lang.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/lang/OPS/mismatched_lang.xhtml
new file mode 100644
index 0000000..f558f6e
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lang/OPS/mismatched_lang.xhtml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="la">
+<head>
+    <title>Mismatched lang</title>
+</head>
+<body>
+  <div>
+    <h1>Mismatched lang</h1>
+
+    <p>This has an xml lang of english and a lang of latin.</p>
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lang/OPS/no_lang.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/lang/OPS/no_lang.xhtml
new file mode 100644
index 0000000..3cc4250
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lang/OPS/no_lang.xhtml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <title>No lang property specified</title>
+</head>
+<body>
+  <div>
+    <h1>No lang property specified</h1>
+
+    <p>This file doesn't have a lang property specified on the html tag.</p>
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lang/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/xhtml/lang/OPS/toc.ncx
new file mode 100644
index 0000000..ecf6273
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lang/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Hyperlink Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>No lang specified</text>
+      </navLabel>
+      <content src="no_lang.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lang/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/lang/OPS/toc.xhtml
new file mode 100644
index 0000000..2a1c17c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lang/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="no_lang.xhtml">No lang specified</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lang/mimetype b/src/test/resources/com/adobe/epubcheck/test/xhtml/lang/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lang/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lang_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/xhtml/lang_expected_results.json
new file mode 100644
index 0000000..cc68d07
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lang_expected_results.json
@@ -0,0 +1,372 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/xhtml/lang.epub",
+    "filename" : "lang.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:28",
+    "elapsedTime" : 82,
+    "nFatal" : 0,
+    "nError" : 4,
+    "nWarning" : 0,
+    "nUsage" : 7
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Lang Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 3,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 442,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 395,
+    "uncompressedSize" : 969,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2c29f1dc164ba0a15484c4d92c283d21eda42c3dce9ad1c50653553ee87634",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 296,
+    "uncompressedSize" : 554,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "97878853ff3fb6a1196bd53c916e319cc81d7a2c41ca886c87d9bc72a8d3",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/no_lang.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/no_lang.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 173,
+    "uncompressedSize" : 285,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "8136c6fca182b7f6bdbdeb24d1e918f8a90674115e3d0c56ace485181d2f74",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/invalid_lang.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 183,
+    "uncompressedSize" : 302,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "19867ca2274ed26b3116f439b4fe509cfccbada2d348de2b1bc7e935886d2a34",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "page03",
+    "fileName" : "OPS/mismatched_lang.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 176,
+    "uncompressedSize" : 274,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "43ef3f9fa28fb59d78680e57ee0d2a810e3d9e7f536686cd68c1395c838d781",
+    "isSpineItem" : true,
+    "spineIndex" : 2,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 236,
+    "uncompressedSize" : 351,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "d4286734e660578ba597d56a7e4bb8fdd3c8592d735197c3072cea769d5d0",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/no_lang.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/invalid_lang.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/mismatched_lang.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/no_lang.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "lang.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-017",
+    "severity" : "ERROR",
+    "message" : "Content file has different language value in attributes xml:lang and lang.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/mismatched_lang.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-018",
+    "severity" : "ERROR",
+    "message" : "Content file has invalid language value at attribute xml:lang.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/invalid_lang.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-019",
+    "severity" : "ERROR",
+    "message" : "Content file has invalid language definition at attribute lang.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/invalid_lang.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-020",
+    "severity" : "USAGE",
+    "message" : "Content file doesn't contain xml:lang attribute.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/no_lang.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-021",
+    "severity" : "USAGE",
+    "message" : "Content file doesn't contain lang attribute.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/no_lang.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-058",
+    "severity" : "USAGE",
+    "message" : "Spine item has no TOC entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/invalid_lang.xhtml"
+    }, {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/mismatched_lang.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one TOC entry."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/invalid_lang.xhtml"
+    }, {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/mismatched_lang.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'assertion failed:\n  The lang and xml:lang attributes must have the same value.'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/mismatched_lang.xhtml",
+      "line" : 2,
+      "column" : 68,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_noxmlns/EPUB/lorem.css b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_noxmlns/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_noxmlns/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_noxmlns/EPUB/lorem.ncx b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_noxmlns/EPUB/lorem.ncx
new file mode 100644
index 0000000..fe3524a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_noxmlns/EPUB/lorem.ncx
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/"
+    xmlns="http://www.daisy.org/z3986/2005/ncx/"
+    version="2005-1"
+    xml:lang="en">
+    <head>
+        <meta name="dtb:uid" content="urn:uuid:550e8400-e29b-41d4-a716-4466674412314"/>
+        <meta name="dtb:depth" content="1"/>
+        <meta name="dtb:totalPageCount" content="0"/>
+        <meta name="dtb:maxPageNumber" content="0"/>
+    </head>
+    <docTitle>
+        <text>Lorem Ipsum</text>
+    </docTitle>
+    <navMap>
+        <navPoint id="ch1" playOrder="1">
+            <navLabel>
+                <text>Chapter 1</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch1"/>
+        </navPoint>
+        <navPoint id="ch2" playOrder="2">
+            <navLabel>
+                <text>Chapter 2</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch2"/>
+        </navPoint>
+    </navMap>
+</ncx>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_noxmlns/EPUB/lorem.opf b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_noxmlns/EPUB/lorem.opf
new file mode 100644
index 0000000..ca73a3c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_noxmlns/EPUB/lorem.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>        
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" media-type="application/xhtml+xml" /> 
+        <item id="ncx" href="lorem.ncx" media-type="application/x-dtbncx+xml" /> 
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="t1" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_noxmlns/EPUB/lorem.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_noxmlns/EPUB/lorem.xhtml
new file mode 100644
index 0000000..0368da7
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_noxmlns/EPUB/lorem.xhtml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xml:lang="la">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>		
+		<div id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_noxmlns/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_noxmlns/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_noxmlns/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_noxmlns/mimetype b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_noxmlns/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_noxmlns/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_noxmlns_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_noxmlns_expected_results.json
new file mode 100644
index 0000000..1eea9be
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_noxmlns_expected_results.json
@@ -0,0 +1,246 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/xhtml/lorem_noxmlns.epub",
+    "filename" : "lorem_noxmlns.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:29",
+    "elapsedTime" : 23,
+    "nFatal" : 0,
+    "nError" : 2,
+    "nWarning" : 0,
+    "nUsage" : 3
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Lorem Ipsum",
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "urn:uuid:550e8400-e29b-41d4-a716-4466674412314",
+    "language" : "la",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "2.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 5988,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "css",
+    "fileName" : "EPUB/lorem.css",
+    "media_type" : "text/css",
+    "compressedSize" : 93,
+    "uncompressedSize" : 120,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "695614f17c66c35fc225aebb3ca9fa68abff75a9d45b0e195bc0aa30581afd",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:EPUB/lorem.opf",
+    "fileName" : "EPUB/lorem.opf",
+    "media_type" : null,
+    "compressedSize" : 373,
+    "uncompressedSize" : 774,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "cb954fb443d44715e943b9d8cf2b746ed45a2237de91d28215eb8a55caea425",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 175,
+    "uncompressedSize" : 249,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "bd3ce13be9797ab3e233e6d4345fa52c3961e8969f324492d82378f6a3cfd",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "EPUB/lorem.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 357,
+    "uncompressedSize" : 928,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "92d8e30bd46bba38611a42fbe343388aca1051234d7c52a12275d5f8066",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "EPUB/lorem.xhtml" ]
+  }, {
+    "id" : "t1",
+    "fileName" : "EPUB/lorem.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 2406,
+    "uncompressedSize" : 6393,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "703fa0491d9ba87a89ab9159e04b5a8101a15db13a716ddadcbce4cf29e709c",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  } ],
+  "messages" : [ {
+    "ID" : "CSS-022",
+    "severity" : "USAGE",
+    "message" : "CSS Selector specifies global margin setting.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/lorem.css",
+      "line" : 2,
+      "column" : 5,
+      "context" : "margin-left : 6em ;"
+    }, {
+      "fileName" : "EPUB/lorem.css",
+      "line" : 3,
+      "column" : 5,
+      "context" : "margin-right : 16em ;"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/lorem.ncx",
+      "line" : 5,
+      "column" : 19,
+      "context" : ""
+    }, {
+      "fileName" : "EPUB/lorem.ncx",
+      "line" : 5,
+      "column" : 19,
+      "context" : "ncx"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-021",
+    "severity" : "USAGE",
+    "message" : "Content file doesn't contain lang attribute.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/lorem.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-049",
+    "severity" : "ERROR",
+    "message" : "Html element does not have an xmlns set to 'http://www.w3.org/1999/xhtml'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/lorem.xhtml",
+      "line" : 4,
+      "column" : 21,
+      "context" : "html"
+    } ],
+    "suggestion" : "Add xmlns=\"http://www.w3.org/1999/xhtml\" to the html element."
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'elements from namespace \"\" are not allowed'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/lorem.xhtml",
+      "line" : 4,
+      "column" : 21,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1/EPUB/lorem.css b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1/EPUB/lorem.ncx b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1/EPUB/lorem.ncx
new file mode 100644
index 0000000..db642ba
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1/EPUB/lorem.ncx
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/"
+    xmlns="http://www.daisy.org/z3986/2005/ncx/"
+    version="2005-1"
+    xml:lang="en">
+    <head>
+        <meta name="dtb:uid" content="urn:uuid:550e8400-e29b-41d4-a716-4466674412314"/>
+        <meta name="dtb:depth" content="1"/>
+        <meta name="dtb:totalPageCount" content="0"/>
+        <meta name="dtb:maxPageNumber" content="0"/>
+    </head>
+    <docTitle>
+        <text>Lorem Ipsum</text>
+    </docTitle>
+    <navMap>
+        <navPoint id="ch1" playOrder="1">
+            <navLabel>
+                <text>Chapter 1</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch1"/>
+        </navPoint>
+        <navPoint id="ch2" playOrder="2">
+            <navLabel>
+                <text>Chapter 2</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch2"/>
+        </navPoint>
+    </navMap>
+    <pageList>
+        <navLabel>
+            <text>Pages</text>
+        </navLabel>
+        <pageTarget type="normal" id="page1" value="1" playOrder="1">
+            <navLabel>
+                <text>1</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch1"/>
+        </pageTarget>
+        <pageTarget type="normal" id="page2" value="2" playOrder="2">
+            <navLabel>
+                <text>2</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch2"/>
+        </pageTarget>
+    </pageList>
+</ncx>
+
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1/EPUB/lorem.opf b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1/EPUB/lorem.opf
new file mode 100644
index 0000000..4672277
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1/EPUB/lorem.opf
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>        
+        <meta property="dcterms:modified">2012-04-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" media-type="application/xhtml+xml" /> 
+        <item id="ncx" href="lorem.ncx" media-type="application/x-dtbncx+xml" /> 
+        <item id="css" href="lorem.css" media-type="text/css" />
+        <item id="map" href="page-map.xml" media-type="application/oebps-page-map+xml" />
+        <item id="nav" href="nav.xhtml" media-type="application/xhtml+xml" properties="nav"/>
+    </manifest>
+    <spine toc="ncx" page-map="map">
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1/EPUB/lorem.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1/EPUB/lorem.xhtml
new file mode 100644
index 0000000..dfeaa92
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1/EPUB/lorem.xhtml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xml:lang="la" xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>		
+		<div id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1/EPUB/nav.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1/EPUB/nav.xhtml
new file mode 100644
index 0000000..8672bb3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1/EPUB/nav.xhtml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en-US" lang="en-US">
+   <head>
+      <title>EPUB 3 Navigation Document</title>
+      <meta charset="utf-8"/>
+      <link rel="stylesheet" type="text/css" href="lorem.css"/>
+   </head>
+   <body>
+      <nav epub:type="toc">
+         <ol>
+            <li>
+               <a href="lorem.xhtml">lorem</a>
+               <ol>
+                  <li>
+                     <a href="lorem.xhtml#ch1">Chapter 1</a>
+                  </li>
+                  <li>
+                     <a href="lorem.xhtml#ch2">Chapter 2</a>
+                  </li>
+               </ol>
+            </li>
+         </ol>
+      </nav>
+      
+      <nav epub:type="page-list">
+         <ol>
+            <li><a href="lorem.xhtml#ch1">1</a></li>
+            <li><a href="lorem.xhtml#ch2">2</a></li>
+         </ol>
+      </nav>
+   </body>
+</html>
+
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1/EPUB/page-map.xml b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1/EPUB/page-map.xml
new file mode 100644
index 0000000..2f18d33
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1/EPUB/page-map.xml
@@ -0,0 +1,6 @@
+<page-map xmlns="http://www.idpf.org/2007/opf">
+
+<page name="1"  href="lorem.xhtml#page1"/>
+<page name="2" href="lorem.xhtml#page2"/>
+
+</page-map>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1/mimetype b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1_expected_results.json
new file mode 100644
index 0000000..790ba27
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps1_expected_results.json
@@ -0,0 +1,350 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/xhtml/lorem_pagemaps1.epub",
+    "filename" : "lorem_pagemaps1.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:29",
+    "elapsedTime" : 86,
+    "nFatal" : 0,
+    "nError" : 1,
+    "nWarning" : 0,
+    "nUsage" : 9
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Lorem Ipsum",
+    "creator" : [ ],
+    "date" : "2012-04-01T17:18:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "urn:uuid:550e8400-e29b-41d4-a716-4466674412314",
+    "language" : "la",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 6372,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "css",
+    "fileName" : "EPUB/lorem.css",
+    "media_type" : "text/css",
+    "compressedSize" : 93,
+    "uncompressedSize" : 120,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "695614f17c66c35fc225aebb3ca9fa68abff75a9d45b0e195bc0aa30581afd",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:EPUB/lorem.opf",
+    "fileName" : "EPUB/lorem.opf",
+    "media_type" : null,
+    "compressedSize" : 462,
+    "uncompressedSize" : 1044,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "93bce57279c0adae1c43b716b56c524975b8f72955e693b9ec66db21212fb2a",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 175,
+    "uncompressedSize" : 249,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "bd3ce13be9797ab3e233e6d4345fa52c3961e8969f324492d82378f6a3cfd",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "map",
+    "fileName" : "EPUB/page-map.xml",
+    "media_type" : "application/oebps-page-map+xml",
+    "compressedSize" : 103,
+    "uncompressedSize" : 147,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a37af2f13886e975be0e133215820699aa19996edc8f976e87227cf3989cf",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "nav",
+    "fileName" : "EPUB/nav.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 345,
+    "uncompressedSize" : 946,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "96cab7a18d27bcd7ca27b2c8edccaeaf0c9de2e8ce8fa82b3f4e2fc1a9853",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "EPUB/lorem.css", "EPUB/lorem.xhtml" ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "EPUB/lorem.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 436,
+    "uncompressedSize" : 1461,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f95b6ab7f93685e28cfdda76691d2adc4a2857c9489cd38a6f4a28da1947",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "EPUB/lorem.xhtml" ]
+  }, {
+    "id" : "t1",
+    "fileName" : "EPUB/lorem.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 2365,
+    "uncompressedSize" : 6344,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f72a67c92bd177ecbd1dfbf7621612c3917b84312731f2af3a7fed20d3db4744",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "EPUB/lorem.css" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/lorem.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "lorem_pagemaps1.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-022",
+    "severity" : "USAGE",
+    "message" : "CSS Selector specifies global margin setting.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/lorem.css",
+      "line" : 2,
+      "column" : 5,
+      "context" : "margin-left : 6em ;"
+    }, {
+      "fileName" : "EPUB/lorem.css",
+      "line" : 3,
+      "column" : 5,
+      "context" : "margin-right : 16em ;"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/lorem.ncx",
+      "line" : 5,
+      "column" : 19,
+      "context" : ""
+    }, {
+      "fileName" : "EPUB/lorem.ncx",
+      "line" : 5,
+      "column" : 19,
+      "context" : "ncx"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-021",
+    "severity" : "USAGE",
+    "message" : "Content file doesn't contain lang attribute.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/lorem.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "NAV-002",
+    "severity" : "USAGE",
+    "message" : "Found epub:type=\"page-list\" in nav document",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/nav.xhtml",
+      "line" : 25,
+      "column" : 34,
+      "context" : "page-list"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "NCX-005",
+    "severity" : "USAGE",
+    "message" : "Found ncx \"page-list\" in .ncx file",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/lorem.ncx",
+      "line" : 29,
+      "column" : 15,
+      "context" : "pageList"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "NCX-006",
+    "severity" : "USAGE",
+    "message" : "Found both \"page-list\" construct in ncx document and Adobe page-map attribute on the spine.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "lorem_pagemaps1.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : "Using multiple paging constructs can cause unpredictable paging behavior in some readers."
+  }, {
+    "ID" : "OPF-062",
+    "severity" : "USAGE",
+    "message" : "Found Adobe page-map attribute on spine element in opf file.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/lorem.opf",
+      "line" : 17,
+      "column" : 37,
+      "context" : "page-map=\"map\""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'attribute \"page-map\" not allowed here; expected attribute \"id\" or \"page-progression-direction\"'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/lorem.opf",
+      "line" : 17,
+      "column" : 37,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps2/EPUB/lorem.css b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps2/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps2/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps2/EPUB/lorem.ncx b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps2/EPUB/lorem.ncx
new file mode 100644
index 0000000..fe3524a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps2/EPUB/lorem.ncx
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/"
+    xmlns="http://www.daisy.org/z3986/2005/ncx/"
+    version="2005-1"
+    xml:lang="en">
+    <head>
+        <meta name="dtb:uid" content="urn:uuid:550e8400-e29b-41d4-a716-4466674412314"/>
+        <meta name="dtb:depth" content="1"/>
+        <meta name="dtb:totalPageCount" content="0"/>
+        <meta name="dtb:maxPageNumber" content="0"/>
+    </head>
+    <docTitle>
+        <text>Lorem Ipsum</text>
+    </docTitle>
+    <navMap>
+        <navPoint id="ch1" playOrder="1">
+            <navLabel>
+                <text>Chapter 1</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch1"/>
+        </navPoint>
+        <navPoint id="ch2" playOrder="2">
+            <navLabel>
+                <text>Chapter 2</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch2"/>
+        </navPoint>
+    </navMap>
+</ncx>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps2/EPUB/lorem.opf b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps2/EPUB/lorem.opf
new file mode 100644
index 0000000..ac67ed5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps2/EPUB/lorem.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>        
+        <meta property="dcterms:modified">2012-04-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" media-type="application/xhtml+xml" /> 
+        <item id="ncx" href="lorem.ncx" media-type="application/x-dtbncx+xml" /> 
+        <item id="nav" href="nav.xhtml" media-type="application/xhtml+xml" properties="nav"/>
+        <item id="css" href="lorem.css" media-type="text/css" />
+    </manifest>
+    <spine toc="ncx">
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps2/EPUB/lorem.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps2/EPUB/lorem.xhtml
new file mode 100644
index 0000000..6c954b7
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps2/EPUB/lorem.xhtml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xml:lang="la" xmlns="http://www.w3.org/1999/xhtml"  xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>		
+		<div id="ch1" epub:type="pagebreak" >
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch2" epub:type="pagebreak">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps2/EPUB/nav.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps2/EPUB/nav.xhtml
new file mode 100644
index 0000000..8672bb3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps2/EPUB/nav.xhtml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en-US" lang="en-US">
+   <head>
+      <title>EPUB 3 Navigation Document</title>
+      <meta charset="utf-8"/>
+      <link rel="stylesheet" type="text/css" href="lorem.css"/>
+   </head>
+   <body>
+      <nav epub:type="toc">
+         <ol>
+            <li>
+               <a href="lorem.xhtml">lorem</a>
+               <ol>
+                  <li>
+                     <a href="lorem.xhtml#ch1">Chapter 1</a>
+                  </li>
+                  <li>
+                     <a href="lorem.xhtml#ch2">Chapter 2</a>
+                  </li>
+               </ol>
+            </li>
+         </ol>
+      </nav>
+      
+      <nav epub:type="page-list">
+         <ol>
+            <li><a href="lorem.xhtml#ch1">1</a></li>
+            <li><a href="lorem.xhtml#ch2">2</a></li>
+         </ol>
+      </nav>
+   </body>
+</html>
+
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps2/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps2/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps2/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps2/mimetype b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps2/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps2/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps2_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps2_expected_results.json
new file mode 100644
index 0000000..457f169
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps2_expected_results.json
@@ -0,0 +1,285 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/xhtml/lorem_pagemaps2.epub",
+    "filename" : "lorem_pagemaps2.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:29",
+    "elapsedTime" : 87,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 6
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Lorem Ipsum",
+    "creator" : [ ],
+    "date" : "2012-04-01T17:18:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "urn:uuid:550e8400-e29b-41d4-a716-4466674412314",
+    "language" : "la",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 6372,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "css",
+    "fileName" : "EPUB/lorem.css",
+    "media_type" : "text/css",
+    "compressedSize" : 93,
+    "uncompressedSize" : 120,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "695614f17c66c35fc225aebb3ca9fa68abff75a9d45b0e195bc0aa30581afd",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:EPUB/lorem.opf",
+    "fileName" : "EPUB/lorem.opf",
+    "media_type" : null,
+    "compressedSize" : 435,
+    "uncompressedSize" : 939,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "248e27b8b14280c7bb6e6a9af637ba3ca69dd701f819899c365e6801ca03b91",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 175,
+    "uncompressedSize" : 249,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "bd3ce13be9797ab3e233e6d4345fa52c3961e8969f324492d82378f6a3cfd",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "nav",
+    "fileName" : "EPUB/nav.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 345,
+    "uncompressedSize" : 946,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "96cab7a18d27bcd7ca27b2c8edccaeaf0c9de2e8ce8fa82b3f4e2fc1a9853",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "EPUB/lorem.css", "EPUB/lorem.xhtml" ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "EPUB/lorem.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 357,
+    "uncompressedSize" : 928,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "92d8e30bd46bba38611a42fbe343388aca1051234d7c52a12275d5f8066",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "EPUB/lorem.xhtml" ]
+  }, {
+    "id" : "t1",
+    "fileName" : "EPUB/lorem.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 2409,
+    "uncompressedSize" : 6432,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c6bf4a45b291ebaa694e1f82301f621c8bec13f4f2da96ff3465d9c54db9c5",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "EPUB/lorem.css" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "lorem_pagemaps2.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-022",
+    "severity" : "USAGE",
+    "message" : "CSS Selector specifies global margin setting.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/lorem.css",
+      "line" : 2,
+      "column" : 5,
+      "context" : "margin-left : 6em ;"
+    }, {
+      "fileName" : "EPUB/lorem.css",
+      "line" : 3,
+      "column" : 5,
+      "context" : "margin-right : 16em ;"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/lorem.ncx",
+      "line" : 5,
+      "column" : 19,
+      "context" : ""
+    }, {
+      "fileName" : "EPUB/lorem.ncx",
+      "line" : 5,
+      "column" : 19,
+      "context" : "ncx"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-021",
+    "severity" : "USAGE",
+    "message" : "Content file doesn't contain lang attribute.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/lorem.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-050",
+    "severity" : "USAGE",
+    "message" : "Found epub:type=\"pagebreak\" attribute in content document.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/lorem.xhtml",
+      "line" : 10,
+      "column" : 40,
+      "context" : "pagebreak"
+    }, {
+      "fileName" : "EPUB/lorem.xhtml",
+      "line" : 52,
+      "column" : 39,
+      "context" : "pagebreak"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "NAV-002",
+    "severity" : "USAGE",
+    "message" : "Found epub:type=\"page-list\" in nav document",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/nav.xhtml",
+      "line" : 25,
+      "column" : 34,
+      "context" : "page-list"
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3/EPUB/lorem.css b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3/EPUB/lorem.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3/EPUB/lorem.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3/EPUB/lorem.ncx b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3/EPUB/lorem.ncx
new file mode 100644
index 0000000..db642ba
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3/EPUB/lorem.ncx
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns:ncx="http://www.daisy.org/z3986/2005/ncx/"
+    xmlns="http://www.daisy.org/z3986/2005/ncx/"
+    version="2005-1"
+    xml:lang="en">
+    <head>
+        <meta name="dtb:uid" content="urn:uuid:550e8400-e29b-41d4-a716-4466674412314"/>
+        <meta name="dtb:depth" content="1"/>
+        <meta name="dtb:totalPageCount" content="0"/>
+        <meta name="dtb:maxPageNumber" content="0"/>
+    </head>
+    <docTitle>
+        <text>Lorem Ipsum</text>
+    </docTitle>
+    <navMap>
+        <navPoint id="ch1" playOrder="1">
+            <navLabel>
+                <text>Chapter 1</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch1"/>
+        </navPoint>
+        <navPoint id="ch2" playOrder="2">
+            <navLabel>
+                <text>Chapter 2</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch2"/>
+        </navPoint>
+    </navMap>
+    <pageList>
+        <navLabel>
+            <text>Pages</text>
+        </navLabel>
+        <pageTarget type="normal" id="page1" value="1" playOrder="1">
+            <navLabel>
+                <text>1</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch1"/>
+        </pageTarget>
+        <pageTarget type="normal" id="page2" value="2" playOrder="2">
+            <navLabel>
+                <text>2</text>
+            </navLabel>
+            <content src="lorem.xhtml#ch2"/>
+        </pageTarget>
+    </pageList>
+</ncx>
+
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3/EPUB/lorem.opf b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3/EPUB/lorem.opf
new file mode 100644
index 0000000..a54b1a0
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3/EPUB/lorem.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:550e8400-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Lorem Ipsum</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2011-09-01</dc:date>        
+        <meta property="dcterms:modified">2012-04-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+        <item id="t1" href="lorem.xhtml" media-type="application/xhtml+xml" /> 
+        <item id="ncx" href="lorem.ncx" media-type="application/x-dtbncx+xml" /> 
+        <item id="css" href="lorem.css" media-type="text/css" />
+        <item id="nav" href="nav.xhtml" media-type="application/xhtml+xml" properties="nav"/>
+    </manifest>
+    <spine toc="ncx" page-map="map">
+        <itemref idref="t1" />        
+    </spine>    
+</package>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3/EPUB/lorem.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3/EPUB/lorem.xhtml
new file mode 100644
index 0000000..dfeaa92
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3/EPUB/lorem.xhtml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xml:lang="la" xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="lorem.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum</h1>		
+		<div id="ch1">
+			<h2>Chapter 1</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</div>
+		<div id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</div>
+	</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3/EPUB/nav.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3/EPUB/nav.xhtml
new file mode 100644
index 0000000..8672bb3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3/EPUB/nav.xhtml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en-US" lang="en-US">
+   <head>
+      <title>EPUB 3 Navigation Document</title>
+      <meta charset="utf-8"/>
+      <link rel="stylesheet" type="text/css" href="lorem.css"/>
+   </head>
+   <body>
+      <nav epub:type="toc">
+         <ol>
+            <li>
+               <a href="lorem.xhtml">lorem</a>
+               <ol>
+                  <li>
+                     <a href="lorem.xhtml#ch1">Chapter 1</a>
+                  </li>
+                  <li>
+                     <a href="lorem.xhtml#ch2">Chapter 2</a>
+                  </li>
+               </ol>
+            </li>
+         </ol>
+      </nav>
+      
+      <nav epub:type="page-list">
+         <ol>
+            <li><a href="lorem.xhtml#ch1">1</a></li>
+            <li><a href="lorem.xhtml#ch2">2</a></li>
+         </ol>
+      </nav>
+   </body>
+</html>
+
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3/EPUB/page-map.xml b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3/EPUB/page-map.xml
new file mode 100644
index 0000000..2f18d33
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3/EPUB/page-map.xml
@@ -0,0 +1,6 @@
+<page-map xmlns="http://www.idpf.org/2007/opf">
+
+<page name="1"  href="lorem.xhtml#page1"/>
+<page name="2" href="lorem.xhtml#page2"/>
+
+</page-map>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3/META-INF/container.xml
new file mode 100644
index 0000000..a92c6ad
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/lorem.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3/mimetype b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3_expected_results.json
new file mode 100644
index 0000000..ee73243
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/lorem_pagemaps3_expected_results.json
@@ -0,0 +1,374 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/xhtml/lorem_pagemaps3.epub",
+    "filename" : "lorem_pagemaps3.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:29",
+    "elapsedTime" : 92,
+    "nFatal" : 0,
+    "nError" : 1,
+    "nWarning" : 2,
+    "nUsage" : 9
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Lorem Ipsum",
+    "creator" : [ ],
+    "date" : "2012-04-01T17:18:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "urn:uuid:550e8400-e29b-41d4-a716-4466674412314",
+    "language" : "la",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 6372,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "css",
+    "fileName" : "EPUB/lorem.css",
+    "media_type" : "text/css",
+    "compressedSize" : 93,
+    "uncompressedSize" : 120,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "695614f17c66c35fc225aebb3ca9fa68abff75a9d45b0e195bc0aa30581afd",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:EPUB/lorem.opf",
+    "fileName" : "EPUB/lorem.opf",
+    "media_type" : null,
+    "compressedSize" : 445,
+    "uncompressedSize" : 954,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1fcc1269126328b85065bb736e8996aea1afe169518c6638b5ad4a6dcb7c331",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:EPUB/page-map.xml",
+    "fileName" : "EPUB/page-map.xml",
+    "media_type" : null,
+    "compressedSize" : 103,
+    "uncompressedSize" : 147,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a37af2f13886e975be0e133215820699aa19996edc8f976e87227cf3989cf",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 175,
+    "uncompressedSize" : 249,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "bd3ce13be9797ab3e233e6d4345fa52c3961e8969f324492d82378f6a3cfd",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "nav",
+    "fileName" : "EPUB/nav.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 345,
+    "uncompressedSize" : 946,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "96cab7a18d27bcd7ca27b2c8edccaeaf0c9de2e8ce8fa82b3f4e2fc1a9853",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "EPUB/lorem.css", "EPUB/lorem.xhtml" ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "EPUB/lorem.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 436,
+    "uncompressedSize" : 1461,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f95b6ab7f93685e28cfdda76691d2adc4a2857c9489cd38a6f4a28da1947",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "EPUB/lorem.xhtml" ]
+  }, {
+    "id" : "t1",
+    "fileName" : "EPUB/lorem.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 2365,
+    "uncompressedSize" : 6344,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f72a67c92bd177ecbd1dfbf7621612c3917b84312731f2af3a7fed20d3db4744",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 2,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "EPUB/lorem.css" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/lorem.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "lorem_pagemaps3.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-022",
+    "severity" : "USAGE",
+    "message" : "CSS Selector specifies global margin setting.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/lorem.css",
+      "line" : 2,
+      "column" : 5,
+      "context" : "margin-left : 6em ;"
+    }, {
+      "fileName" : "EPUB/lorem.css",
+      "line" : 3,
+      "column" : 5,
+      "context" : "margin-right : 16em ;"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/lorem.ncx",
+      "line" : 5,
+      "column" : 19,
+      "context" : ""
+    }, {
+      "fileName" : "EPUB/lorem.ncx",
+      "line" : 5,
+      "column" : 19,
+      "context" : "ncx"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-021",
+    "severity" : "USAGE",
+    "message" : "Content file doesn't contain lang attribute.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/lorem.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "NAV-002",
+    "severity" : "USAGE",
+    "message" : "Found epub:type=\"page-list\" in nav document",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/nav.xhtml",
+      "line" : 25,
+      "column" : 34,
+      "context" : "page-list"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "NCX-005",
+    "severity" : "USAGE",
+    "message" : "Found ncx \"page-list\" in .ncx file",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/lorem.ncx",
+      "line" : 29,
+      "column" : 15,
+      "context" : "pageList"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "NCX-006",
+    "severity" : "USAGE",
+    "message" : "Found both \"page-list\" construct in ncx document and Adobe page-map attribute on the spine.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "lorem_pagemaps3.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : "Using multiple paging constructs can cause unpredictable paging behavior in some readers."
+  }, {
+    "ID" : "OPF-003",
+    "severity" : "WARNING",
+    "message" : "Item 'EPUB/page-map.xml' exists in the ePub, but is not declared in the OPF manifest.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "lorem_pagemaps3.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-062",
+    "severity" : "USAGE",
+    "message" : "Found Adobe page-map attribute on spine element in opf file.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/lorem.opf",
+      "line" : 16,
+      "column" : 37,
+      "context" : "page-map=\"map\""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-063",
+    "severity" : "WARNING",
+    "message" : "Referenced Adobe page-map item 'map' was not found in the manifest.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/lorem.opf",
+      "line" : 16,
+      "column" : 37,
+      "context" : "page-map=\"map\""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'attribute \"page-map\" not allowed here; expected attribute \"id\" or \"page-progression-direction\"'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "EPUB/lorem.opf",
+      "line" : 16,
+      "column" : 37,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/audio/echild_s01_all.m4a b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/audio/echild_s01_all.m4a
new file mode 100644
index 0000000..c034d86
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/audio/echild_s01_all.m4a differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/audio/mobydick_001_002_melville.mp4 b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/audio/mobydick_001_002_melville.mp4
new file mode 100644
index 0000000..0b1fc9e
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/audio/mobydick_001_002_melville.mp4 differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/chapter_001.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/chapter_001.xhtml
new file mode 100644
index 0000000..72f4100
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/chapter_001.xhtml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+<head>
+<title>Moby-Dick</title>
+<link rel="stylesheet" href="css/stylesheet.css" type="text/css"/>
+<meta charset="utf-8"/>
+</head>
+<body>
+<section class="body-rw Chapter-rw" epub:type="bodymatter chapter">
+<h1 id="c01h01">Chapter 1. Loomings.</h1>
+<p><span id="c01w00001">Call</span> <span id="c01w00002">me</span> <span id="c01w00003">Ishmael.</span>
+	<span id="c01s0002">Some years ago—never mind how long precisely—having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world.</span> 
+	<span id="c01s0003">It is a way I have of driving off the spleen and regulating the circulation.</span> 
+	<span id="c01s0004">Whenever I find myself growing grim about the mouth; whenever it is a damp, drizzly November in my soul; whenever I find myself involuntarily pausing before coffin warehouses, and bringing up the rear of every funeral I meet; and especially whenever my hypos get such an upper hand of me, that it requires a strong moral principle to prevent me from deliberately stepping into the street, and methodically knocking people’s hats off—then, I account it high time to get to [...]
+	<span id="c01s0005">This is my substitute for pistol and ball.</span> 
+	<span id="c01s0006">With a philosophical flourish Cato throws himself upon his sword; I quietly take to the ship.</span> 
+	<span id="c01s0007">There is nothing surprising in this.</span> 
+	<span id="c01s0008">If they but knew it, almost all men in their degree, some time or other, cherish very nearly the same feelings towards the ocean with me.</span></p>
+<p id="c01p0002">There now is your insular city of the Manhattoes, belted round by wharves as Indian isles by coral reefs—commerce surrounds it with her surf. Right and left, the streets take you waterward. Its extreme downtown is the battery, where that noble mole is washed by waves, and cooled by breezes, which a few hours previous were out of sight of land. Look at the crowds of water-gazers there.</p>
+<p id="c01p0003">Circumambulate the city of a dreamy Sabbath afternoon. Go from Corlears Hook to Coenties Slip, and from thence, by Whitehall, northward. What do you see?—Posted like silent sentinels all around the town, stand thousands upon thousands of mortal men fixed in ocean reveries. Some leaning against the spiles; some seated upon the pier-heads; some looking over the bulwarks of ships from China; some high aloft in the rigging, as if striving to get a still better seaward peep.  [...]
+<p id="c01p0004">But look! here come more crowds, pacing straight for the water, and seemingly bound for a dive. Strange! Nothing will content them but the extremest limit of the land; loitering under the shady lee of yonder warehouses will not suffice. No. They must get just as nigh the water as they possibly can without falling in. And there they stand—miles of them—leagues. Inlanders all, they come from lanes and alleys, streets and avenues—north, east, south, and west. Yet here they  [...]
+<p id="c01p0005">Once more. Say you are in the country; in some high land of lakes. Take almost any path you please, and ten to one it carries you down in a dale, and leaves you there by a pool in the stream. There is magic in it. Let the most absent-minded of men be plunged in his deepest reveries—stand that man on his legs, set his feet a-going, and he will infallibly lead you to water, if water there be in all that region. Should you ever be athirst in the great American desert, try t [...]
+<p id="c01p0006">But here is an artist. He desires to paint you the dreamiest, shadiest, quietest, most enchanting bit of romantic landscape in all the valley of the Saco. What is the chief element he employs? There stand his trees, each with a hollow trunk, as if a hermit and a crucifix were within; and here sleeps his meadow, and there sleep his cattle; and up from yonder cottage goes a sleepy smoke. Deep into distant woodlands winds a mazy way, reaching to overlapping spurs of mountai [...]
+<p id="c01p0007">Now, when I say that I am in the habit of going to sea whenever I begin to grow hazy about the eyes, and begin to be over conscious of my lungs, I do not mean to have it inferred that I ever go to sea as a passenger. For to go as a passenger you must needs have a purse, and a purse is but a rag unless you have something in it. Besides, passengers get sea-sick—grow quarrelsome—don’t sleep of nights—do not enjoy themselves much, as a general thing;—no, I never go as a pass [...]
+<p id="c01p0008">No, when I go to sea, I go as a simple sailor, right before the mast, plumb down into the forecastle, aloft there to the royal mast-head. True, they rather order me about some, and make me jump from spar to spar, like a grasshopper in a May meadow. And at first, this sort of thing is unpleasant enough. It touches one’s sense of honour, particularly if you come of an old established family in the land, the Van Rensselaers, or Randolphs, or Hardicanutes. And more than all, [...]
+<p id="c01p0009">What of it, if some old hunks of a sea-captain orders me to get a broom and sweep down the decks? What does that indignity amount to, weighed, I mean, in the scales of the New Testament? Do you think the archangel Gabriel thinks anything the less of me, because I promptly and respectfully obey that old hunks in that particular instance? Who ain’t a slave? Tell me that. Well, then, however the old sea-captains may order me about—however they may thump and punch me about,  [...]
+<p id="c01p0010">Again, I always go to sea as a sailor, because they make a point of paying me for my trouble, whereas they never pay passengers a single penny that I ever heard of. On the contrary, passengers themselves must pay. And there is all the difference in the world between paying and being paid. The act of paying is perhaps the most uncomfortable infliction that the two orchard thieves entailed upon us. But BEING PAID,—what will compare with it? The urbane activity with which a [...]
+<p id="c01p0011">Finally, I always go to sea as a sailor, because of the wholesome exercise and pure air of the fore-castle deck. For as in this world, head winds are far more prevalent than winds from astern (that is, if you never violate the Pythagorean maxim), so for the most part the Commodore on the quarter-deck gets his atmosphere at second hand from the sailors on the forecastle. He thinks he breathes it first; but not so. In much the same way do the commonalty lead their leaders  [...]
+<div class="block-rw extract-rw headline-rw">
+<p id="c01p0012">“GRAND CONTESTED ELECTION FOR THE PRESIDENCY OF THE UNITED STATES.</p>
+<p id="c01p0013">“WHALING VOYAGE BY ONE ISHMAEL.</p>
+<p id="c01p0014">“BLOODY BATTLE IN AFFGHANISTAN.”</p>
+</div>
+<p id="c01p0015">Though I cannot tell why it was exactly that those stage managers, the Fates, put me down for this shabby part of a whaling voyage, when others were set down for magnificent parts in high tragedies, and short and easy parts in genteel comedies, and jolly parts in farces—though I cannot tell why this was exactly; yet, now that I recall all the circumstances, I think I can see a little into the springs and motives which being cunningly presented to me under various disguis [...]
+<p id="c01p0016">Chief among these motives was the overwhelming idea of the great whale himself. Such a portentous and mysterious monster roused all my curiosity. Then the wild and distant seas where he rolled his island bulk; the undeliverable, nameless perils of the whale; these, with all the attending marvels of a thousand Patagonian sights and sounds, helped to sway me to my wish. With other men, perhaps, such things would not have been inducements; but as for me, I am tormented with [...]
+<p id="c01p0017">By reason of these things, then, the whaling voyage was welcome; the great flood-gates of the wonder-world swung open, and in the wild conceits that swayed me to my purpose, two and two there floated into my inmost soul, endless processions of the whale, and, mid most of them all, one grand hooded phantom, like a snow hill in the air.</p>
+</section></body></html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/chapter_001_overlay.smil b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/chapter_001_overlay.smil
new file mode 100644
index 0000000..5e23423
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/chapter_001_overlay.smil
@@ -0,0 +1,172 @@
+<smil 
+     xmlns="http://www.w3.org/ns/SMIL"
+     xmlns:epub="http://www.idpf.org/2007/ops"
+     version="3.0">
+    <body>
+    
+    
+		<seq id="id1" epub:textref="chapter_001.xhtml" epub:type="bodymatter chapter">
+			
+			<par id="heading1">
+				<text src="chapter_001.xhtml#c01h01"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:00:24.500"
+					clipEnd="0:00:29.268"/>
+			</par>
+			
+			<par id="word1">
+				<text src="chapter_001.xhtml#c01w00001"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:00:29.268"
+					clipEnd="0:00:29.441"/>
+			</par>
+			
+			<par id="word2">
+				<text src="chapter_001.xhtml#c01w00002"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:00:29.441"
+					clipEnd="0:00:29.640"/>
+			</par>
+			
+			<par id="word3">
+				<text src="chapter_001.xhtml#c01w00003"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:00:29.640"
+					clipEnd="0:00:30.397"/>
+			</par>
+			
+			<par id="sentence2">
+				<text src="chapter_001.xhtml#c01s0002"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:00:30.397"
+					clipEnd="0:00:44.783"/>
+			</par>
+			
+			<par id="sentence3">
+				<text src="chapter_001.xhtml#c01s0003"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:00:44.783"
+					clipEnd="0:00:50.450"/>
+			</par>
+
+			<par id="sentence4">
+				<text src="chapter_001.xhtml#c01s0004"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:00:50.450"
+					clipEnd="0:01:24.300"/>
+			</par>
+
+			<par id="sentence5">
+				<text src="chapter_001.xhtml#c01s0005"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:01:24.300"
+					clipEnd="0:01:27.850"/>
+			</par>
+
+
+			<par id="sentence6">
+				<text src="chapter_001.xhtml#c01s0006"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:01:27.850"
+					clipEnd="0:01:35.000"/>
+			</par>
+
+			<par id="sentence7">
+				<text src="chapter_001.xhtml#c01s0007"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:01:35.000"
+					clipEnd="0:01:37.500"/>
+			</par>
+
+			<par id="sentence8">
+				<text src="chapter_001.xhtml#c01s0008"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:01:37.500"
+					clipEnd="0:01:46.450"/>
+			</par>
+
+			<par id="para2">
+				<text src="chapter_001.xhtml#c01p0002"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:01:46.450"
+					clipEnd="0:02:14.138"/>
+			</par>
+
+			<par id="para3">
+				<text src="chapter_001.xhtml#c01p0003"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:02:14.138"
+					clipEnd="0:03:02.000"/>
+			</par>
+
+			<par id="para4">
+				<text src="chapter_001.xhtml#c01p0004"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:03:02.000"
+					clipEnd="0:03:45.500"/>
+			</par>
+			<par id="para5">
+				<text src="chapter_001.xhtml#c01p0005"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:03:45.500"
+					clipEnd="0:04:29.300"/>
+			</par>
+			<par id="para6">
+				<text src="chapter_001.xhtml#c01p0006"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:04:29.300"
+					clipEnd="0:06:52.500"/>
+			</par>
+
+			<par id="para7">
+				<text src="chapter_001.xhtml#c01p0007"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:06:52.500"
+					clipEnd="0:08:32.500"/>
+			</par>
+
+			<par id="para8">
+				<text src="chapter_001.xhtml#c01p0008"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:08:32.500"
+					clipEnd="0:09:30.500"/>
+			</par>
+
+			<par id="para9">
+				<text src="chapter_001.xhtml#c01p0009"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:09:30.500"
+					clipEnd="0:10:22.750"/>
+			</par>
+
+			<par id="para10">
+				<text src="chapter_001.xhtml#c01p0010"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:10:22.750"
+					clipEnd="0:11:11.750"/>
+			</par>
+
+			<par id="para11">
+				<text src="chapter_001.xhtml#c01p0011"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:11:11.750"
+					clipEnd="0:12:27.500"/>
+			</par>
+
+			<par id="para12">
+				<text src="chapter_001.xhtml#c01p0012"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:12:27.500"
+					clipEnd="0:12:31.900"/>
+			</par>
+
+			<par id="para13">
+				<text src="chapter_001.xhtml#c01p0013"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:12:31.900"
+					clipEnd="0:12:34.500"/>
+			</par>
+
+			<par id="para14">
+				<text src="chapter_001.xhtml#c01p0014"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:12:34.500"
+					clipEnd="0:12:37.400"/>
+			</par>
+
+			<par id="para15">
+				<text src="chapter_001.xhtml#c01p0015"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:12:37.400"
+					clipEnd="0:13:23.000"/>
+			</par>
+
+			<par id="para16">
+				<text src="chapter_001.xhtml#c01p0016"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:13:23.000"
+					clipEnd="0:14:18.800"/>
+			</par>
+
+			<par id="para17">
+				<text src="chapter_001.xhtml#c01p0017"/>
+				<audio src="audio/mobydick_001_002_melville.mp4" clipBegin="0:14:18.800"
+					clipEnd="0:14:45.000"/>
+			</par>
+		</seq>
+    </body>
+</smil>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/content.opf
new file mode 100644
index 0000000..1d0c3f8
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/content.opf
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Missing TOC Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+    <meta property="media:duration" refines="#chapter_001_overlay">0:14:20.500</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="page01" href="page01.xhtml" media-type="application/xhtml+xml" media-overlay="smil01"/>
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="audio" href="audio/echild_s01_all.m4a" media-type="audio/m4a"/>
+    <item id="smil01" href="page01.smil" media-type="application/smil+xml"/>
+
+    <item id="xchapter_001" href="chapter_001.xhtml" media-type="application/xhtml+xml" media-overlay="chapter_001_overlay"/>
+    <item id="chapter_001_overlay" href="chapter_001_overlay.smil" media-type="application/smil+xml"/>
+    <item id="chapter_001_audio" href="audio/mobydick_001_002_melville.mp4" media-type="audio/mp4"/>
+    <item id="style" href="css/stylesheet.css" media-type="text/css"/>
+    <item id="font.iwonacond.regular" href="fonts/iwonacond-regular.otf" media-type="application/vnd.ms-opentype"/>
+    <item id="font.iwonacond.italic" href="fonts/iwonacond-italic.otf" media-type="application/vnd.ms-opentype"/>
+    <item id="font.iwonacond.bold" href="fonts/iwonacond-bold.otf" media-type="application/vnd.ms-opentype"/>
+    <item id="font.iwonacond.bold.italic" href="fonts/iwonacond-bolditalic.otf" media-type="application/vnd.ms-opentype"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="xchapter_001" />
+  </spine>
+</package>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/css/stylesheet.css b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/css/stylesheet.css
new file mode 100644
index 0000000..d119021
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/css/stylesheet.css
@@ -0,0 +1,373 @@
+
+ at font-face {
+font-family: 'iwonacond';
+font-weight: normal;
+font-style: normal;
+src:url(../fonts/iwonacond-regular.otf);
+}
+
+ at font-face {
+font-family: 'iwonacond';
+font-weight: bold;
+font-style: normal;
+src:url(../fonts/iwonacond-bold.otf);
+}
+
+ at font-face {
+font-family:'iwonacond';
+font-weight: normal;
+font-style: italic;
+src:url(../fonts/iwonacond-italic.otf);
+}
+
+ at font-face {
+font-family:'iwonacond';
+font-weight: bold;
+font-style: italic;
+src:url(../fonts/iwonacond-bolditalic.otf);
+}
+
+body {
+font-size: 1em;
+line-height: 1.33em;
+font-family: 'iwonacond', serif;
+font-variant-numeric: oldstyle-nums;
+}
+
+p {
+padding: 0;
+margin: 0;
+text-align: justify;
+}
+
+header + p:first-line {
+text-transform: lowercase !important;
+font-variant: small-caps;
+font-size: 1.1em;
+}
+
+p + p {
+text-indent: 1.33em;
+}
+
+.decoration-rw {
+text-align: center;
+padding-top: 1em;
+padding-bottom: 1em;
+padding-left: 0em;
+padding-right: 0em;
+}
+
+.copyright-rw {
+font-size: .8em;
+line-height: 1em;
+text-align: left;
+padding-top: 2em;
+}
+
+.copyright-rw p {
+margin-bottom: 1em;
+text-indent: 0;
+}
+
+.dedication-rw p {
+text-align: center;
+text-indent: 0;
+}
+
+.Dedication-rw {
+margin-top: 3em;
+}
+
+.leading-line-rw {
+height: 1.33em;
+}
+
+.fp-rw {
+text-indent: 0;
+}
+
+
+
+h1 {
+font-size: 1.5em;
+line-height: 1.33em;
+text-align: center;
+padding-bottom: 0em;
+text-align: center;
+text-transform: uppercase;
+font-weight: normal;
+letter-spacing: 4px;
+}
+
+h2 {
+text-align: center;
+font-size: 1.33em;
+line-height: 1.2em;
+text-align: center;
+padding-bottom: 0em;
+text-align: center;
+text-transform: uppercase;
+font-weight: normal;
+letter-spacing: 3px;
+}
+
+.title-author-rw {
+text-align: center;
+font-size: 1.5em;
+text-indent: 0;
+}
+
+.title-num-rw {
+text-align: center;
+font-size: 1.5em;
+text-indent: 0;
+margin-top: 1em;
+margin-bottom: 1em;
+}
+
+.title-sub-rw {
+text-align: center;
+font-size: 1.5em;
+text-indent: 0;
+}
+
+.imprint-rw {
+text-align: center;
+}
+
+.extract-verse-rw {
+margin-top: 1.33em;
+margin-bottom: 1.33em;
+padding-left: 20pt;
+}
+
+.extract-rw {
+margin-top: 1.33em;
+margin-bottom: 1.33em;
+padding-left: 20pt;
+}
+
+.extract-verse-rw p {
+text-align: left;
+text-indent: -20pt;
+margin-left: 20pt;
+}
+
+.epigraph-rw {
+margin-top: 1.33em;
+margin-bottom: 1.33em;
+padding-left: 20pt;
+padding-right: 20pt;
+}
+
+.sc-rw {
+font-size: 75%;
+}
+.block-rw {
+margin-top: 1em;
+margin-bottom: 1em;
+margin-left: 20pt;
+margin-right: 20pt;
+}
+
+span.dropcap-rw {
+float: left;
+font-size: 2.7em;
+line-height: .87em;
+}
+
+
+.signature-rw {
+margin-left: 50%;
+text-align: left;
+text-indent: 0;
+}
+
+.AdCard-rw h4 {
+text-align: center;
+}
+
+.AdCard-rw p {
+text-align: center;
+text-indent: 0;
+}
+
+.FrontSales-rw h4, .FrontSales-rw h2 {
+text-align: center;
+}
+
+.FrontSales-rw p {
+text-indent: 0;
+}
+
+
+
+/* NAVIGATION */
+
+a {
+color: black !important;
+}
+
+#toc ol {
+list-style-type: none;
+margin: 0 0 0 2em;
+padding: 0 0 0 0;
+}
+
+#toc ol ol {
+list-style-type: none;
+margin: 0 0 0 1em;
+padding: 0 0 0 0;
+}
+
+
+
+
+
+#toc ol li {
+margin: 0 0 0 0;
+padding: 0 0 0 0;
+}
+
+#toc ol li a {
+text-decoration: none;
+font-family: sans-serif;
+}
+
+.toc-short ol li a {
+text-decoration: none;
+font-family: sans-serif;
+}
+
+
+.toc-short ol {
+list-style-type: none;
+margin: 0 0 0 2em;
+padding: 0 0 0 0;
+}
+
+
+#guide {
+display: none;
+}
+
+
+header {
+padding: 3em 0 2em 0;
+}
+
+header a {
+text-decoration: none;
+color: black;
+}
+
+
+
+
+
+.center {
+text-align: center;
+text-indent: 0;
+}
+
+img {
+max-width: 100%;
+max-height: 100%;
+}
+
+
+
+.title-other-rw {
+text-align: center;
+text-indent: 0;
+margin-top: .5em;
+}
+
+.dateline-rw {
+text-align: left;
+text-indent: 0;
+margin-top: 1.33em;
+margin-bottom: 1.33em;
+}
+
+
+.frontmatter-rw h1 {
+font-size: 1.5em;
+}
+
+.backmatter-rw h1 {
+font-size: 1.5em;
+}
+   
+
+
+   .direction-rw {
+   text-align: center;
+   text-indent: 0;
+   font-style: italic;
+   margin: 1em 0 1em 0;
+   }
+
+    .source-rw {
+margin-bottom: 0em;
+text-align: right !important;
+font-variant: small-caps;
+text-transform: lowercase;
+font-size: 1.1em;
+page-break-before: avoid;
+}
+
+div.block-rw {
+border-top: 2px solid #EEE;
+border-bottom: 2px solid #EEE;
+padding: 6pt 0 6pt 0;
+}
+
+.list-simple-rw p {
+text-indent: 0;
+text-align: left;
+}
+
+.headline-rw p {
+text-indent: 0;
+text-align: center;
+padding-top: 6px;
+}
+
+div.photo {
+margin-top: 1em;
+padding-top: 2em;
+text-align: center;
+
+}
+
+div.photo p {
+text-align: center;
+padding: 6px;
+font-style: italic;
+
+
+
+}
+
+
+
+
+
+.-epub-media-overlay-active {
+    background-color: #abc;
+}
+
+
+ at media all and (orientation:portrait) {
+p { font-family: serif; }
+}
+
+
+ at media all and (orientation:landscape) {
+p { font-family: sans-serif; }
+
+}
+
+
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/fonts/iwonacond-bold.otf b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/fonts/iwonacond-bold.otf
new file mode 100644
index 0000000..98fbf69
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/fonts/iwonacond-bold.otf differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/fonts/iwonacond-bolditalic.otf b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/fonts/iwonacond-bolditalic.otf
new file mode 100644
index 0000000..43c5fa5
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/fonts/iwonacond-bolditalic.otf differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/fonts/iwonacond-italic.otf b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/fonts/iwonacond-italic.otf
new file mode 100644
index 0000000..2951b0e
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/fonts/iwonacond-italic.otf differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/fonts/iwonacond-regular.otf b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/fonts/iwonacond-regular.otf
new file mode 100644
index 0000000..6e67a41
Binary files /dev/null and b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/fonts/iwonacond-regular.otf differ
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/page01.smil b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/page01.smil
new file mode 100644
index 0000000..50270c4
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/page01.smil
@@ -0,0 +1,10 @@
+<smil xmlns="http://www.w3.org/ns/SMIL" xmlns:epub="http://www.idpf.org/2007/ops" version="3.0">
+    <body>
+        <seq id="id1" epub:textref="page01.xhtml#sectionheader">
+            <par id="id2">
+                <text src="page01.xhtml#section1_title"/>
+                <audio src="audio/echild_s01_all.m4a" />
+            </par>
+        </seq>
+    </body>
+</smil>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/page01.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/page01.xhtml
new file mode 100644
index 0000000..76fc186
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/page01.xhtml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Media Overlay</title>
+</head>
+<body>
+  <div id="sectionheader">
+    <h1 id="section1_title">Media Overlay</h1>
+
+    <p>The Elephant's Child</p>
+
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/toc.ncx
new file mode 100644
index 0000000..0587ac1
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Missing TOC Test</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Missing ToC Sample</text>
+      </navLabel>
+      <content src="page01.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/toc.xhtml
new file mode 100644
index 0000000..f17be2a
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="page01.xhtml">Page 1</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/mimetype b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays_expected_results.json
new file mode 100644
index 0000000..292e2dd
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/media_overlays_expected_results.json
@@ -0,0 +1,772 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/xhtml/media_overlays.epub",
+    "filename" : "media_overlays.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:28",
+    "elapsedTime" : 802,
+    "nFatal" : 0,
+    "nError" : 3,
+    "nWarning" : 0,
+    "nUsage" : 10
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Missing TOC Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 2,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : false,
+    "hasAudio" : true,
+    "hasVideo" : false,
+    "charsCount" : 12354,
+    "embeddedFonts" : [ "iwonacond", "iwonacond,bold", "iwonacond,italic", "iwonacond,italic,bold" ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "audio",
+    "fileName" : "OPS/audio/echild_s01_all.m4a",
+    "media_type" : "audio/m4a",
+    "compressedSize" : 61938,
+    "uncompressedSize" : 68669,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "bc59667ce1d87cc5c36088fa26d8b5d52784c0dc671e1fd579f22f7251f235ba",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "chapter_001_audio",
+    "fileName" : "OPS/audio/mobydick_001_002_melville.mp4",
+    "media_type" : "audio/mp4",
+    "compressedSize" : 8997241,
+    "uncompressedSize" : 9131982,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "67cf76d8262708d055a1211d9f22f734f5db34a43eaf4587fe1145c75f7",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "chapter_001_overlay",
+    "fileName" : "OPS/chapter_001_overlay.smil",
+    "media_type" : "application/smil+xml",
+    "compressedSize" : 694,
+    "uncompressedSize" : 5214,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3e9283d8b05414a24df4b4ece3e2cebf59d58b88ec6794c8aad48ac31ce2683",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/chapter_001.xhtml", "OPS/audio/mobydick_001_002_melville.mp4" ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 618,
+    "uncompressedSize" : 1904,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "13cb9999ef373b3280fdcbcb482fdd0bbf43bc878c3ea25a588b0522a10",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "font.iwonacond.bold",
+    "fileName" : "OPS/fonts/iwonacond-bold.otf",
+    "media_type" : "application/vnd.ms-opentype",
+    "compressedSize" : 69816,
+    "uncompressedSize" : 142404,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "8edb8cb05679afdcda3fd7effb51859d8576aaba2ae8fa99af8632957cf94",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "font.iwonacond.bold.italic",
+    "fileName" : "OPS/fonts/iwonacond-bolditalic.otf",
+    "media_type" : "application/vnd.ms-opentype",
+    "compressedSize" : 70814,
+    "uncompressedSize" : 143912,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "6f621b4dfd17ce8901137a364e11fc292738c1231ba3c2d515ff49e199795",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "font.iwonacond.italic",
+    "fileName" : "OPS/fonts/iwonacond-italic.otf",
+    "media_type" : "application/vnd.ms-opentype",
+    "compressedSize" : 70609,
+    "uncompressedSize" : 143656,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "eee2e41f4a98dab46aaf817b770d92bfeee2441c3d22c22b0924a32c25812a1",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "font.iwonacond.regular",
+    "fileName" : "OPS/fonts/iwonacond-regular.otf",
+    "media_type" : "application/vnd.ms-opentype",
+    "compressedSize" : 69778,
+    "uncompressedSize" : 141748,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b9a48d1aba83019a134605da9e06363857c496c9f8751015448ad7156aa69f",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 293,
+    "uncompressedSize" : 556,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "7e983f3695b1eea13cb6d3e7aacb5d84de767f2ccda456f5154d35c5f9b012",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/page01.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 184,
+    "uncompressedSize" : 278,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1ed193e375fd435427f685657a7015484c2fb1a8537117a7c105bdf442ac9c9",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ ]
+  }, {
+    "id" : "smil01",
+    "fileName" : "OPS/page01.smil",
+    "media_type" : "application/smil+xml",
+    "compressedSize" : 209,
+    "uncompressedSize" : 368,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3d446ea8b2d3d8122ca6ec8989e77341407c6280fb58d23e262499c2af887c",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml", "OPS/audio/echild_s01_all.m4a" ]
+  }, {
+    "id" : "style",
+    "fileName" : "OPS/css/stylesheet.css",
+    "media_type" : "text/css",
+    "compressedSize" : 1156,
+    "uncompressedSize" : 4517,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "4a82e32d4583eaffed2bc0abc871d0343e5be3bedcf96fc1b5ead9c57ed96b26",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/fonts/iwonacond-bolditalic.otf", "OPS/fonts/iwonacond-bold.otf", "OPS/fonts/iwonacond-italic.otf", "OPS/fonts/iwonacond-regular.otf" ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 228,
+    "uncompressedSize" : 339,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "c1f5f92fde356c7bbbc841fce3f768289bf47019fdf46fc33b54273fa0f0cf4",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/page01.xhtml" ]
+  }, {
+    "id" : "xchapter_001",
+    "fileName" : "OPS/chapter_001.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 6201,
+    "uncompressedSize" : 13352,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "9792a86216c40517441ccd5cbc25c9bdcd3c85c4cc033a8c6dcbdc07d37db7e",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/css/stylesheet.css" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page01.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "media_overlays.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-013",
+    "severity" : "USAGE",
+    "message" : "CSS Selector attribute is declared !Important.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 44,
+      "column" : 1,
+      "context" : "text-transform : lowercase !important ;"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 209,
+      "column" : 1,
+      "context" : "color : black !important ;"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 314,
+      "column" : 1,
+      "context" : "text-align : right !important ;"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-023",
+    "severity" : "USAGE",
+    "message" : "CSS Selector specifies media query.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 363,
+      "column" : 1,
+      "context" : "@media all and (orientation : portrait)"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 368,
+      "column" : 1,
+      "context" : "@media all and (orientation : landscape)"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-024",
+    "severity" : "USAGE",
+    "message" : "CSS class Selector is not used.",
+    "additionalLocations" : 3,
+    "locations" : [ {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 53,
+      "column" : 1,
+      "context" : ".decoration-rw"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 61,
+      "column" : 1,
+      "context" : ".copyright-rw"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 73,
+      "column" : 1,
+      "context" : ".dedication-rw"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 82,
+      "column" : 1,
+      "context" : ".leading-line-rw"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 86,
+      "column" : 1,
+      "context" : ".fp-rw"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 121,
+      "column" : 1,
+      "context" : ".title-num-rw"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 129,
+      "column" : 1,
+      "context" : ".title-sub-rw"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 135,
+      "column" : 1,
+      "context" : ".imprint-rw"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 139,
+      "column" : 1,
+      "context" : ".extract-verse-rw"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 157,
+      "column" : 1,
+      "context" : ".epigraph-rw"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 164,
+      "column" : 1,
+      "context" : ".sc-rw"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 174,
+      "column" : 5,
+      "context" : ".dropcap-rw"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 187,
+      "column" : 1,
+      "context" : ".AdCard-rw"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 196,
+      "column" : 1,
+      "context" : ".FrontSales-rw"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 238,
+      "column" : 1,
+      "context" : ".toc-short"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 269,
+      "column" : 1,
+      "context" : ".center"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 281,
+      "column" : 1,
+      "context" : ".title-other-rw"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 287,
+      "column" : 1,
+      "context" : ".dateline-rw"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 295,
+      "column" : 1,
+      "context" : ".frontmatter-rw"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 299,
+      "column" : 1,
+      "context" : ".backmatter-rw"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 305,
+      "column" : 4,
+      "context" : ".direction-rw"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 312,
+      "column" : 5,
+      "context" : ".source-rw"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 327,
+      "column" : 1,
+      "context" : ".list-simple-rw"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 338,
+      "column" : 4,
+      "context" : ".photo"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 358,
+      "column" : 1,
+      "context" : ".-epub-media-overlay-active"
+    }, {
+      "fileName" : "There are 3 additional locations for this message.",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : "Remove unused CSS selectors."
+  }, {
+    "ID" : "CSS-025",
+    "severity" : "USAGE",
+    "message" : "CSS class Selector is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/chapter_001.xhtml",
+      "line" : 9,
+      "column" : 68,
+      "context" : ".Chapter-rw"
+    }, {
+      "fileName" : "OPS/chapter_001.xhtml",
+      "line" : 9,
+      "column" : 68,
+      "context" : ".body-rw"
+    } ],
+    "suggestion" : "Check for typos or define a class selector to document the use of the class."
+  }, {
+    "ID" : "CSS-028",
+    "severity" : "USAGE",
+    "message" : "Use of Font-face declaration.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 3,
+      "column" : 1,
+      "context" : "null"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 4,
+      "column" : 1,
+      "context" : "null"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 5,
+      "column" : 1,
+      "context" : "null"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 6,
+      "column" : 1,
+      "context" : "OPS/fonts/iwonacond-regular.otf"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 10,
+      "column" : 1,
+      "context" : "OPS/fonts/iwonacond-regular.otf"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 11,
+      "column" : 1,
+      "context" : "OPS/fonts/iwonacond-regular.otf"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 12,
+      "column" : 1,
+      "context" : "OPS/fonts/iwonacond-regular.otf"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 13,
+      "column" : 1,
+      "context" : "OPS/fonts/iwonacond-bold.otf"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 17,
+      "column" : 1,
+      "context" : "OPS/fonts/iwonacond-bold.otf"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 18,
+      "column" : 1,
+      "context" : "OPS/fonts/iwonacond-bold.otf"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 19,
+      "column" : 1,
+      "context" : "OPS/fonts/iwonacond-bold.otf"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 20,
+      "column" : 1,
+      "context" : "OPS/fonts/iwonacond-italic.otf"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 24,
+      "column" : 1,
+      "context" : "OPS/fonts/iwonacond-italic.otf"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 25,
+      "column" : 1,
+      "context" : "OPS/fonts/iwonacond-italic.otf"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 26,
+      "column" : 1,
+      "context" : "OPS/fonts/iwonacond-italic.otf"
+    }, {
+      "fileName" : "OPS/css/stylesheet.css",
+      "line" : 27,
+      "column" : 1,
+      "context" : "OPS/fonts/iwonacond-bolditalic.otf"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "MED-005",
+    "severity" : "ERROR",
+    "message" : "Media Overlay audio reference OPS/audio/echild_s01_all.m4a to non-standard audio type audio/m4a found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/page01.smil",
+      "line" : 6,
+      "column" : 57,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "OPF-058",
+    "severity" : "USAGE",
+    "message" : "Spine item has no TOC entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/chapter_001.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one TOC entry."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/chapter_001.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'assertion failed:\n  global media:duration meta element not set'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 10,
+      "column" : 13,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'assertion failed:\n  item media:duration meta element not set (expecting: meta property='media:duration' refines='#smil01')'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 12,
+      "column" : 102,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/namespaces/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/xhtml/namespaces/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/namespaces/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/namespaces/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/xhtml/namespaces/OPS/content.opf
new file mode 100644
index 0000000..368912f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/namespaces/OPS/content.opf
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>HTML 5 Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="namespaces">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" href="html5.xhtml" media-type="application/xhtml+xml" />
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/namespaces/OPS/html5.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/namespaces/OPS/html5.xhtml
new file mode 100644
index 0000000..35cbbb4
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/namespaces/OPS/html5.xhtml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:unused="http://unused.namespace.com/unused" xml:lang="en" lang="en">
+<head>
+    <title>HTML5</title>
+</head>
+<body>
+<div>
+    <article>
+        <h1>Internet Explorer 9</h1>
+        <p>Windows Internet Explorer 9 (abbreviated as IE9) was released to
+            the  public on March 14, 2011 at 21:00 PDT.....</p>
+    </article>
+
+    <aside>
+        <h4>Epcot Center</h4>
+        <p>The Epcot Center is a theme park in Disney World, Florida.</p>
+    </aside>
+
+    <audio  controls="controls" autoplay="autoplay">
+        <source src="echild_s01_all.m4a" type="audio/mpeg"/>
+        Your browser does not support the audio tag.
+    </audio>
+</div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/namespaces/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/xhtml/namespaces/OPS/toc.ncx
new file mode 100644
index 0000000..ecc0bf3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/namespaces/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>HTML5 Testing</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>HTML5 Sample</text>
+      </navLabel>
+      <content src="html5.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/namespaces/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/namespaces/OPS/toc.xhtml
new file mode 100644
index 0000000..52991bf
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/namespaces/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="html5.xhtml">HTML5</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/namespaces/mimetype b/src/test/resources/com/adobe/epubcheck/test/xhtml/namespaces/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/namespaces/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/namespaces_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/xhtml/namespaces_expected_results.json
new file mode 100644
index 0000000..2f0e884
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/namespaces_expected_results.json
@@ -0,0 +1,272 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/xhtml/namespaces.epub",
+    "filename" : "namespaces.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:29",
+    "elapsedTime" : 75,
+    "nFatal" : 0,
+    "nError" : 3,
+    "nWarning" : 0,
+    "nUsage" : 5
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "HTML 5 Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : null,
+    "language" : "en",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : false,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 414,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 368,
+    "uncompressedSize" : 737,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "e2e4ea317d94696c4c1cae9c2a6c5f17428b8f744f5b2ccdb17a896abf0cf",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 288,
+    "uncompressedSize" : 546,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "73a729f831143549b9dbe5bc082edc31f7fe9d02bd6539e9ebf9546ad517b43",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/html5.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/html5.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 426,
+    "uncompressedSize" : 749,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "a6a7b7bb2d6b6f08c76e09e5c8af9429f58eaa541ed34e14b9d741acde613cc",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : true,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/echild_s01_all.m4a" ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 230,
+    "uncompressedSize" : 337,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "adc4b543b3f07f6d69207b619f3404a73c469a3d17fa81c536d79032daf270",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/html5.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/html5.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "namespaces.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://unused.namespace.com/unused' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/html5.xhtml",
+      "line" : 3,
+      "column" : 118,
+      "context" : "xmlns:unused"
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-044",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://unused.namespace.com/unused' was included but not used.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/html5.xhtml",
+      "line" : 3,
+      "column" : 118,
+      "context" : "xmlns:unused"
+    } ],
+    "suggestion" : "Remove unused Namespace URIs."
+  }, {
+    "ID" : "OPF-030",
+    "severity" : "ERROR",
+    "message" : "The unique-identifier 'BOGUS' was not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'assertion failed:\n  package element unique-identifier attribute does not resolve to a dc:identifier element (given reference was 'BOGUS')'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/content.opf",
+      "line" : 2,
+      "column" : 87,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-007",
+    "severity" : "ERROR",
+    "message" : "Referenced resource is not found in the ePub.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/html5.xhtml",
+      "line" : 21,
+      "column" : 61,
+      "context" : "OPS/echild_s01_all.m4a"
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting/META-INF/container.xml
new file mode 100644
index 0000000..efed131
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting/META-INF/container.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+   <rootfiles>
+      <rootfile full-path="OPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting/OPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting/OPS/content.opf
new file mode 100644
index 0000000..b442891
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting/OPS/content.opf
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BOGUS" version="3.0">
+  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Block Nesting Sample Book</dc:title>
+    <dc:language>en</dc:language>
+    <dc:identifier id="BOGUS">000000000000000000</dc:identifier>
+    <meta property="dcterms:modified">2012-10-10T12:00:00Z</meta>
+  </metadata>
+  <manifest>
+    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="toc" properties="nav" href="toc.xhtml" media-type="application/xhtml+xml"/>
+    <item id="page01" href="deep_nesting.xhtml" media-type="application/xhtml+xml" />
+    <item id="page02" href="standard_nesting.xhtml" media-type="application/xhtml+xml" />
+    <item id="stylesheet" href="stylesheet.css" media-type="text/css"/>
+  </manifest>
+  <spine toc="ncx">
+    <itemref idref="page01" />
+    <itemref idref="page02" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting/OPS/deep_nesting.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting/OPS/deep_nesting.xhtml
new file mode 100644
index 0000000..63fd4d3
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting/OPS/deep_nesting.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Deeply Nested</title>
+    <link type="text/css" rel="stylesheet" href="stylesheet.css"/>
+</head>
+<body>
+  <div class="calibre">
+    <h1 class="calibre1">Deeply Nested HTML Blocks</h1>
+
+      <h1 class="calibre1"> Lorem Ipsum </h1>
+      <p class="calibre2"><span class="calibre5">Aliquam</span> <span class="calibre5">mattis</span> <span class="calibre5">cursus</span> <span class="calibre5">nunc</span> <span class="calibre5">ultrices</span> <span class="calibre5">laoreet.</span> <span class="calibre5">Cras</span> <span class="calibre5">quis</span> <span class="calibre5">congue</span> <span class="calibre5">leo.</span> <span class="calibre5">Maecenas</span> <span class="calibre5">faucibus</span> <span class="calibre5 [...]
+  </div>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting/OPS/standard_nesting.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting/OPS/standard_nesting.xhtml
new file mode 100644
index 0000000..844b231
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting/OPS/standard_nesting.xhtml
@@ -0,0 +1,49 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Standard Nesting</title>
+    <link type="text/css" rel="stylesheet" href="stylesheet.css"/>
+</head>
+<body>
+<div class="calibre">
+    <h1 class="calibre1">Standard Nested HTML Blocks</h1>
+    <h1 class="calibre1"> Lorem Ipsum </h1>
+    <p class="calibre3">
+        Aliquam mattis cursus nunc ultrices laoreet. Cras quis congue leo. Maecenas faucibus elementum magna, sit amet fringilla libero lobortis ut. Quisque congue mauris sed elit facilisis ultricies. Curabitur dolor nisi, eleifend at tempor a, laoreet quis felis. Nulla ullamcorper diam non arcu pellentesque vitae egestas mauris dictum. Vestibulum eget pretium velit.
+    </p>
+</div>
+
+<div class="calibre">
+        Aliquam mattis cursus nunc ultrices laoreet. Cras quis congue leo. Maecenas faucibus elementum magna, sit amet fringilla libero lobortis ut. Quisque congue mauris sed elit facilisis ultricies. Curabitur dolor nisi, eleifend at tempor a, laoreet quis felis. Nulla ullamcorper diam non arcu pellentesque vitae egestas mauris dictum. Vestibulum eget pretium velit.
+</div>
+<div class="calibre">
+    Aliquam mattis cursus nunc ultrices laoreet. Cras quis congue leo. Maecenas faucibus elementum magna, sit amet fringilla libero lobortis ut. Quisque congue mauris sed elit facilisis ultricies. Curabitur dolor nisi, eleifend at tempor a, laoreet quis felis. Nulla ullamcorper diam non arcu pellentesque vitae egestas mauris dictum. Vestibulum eget pretium velit.
+</div>
+<div class="calibre">
+    Aliquam mattis cursus nunc ultrices laoreet. Cras quis congue leo. Maecenas faucibus elementum magna, sit amet fringilla libero lobortis ut. Quisque congue mauris sed elit facilisis ultricies. Curabitur dolor nisi, eleifend at tempor a, laoreet quis felis. Nulla ullamcorper diam non arcu pellentesque vitae egestas mauris dictum. Vestibulum eget pretium velit.
+</div>
+<div class="calibre">
+    Aliquam mattis cursus nunc ultrices laoreet. Cras quis congue leo. Maecenas faucibus elementum magna, sit amet fringilla libero lobortis ut. Quisque congue mauris sed elit facilisis ultricies. Curabitur dolor nisi, eleifend at tempor a, laoreet quis felis. Nulla ullamcorper diam non arcu pellentesque vitae egestas mauris dictum. Vestibulum eget pretium velit.
+</div>
+<div class="calibre">
+    Aliquam mattis cursus nunc ultrices laoreet. Cras quis congue leo. Maecenas faucibus elementum magna, sit amet fringilla libero lobortis ut. Quisque congue mauris sed elit facilisis ultricies. Curabitur dolor nisi, eleifend at tempor a, laoreet quis felis. Nulla ullamcorper diam non arcu pellentesque vitae egestas mauris dictum. Vestibulum eget pretium velit.
+</div>
+<div class="calibre">
+    Aliquam mattis cursus nunc ultrices laoreet. Cras quis congue leo. Maecenas faucibus elementum magna, sit amet fringilla libero lobortis ut. Quisque congue mauris sed elit facilisis ultricies. Curabitur dolor nisi, eleifend at tempor a, laoreet quis felis. Nulla ullamcorper diam non arcu pellentesque vitae egestas mauris dictum. Vestibulum eget pretium velit.
+</div>
+<div class="calibre">
+    Aliquam mattis cursus nunc ultrices laoreet. Cras quis congue leo. Maecenas faucibus elementum magna, sit amet fringilla libero lobortis ut. Quisque congue mauris sed elit facilisis ultricies. Curabitur dolor nisi, eleifend at tempor a, laoreet quis felis. Nulla ullamcorper diam non arcu pellentesque vitae egestas mauris dictum. Vestibulum eget pretium velit.
+</div>
+<div class="calibre">
+    Aliquam mattis cursus nunc ultrices laoreet. Cras quis congue leo. Maecenas faucibus elementum magna, sit amet fringilla libero lobortis ut. Quisque congue mauris sed elit facilisis ultricies. Curabitur dolor nisi, eleifend at tempor a, laoreet quis felis. Nulla ullamcorper diam non arcu pellentesque vitae egestas mauris dictum. Vestibulum eget pretium velit.
+</div>
+<div class="calibre">
+    Aliquam mattis cursus nunc ultrices laoreet. Cras quis congue leo. Maecenas faucibus elementum magna, sit amet fringilla libero lobortis ut. Quisque congue mauris sed elit facilisis ultricies. Curabitur dolor nisi, eleifend at tempor a, laoreet quis felis. Nulla ullamcorper diam non arcu pellentesque vitae egestas mauris dictum. Vestibulum eget pretium velit.
+</div>
+<div class="calibre">
+    Aliquam mattis cursus nunc ultrices laoreet. Cras quis congue leo. Maecenas faucibus elementum magna, sit amet fringilla libero lobortis ut. Quisque congue mauris sed elit facilisis ultricies. Curabitur dolor nisi, eleifend at tempor a, laoreet quis felis. Nulla ullamcorper diam non arcu pellentesque vitae egestas mauris dictum. Vestibulum eget pretium velit.
+</div>
+<blockquote>this is a blockquote</blockquote>
+<blockquote><h1>this is a blockquote with a header</h1>and a body</blockquote>
+</body>
+</html>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting/OPS/stylesheet.css b/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting/OPS/stylesheet.css
new file mode 100644
index 0000000..140a264
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting/OPS/stylesheet.css
@@ -0,0 +1,97 @@
+ at namespace h "http://www.w3.org/1999/xhtml";
+.calibre {
+    display: block;
+    font-size: 1em;
+    margin-bottom: 0;
+    margin-left: 5pt;
+    margin-right: 5pt;
+    margin-top: 0;
+    page-break-before: always;
+    text-align: justify
+    }
+.calibre1 {
+    display: block;
+    font-size: 2em;
+    font-weight: bold;
+    margin-bottom: 0.67em;
+    margin-left: 0;
+    margin-right: 0;
+    margin-top: 0.67em;
+    page-break-before: always
+    }
+.calibre2 {
+    display: block;
+    margin-bottom: 1em;
+    margin-left: 0;
+    margin-right: 0;
+    margin-top: 1em
+    }
+.calibre3 {
+    display: block;
+    list-style-type: disc;
+    margin-bottom: 1em;
+    margin-left: 0;
+    margin-right: 0;
+    margin-top: 1em
+    }
+.calibre4 {
+    display: list-item
+    }
+.calibre5 {
+    display: inline;
+    list-style-image: none;
+    list-style-position: outside;
+    list-style-type: none
+    }
+.calibre6 {
+    display: block;
+    list-style-type: circle;
+    margin-bottom: 0;
+    margin-left: 0;
+    margin-right: 0;
+    margin-top: 0
+    }
+.calibre7 {
+    display: block;
+    list-style-type: square;
+    margin-bottom: 0;
+    margin-left: 0;
+    margin-right: 0;
+    margin-top: 0
+    }
+.calibre8 {
+    display: block;
+    page-break-after: always
+    }
+.ch-lvl {
+    display: block;
+    font-size: 1.41667em;
+    font-weight: bold;
+    margin-bottom: 0.83em;
+    margin-left: 0;
+    margin-right: 0;
+    margin-top: 0.83em;
+    page-break-before: always
+    }
+.ch-lvl1 {
+    display: block;
+    font-size: 1.125em;
+    font-weight: bold;
+    margin-bottom: 1em;
+    margin-left: 0;
+    margin-right: 0;
+    margin-top: 1em
+    }
+a {
+    color: inherit;
+    text-decoration: inherit;
+    cursor: default
+    }
+a[href] {
+    color: blue;
+    text-decoration: none;
+    cursor: pointer
+    }
+a[href]:hover {
+    color: red;
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting/OPS/toc.ncx b/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting/OPS/toc.ncx
new file mode 100644
index 0000000..0864a16
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting/OPS/toc.ncx
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+  <head>
+    <meta name="dtb:uid" content=""/>
+    <meta name="dtb:depth" content="1"/>
+    <meta name="dtb:totalPageCount" content="0"/>
+    <meta name="dtb:maxPageNumber" content="0"/>
+  </head>
+  <docTitle>
+    <text>Nested Block Testing</text>
+  </docTitle>  
+  <navMap>
+    <navPoint id="np-1" playOrder="1">
+      <navLabel>
+	<text>Deeply Nested Sample</text>
+      </navLabel>
+      <content src="deep_nesting.xhtml"/>
+    </navPoint>
+  </navMap>
+</ncx>
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting/OPS/toc.xhtml b/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting/OPS/toc.xhtml
new file mode 100644
index 0000000..256db99
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting/OPS/toc.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en">
+
+<head>
+    <title>Table of Contents</title>
+</head>
+<body>
+<nav epub:type="toc">
+    <ol>
+        <li><a href="deep_nesting.xhtml">Deeply Nested HTML</a></li>
+    </ol>
+</nav>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting/mimetype b/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting_expected_results.json
new file mode 100644
index 0000000..c669297
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/nesting_expected_results.json
@@ -0,0 +1,334 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/xhtml/nesting.epub",
+    "filename" : "nesting.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:27",
+    "elapsedTime" : 88,
+    "nFatal" : 0,
+    "nError" : 0,
+    "nWarning" : 0,
+    "nUsage" : 7
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Block Nesting Sample Book",
+    "creator" : [ ],
+    "date" : "2012-10-10T12:00:00Z",
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "000000000000000000",
+    "language" : "en",
+    "nSpines" : 2,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "3.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 4734,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 172,
+    "uncompressedSize" : 254,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "61c34690751e24ea0ac4a46f02063b015d4442763ccdfb5474b928e5b662b2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OPS/content.opf",
+    "fileName" : "OPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 410,
+    "uncompressedSize" : 939,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "ddc64cdecc94d87a881bd5e45239ff79d4fa6ad6f4946aabe543ecd343ad10",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OPS/toc.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 301,
+    "uncompressedSize" : 568,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "3e6eb465a7b530f5f37ec3f0c2cddb13fb66c1401325a45815c25bc8897c2e",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/deep_nesting.xhtml" ]
+  }, {
+    "id" : "page01",
+    "fileName" : "OPS/deep_nesting.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 513,
+    "uncompressedSize" : 2286,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "89945b9476ccf0684f84db09813aa1d7b8f36b8fe4b85a76499ccf7633fc",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/stylesheet.css" ]
+  }, {
+    "id" : "page02",
+    "fileName" : "OPS/standard_nesting.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 538,
+    "uncompressedSize" : 4846,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "b6dfb7c94f70bd5bfeb29043eb5876ee73da46ff7ba306c88271db98a8d2",
+    "isSpineItem" : true,
+    "spineIndex" : 1,
+    "isLinear" : true,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OPS/stylesheet.css" ]
+  }, {
+    "id" : "stylesheet",
+    "fileName" : "OPS/stylesheet.css",
+    "media_type" : "text/css",
+    "compressedSize" : 428,
+    "uncompressedSize" : 1820,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "990dd1f081796234e088492e773c7641f4e1416c9ed9696e6998d5fdb2a2",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "toc",
+    "fileName" : "OPS/toc.xhtml",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 244,
+    "uncompressedSize" : 357,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f54f82fe13ee7ac5d6119589297a35928bf9fda381cadd949ec3d797e15d36",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : true,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OPS/deep_nesting.xhtml" ]
+  } ],
+  "messages" : [ {
+    "ID" : "ACC-007",
+    "severity" : "USAGE",
+    "message" : "Content Documents do not use 'epub:type' attributes for semantic inflection.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/deep_nesting.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    }, {
+      "fileName" : "OPS/standard_nesting.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "ACC-008",
+    "severity" : "USAGE",
+    "message" : "Navigation Document has no 'landmarks nav' element.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "nesting.epub",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "CSS-024",
+    "severity" : "USAGE",
+    "message" : "CSS class Selector is not used.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/stylesheet.css",
+      "line" : 37,
+      "column" : 1,
+      "context" : ".calibre4"
+    }, {
+      "fileName" : "OPS/stylesheet.css",
+      "line" : 46,
+      "column" : 1,
+      "context" : ".calibre6"
+    }, {
+      "fileName" : "OPS/stylesheet.css",
+      "line" : 54,
+      "column" : 1,
+      "context" : ".calibre7"
+    }, {
+      "fileName" : "OPS/stylesheet.css",
+      "line" : 62,
+      "column" : 1,
+      "context" : ".calibre8"
+    }, {
+      "fileName" : "OPS/stylesheet.css",
+      "line" : 66,
+      "column" : 1,
+      "context" : ".ch-lvl"
+    }, {
+      "fileName" : "OPS/stylesheet.css",
+      "line" : 76,
+      "column" : 1,
+      "context" : ".ch-lvl1"
+    } ],
+    "suggestion" : "Remove unused CSS selectors."
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : 2,
+      "column" : 68,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-022",
+    "severity" : "USAGE",
+    "message" : "Document may contain excessive DIV or SPAN tags.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "deep_nesting.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : null
+    } ],
+    "suggestion" : "Merge DIV or SPAN tags when they are consecutive and use the same style."
+  }, {
+    "ID" : "OPF-058",
+    "severity" : "USAGE",
+    "message" : "Spine item has no TOC entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.xhtml",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/standard_nesting.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one TOC entry."
+  }, {
+    "ID" : "OPF-059",
+    "severity" : "USAGE",
+    "message" : "Spine item has no NAV entry reference.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OPS/toc.ncx",
+      "line" : -1,
+      "column" : -1,
+      "context" : "OPS/standard_nesting.xhtml"
+    } ],
+    "suggestion" : "Every spine item in the manifest should be referenced by at least one NAV entry."
+  } ]
+}
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/singleline/META-INF/container.xml b/src/test/resources/com/adobe/epubcheck/test/xhtml/singleline/META-INF/container.xml
new file mode 100644
index 0000000..25a46b9
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/singleline/META-INF/container.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0"><rootfiles><rootfile full-path="OEBPS/content.opf" media-type="application/oebps-package+xml" /></rootfiles></container>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/singleline/OEBPS/content.opf b/src/test/resources/com/adobe/epubcheck/test/xhtml/singleline/OEBPS/content.opf
new file mode 100644
index 0000000..1fa31e6
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/singleline/OEBPS/content.opf
@@ -0,0 +1,20 @@
+<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="uid">
+  <opf:metadata xmlns:opf="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/">
+    <dc:title>Moby Dick</dc:title>
+    <dc:date opf:event="creation">2010-01-21</dc:date>
+    <dc:date opf:event="modification">2010-01-21</dc:date>
+    <dc:date opf:event="publication">2010-11-05</dc:date>
+    <dc:identifier id="uid">2940010571634</dc:identifier>
+    <dc:language>en-US</dc:language>
+    <opf:meta name="generator" content="Aspose.Words for .NET 9.3.0.0" />
+    <meta xmlns="" name="BNContentKind" content="book" />
+  </opf:metadata>
+  <manifest>
+    <item id="book" href="moby.html" media-type="application/xhtml+xml" />
+    <item id="ncx" href="moby.ncx" media-type="application/x-dtbncx+xml" />
+    <item id="css" href="stylesheet.css" media-type="text/css" />
+</manifest>
+  <spine toc="ncx">
+    <itemref idref="book" />
+  </spine>
+</package>
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/singleline/OEBPS/moby.html b/src/test/resources/com/adobe/epubcheck/test/xhtml/singleline/OEBPS/moby.html
new file mode 100644
index 0000000..7136a8b
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/singleline/OEBPS/moby.html
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="en" lang="en"><head><title>Moby-Dick</title>	<link rel="stylesheet" href="stylesheet.css" type="text/css"/>	<meta charset="utf-8"/></head><body><p><div class="body-rw Chapter-rw" epub:type="bodymatter chapter"><h1 id="c01h01">Chapter 1. Loomings.</h1></div></p><p><span class="pubitCssCls1" id="c01w00001">Call</span> <span class="pubitCssCls2" id="c01w00002" [...]
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/singleline/OEBPS/moby.ncx b/src/test/resources/com/adobe/epubcheck/test/xhtml/singleline/OEBPS/moby.ncx
new file mode 100644
index 0000000..b91c043
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/singleline/OEBPS/moby.ncx
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><!DOCTYPE ncx PUBLIC "-//NISO//DTD ncx 2005-1//EN" "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd"><ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1" xml:lang="en-US"><head><meta name="dtb:uid" content="uid" /><meta name="dtb:depth" content="1" /><meta name="dtb:generator" content="Aspose.Words for .NET 9.3.0.0" /><meta name="dtb:totalPageCount" content="0" /><meta name="dtb:maxPageNumber" content="0" /></head><docTitle><text>Moby Di [...]
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/singleline/OEBPS/stylesheet.css b/src/test/resources/com/adobe/epubcheck/test/xhtml/singleline/OEBPS/stylesheet.css
new file mode 100644
index 0000000..08ee3e5
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/singleline/OEBPS/stylesheet.css
@@ -0,0 +1 @@
+.pubitCssCls1 { margin:0pt; } .pubitCssCls2 { font-family:'Times New Roman', serif; font-size:1.17em; font-weight:bold; } .pubitCssCls3 { font-family:'Times New Roman', serif; } .pubitCssCls4 { color:#0000ff; font-family:Arial, sans-serif; font-size:0.83em; text-decoration:underline; } .pubitCssCls5 { font-family:Arial, sans-serif; font-size:0.83em; } .pubitCssCls6 { border-collapse:collapse; margin-left:0pt; } .pubitCssCls7 { height:0pt; } .pubitCssCls8 { background-color:#ffffff; borde [...]
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/singleline/mimetype b/src/test/resources/com/adobe/epubcheck/test/xhtml/singleline/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/singleline/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/test/resources/com/adobe/epubcheck/test/xhtml/singleline_expected_results.json b/src/test/resources/com/adobe/epubcheck/test/xhtml/singleline_expected_results.json
new file mode 100644
index 0000000..479620c
--- /dev/null
+++ b/src/test/resources/com/adobe/epubcheck/test/xhtml/singleline_expected_results.json
@@ -0,0 +1,268 @@
+{
+  "customMessageFileName" : null,
+  "checker" : {
+    "path" : "./com/adobe/epubcheck/test/xhtml/singleline.epub",
+    "filename" : "singleline.epub",
+    "checkerVersion" : "4.0.0-alpha11-SNAPSHOT",
+    "checkDate" : "09-05-2014 03:16:29",
+    "elapsedTime" : 39,
+    "nFatal" : 0,
+    "nError" : 3,
+    "nWarning" : 0,
+    "nUsage" : 3
+  },
+  "publication" : {
+    "publisher" : null,
+    "title" : "Moby Dick",
+    "creator" : [ ],
+    "date" : null,
+    "subject" : [ ],
+    "description" : null,
+    "rights" : null,
+    "identifier" : "2940010571634",
+    "language" : "en-US",
+    "nSpines" : 1,
+    "checkSum" : 0,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "ePubVersion" : "2.0",
+    "isScripted" : false,
+    "hasFixedFormat" : false,
+    "isBackwardCompatible" : true,
+    "hasAudio" : false,
+    "hasVideo" : false,
+    "charsCount" : 12188,
+    "embeddedFonts" : [ ],
+    "refFonts" : [ ],
+    "hasEncryption" : false,
+    "hasSignatures" : false,
+    "contributors" : [ ]
+  },
+  "items" : [ {
+    "id" : "book",
+    "fileName" : "OEBPS/moby.html",
+    "media_type" : "application/xhtml+xml",
+    "compressedSize" : 6342,
+    "uncompressedSize" : 13498,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "978cb329f2169baddf2b6a8b4cf9b5e8c79b2472a7098d66ba8de9528b5854",
+    "isSpineItem" : true,
+    "spineIndex" : 0,
+    "isLinear" : true,
+    "navigationOrder" : 1,
+    "isHTML5" : false,
+    "isFixedFormat" : false,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : "reflowable",
+    "renditionOrientation" : "auto",
+    "renditionSpread" : "auto",
+    "referencedItems" : [ "OEBPS/stylesheet.css" ]
+  }, {
+    "id" : "css",
+    "fileName" : "OEBPS/stylesheet.css",
+    "media_type" : "text/css",
+    "compressedSize" : 377,
+    "uncompressedSize" : 1039,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "73956720de18e4a4664b39b3b2734835b29ae7127a879726568d8f8de4f4c96",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:META-INF/container.xml",
+    "fileName" : "META-INF/container.xml",
+    "media_type" : null,
+    "compressedSize" : 165,
+    "uncompressedSize" : 239,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "2f14ad16f54c78cc622709dd8ec1b6b5afe7a0ed905ff229b9fced6954a53",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:OEBPS/content.opf",
+    "fileName" : "OEBPS/content.opf",
+    "media_type" : null,
+    "compressedSize" : 426,
+    "uncompressedSize" : 951,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "1462928dbdd485f6776f35631e981a2fa18fb99a35a363272d3f31caee6d53",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ePubCheck.NoManifestRef:mimetype",
+    "fileName" : "mimetype",
+    "media_type" : null,
+    "compressedSize" : 20,
+    "uncompressedSize" : 20,
+    "compressionMethod" : "Stored",
+    "checkSum" : "e468e350d1143eb648f6c7bbd63111ec544a361ca74ecef256ac91f48b",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ ]
+  }, {
+    "id" : "ncx",
+    "fileName" : "OEBPS/moby.ncx",
+    "media_type" : "application/x-dtbncx+xml",
+    "compressedSize" : 343,
+    "uncompressedSize" : 652,
+    "compressionMethod" : "Deflated",
+    "checkSum" : "f3b2f9d55267118cc14231e25b572df3365f6025ef1fcf0f0ba19ec523bda",
+    "isSpineItem" : false,
+    "spineIndex" : null,
+    "isLinear" : false,
+    "navigationOrder" : null,
+    "isHTML5" : false,
+    "isFixedFormat" : null,
+    "isScripted" : false,
+    "scriptSrc" : false,
+    "scriptTag" : false,
+    "scriptInline" : false,
+    "renditionLayout" : null,
+    "renditionOrientation" : null,
+    "renditionSpread" : null,
+    "referencedItems" : [ "OEBPS/moby.html" ]
+  } ],
+  "messages" : [ {
+    "ID" : "CSS-025",
+    "severity" : "USAGE",
+    "message" : "CSS class Selector is not found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OEBPS/moby.html",
+      "line" : 1,
+      "column" : 344,
+      "context" : ".Chapter-rw"
+    }, {
+      "fileName" : "OEBPS/moby.html",
+      "line" : 1,
+      "column" : 344,
+      "context" : ".body-rw"
+    }, {
+      "fileName" : "OEBPS/moby.html",
+      "line" : 1,
+      "column" : 11372,
+      "context" : ".block-rw"
+    }, {
+      "fileName" : "OEBPS/moby.html",
+      "line" : 1,
+      "column" : 11372,
+      "context" : ".extract-rw"
+    }, {
+      "fileName" : "OEBPS/moby.html",
+      "line" : 1,
+      "column" : 11372,
+      "context" : ".headline-rw"
+    } ],
+    "suggestion" : "Check for typos or define a class selector to document the use of the class."
+  }, {
+    "ID" : "HTM-010",
+    "severity" : "USAGE",
+    "message" : "Namespace uri 'http://www.daisy.org/z3986/2005/ncx/' was found.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OEBPS/moby.ncx",
+      "line" : 1,
+      "column" : 223,
+      "context" : ""
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "HTM-044",
+    "severity" : "USAGE",
+    "message" : "Namespace uri '' was included but not used.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OEBPS/content.opf",
+      "line" : 10,
+      "column" : 58,
+      "context" : ""
+    } ],
+    "suggestion" : "Remove unused Namespace URIs."
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'attribute \"charset\" not allowed here; expected attribute \"content\", \"dir\", \"http-equiv\", \"lang\", \"name\", \"scheme\" or \"xml:lang\"'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OEBPS/moby.html",
+      "line" : 1,
+      "column" : 265,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'attribute \"epub:type\" not allowed here; expected attribute \"dir\", \"id\", \"lang\", \"style\", \"title\" or \"xml:lang\"'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OEBPS/moby.html",
+      "line" : 1,
+      "column" : 344,
+      "context" : null
+    } ],
+    "suggestion" : null
+  }, {
+    "ID" : "RSC-005",
+    "severity" : "ERROR",
+    "message" : "Error while parsing file 'element \"div\" not allowed here; expected the element end-tag, text or element \"a\", \"abbr\", \"acronym\", \"applet\", \"b\", \"bdo\", \"big\", \"br\", \"cite\", \"code\", \"del\", \"dfn\", \"em\", \"i\", \"iframe\", \"img\", \"ins\", \"kbd\", \"map\", \"noscript\", \"ns:svg\", \"object\", \"q\", \"samp\", \"script\", \"small\", \"span\", \"strong\", \"sub\", \"sup\", \"tt\" or \"var\" (with xmlns:ns=\"http://www.w3.org/2000/svg\")'.",
+    "additionalLocations" : 0,
+    "locations" : [ {
+      "fileName" : "OEBPS/moby.html",
+      "line" : 1,
+      "column" : 344,
+      "context" : null
+    } ],
+    "suggestion" : null
+  } ]
+}
diff --git a/src/test/resources/css/bom-charset15.css b/src/test/resources/css/bom-charset15.css
new file mode 100644
index 0000000..193af0f
--- /dev/null
+++ b/src/test/resources/css/bom-charset15.css
@@ -0,0 +1,7 @@
+@charset "iso-8859-15";
+.hello {
+	background-color: #FF0000;
+	font-weight: bold;
+	color: red;
+	font-family: Arial, Helvetica, sans-serif; 
+	}
diff --git a/src/test/resources/css/bom-utf16be-charset.css b/src/test/resources/css/bom-utf16be-charset.css
new file mode 100644
index 0000000..fe620ce
Binary files /dev/null and b/src/test/resources/css/bom-utf16be-charset.css differ
diff --git a/src/test/resources/css/bom-utf16be.css b/src/test/resources/css/bom-utf16be.css
new file mode 100644
index 0000000..a144de2
Binary files /dev/null and b/src/test/resources/css/bom-utf16be.css differ
diff --git a/src/test/resources/css/bom-utf16le-charset.css b/src/test/resources/css/bom-utf16le-charset.css
new file mode 100644
index 0000000..3a54d35
Binary files /dev/null and b/src/test/resources/css/bom-utf16le-charset.css differ
diff --git a/src/test/resources/css/bom-utf16le.css b/src/test/resources/css/bom-utf16le.css
new file mode 100644
index 0000000..afa37b9
Binary files /dev/null and b/src/test/resources/css/bom-utf16le.css differ
diff --git a/src/test/resources/css/caja.css b/src/test/resources/css/caja.css
new file mode 100644
index 0000000..5c71a47
--- /dev/null
+++ b/src/test/resources/css/caja.css
@@ -0,0 +1,367 @@
+/*
+ * Examples borrowed from MSDN's "Visual Filters and Transitions Reference"
+ * at http://msdn.microsoft.com/en-us/library/ms532853(VS.85).aspx
+ */
+
+/* You can assign multiple filters at once. */
+p { width:100%; filter:
+    progid:DXImageTransform.Microsoft.MotionBlur(strength=13, direction=310)
+    progid:DXImageTransform.Microsoft.Blur(pixelradius=2)
+    progid:DXImageTransform.Microsoft.Wheel(duration=3); }
+
+
+/* ************************** Procedural Surfaces ************************** */
+
+/* =========================== AlphaImageLoader ============================ */
+p { filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(
+                src='/workshop/graphics/earglobe.gif', sizingMethod='scale'); }
+
+/* ================================ Gradient =============================== */
+p { filter: progid:DXImageTransform.Microsoft.gradient(enabled='false',
+                              startColorstr=#550000FF, endColorstr=#55FFFF00) }
+
+
+/* ***************************** Static Filters **************************** */
+
+/* ================================= Alpha ================================= */
+INPUT.aFilter {filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);}
+
+/* =============================== BasicImage ============================== */
+a { filter: progid:DXImageTransform.Microsoft.BasicImage(mirror=1) }
+b { filter: progid:DXImageTransform.Microsoft.BasicImage(invert=1) }
+i { filter: progid:DXImageTransform.Microsoft.BasicImage(grayScale=1) }
+p { filter: progid:DXImageTransform.Microsoft.BasicImage(xray=1) }
+q { filter: progid:DXImageTransform.Microsoft.BasicImage(mask=1, maskColor=255)}
+
+/* ================================== Blur ================================= */
+p{filter:progid:DXImageTransform.Microsoft.blur(pixelradius=3, enabled='false')}
+
+/* ================================= Chroma ================================ */
+p { filter:progid:DXImageTransform.Microsoft.Chroma(color='yellow'),
+           progid:DXImageTransform.Microsoft.Chroma(color='red') }
+
+/* =============================== Compositor ============================== */
+/* N/A */
+
+/* =============================== DropShadow ============================== */
+p { cursor:hand;height:160px; padding:10px; font:bold 13pt verdana;
+    filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=5, OffY=5,
+                                               Color='gray', Positive='true') }
+
+/* ================================= Emboss ================================ */
+p { filter: progid:DXImageTransform.Microsoft.emboss(enabled='false') }
+
+/* ================================ Engrave ================================ */
+ p { position:absolute; left:270px;
+     filter:progid:DXImageTransform.Microsoft.engrave(enabled='false'); }
+
+/* ================================== Glow ================================= */
+DIV.aFilter {
+  filter:progid:DXImageTransform.Microsoft.Glow(Color=blue,Strength=5);
+  width: 150px;}
+
+/* =============================== ICMFilter =============================== */
+/* NONE */
+
+/* ================================= Light ================================= */
+.aFilter { filter:progid:DXImageTransform.Microsoft.Light(); }
+
+/* =============================== MaskFilter ============================== */
+DIV.aFilter {filter:
+  progid:DXImageTransform.Microsoft.MaskFilter(color=magenta);
+  width: 100px;}
+
+/* ================================= Matrix ================================ */
+p { filter:progid:DXImageTransform.Microsoft.Matrix(sizingMethod='auto expand')}
+
+/* =============================== MotionBlur ============================== */
+DIV.aFilter {
+  filter:progid:DXImageTransform.Microsoft.MotionBlur(Strength=30,Direction=45);
+}
+
+/* ================================= Shadow ================================ */
+DIV.aFilter {filter:
+  progid:DXImageTransform.Microsoft.Shadow(color=#0000FF,direction=45);
+  width: 150px; color: #FF0000;}
+
+/* ================================== Wave ================================= */
+DIV.aFilter {FILTER:PROGID:DXIMAGETRANSFORM.MICROSOFT.WAVE(
+  strength=2,
+  freq=3,
+  lightstrength=20,
+  add=0,
+  phase=90);
+  width: 150px; color: #FF0000;background-color:00ffff}
+
+/* ================================== Barn ================================= */
+p { height:250px; width:250px; background-color: gold;
+    filter:progid:DXImageTransform.Microsoft.Barn(
+        duration=2, motion='out', orientation='vertical');
+  }
+
+
+/* ****************************** Transitions ****************************** */
+
+/* ================================= Blinds ================================ */
+body {  filter:progid:DXImageTransform.Microsoft.Blinds(direction='down') }
+
+/* ============================== CheckerBoard ============================= */
+p { filter:progid:DXImageTransform.Microsoft.CheckerBoard(
+        duration=5, direction='left') }
+
+/* ================================== Fade ================================= */
+p { height:250px; width:250px; background-color: gold;
+    filter:progid:DXImageTransform.Microsoft.Fade( duration=2) }
+
+/* ============================== GradientWipe ============================= */
+p { filter:progid:DXImageTransform.Microsoft.gradientWipe(
+        duration=3, gradientsize=0.5) }
+
+/* ================================= Inset ================================= */
+p { filter:progid:DXImageTransform.Microsoft.Inset( ) }
+
+/* ================================== Iris ================================= */
+p{filter:progid:DXImageTransform.Microsoft.Iris(duration=3)}
+
+/* ================================ Pixelate =============================== */
+p { width:100px; background-color: lightblue;
+                filter:progid:DXImageTransform.Microsoft.Pixelate(
+                duration=3, enabled='false'); }
+
+/* =============================== RadialWipe ============================== */
+a { filter:progid:DXImageTransform.Microsoft.RadialWipe(duration=2); }
+
+/* =============================== RandomBars ============================== */
+img { filter:progid:DXImageTransform.Microsoft.RandomBars(duration=5);}
+
+/* ============================= RandomDissolve ============================ */
+u {
+  height:250px; width:250px; background-color: gold;
+  filter:progid:DXImageTransform.Microsoft.RandomDissolve(duration=3);
+}
+
+/* ================================= Slide ================================= */
+table {
+  height:250px; width:250px; background-color: gold;
+  filter:progid:DXImageTransform.Microsoft.Slide(
+      duration=3, bands='8');
+}
+
+/* ================================= Spiral ================================ */
+div { filter:progid:DXImageTransform.Microsoft.Spiral(
+                duration=3, GridSizeX=25, GridSizeY=25); }
+
+/* ================================ Stretch ================================ */
+b { height:250px; width:250px; background-color: gold;
+    filter:progid:DXImageTransform.Microsoft.Stretch(duration=3) }
+
+/* ================================= Strips ================================ */
+i { filter:progid:DXImageTransform.Microsoft.Strips(
+        duration=5, motion='rightdown'); }
+
+/* ================================= Wheel ================================= */
+hr { filter:progid:DXImageTransform.Microsoft.Wheel(
+                duration=2, spokes=8); }
+
+/* ================================= Zigzag ================================ */
+object { filter:progid:DXImageTransform.Microsoft.Zigzag(
+             duration=3, GridSizeX=25, GridSizeY=25); }
+			/* Paragraphs are red on IE6 and IE7 and blue on other supported browsers. */
+			p { color: blue; color: red; background-color: #fff }
+			ADDRESS,
+			BLOCKQUOTE, 
+			BODY, DD, DIV, 
+			DL, DT, 
+			FIELDSET, FORM,
+			FRAME, FRAMESET,
+			H1, H2, H3, H4, 
+			H5, H6, IFRAME, 
+			NOFRAMES, 
+			OBJECT, OL, P, 
+			UL, APPLET, 
+			CENTER, DIR, 
+			HR, MENU, PRE   { display: block }
+			LI              { display: list-item }
+			HEAD            { display: none }
+			TABLE           { display: table }
+			TR              { display: table-row }
+			THEAD           { display: table-header-group }
+			TBODY           { display: table-row-group }
+			TFOOT           { display: table-footer-group }
+			COL             { display: table-column }
+			COLGROUP        { display: table-column-group }
+			TD, TH          { display: table-cell }
+			CAPTION         { display: table-caption }
+			TH              { font-weight: bolder; text-align: center }
+			CAPTION         { text-align: center }
+			BODY            { padding: 8px; line-height: 1.33 }
+			H1              { font-size: 2em; margin: .67em 0 }
+			H2              { font-size: 1.5em; margin: .83em 0 }
+			H3              { font-size: 1.17em; margin: 1em 0 }
+			H4, P,
+			BLOCKQUOTE, UL,
+			FIELDSET, FORM,
+			OL, DL, DIR,
+			MENU            { margin: 1.33em 0 }
+			H5              { font-size: .83em; line-height: 1.17em; margin: 1.67em 0 }
+			H6              { font-size: .67em; margin: 2.33em 0 }
+			H1, H2, H3, H4,
+			H5, H6, B,
+			STRONG          { font-weight: bolder }
+			BLOCKQUOTE      { margin-left: 40px; margin-right: 40px }
+			I, CITE, EM,
+			VAR, ADDRESS    { font-style: italic }
+			PRE, TT, CODE,
+			KBD, SAMP       { font-family: monospace }
+			PRE             { white-space: pre }
+			BIG             { font-size: 1.17em }
+			SMALL, SUB, SUP { font-size: .83em }
+			SUB             { vertical-align: sub }
+			SUP             { vertical-align: super }
+			S, STRIKE, DEL  { text-decoration: line-through }
+			HR              { border: 1px inset }
+			OL, UL, DIR,
+			MENU, DD        { margin-left: 40px }
+			OL              { list-style-type: decimal }
+			OL UL, UL OL,
+			UL UL, OL OL    { margin-top: 0; margin-bottom: 0 }
+			U, INS          { text-decoration: underline }
+			CENTER          { text-align: center }
+			BR:before       { content: "\A" }
+			COLOR_NOHASH	{ color:987E81 }
+
+			/* An example of style for HTML 4.0's ABBR/ACRONYM elements */
+
+			ABBR, ACRONYM   { font-variant: small-caps; letter-spacing: 0.1em }
+			A[href]         { text-decoration: underline }
+			:focus          { outline: thin dotted invert }
+
+
+			/* Begin bidirectionality settings (do not change) */
+			BDO[DIR="ltr"]  { direction: ltr; unicode-bidi: bidi-override }
+			BDO[DIR="rtl"]  { direction: rtl; unicode-bidi: bidi-override }
+
+			*[DIR="ltr"]    { direction: ltr; unicode-bidi: embed }
+			*[DIR="rtl"]    { direction: rtl; unicode-bidi: embed }
+
+			/* Elements that are block-level in HTML4 */
+			ADDRESS, BLOCKQUOTE, BODY, DD, DIV, DL, DT, FIELDSET, 
+			FORM, FRAME, FRAMESET, H1, H2, H3, H4, H5, H6, IFRAME,
+			NOSCRIPT, NOFRAMES, OBJECT, OL, P, UL, APPLET, CENTER, 
+			DIR, HR, MENU, PRE, LI, TABLE, TR, THEAD, TBODY, TFOOT, 
+			COL, COLGROUP, TD, TH, CAPTION 
+			                { unicode-bidi: embed }
+			/* End bidi settings */
+
+
+			@media print {
+			  /* @page         { margin: 10% }  */ /* not allowed according to spec */
+			  H1, H2, H3,
+			  H4, H5, H6    { page-break-after: avoid; page-break-inside: avoid }
+			  BLOCKQUOTE, 
+			  PRE           { page-break-inside: avoid }
+			  UL, OL, DL    { page-break-before: avoid }
+			}
+
+			@media speech {
+			  H1, H2, H3, 
+			  H4, H5, H6    { voice-family: paul, male; stress: 20; richness: 90 }
+			  H1            { pitch: x-low; pitch-range: 90 }
+			  H2            { pitch: x-low; pitch-range: 80 }
+			  H3            { pitch: low; pitch-range: 70 }
+			  H4            { pitch: medium; pitch-range: 60 }
+			  H5            { pitch: medium; pitch-range: 50 }
+			  H6            { pitch: medium; pitch-range: 40 }
+			  LI, DT, DD    { pitch: medium; richness: 60 }
+			  DT            { stress: 80 }
+			  PRE, CODE, TT { pitch: medium; pitch-range: 0; stress: 0; richness: 80 }
+			  EM            { pitch: medium; pitch-range: 60; stress: 60; richness: 50 }
+			  STRONG        { pitch: medium; pitch-range: 60; stress: 90; richness: 90 }
+			  DFN           { pitch: high; pitch-range: 60; stress: 60 }
+			  S, STRIKE     { richness: 0 }
+			  I             { pitch: medium; pitch-range: 60; stress: 60; richness: 50 }
+			  B             { pitch: medium; pitch-range: 60; stress: 90; richness: 90 }
+			  U             { richness: 0 }
+			  A:link        { voice-family: harry, male }
+			  A:visited     { voice-family: betty, female }
+			  A:active      { voice-family: betty, female; pitch-range: 80; pitch: x-high }
+			}
+			@import url('nonsense.css') mumbling, blather;
+
+			@font-face { 
+			  font-family: Arial;
+			}
+
+			@page { background: url('sparkley.jpg'); }
+			@page hiya:sparkley { background: url('sparkley.jpg') }
+
+			FOO > BAR + BAZ {  }
+			A[href] BOO[zwop |= 'hello']:blinky {
+			  color: #fff;
+			  background: +#000000 ! important
+			}
+
+			.myclass[attr ~= almost] #id:hover(languidly) {
+			  font-weight: super(bold / italic)
+			}
+
+			/* The RHS of the attribute comparison operator in the following cases
+			 * will parse to a StringLiteral since it is surrounded by quotes. */
+			foo[attr = 'bar'] {}
+			foo[attr = "bar"] {}
+			foo[attr ~= 'bar baz'] {}
+			foo[attr |= 'bar-baz'] {}
+
+			/* The RHS of the attribute comparison operator in the following cases
+			 * will parse to an IdentLiteral since it is unquoted. */
+			foo[attr = bar] {}
+			foo[attr |= bar-baz] {}
+
+			foo.bar { }
+
+			foo .bar { }
+
+			foo .quoted { content: 'contains \'quotes\'' }
+
+			foo .dquoted { content: "'contains'\\\"double quotes\"" }
+
+			foo .long { content: 'spans \
+			multiple \
+			lines' }
+
+			foo .extended-unicode { content: 'a1 \61\31  \0000611 \000061 1 \0061\0031' }
+
+			/* CSS 2.1 allows _ in identifiers */
+			#a_b {}
+			.a_b {}
+			#xxx {
+			  filter:alpha(opacity=50);
+			}
+
+			p { margin: -3px -3px }
+
+			p { margin: -3px 3px }
+
+			@bogus hello {
+			  balanced { curly : "brackets" }
+			}
+			
+			@media aural {
+			  b { volume: s-loud } 
+			}
+			
+			/* not thrown out, but 2 digit color is discarded */
+			@media print {
+			  * { color: black !important; background-color: #ff }
+			}
+			
+			a:visited, :unvisited, a::before { color: blue }
+
+			/* expression cruft. Make sure parsing before and after ok. */
+			a1 { a: ok;  color: red:;              a: ok }  /* cruft after : */
+			a2 { a: ok;  width: 0 !import;         a: ok }  /* !important misspelled */
+			a3 { a: ok;  unicode-range: U+0-FFFF;  a: ok }  /* ok */ 
+			a4 { a: ok;  color: #g00;              a: ok }  /* bad hex digit */
+			a5 { a: ok;  image: url('::');         a: ok }  /* malformed URI */
+			a6 { a: ok;  image: url(::);           a: ok }  /* malformed URI */
+
diff --git a/src/test/resources/css/charset-empty.css b/src/test/resources/css/charset-empty.css
new file mode 100644
index 0000000..68f830a
--- /dev/null
+++ b/src/test/resources/css/charset-empty.css
@@ -0,0 +1,2 @@
+ at charset '' ;
+div { color : green }
\ No newline at end of file
diff --git a/src/test/resources/css/charset-malformed.css b/src/test/resources/css/charset-malformed.css
new file mode 100644
index 0000000..033b8a9
--- /dev/null
+++ b/src/test/resources/css/charset-malformed.css
@@ -0,0 +1,2 @@
+ at charset 'ISO-8859-1
+div { color : green }
\ No newline at end of file
diff --git a/src/test/resources/css/charset-utf8.css b/src/test/resources/css/charset-utf8.css
new file mode 100644
index 0000000..a8c84d9
--- /dev/null
+++ b/src/test/resources/css/charset-utf8.css
@@ -0,0 +1,2 @@
+ at charset 'UTF-8';
+div { color : green }
\ No newline at end of file
diff --git a/src/test/resources/css/counter-styles.css b/src/test/resources/css/counter-styles.css
new file mode 100644
index 0000000..fe894d8
--- /dev/null
+++ b/src/test/resources/css/counter-styles.css
@@ -0,0 +1,217 @@
+/* some exercise from http://www.w3.org/TR/css-counter-styles-3/ */
+
+ at counter-style triangle {
+	system: cyclic;
+	symbols: ‣;
+	suffix: '';
+}
+
+ at counter-style box-corner {
+	system: fixed;
+	symbols: ◰ ◳ ◲ ◱;
+	suffix: ':';
+}
+
+ at counter-style footnote {
+	system: symbolic;
+	symbols: * ⁑ † ‡;
+	suffix: '';
+}
+
+ at counter-style upper-alpha-legal {
+	system: symbolic;
+	symbols: A B C D E F G H I J K L M 
+	         N O P Q R S T U V W X Y Z;
+}
+
+ at counter-style fixed-decimal {
+	system: alphabetic;
+	symbols: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9';
+}
+
+ol { 
+	list-style: fixed-decimal;
+	counter-reset: list-item 1111; 
+}
+
+ at counter-style dice {
+	system: additive;
+	additive-symbols: 6 ⚅, 5 ⚄, 4 ⚃, 3 ⚂, 2 ⚁, 1 ⚀;
+	suffix: '';
+}
+
+ at counter-style decimal {
+	system: numeric;
+	symbols: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9';
+}
+
+ at counter-style decimal-leading-zero {
+	system: fixed -9;
+	symbols: '-09' '-08' '-07' '-06' '-05' '-04' '-03' '-02' '-01' '00' '01' '02' '03' '04' '05' '06' '07' '08' '09';
+}
+
+ at counter-style cjk-decimal {
+	system: numeric;
+	symbols: \3007 \4E00 \4E8C \4E09 \56DB \4E94 \516D \4E03 \516B \4E5D;
+	/* 〇 一 二 三 四 五 六 七 八 九 */
+	suffix: '\3001';
+	/* "、" */
+}
+
+ at counter-style lower-roman {
+	system: additive;
+	range: 1 4999;
+	additive-symbols: 1000 m, 900 cm, 500 d, 400 cd, 100 c, 90 xc, 50 l, 40 xl, 10 x, 9 ix, 5 v, 4 iv, 1 i;
+}
+
+ at counter-style upper-roman {
+	system: additive;
+	range: 1 4999;
+	additive-symbols: 1000 M, 900 CM, 500 D, 400 CD, 100 C, 90 XC, 50 L, 40 XL, 10 X, 9 IX, 5 V, 4 IV, 1 I;
+}
+
+ at counter-style armenian {
+	system: additive;
+	range: 1 9999;
+	additive-symbols: 9000 \554, 8000 \553, 7000 \552, 6000 \551, 5000 \550, 4000 \54F, 3000 \54E, 2000 \54D, 1000 \54C, 900 \54B, 800 \54A, 700 \549, 600 \548, 500 \547, 400 \546, 300 \545, 200 \544, 100 \543, 90 \542, 80 \541, 70 \540, 60 \53F, 50 \53E, 40 \53D, 30 \53C, 20 \53B, 10 \53A, 9 \539, 8 \538, 7 \537, 6 \536, 5 \535, 4 \534, 3 \533, 2 \532, 1 \531;
+	/* 9000 Ք, 8000 Փ, 7000 Ւ, 6000 Ց, 5000 Ր, 4000 Տ, 3000 Վ, 2000 Ս, 1000 Ռ, 900 Ջ, 800 Պ, 700 Չ, 600 Ո, 500 Շ, 400 Ն, 300 Յ, 200 Մ, 100 Ճ, 90 Ղ, 80 Ձ, 70 Հ, 60 Կ, 50 Ծ, 40 Խ, 30 Լ, 20 Ի, 10 Ժ, 9 Թ, 8 Ը, 7 Է, 6 Զ, 5 Ե, 4 Դ, 3 Գ, 2 Բ, 1 Ա */
+}
+
+ at counter-style georgian {
+	system: additive;
+	range: 1 19999;
+	additive-symbols: 10000 \10F5, 9000 \10F0, 8000 \10EF, 7000 \10F4, 6000 \10EE, 5000 \10ED, 4000 \10EC, 3000 \10EB, 2000 \10EA, 1000 \10E9, 900 \10E8, 800 \10E7, 700 \10E6, 600 \10E5, 500 \10E4, 400 \10F3, 300 \10E2, 200 \10E1, 100 \10E0, 90 \10DF, 80 \10DE, 70 \10DD, 60 \10F2, 50 \10DC, 40 \10DB, 30 \10DA, 20 \10D9, 10 \10D8, 9 \10D7, 8 \10F1, 7 \10D6, 6 \10D5, 5 \10D4, 4 \10D3, 3 \10D2, 2 \10D1, 1 \10D0;
+	/* 10000 ჵ, 9000 ჰ, 8000 ჯ, 7000 ჴ, 6000 ხ, 5000 ჭ, 4000 წ, 3000 ძ, 2000 ც, 1000 ჩ, 900 შ, 800 ყ, 700 ღ, 600 ქ, 500 ფ, 400 ჳ, 300 ტ, 200 ს, 100 რ, 90 ჟ, 80 პ, 70 ო, 60 ჲ, 50 ნ, 40 მ, 30 ლ, 20 კ, 10 ი, 9 თ, 8 ჱ, 7 ზ, 6 ვ, 5 ე, 4 დ, 3 გ, 2 ბ, 1 ა */
+}
+
+ at counter-style hebrew {
+	system: additive;
+	range: 1 infinite;
+	additive-symbols: 400 \5EA, 300 \5E9, 200 \5E8, 100 \5E7, 90 \5E6, 80 \5E4, 70 \5E2, 60 \5E1, 50 \5E0, 40 \5DE, 30 \5DC, 20 \5DB, 19 \5D9\5D8, 18 \5D9\5D7, 17 \5D9\5D6, 16 \5D8\5D6, 15 \5D8\5D5, 10 \5D9, 9 \5D8, 8 \5D7, 7 \5D6, 6 \5D5, 5 \5D4, 4 \5D3, 3 \5D2, 2 \5D1, 1 \5D0;
+	/* 400 ת, 300 ש, 200 ר, 100 ק, 90 צ, 80 פ, 70 ע, 60 ס, 50 נ, 40 מ, 30 ל, 20 כ, 19 יט, 18 יח, 17 יז, 16 טז, 15 טו, 10 י, 9 ט, 8 ח, 7 ז, 6 ו, 5 ה, 4 ד, 3 ג, 2 ב, 1 א */
+	/* This system manually specifies the values for 19-15 to force the correct display of 15 and 16, which are commonly rewritten to avoid a close resemblance to the Tetragrammaton. */
+}
+
+ at counter-style lower-alpha {
+	system: alphabetic;
+	symbols: a b c d e f g h i j k l m n o p q r s t u v w x y z;
+}
+
+ at counter-style lower-latin {
+	system: override lower-alpha;
+}
+
+ at counter-style upper-alpha {
+	system: alphabetic;
+	symbols: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z;
+}
+
+ at counter-style upper-latin {
+	system: override upper-alpha;
+}
+
+ at counter-style lower-greek {
+	system: alphabetic;
+	symbols: \3B1 \3B2 \3B3 \3B4 \3B5 \3B6 \3B7 \3B8 \3B9 \3BA \3BB \3BC \3BD \3BE \3BF \3C0 \3C1 \3C3 \3C4 \3C5 \3C6 \3C7 \3C8 \3C9;
+	/* α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω */
+}
+
+ at counter-style hiragana {
+	system: alphabetic;
+	symbols: \3042 \3044 \3046 \3048 \304A \304B \304D \304F \3051 \3053 \3055 \3057 \3059 \305B \305D \305F \3061 \3064 \3066 \3068 \306A \306B \306C \306D \306E \306F \3072 \3075 \3078 \307B \307E \307F \3080 \3081 \3082 \3084 \3086 \3088 \3089 \308A \308B \308C \308D \308F \3092 \3093;
+	/* あ い う え お か き く け こ さ し す せ そ た ち つ て と な に ぬ ね の は ひ ふ へ ほ ま み む め も や ゆ よ ら り る れ ろ わ を ん */
+	suffix: '、';
+}
+
+ at counter-style hiragana-iroha {
+	system: alphabetic;
+	symbols: \3044 \308D \306F \306B \307B \3078 \3068 \3061 \308A \306C \308B \3092 \308F \304B \3088 \305F \308C \305D \3064 \306D \306A \3089 \3080 \3046 \3090 \306E \304A \304F \3084 \307E \3051 \3075 \3053 \3048 \3066 \3042 \3055 \304D \3086 \3081 \307F \3057 \3091 \3072 \3082 \305B \3059 \3093;
+	/* い ろ は に ほ へ と ち り ぬ る を わ か よ た れ そ つ ね な ら む う ゐ の お く や ま け ふ こ え て あ さ き ゆ め み し ゑ ひ も せ す ん */
+	suffix: '、';
+}
+
+ at counter-style katakana {
+	system: alphabetic;
+	symbols: \30A2 \30A4 \30A6 \30A8 \30AA \30AB \30AD \30AF \30B1 \30B3 \30B5 \30B7 \30B9 \30BB \30BD \30BF \30C1 \30C4 \30C6 \30C8 \30CA \30CB \30CC \30CD \30CE \30CF \30D2 \30D5 \30D8 \30DB \30DE \30DF \30E0 \30E1 \30E2 \30E4 \30E6 \30E8 \30E9 \30EA \30EB \30EC \30ED \30EF \30F2 \30F3;
+	/* ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ヲ ン */
+	suffix: '、';
+}
+
+ at counter-style katakana-iroha {
+	system: alphabetic;
+	symbols: \30A4 \30ED \30CF \30CB \30DB \30D8 \30C8 \30C1 \30EA \30CC \30EB \30F2 \30EF \30AB \30E8 \30BF \30EC \30BD \30C4 \30CD \30CA \30E9 \30E0 \30A6 \30F0 \30CE \30AA \30AF \30E4 \30DE \30B1 \30D5 \30B3 \30A8 \30C6 \30A2 \30B5 \30AD \30E6 \30E1 \30DF \30B7 \30F1 \30D2 \30E2 \30BB \30B9 \30F3;
+	/* イ ロ ハ ニ ホ ヘ ト チ リ ヌ ル ヲ ワ カ ヨ タ レ ソ ツ ネ ナ ラ ム ウ ヰ ノ オ ク ヤ マ ケ フ コ エ テ ア サ キ ユ メ ミ シ ヱ ヒ モ セ ス ン */
+	suffix: '、';
+}
+
+ at counter-style disc {
+	system: cyclic;
+	symbols: \2022;
+	/* • */
+	suffix: '';
+}
+
+ at counter-style circle {
+	system: cyclic;
+	symbols: \25E6;
+	/* ◦ */
+	suffix: '';
+}
+
+ at counter-style square {
+	system: cyclic;
+	symbols: \25FE;
+	/* ◾ */
+	suffix: '';
+}
+
+ at counter-style japanese-informal {
+	system: additive;
+	range: -9999 9999;
+	additive-symbols: 9000 \4E5D\5343, 8000 \516B\5343, 7000 \4E03\5343, 6000 \516D\5343, 5000 \4E94\5343, 4000 \56DB\5343, 3000 \4E09\5343, 2000 \4E8C\5343, 1000 \5343, 900 \4E5D\767E, 800 \516B\767E, 700 \4E03\767E, 600 \516D\767E, 500 \4E94\767E, 400 \56DB\767E, 300 \4E09\767E, 200 \4E8C\767E, 100 \767E, 90 \4E5D\5341, 80 \516B\5341, 70 \4E03\5341, 60 \516D\5341, 50 \4E94\5341, 40 \56DB\5341, 30 \4E09\5341, 20 \4E8C\5341, 10 \5341, 9 \4E5D, 8 \516B, 7 \4E03, 6 \516D, 5 \4E94, 4 \56DB, 3  [...]
+	/* 9000 九千, 8000 八千, 7000 七千, 6000 六千, 5000 五千, 4000 四千, 3000 三千, 2000 二千, 1000 千, 900 九百, 800 八百, 700 七百, 600 六百, 500 五百, 400 四百, 300 三百, 200 二百, 100 百, 90 九十, 80 八十, 70 七十, 60 六十, 50 五十, 40 四十, 30 三十, 20 二十, 10 十, 9 九, 8 八, 7 七, 6 六, 5 五, 4 四, 3 三, 2 二, 1 一, 0 〇 */
+	suffix: '\3001';
+	/* 、 */
+	negative: "\30DE\30A4\30CA\30B9";
+	/* マイナス */
+	fallback: cjk-decimal;
+}
+
+ at counter-style japanese-formal {
+	system: additive;
+	range: -9999 9999;
+	additive-symbols: 9000 \4E5D\9621, 8000 \516B\9621, 7000 \4E03\9621, 6000 \516D\9621, 5000 \4F0D\9621, 4000 \56DB\9621, 3000 \53C2\9621, 2000 \5F10\9621, 1000 \58F1\9621, 900 \4E5D\767E, 800 \516B\767E, 700 \4E03\767E, 600 \516D\767E, 500 \4F0D\767E, 400 \56DB\767E, 300 \53C2\767E, 200 \5F10\767E, 100 \58F1\767E, 90 \4E5D\62FE, 80 \516B\62FE, 70 \4E03\62FE, 60 \516D\62FE, 50 \4F0D\62FE, 40 \56DB\62FE, 30 \53C2\62FE, 20 \5F10\62FE, 10 \58F1\62FE, 9 \4E5D, 8 \516B, 7 \4E03, 6 \516D, 5 \4F [...]
+	/* 9000 九阡, 8000 八阡, 7000 七阡, 6000 六阡, 5000 伍阡, 4000 四阡, 3000 参阡, 2000 弐阡, 1000 壱阡, 900 九百, 800 八百, 700 七百, 600 六百, 500 伍百, 400 四百, 300 参百, 200 弐百, 100 壱百, 90 九拾, 80 八拾, 70 七拾, 60 六拾, 50 伍拾, 40 四拾, 30 参拾, 20 弐拾, 10 壱拾, 9 九, 8 八, 7 七, 6 六, 5 伍, 4 四, 3 参, 2 弐, 1 壱, 0 零 */
+	suffix: '\3001';
+	/* 、 */
+	negative: "\30DE\30A4\30CA\30B9";
+	/* マイナス */
+	fallback: cjk-decimal;
+}
+
+ at counter-style korean-hangul-formal {
+	system: additive;
+	range: 0 9999;
+	additive-symbols: 9000 \AD6C\CC9C, 8000 \D314\CC9C, 7000 \CE60\CC9C, 6000 \C721\CC9C, 5000 \C624\CC9C, 4000 \C0AC\CC9C, 3000 \C0BC\CC9C, 2000 \C774\CC9C, 1000 \C77C\CC9C, 900 \AD6C\BC31, 800 \D314\BC31, 700 \CE60\BC31, 600 \C721\BC31, 500 \C624\BC31, 400 \C0AC\BC31, 300 \C0BC\BC31, 200 \C774\BC31, 100 \C77C\BC31, 90 \AD6C\C2ED, 80 \D314\C2ED, 70 \CE60\C2ED, 60 \C721\C2ED, 50 \C624\C2ED, 40 \C0AC\C2ED, 30 \C0BC\C2ED, 20 \C774\C2ED, 10 \C77C\C2ED, 9 \AD6C, 8 \D314, 7 \CE60, 6 \C721, 5 \C6 [...]
+	/* 9000 구천, 8000 팔천, 7000 칠천, 6000 육천, 5000 오천, 4000 사천, 3000 삼천, 2000 이천, 1000 일천, 900 구백, 800 팔백, 700 칠백, 600 육백, 500 오백, 400 사백, 300 삼백, 200 이백, 100 일백, 90 구십, 80 팔십, 70 칠십, 60 육십, 50 오십, 40 사십, 30 삼십, 20 이십, 10 일십, 9 구, 8 팔, 7 칠, 6 육, 5 오, 4 사, 3 삼, 2 이, 1 일, 0 영 */
+	suffix: '\3001';
+	/* 、 */
+}
+
+ at counter-style korean-hanja-informal {
+	system: additive;
+	range: 0 9999;
+	additive-symbols: 9000 \4E5D\5343, 8000 \516B\5343, 7000 \4E03\5343, 6000 \516D\5343, 5000 \4E94\5343, 4000 \56DB\5343, 3000 \4E09\5343, 2000 \4E8C\5343, 1000 \5343, 900 \4E5D\767E, 800 \516B\767E, 700 \4E03\767E, 600 \516D\767E, 500 \4E94\767E, 400 \56DB\767E, 300 \4E09\767E, 200 \4E8C\767E, 100 \767E, 90 \4E5D\5341, 80 \516B\5341, 70 \4E03\5341, 60 \516D\5341, 50 \4E94\5341, 40 \56DB\5341, 30 \4E09\5341, 20 \4E8C\5341, 10 \5341, 9 \4E5D, 8 \516B, 7 \4E03, 6 \516D, 5 \4E94, 4 \56DB, 3  [...]
+	/* 9000 九千, 8000 八千, 7000 七千, 6000 六千, 5000 五千, 4000 四千, 3000 三千, 2000 二千, 1000 千, 900 九百, 800 八百, 700 七百, 600 六百, 500 五百, 400 四百, 300 三百, 200 二百, 100 百, 90 九十, 80 八十, 70 七十, 60 六十, 50 五十, 40 四十, 30 三十, 20 二十, 10 十, 9 九, 8 八, 7 七, 6 六, 5 五, 4 四, 3 三, 2 二, 1 一, 0 零 */
+	suffix: '\3001';
+	/* 、 */
+}
+
+ at counter-style korean-hanja-formal {
+	system: additive;
+	range: 0 9999;
+	additive-symbols: 9000 \4E5D\4EDF, 8000 \516B\4EDF, 7000 \4E03\4EDF, 6000 \516D\4EDF, 5000 \4E94\4EDF, 4000 \56DB\4EDF, 3000 \53C3\4EDF, 2000 \8CB3\4EDF, 1000 \58F9\4EDF, 900 \4E5D\767E, 800 \516B\767E, 700 \4E03\767E, 600 \516D\767E, 500 \4E94\767E, 400 \56DB\767E, 300 \53C3\767E, 200 \8CB3\767E, 100 \58F9\767E, 90 \4E5D\62FE, 80 \516B\62FE, 70 \4E03\62FE, 60 \516D\62FE, 50 \4E94\62FE, 40 \56DB\62FE, 30 \53C3\62FE, 20 \8CB3\62FE, 10 \58F9\62FE, 9 \4E5D, 8 \516B, 7 \4E03, 6 \516D, 5 \4E [...]
+	/* 9000 九仟, 8000 八仟, 7000 七仟, 6000 六仟, 5000 五仟, 4000 四仟, 3000 參仟, 2000 貳仟, 1000 壹仟, 900 九百, 800 八百, 700 七百, 600 六百, 500 五百, 400 四百, 300 參百, 200 貳百, 100 壹百, 90 九拾, 80 八拾, 70 七拾, 60 六拾, 50 五拾, 40 四拾, 30 參拾, 20 貳拾, 10 壹拾, 9 九, 8 八, 7 七, 6 六, 5 五, 4 四, 3 參, 2 貳, 1 壹, 0 零 */
+	suffix: '\3001';
+	/* 、 */
+}
\ No newline at end of file
diff --git a/src/test/resources/css/flexbox.css b/src/test/resources/css/flexbox.css
new file mode 100644
index 0000000..ff4575b
--- /dev/null
+++ b/src/test/resources/css/flexbox.css
@@ -0,0 +1,62 @@
+#deals {
+	display: flex;        /* Flex layout so items have equal height  */
+	flex-flow: row wrap;  /* Allow items to wrap into multiple lines */
+}
+.sale-item { 
+	display: flex;        /* Lay out each item using flex layout */
+	flex-flow: column;    /* Lay out item's contents vertically  */
+}
+.sale-item > img { 
+	order: -1;            /* Shift image before other content (in visual order) */
+	align-self: center;   /* Center the image cross-wise (horizontally)         */
+}
+.sale-item > button {
+	margin-top: auto;     /* Auto top margin pushes button to bottom */
+}
+ at media (min-width: 60em) {
+    /* two column layout only when enough room (relative to default text size) */
+    header + div { display: flex; }
+    #main {
+      flex: 1;         /* Main takes up all remaining space */
+      order: 1;        /* Place it after (to the right of) the navigation */
+      min-width: 12em; /* Optimize main content area sizing */
+    }
+  }
+  /* menu items use flex layout so that visibility:collapse will work */
+  nav > ul > li { 
+    display: flex;
+    flex-flow: column;
+  }
+  /* dynamically collapse submenus when not targetted */
+  nav > ul > li:not(:target):not(:hover) > ul {
+    visibility: collapse;
+  }
+  
+  #main { display: flex; }
+#main > article { flex:1;         order: 2; }
+#main > nav     { width: 200px;   order: 1; }
+#main > aside   { width: 200px;   order: 3; }
+
+ at media all and (max-width: 600px) {
+	/* Too narrow to support three columns */
+	#main { flex-flow: column; }
+	#main > article, #main > nav, #main > aside {
+		/* Return them to document order */
+		order: 0; width: auto;
+	}
+}
+#flexbox {
+	display: flex;
+	flex-flow: row wrap;
+	width: 300px;
+}
+.item {
+	width: 80px;
+}
+
+nav > ul {
+	display: flex;
+}
+nav > ul > #login {
+	margin-left: auto;
+}
\ No newline at end of file
diff --git a/src/test/resources/css/issue231-crlf.css b/src/test/resources/css/issue231-crlf.css
new file mode 100755
index 0000000..adab5c9
--- /dev/null
+++ b/src/test/resources/css/issue231-crlf.css
@@ -0,0 +1,102 @@
+body {
+    margin-left: 2em;
+    margin-right: 6em;
+    color: black;    
+    background-color: rgb(255,255,245);
+    line-height: 1.5em;
+}
+h1 {
+	font-family: "Calibri Light";
+	font-size: xx-large;
+	color: #000080;
+	text-decoration: underline;
+	font-weight: normal;
+}
+td  > p{
+	font-family: "Calibri Light";
+}
+p {
+	font-family: "Calibri Light";
+}
+
+td > p {
+	font-family: "Calibri Light";
+}
+
+
+li {
+	font-family: "Calibri Light";
+}
+h2 {
+	font-family: "Calibri Light";
+	font-size: large;
+	font-weight: bold;
+}
+td > h2 {
+	font-family: "Calibri Light";
+	font-size: xx-large;
+	font-weight: bold;
+	font-style: italic;
+}
+h3 {
+	font-family: "Calibri Light";
+	font-size: medium;
+	color: #009900;
+	font-weight: bold;
+}
+
+h4 {
+	font-family: "Calibri Light";
+	font-size: medium;
+	font-weight: bold;
+}
+td > h4 {
+	font-family: "Calibri Light";
+	font-size: medium;
+	font-weight: bold;
+}
+td > div {
+	background-color: #80BD00;
+	text-align: center;
+	}
+
+.title  {
+	font-weight: bold;
+	}
+td .title  {
+	font-weight: bold;
+	}
+	
+td .articleTitle  {
+	font-weight: bold;
+	}
+	
+td .description  {
+	font-weight: normal;
+	font-style: italic;
+	}
+	
+.magazine
+{
+-moz-column-count:2; /* Firefox */
+-webkit-column-count:2; /* Safari and Chrome */
+column-count:2;
+}
+
+.newspaper
+{
+-moz-column-count:3; /* Firefox */
+-webkit-column-count:3; /* Safari and Chrome */
+column-count:3;
+}
+
+
+aside p {
+	margin:0cm 2cm 0cm 1cm;
+	font-family: "Calibri Light";
+	font-weight: normal;
+	font-style: italic;
+	border: 4px solid #008000;
+	padding: 5px 10px;
+	}
+.	
diff --git a/src/test/resources/css/issue231-lf.css b/src/test/resources/css/issue231-lf.css
new file mode 100755
index 0000000..adab5c9
--- /dev/null
+++ b/src/test/resources/css/issue231-lf.css
@@ -0,0 +1,102 @@
+body {
+    margin-left: 2em;
+    margin-right: 6em;
+    color: black;    
+    background-color: rgb(255,255,245);
+    line-height: 1.5em;
+}
+h1 {
+	font-family: "Calibri Light";
+	font-size: xx-large;
+	color: #000080;
+	text-decoration: underline;
+	font-weight: normal;
+}
+td  > p{
+	font-family: "Calibri Light";
+}
+p {
+	font-family: "Calibri Light";
+}
+
+td > p {
+	font-family: "Calibri Light";
+}
+
+
+li {
+	font-family: "Calibri Light";
+}
+h2 {
+	font-family: "Calibri Light";
+	font-size: large;
+	font-weight: bold;
+}
+td > h2 {
+	font-family: "Calibri Light";
+	font-size: xx-large;
+	font-weight: bold;
+	font-style: italic;
+}
+h3 {
+	font-family: "Calibri Light";
+	font-size: medium;
+	color: #009900;
+	font-weight: bold;
+}
+
+h4 {
+	font-family: "Calibri Light";
+	font-size: medium;
+	font-weight: bold;
+}
+td > h4 {
+	font-family: "Calibri Light";
+	font-size: medium;
+	font-weight: bold;
+}
+td > div {
+	background-color: #80BD00;
+	text-align: center;
+	}
+
+.title  {
+	font-weight: bold;
+	}
+td .title  {
+	font-weight: bold;
+	}
+	
+td .articleTitle  {
+	font-weight: bold;
+	}
+	
+td .description  {
+	font-weight: normal;
+	font-style: italic;
+	}
+	
+.magazine
+{
+-moz-column-count:2; /* Firefox */
+-webkit-column-count:2; /* Safari and Chrome */
+column-count:2;
+}
+
+.newspaper
+{
+-moz-column-count:3; /* Firefox */
+-webkit-column-count:3; /* Safari and Chrome */
+column-count:3;
+}
+
+
+aside p {
+	margin:0cm 2cm 0cm 1cm;
+	font-family: "Calibri Light";
+	font-weight: normal;
+	font-style: italic;
+	border: 4px solid #008000;
+	padding: 5px 10px;
+	}
+.	
diff --git a/src/test/resources/css/issue240-1.css b/src/test/resources/css/issue240-1.css
new file mode 100644
index 0000000..5c214e5
--- /dev/null
+++ b/src/test/resources/css/issue240-1.css
@@ -0,0 +1,233 @@
+ at charset "UTF-8"; /*決まり物:変更不可*/
+/*-------------------------------------------------------------------------------
+  Windowsでの縦書き時のフォント名には@をつける必要があるため、
+  font-familyは縦組用/横組用のスタイルシートで指定します。このCSSファイルでは欧文フォントを除き、
+  font-familyの指定は行ないません。
+  原則として、-epub-writing-modeは、Alternate Style側で指定します。
+  縦組/横組の設定に関わらず、縦書きあるいは横書き固定にしたい場合に、こちらのクラスセレクタに
+  記述します。
+  インデントは縦書き/横書きで指定方法が変わるので、原則として縦組用/横組用のスタイルシートで指定します。
+ ------------------------------------------------------------------------------*/
+
+ at page {
+   margin:8%;
+   /*ページ割り付けされた場合(paged media)の余白:数値の変更はOK。
+     margin-top, margin-bottom, margin-left, margin-rightを個別指定してもよい。
+     デバイスサイズが多岐にわたることを考慮すると、pxでの指定は推奨しない。
+     電子書籍としては基本的にページ割り付けされることを考慮すると、@pageで行なうべき
+     もしターゲットがcontinuousメディア(スクロールを前提とした表示)なら、bodyにmarginを指定する。
+   */
+}
+
+img.pagefit {
+   display:block;
+   margin: auto;
+   width: auto;
+   height: auto;
+   max-width:100%;
+   max-height:100%;
+}
+
+img.inline {  /*インライン画像の場合も、画面からはみださないように*/
+   display:inline;
+   width:auto;
+   height:auto;
+   max-width:100%;
+   max-height:100%;
+}
+img.w1 {
+   display:inline;
+   width:1em;
+   height:auto;
+}
+img.w2 {
+   display:inline;
+   width:2em;
+   height:auto;
+}
+
+/*-----------------------------------------------------------------------------
+  [タイプセレクタ]
+  全体の基本となるスタイル
+  ここで書かれたものはクラスセレクタで上書きされます。
+ ----------------------------------------------------------------------------*/
+/*body*/
+body {
+   line-height: 1.75; /*行送り*/
+   letter-spacing: 0px; /*字間*/
+}
+
+/* 見出し */
+h1,h2,h3,h4,h5,h6 {
+   font-size: 110%;
+   font-weight: bold;
+   /* 書体の指定は縦横用のスタイルで */
+}
+
+/* リンク */
+a {
+   text-decoration: none; /*リンクに下線をつけたく無い場合の設定*/
+}
+a:link {
+   color:#00008b;
+}
+a:visited {
+   color:#00008b;
+}
+
+/* body */
+
+body.cover { /*表紙*/
+   -epub-writing-mode:horizontal-tb;
+   -webkit-writing-mode:horizontal-tb;
+   background-color: #d5ecff;
+   margin:0;
+}
+body.imgpage {
+   -epub-writing-mode:horizontal-tb;
+   -webkit-writing-mode:horizontal-tb;
+   text-align:center;
+   margin:0;
+}
+body.imgpage80 {
+   -epub-writing-mode:horizontal-tb;
+   -webkit-writing-mode:horizontal-tb;
+   background-color: #ffffff;
+   text-align:center;
+   margin-top:5%;
+}
+body.colophon { /*奥付*/
+   -epub-writing-mode:horizontal-tb; /*縦組・横組の設定に関わらず横書きにしたい場合*/
+   -webkit-writing-mode:horizontal-tb; 
+   font-family:"Hiragino Mincho ProN","IPAexMincho","MS 明朝","serif";
+   text-align:center;
+   /*-----------------------------------------------------------------------
+    クラスで横書き固定あるいは縦書き固定をする場合、font-familyは一緒に指定すること
+    -----------------------------------------------------------------------*/
+   font-size:90%;
+}
+
+/*見出し*/
+h1.title {
+   font-size: 120%;
+   font-weight: bold;
+}
+h2.chapter{ /*中扉*/
+   font-size: 120%;
+   font-weight: bold;
+}
+h3.subchapter {
+   font-size: 110%;
+   font-weight: bold;
+}
+h2.toc {
+   font-size: 110%;
+   font-weight: bold;
+}
+h4.section {
+   font-size: 100%;
+   font-weight: bold;
+}
+h2.invisible {
+   display:none;
+}
+
+/* 文字装飾など */
+.desc {
+   color:#008000;
+}
+.note {
+   font-size:90%;   
+}
+.chu {
+   font-size:90%;   
+}
+.kana {
+   font-size:90%;   
+}
+.bold {
+   font-weight: bold;
+}
+.small {
+   font-size:90%;
+}
+.size70per {
+   font-size:70%;
+}
+.size80per {
+   font-size:80%;
+}
+.size90per {
+   font-size:90%;
+}
+.size110per {
+   font-size:110%;
+}
+.size120per {
+   font-size:120%;
+}
+.title {
+   font-size:120%;
+   font-weight:bold;
+}
+.author_top_title {
+   font-size:110%;
+}
+/*欧文のスタイル*/
+.serif_italic {
+   font-family: serif;
+   font-style:italic;
+}
+.serif_bold {
+   font-family: serif;
+   font-weight: bold;
+}
+.serif_italic_bold {
+   font-family: serif;
+   font-style:italic;
+   font-weight: bold;
+}
+.sansserif_italic {
+   font-family: sans-serif;
+   font-style:italic;
+}
+.sansserif_bold {
+   font-family: sans-serif;
+   font-weight: bold;
+}
+.sansserif_italic_bold {
+   font-family: sans-serif;
+   font-style:italic;
+   font-weight: bold;
+}
+
+/*上付き・下付き*/
+.sup {
+   font-size:50%;
+   vertical-align:super;
+   letter-spacing: -2px
+}
+.sub {
+   font-size:50%;
+   vertical-align:sub;
+   letter-spacing: -2px
+}
+
+/*-----------------------------------------------------------------------------
+  縦組/横組に関係なく、縦書き/横書きに設定したページでの指定はAlternate Styleを使わず
+  ここに記述します。ここでは奥付を例にとります。
+ ----------------------------------------------------------------------------*/
+.col_large {
+   font-family:"Hiragino Mincho ProN","IPAexMincho","MS 明朝","serif";
+   font-weight:bold;
+   font-size:110%;
+}
+.col_start_1em {
+   padding-left:1em;
+}
+.col_start_5em {
+   padding-left:5em;
+}
+.col_latin {
+   font-family:"Times New Roman",serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/css/issue240-2.css b/src/test/resources/css/issue240-2.css
new file mode 100644
index 0000000..e8450a5
--- /dev/null
+++ b/src/test/resources/css/issue240-2.css
@@ -0,0 +1,161 @@
+ at charset "UTF-8";
+/*-------------------------------------------------------------------------------
+  縦組時のスタイルを記述します。
+  -epub-writing-mode、font-family、インデントの部分が中心です。
+ ------------------------------------------------------------------------------*/
+
+
+/*-----------------------------------------------------------------------------
+  [タイプセレクタ]
+  bodyへのwriting-mode指定、基本となるfont-familyを指定
+ ----------------------------------------------------------------------------*/
+/*body*/
+body {
+  -epub-writing-mode:vertical-rl;
+  -webkit-writing-mode:vertical-rl;
+  font-family:"@Hiragino Mincho ProN","@ヒラギノ明朝 Pro W3","@IPAexMincho","@IPAex明朝","@MS Mincho","@MS 明朝","ヒラギノ明朝 Pro W3","Hiragino Mincho ProN","IPAexMincho","IPAex明朝","serif";
+  /*本文フォントに明朝体指定する場合には、この順番を推奨*/
+}
+
+/* 見出し */
+h1,h2,h3,h4,h5,h6 {
+  /*縦組時の見出しの書体指定*/
+  font-family:"@HiraKakuProN-W3","@ヒラギノ角ゴ Pro W3","@MS Gothic","@MS ゴシック","HiraKakuProN-W3","ヒラギノ角ゴ Pro W3","sans-serif";
+  /*縦組時の見出しの前後にアキを入れる場合の指定。アキを入れない場合には、この下の2行は削除*/
+  margin-right:1em;
+  margin-left:1em;
+}
+
+/*-----------------------------------------------------------------------------
+  [クラスセレクタ]
+  クラス名や値の設定は任意ですが、使用するプロパティは可能な限り合わせてください
+ ----------------------------------------------------------------------------*/
+/* body */
+body.title {
+  -epub-writing-mode:vertical-rl;
+  -webkit-writing-mode:vertical-rl;
+}
+body.tocpage {
+  -epub-writing-mode:vertical-rl;
+  -webkit-writing-mode:vertical-rl;
+}
+body.chapter_page {
+  -epub-writing-mode:vertical-rl;
+  -webkit-writing-mode:vertical-rl;
+}
+body.body_text {
+  -epub-writing-mode:vertical-rl;
+  -webkit-writing-mode:vertical-rl;
+}
+body.sectional_ttl{
+  -epub-writing-mode:vertical-rl;
+  -webkit-writing-mode:vertical-rl;
+}
+
+/* 見出し */
+h1.title {
+  font-family: "@Hiragino Mincho ProN","@ヒラギノ明朝 Pro W3","@IPAexMincho","@IPAex明朝","@MS Mincho","@MS 明朝","ヒラギノ明朝 Pro W3","Hiragino Mincho ProN","IPAexMincho","IPAex明朝","serif";
+}
+h2.chapter{
+  font-family: "@Hiragino Mincho ProN","@ヒラギノ明朝 Pro W3","@IPAexMincho","@IPAex明朝","@MS Mincho","@MS 明朝","ヒラギノ明朝 Pro W3","Hiragino Mincho ProN","IPAexMincho","IPAex明朝","serif";
+  padding-top:3em;
+}
+h2.section {
+  font-family: "@HiraKakuProN-W3","@ヒラギノ角ゴ Pro W3","@MS Gothic","@MS ゴシック","HiraKakuProN-W3","ヒラギノ角ゴ Pro W3","sans-serif";
+  margin-right:1.75em;
+}
+h2.chapter_continuous {
+  margin-left:0; /*見出しの後ろにアキを入れない。見出しが連続する場合に使用*/
+}
+h3.subchapter {
+  padding-top:3em;
+  text-indent:-1em;
+}
+h3.sub_section {
+  padding-top:1em;
+  padding-right:1em;
+  padding-left:1em;
+}
+h3.subchapter_continuous {
+  padding-top:1em;
+  margin-left:0; /*見出しの後ろにアキを入れない。見出しが連続する場合に使用*/
+}
+h2.toc {
+  font-family: "@HiraKakuProN-W3","@ヒラギノ角ゴ Pro W3","@MS Gothic","@MS ゴシック","HiraKakuProN-W3","ヒラギノ角ゴ Pro W3","sans-serif";
+  letter-spacing: 1em;
+}
+h4.section {
+  padding-top:3em;
+}
+
+/* 文字装飾など */
+.underline {
+    text-decoration:overline; /*縦書き時にはoverline、横書き時にはunderline*/
+}
+
+/* 縦書き時の文字の回転制御 */
+.upright {
+  -epub-text-orientation:upright;
+  -webkit-text-orientation:upright;
+}
+.sideways {
+  -epub-text-orientation:sideways;
+  -webkit-text-orientation:sideways;
+}
+
+p.author_top_title {
+  font-family: "@Hiragino Mincho ProN","@ヒラギノ明朝 Pro W3","@IPAexMincho","@IPAex明朝","@MS Mincho","@MS 明朝","ヒラギノ明朝 Pro W3","Hiragino Mincho ProN","IPAexMincho","IPAex明朝","serif";
+  text-align: right;
+}
+.gothic {
+  font-family: "@HiraKakuProN-W3","@ヒラギノ角ゴ Pro W3","@MS Gothic","@MS ゴシック","HiraKakuProN-W3","ヒラギノ角ゴ Pro W3","sans-serif";
+}
+.go_small_red {
+  font-family: "@HiraKakuProN-W3","@ヒラギノ角ゴ Pro W3","@MS Gothic","@MS ゴシック","HiraKakuProN-W3","ヒラギノ角ゴ Pro W3","sans-serif";
+  font-size:90%;
+  color:#ff0000;
+}
+
+/*字下げ、インデント*/
+.start_1em {
+  padding-top:1em;
+  margin-right:1em;
+  margin-left: 1em;
+}
+.start_2em {
+  padding-top:2em;
+/* margin-right:1em;
+  margin-left: 1em;*/
+}
+.start_3em_nopad {
+  padding-top:4em;
+}
+.start_4em {
+  padding-top:4em;
+  margin-right:1em;
+  margin-left: 1em;
+}
+.indent_m2em {
+  padding-top:2em;
+  text-indent:-2em;
+}
+.start_1em_indent_2em {
+  padding-top:3em;
+  text-indent:-2em;
+  margin-right:1em;
+  margin-left: 1em;
+}
+.start_2em_indent_2em {
+  padding-top:4em;
+  text-indent:-2em;
+  margin-right:1em;
+  margin-left: 1em;
+}
+
+
+.level1{
+  padding-top:0;
+}
+.level2 {
+  padding-top:1em;
+}
diff --git a/src/test/resources/css/issue241.css b/src/test/resources/css/issue241.css
new file mode 100755
index 0000000..291def3
--- /dev/null
+++ b/src/test/resources/css/issue241.css
@@ -0,0 +1,37 @@
+body {
+	background-color: white;
+}
+ at -webkit-keyframes beat {
+	0% {-webkit-transform: scale(1.0) rotate(0deg);}
+	50% {-webkit-transform: scale(1.3) rotate(0deg);}
+	100% {-webkit-transform: scale(1.0) rotate(0deg);}
+}
+ at keyframes beat {
+	0% {transform: scale(1.0) rotate(0deg);} 	
+	50% {transform: scale(1.3) rotate(0deg);} 
+	100% {transform: scale(1.0) rotate(0deg);}
+}
+.heartbeat {
+	animation: beat 1.0s ease-out infinite normal;	
+	-webkit-animation: beat 1.0s ease-out infinite normal;
+}
+
+div {
+  animation-name: diagonal-slide;
+  animation-duration: 5s;
+  animation-iteration-count: 10;
+}
+
+ at keyframes diagonal-slide {
+
+  from {
+    left: 0;
+    top: 0;
+  }
+
+  to {
+    left: 100px;
+    top: 100px;
+  }
+
+}
\ No newline at end of file
diff --git a/src/test/resources/css/issue262.css b/src/test/resources/css/issue262.css
new file mode 100644
index 0000000..40603e8
--- /dev/null
+++ b/src/test/resources/css/issue262.css
@@ -0,0 +1,5 @@
+ at charset "utf-8";
+
+.link:after {
+	content: "】";
+}
diff --git a/src/test/resources/css/misc.css b/src/test/resources/css/misc.css
new file mode 100755
index 0000000..8c488e8
--- /dev/null
+++ b/src/test/resources/css/misc.css
@@ -0,0 +1,93 @@
+ at charset "utf-8";
+ at import "none.css";
+ at import "foo.css";
+
+div {color:green}
+
+.cff {
+    font-family: 'OldStandard-CFF', arial, helvetica, sans-serif;  
+}
+
+.ttf {
+    font-family: 'OldStandard-TTF', arial, helvetica, sans-serif;  
+}
+
+.woff {
+    font-family: 'OldStandard-WOFF', arial, helvetica, sans-serif;  
+}
+
+.cff-obf {
+    font-family: 'OldStandard-CFF-OBF', arial, helvetica, sans-serif;  
+}
+
+.ttf-obf {
+    font-family: 'OldStandard-TTF-OBF', arial, helvetica, sans-serif;  
+}
+
+.woff-obf {
+    font-family: 'OldStandard-WOFF-OBF', arial, helvetica, sans-serif;  
+}
+
+.unicode-range {
+    font-family: 'OldStandard-TTF-GRK', arial, helvetica, sans-serif;
+}
+
+
+
+
+/* http://www.thessalonica.org.ru/en/fonts-download.html */
+
+
+/* woff (with TrueType outlines) */ 
+ at font-face {
+    font-family: 'OldStandard-WOFF';
+    font-weight: normal;
+    font-style: normal;
+    src:url(../fonts/OldStandard-Regular.woff) format('woff');
+}
+
+ at font-face {
+    font-family: 'OldStandard-WOFF-OBF';
+    font-weight: normal;
+    font-style: normal;
+    src:url(../fonts/OldStandard-Regular.obf.woff) format('woff');
+}
+
+
+/* ttf: OpenType fonts with TrueType outlines*/
+ at font-face {
+    font-family: 'OldStandard-TTF';
+    font-weight: normal;
+    font-style: normal;
+    src:url(../fonts/OldStandard-Regular.ttf) format('opentype');
+}
+
+ at font-face {
+    font-family: 'OldStandard-TTF-OBF';
+    font-weight: normal;
+    font-style: normal;
+    src:url(../fonts/OldStandard-Regular.obf.ttf) format('opentype');
+}
+
+ at font-face {
+  font-family: 'OldStandard-TTF-GRK';
+  src:url(../fonts/OldStandard-Regular.ttf) format('opentype');
+  unicode-range: U+0370-03FF,U+1F00-1FFF; 
+}
+
+
+
+/* otf: OpenType fonts with PostScript outlines (also called OpenType-CFF) */
+ at font-face {
+    font-family: 'OldStandard-CFF';
+    font-weight: normal;
+    font-style: normal;
+    src:url(../fonts/OldStandard-Regular.otf) format('opentype');
+}
+
+ at font-face {
+    font-family: 'OldStandard-CFF-OBF';
+    font-weight: normal;
+    font-style: normal;
+    src:url(../fonts/OldStandard-Regular.obf.otf) format('opentype');
+}
diff --git a/src/test/resources/css/none.css b/src/test/resources/css/none.css
new file mode 100644
index 0000000..4cecf77
--- /dev/null
+++ b/src/test/resources/css/none.css
@@ -0,0 +1 @@
+div { color : green }
\ No newline at end of file
diff --git a/src/test/resources/css/other-rule.css b/src/test/resources/css/other-rule.css
new file mode 100644
index 0000000..41ff191
--- /dev/null
+++ b/src/test/resources/css/other-rule.css
@@ -0,0 +1,2 @@
+ at other 'UTF-8';
+div { color : green }
\ No newline at end of file
diff --git a/src/test/resources/css/other.txt b/src/test/resources/css/other.txt
new file mode 100644
index 0000000..dcf11cc
--- /dev/null
+++ b/src/test/resources/css/other.txt
@@ -0,0 +1 @@
+"UTF-8"
diff --git a/src/test/resources/css/samples.css b/src/test/resources/css/samples.css
new file mode 100644
index 0000000..a68e861
--- /dev/null
+++ b/src/test/resources/css/samples.css
@@ -0,0 +1,6845 @@
+ at charset "UTF-8";
+ at import "fonts.css";
+ at namespace "http://www.w3.org/1999/xhtml";
+ at namespace epub "http://www.idpf.org/2007/ops";
+
+/* smoke test from epub-samples repo */
+body {
+    margin-left: 6em;
+    margin-right: 2em;
+    color: black;    
+    font-family: times, 'times new roman', serif;    
+    background-color: rgb(255,255,245);
+    line-height: 1.5em;
+}
+
+h2 {
+    margin-top: 5em;
+    margin-bottom: 2em;
+}
+
+h3 {
+    margin-top: 3em;
+}
+
+.linegroup { 
+    margin-top: 1.6em; 
+}
+
+span.lnum {
+    float: right;
+    color: gray;
+    font-size : 90%;
+}
+
+a.noteref {    
+    color: rgb(215,215,195);
+    text-decoration: none;
+    margin-left: 0.5em;
+    margin-right: 0.5em;
+}
+
+section#rearnotes a {
+    color: black;
+    text-decoration: none;
+    border-bottom : 1px dotted gray;
+    margin-right: 0.8em;
+}
+
+.indent {
+    padding-left: 3em;
+}
+
+.indent2 {
+    padding-left: 5em;
+}
+
+*[epub|type~='dedication'] {
+    padding-left: 2em;
+}
+
+
+
+
+
+
+body {
+    margin-left: 6em;
+    margin-right: 2em;
+    color: black;
+    /* use sans-serif as fallback to make the difference obvious */    
+    font-family: 'OldStandard', sans-serif;    
+    background-color: rgb(255,255,245);
+    line-height: 1.5em;
+}
+
+h2 {
+    margin-top: 5em;
+    margin-bottom: 2em;
+}
+
+h3 {
+    margin-top: 3em;
+}
+
+.linegroup { 
+    margin-top: 1.6em; 
+}
+
+span.lnum {
+    float: right;
+    color: gray;
+    font-size : 90%;
+}
+
+a.noteref {    
+    color: rgb(215,215,195);
+    text-decoration: none;
+    margin-left: 0.5em;
+    margin-right: 0.5em;
+}
+
+section#rearnotes a {
+    color: black;
+    text-decoration: none;
+    border-bottom : 1px dotted gray;
+    margin-right: 0.8em;
+}
+
+.indent {
+    padding-left: 3em;
+}
+
+.indent2 {
+    padding-left: 5em;
+}
+
+*[epub|type~='dedication'] {
+    padding-left: 2em;
+}
+
+
+
+
+
+
+body {
+    margin-left: 6em;
+    margin-right: 2em;
+    color: black;
+    /* use sans-serif as fallback to make the difference obvious */    
+    font-family: 'OldStandard', sans-serif;    
+    background-color: rgb(255,255,245);
+    line-height: 1.5em;
+}
+
+h2 {
+    margin-top: 5em;
+    margin-bottom: 2em;
+}
+
+h3 {
+    margin-top: 3em;
+}
+
+.linegroup { 
+    margin-top: 1.6em; 
+}
+
+span.lnum {
+    float: right;
+    color: gray;
+    font-size : 90%;
+}
+
+a.noteref {    
+    color: rgb(215,215,195);
+    text-decoration: none;
+    margin-left: 0.5em;
+    margin-right: 0.5em;
+}
+
+section#rearnotes a {
+    color: black;
+    text-decoration: none;
+    border-bottom : 1px dotted gray;
+    margin-right: 0.8em;
+}
+
+.indent {
+    padding-left: 3em;
+}
+
+.indent2 {
+    padding-left: 5em;
+}
+
+*[epub|type~='dedication'] {
+    padding-left: 2em;
+}
+
+
+
+
+
+
+body {
+    margin-left: 6em;
+    margin-right: 2em;
+    color: black;
+    /* use sans-serif as fallback to make the difference obvious */    
+    font-family: 'OldStandard', sans-serif;    
+    background-color: rgb(255,255,245);
+    line-height: 1.5em;
+}
+
+h2 {
+    margin-top: 5em;
+    margin-bottom: 2em;
+}
+
+h3 {
+    margin-top: 3em;
+}
+
+.linegroup { 
+    margin-top: 1.6em; 
+}
+
+span.lnum {
+    float: right;
+    color: gray;
+    font-size : 90%;
+}
+
+a.noteref {    
+    color: rgb(215,215,195);
+    text-decoration: none;
+    margin-left: 0.5em;
+    margin-right: 0.5em;
+}
+
+section#rearnotes a {
+    color: black;
+    text-decoration: none;    
+    border-bottom : 1px dotted gray;
+    margin-right: 0.8em;
+}
+
+.indent {
+    padding-left: 3em;
+}
+
+.indent2 {
+    padding-left: 5em;
+}
+
+*[epub|type~='dedication'] {
+    padding-left: 2em;
+}
+
+
+
+
+
+
+body {
+    margin-left: 6em;
+    margin-right: 2em;
+    color: black;
+    /* use sans-serif as fallback to make the difference obvious */    
+    font-family: 'OldStandard', sans-serif;    
+    background-color: rgb(255,255,245);
+    line-height: 1.5em;
+}
+
+h2 {
+    margin-top: 5em;
+    margin-bottom: 2em;
+}
+
+h3 {
+    margin-top: 3em;
+}
+
+.linegroup { 
+    margin-top: 1.6em; 
+}
+
+span.lnum {
+    float: right;
+    color: gray;
+    font-size : 90%;
+}
+
+a.noteref {    
+    color: rgb(215,215,195);
+    text-decoration: none;
+    margin-left: 0.5em;
+    margin-right: 0.5em;
+}
+
+section#rearnotes a {
+    color: black;
+    text-decoration: none;
+    border-bottom : 1px dotted gray;
+    margin-right: 0.8em;
+}
+
+.indent {
+    padding-left: 3em;
+}
+
+.indent2 {
+    padding-left: 5em;
+}
+
+*[epub|type~='dedication'] {
+    padding-left: 2em;
+}
+
+
+
+
+body {
+    color: rgb(255,250,205);
+    background-color: rgb(20,20,20);
+}
+
+span.lnum {
+    color: rgb(175,170,125);
+}
+
+a.noteref {
+    color: rgb(120,120,120);
+}
+
+section#rearnotes a {
+    color: rgb(255,250,205);
+}
+
+
+ at import "wasteland.css";
+
+body {
+    color: rgb(255,250,205);
+    background-color: rgb(20,20,20);
+}
+
+span.lnum {
+    color: rgb(175,170,125);
+}
+
+a.noteref {
+    color: rgb(120,120,120);
+}
+
+section#rearnotes a {
+    color: rgb(255,250,205);
+}
+
+
+
+
+body {
+    color: rgb(255,250,205);
+    background-color: rgb(20,20,20);
+}
+
+span.lnum {
+    color: rgb(175,170,125);
+}
+
+a.noteref {
+    color: rgb(120,120,120);
+}
+
+section#rearnotes a {
+    color: rgb(255,250,205);
+}
+
+
+ at import "wasteland.css";
+
+body {
+    color: rgb(255,250,205);
+    background-color: rgb(20,20,20);
+}
+
+span.lnum {
+    color: rgb(175,170,125);
+}
+
+a.noteref {
+    color: rgb(120,120,120);
+}
+
+section#rearnotes a {
+    color: rgb(255,250,205);
+}
+
+
+
+
+body {
+    color: rgb(255,250,205);
+    background-color: rgb(20,20,20);
+}
+
+span.lnum {
+    color: rgb(175,170,125);
+}
+
+a.noteref {
+    color: rgb(120,120,120);
+}
+
+section#rearnotes a {
+    color: rgb(255,250,205);
+}	
+
+
+
+ at font-face {
+    font-family:'foobar';
+    src: url(../fonts/foobar.ttf);
+    unicode-range: U+2013-2016;
+}
+
+html
+{
+    -epub-writing-mode: vertical-rl;
+    font-family: 'foobar', "HiraMinProN-W3", "@MS 明朝", serif, sans-serif;
+    font-size: 14pt;
+    margin: auto 1em;
+    padding: 1em 0;
+    max-height: 28em;
+    background-color: #fff4e7;
+}
+
+body
+{
+    margin: 0;
+}
+h1
+{
+    font-weight: normal;
+    line-height: 2;
+    font-size: 2em;
+    margin-top: 2em;
+}
+h2
+{
+    font-weight: normal;
+    font-size: 1.25em;
+    text-indent: 0em;
+    margin-right: 3em;
+    /*-webkit-margin-before: 3em;*/
+    margin-left: 1em;
+    /*-webkit-margin-after: 1em;*/
+    margin-top: 2em;
+    /*-webkit-margin-start: 2em;*/
+}
+p 
+{
+    margin: 0;
+    line-height: 1.75;
+}
+ul, dl
+{
+    line-height: 2;
+}
+cite
+{
+    font-style: normal;
+}
+blockquote 
+{
+    margin: 2em 0 0;
+    /*-webkit-margin-start: 2em;    */
+}
+rt {
+    font-size: 50%; 
+}
+p.logo
+{
+    text-align: right;
+}
+.block
+{
+    display: inline-block;
+    height:4em;
+    margin-left: 2em;
+}
+.block img
+{
+    height: 100%;
+}
+.author_desc
+{
+    min-width: 10em;
+    max-height: 100%;
+    margin-right: 3em;
+    /*-webkit-margin-before: 3em;*/
+}
+img.author_portrait
+{
+    float: left;
+    height: 50%;
+    font-size: inherit;
+    margin-bottom: 1em;
+    /*-webkit-margin-end: 1em;*/
+}
+.author_desc p
+{
+    font-size: 0.8em;
+    line-height: 1.5;
+}
+.author_desc .en_name
+{
+    color: #0000FF;
+}
+p.author
+{
+    font-weight: normal;
+    font-size: 1.25em;
+    text-align: right;
+    text-indent: 0em;
+    margin-bottom: 2em; 
+    /*-webkit-margin-end: 2em;*/
+}
+.main_text
+{
+    font-size: 1em;
+    line-height: 1.75;
+    text-align: justify;
+    clear: both;
+    /*margin: 0 0 0 0; */
+    margin-left: 12em;
+    /*-webkit-margin-after: 12em;*/
+}
+.main_text > p,
+.about >p
+{
+    text-indent: 1em;
+}
+.main_text p.conversation,
+.main_text p.translation,
+.main_text p.continued_sentence
+{
+    text-indent: 0em;
+}
+
+span.notes
+{
+    font-size: smaller;
+}
+strong.sesame_dot
+{
+    font-weight: normal;
+    -epub-text-emphasis-style: sesame;
+    color: #0000FF;
+    -epub-text-emphasis-color: #FF0000;
+}
+span.tcy
+{
+    /*writing-mode: horizontal-tb;
+    -webkit-writing-mode: horizontal-tb;*/
+    -epub-text-combine: horizontal;
+    /* --- for test
+    -epub-text-emphasis-style: sesame;
+    -epub-text-emphasis-color: red; -- */   
+}
+span.tcy.blue
+{
+    color: #0000FF;
+}
+
+.about
+{
+    margin-right: 1em;
+    /*-webkit-margin-before: 1em;*/
+    margin-left: 1em;
+    /*-webkit-margin-after: 1em;*/
+    font-size: 0.9em;
+}
+.about h2
+{
+    margin-top: 0em;
+    /*-webkit-margin-start: 0em;*/
+}
+.about h2:before
+{
+    content: "◆";
+}
+.original_information
+{
+    border: 1px solid #D9D9D9;
+}
+.bibliographical_information,
+.notation_notes
+{
+    margin-top: 2em;
+    /*-webkit-margin-start: 2em;    */
+    margin-right: 2em;
+    /*-webkit-margin-before: 2em;*/
+    margin-left: 2em;
+    /*-webkit-margin-after: 2em;*/
+    font-size: 0.8em;
+}
+dl.history {
+    font-size: 0.9em;
+}
+del.hidden {
+    display: none;
+}
+
+.TableOfContents ol {
+    list-style-type: none;
+}
+.TableOfContents a {
+    text-decoration: none;
+}
+.TableOfContents a:hover {
+    text-decoration: underline;
+}
+
+h1,h2,h3,h4,h5,h6 {
+	font-family: sans-serif;
+	font-size: 30px;
+	color: #FFF;
+	height: 74px;
+	padding-left: 20px;
+	padding-top: 30px;
+	background-image:url(tocimages/dividerBig.png);
+	background-repeat: repeat-x;
+	background-position: left bottom;
+	margin:0;
+	
+}
+
+ol {
+	margin:0;
+	padding:0;
+}
+
+
+nav li{
+	font-size: 1.4em;
+	color: #FFF;
+	font-family: sans-serif;
+	clear: both;
+	background-image: url(tocimages/divider.png);
+	background-repeat: repeat-x;
+	background-position:left bottom;
+	padding-bottom:14px;
+	padding-top:12px;
+	list-style-type:none;
+	list-style-position:inside;
+	padding-left:20px;
+}
+
+li a:link {
+	color: white; 
+	text-decoration:none;
+}
+
+
+li a:hover {
+	color: white; 
+	text-decoration:none;
+}
+	
+
+li a:visited {
+	color: white; 
+	text-decoration:none;
+}
+	
+.li a:active {
+	color: white; 
+	text-decoration:none;
+}
+
+
+.page{
+	float: right;
+	height: 43px;
+	padding-top: 13px;
+	padding-right: 20px;
+}
+.divider{
+	clear: both;
+	height: 4px;
+	background-image: url(tocimages/divider.png);
+	background-repeat: repeat-x;
+}
+
+
+html, body {
+	background-image: url(tocimages/bg.png);
+	background-repeat: repeat-x;
+	background-color: #404040;
+	margin: 0px;
+	padding: 0px;
+	background-attachment: fixed;
+}
+
+ at media speech {
+
+    .digits {
+        -epub-speak-as: digits
+    }
+    
+    .spell {
+        -epub-speak-as: spell-out
+    }
+
+}
+
+
+ at font-face {
+font-family: 'Stix';
+font-weight: normal;
+font-style: normal;
+src:url(../fonts/STIXGeneral.otf);
+}
+
+ at font-face {
+font-family: 'Stix';
+font-weight: bold;
+font-style: normal;
+src:url(../fonts/STIXGeneralBol.otf);
+}
+
+ at font-face {
+font-family:'Stix';
+font-weight: normal;
+font-style: italic;
+src:url(../fonts/STIXGeneralItalic.otf);
+}
+
+ at font-face {
+font-family:'Stix';
+font-weight: bold;
+font-style: italic;
+src:url(../fonts/STIXGeneralBolIta.otf);
+}
+
+
+body {
+font-size: 1em;
+line-height: 1.33em;
+font-family: 'Stix', serif;
+font-variant-numeric: oldstyle-nums;
+}
+
+p {
+padding: 0;
+margin: 0;
+text-align: justify;
+}
+
+header + p:first-line {
+text-transform: lowercase !important;
+font-variant: small-caps;
+font-size: 1.1em;
+}
+
+p + p {
+text-indent: 1.33em;
+}
+
+.decoration-rw {
+text-align: center;
+padding-top: 1em;
+padding-bottom: 1em;
+padding-left: 0em;
+padding-right: 0em;
+}
+
+.copyright-rw {
+font-size: .8em;
+line-height: 1em;
+text-align: left;
+padding-top: 2em;
+}
+
+.copyright-rw p {
+margin-bottom: 1em;
+text-indent: 0;
+}
+
+.dedication-rw p {
+text-align: center;
+text-indent: 0;
+}
+
+.Dedication-rw {
+margin-top: 3em;
+}
+
+.leading-line-rw {
+height: 1.33em;
+}
+
+.fp-rw {
+text-indent: 0;
+}
+
+
+
+h1 {
+font-size: 1.5em;
+line-height: 1.33em;
+text-align: center;
+padding-bottom: 0em;
+text-align: center;
+text-transform: uppercase;
+font-weight: normal;
+letter-spacing: 4px;
+}
+
+h2 {
+text-align: center;
+font-size: 1.33em;
+line-height: 1.2em;
+text-align: center;
+padding-bottom: 0em;
+text-align: center;
+text-transform: uppercase;
+font-weight: normal;
+letter-spacing: 3px;
+}
+
+.title-author-rw {
+text-align: center;
+font-size: 1.5em;
+text-indent: 0;
+}
+
+.title-num-rw {
+text-align: center;
+font-size: 1.5em;
+text-indent: 0;
+margin-top: 1em;
+margin-bottom: 1em;
+}
+
+.title-sub-rw {
+text-align: center;
+font-size: 1.5em;
+text-indent: 0;
+}
+
+.imprint-rw {
+text-align: center;
+}
+
+.extract-verse-rw {
+margin-top: 1.33em;
+margin-bottom: 1.33em;
+padding-left: 20pt;
+}
+
+.extract-rw {
+margin-top: 1.33em;
+margin-bottom: 1.33em;
+padding-left: 20pt;
+}
+
+.extract-verse-rw p {
+text-align: left;
+text-indent: -20pt;
+margin-left: 20pt;
+}
+
+.epigraph-rw {
+margin-top: 1.33em;
+margin-bottom: 1.33em;
+padding-left: 20pt;
+padding-right: 20pt;
+}
+
+.sc-rw {
+font-size: 75%;
+}
+.block-rw {
+margin-top: 1em;
+margin-bottom: 1em;
+margin-left: 20pt;
+margin-right: 20pt;
+}
+
+span.dropcap-rw {
+float: left;
+font-size: 2.7em;
+line-height: .87em;
+}
+
+
+.signature-rw {
+margin-left: 50%;
+text-align: left;
+text-indent: 0;
+}
+
+.AdCard-rw h4 {
+text-align: center;
+}
+
+.AdCard-rw p {
+text-align: center;
+text-indent: 0;
+}
+
+.FrontSales-rw h4, .FrontSales-rw h2 {
+text-align: center;
+}
+
+.FrontSales-rw p {
+text-indent: 0;
+}
+
+
+
+/* NAVIGATION */
+
+a {
+color: black !important;
+}
+
+#toc ol {
+list-style-type: none;
+margin: 0 0 0 2em;
+padding: 0 0 0 0;
+}
+
+#toc ol ol {
+list-style-type: none;
+margin: 0 0 0 1em;
+padding: 0 0 0 0;
+}
+
+
+
+
+
+#toc ol li {
+margin: 0 0 0 0;
+padding: 0 0 0 0;
+}
+
+#toc ol li a {
+text-decoration: none;
+font-family: sans-serif;
+}
+
+.toc-short ol li a {
+text-decoration: none;
+font-family: sans-serif;
+}
+
+
+.toc-short ol {
+list-style-type: none;
+margin: 0 0 0 2em;
+padding: 0 0 0 0;
+}
+
+
+#guide {
+display: none;
+}
+
+
+header {
+padding: 3em 0 2em 0;
+}
+
+header a {
+text-decoration: none;
+color: black;
+}
+
+
+
+
+
+.center {
+text-align: center;
+text-indent: 0;
+}
+
+img {
+max-width: 100%;
+max-height: 100%;
+}
+
+
+
+.title-other-rw {
+text-align: center;
+text-indent: 0;
+margin-top: .5em;
+}
+
+.dateline-rw {
+text-align: left;
+text-indent: 0;
+margin-top: 1.33em;
+margin-bottom: 1.33em;
+}
+
+
+.frontmatter-rw h1 {
+font-size: 1.5em;
+}
+
+.backmatter-rw h1 {
+font-size: 1.5em;
+}
+   
+
+
+   .direction-rw {
+   text-align: center;
+   text-indent: 0;
+   font-style: italic;
+   margin: 1em 0 1em 0;
+   }
+
+    .source-rw {
+margin-bottom: 0em;
+text-align: right !important;
+font-variant: small-caps;
+text-transform: lowercase;
+font-size: 1.1em;
+page-break-before: avoid;
+}
+
+div.block-rw {
+border-top: 2px solid #EEE;
+border-bottom: 2px solid #EEE;
+padding: 6pt 0 6pt 0;
+}
+
+.list-simple-rw p {
+text-indent: 0;
+text-align: left;
+}
+
+.headline-rw p {
+text-indent: 0;
+text-align: center;
+padding-top: 6px;
+}
+
+div.photo {
+margin-top: 1em;
+padding-top: 2em;
+text-align: center;
+
+}
+
+div.photo p {
+text-align: center;
+padding: 6px;
+font-style: italic;
+
+
+
+}
+
+
+
+
+
+.-epub-media-overlay-active {
+    background-color: #abc;
+}
+
+
+ at media all and (orientation:portrait) {
+p { font-family: serif; }
+}
+
+
+ at media all and (orientation:landscape) {
+p { font-family: sans-serif; }
+
+}
+
+
+ at font-face {
+font-family: 'Stix';
+font-weight: normal;
+font-style: normal;
+src:url(../fonts/STIXGeneral.otf);
+}
+
+ at font-face {
+font-family: 'Stix';
+font-weight: bold;
+font-style: normal;
+src:url(../fonts/STIXGeneralBol.otf);
+}
+
+ at font-face {
+font-family:'Stix';
+font-weight: normal;
+font-style: italic;
+src:url(../fonts/STIXGeneralItalic.otf);
+}
+
+ at font-face {
+font-family:'Stix';
+font-weight: bold;
+font-style: italic;
+src:url(../fonts/STIXGeneralBolIta.otf);
+}
+
+
+body {
+font-size: 1em;
+line-height: 1.33em;
+font-family: 'Stix', serif;
+font-variant-numeric: oldstyle-nums;
+}
+
+p {
+padding: 0;
+margin: 0;
+text-align: justify;
+}
+
+header + p:first-line {
+text-transform: lowercase !important;
+font-variant: small-caps;
+font-size: 1.1em;
+}
+
+p + p {
+text-indent: 1.33em;
+}
+
+.decoration-rw {
+text-align: center;
+padding-top: 1em;
+padding-bottom: 1em;
+padding-left: 0em;
+padding-right: 0em;
+}
+
+.copyright-rw {
+font-size: .8em;
+line-height: 1em;
+text-align: left;
+padding-top: 2em;
+}
+
+.copyright-rw p {
+margin-bottom: 1em;
+text-indent: 0;
+}
+
+.dedication-rw p {
+text-align: center;
+text-indent: 0;
+}
+
+.Dedication-rw {
+margin-top: 3em;
+}
+
+.leading-line-rw {
+height: 1.33em;
+}
+
+.fp-rw {
+text-indent: 0;
+}
+
+
+
+h1 {
+font-size: 1.5em;
+line-height: 1.33em;
+text-align: center;
+padding-bottom: 0em;
+text-align: center;
+text-transform: uppercase;
+font-weight: normal;
+letter-spacing: 4px;
+}
+
+h2 {
+text-align: center;
+font-size: 1.33em;
+line-height: 1.2em;
+text-align: center;
+padding-bottom: 0em;
+text-align: center;
+text-transform: uppercase;
+font-weight: normal;
+letter-spacing: 3px;
+}
+
+.title-author-rw {
+text-align: center;
+font-size: 1.5em;
+text-indent: 0;
+}
+
+.title-num-rw {
+text-align: center;
+font-size: 1.5em;
+text-indent: 0;
+margin-top: 1em;
+margin-bottom: 1em;
+}
+
+.title-sub-rw {
+text-align: center;
+font-size: 1.5em;
+text-indent: 0;
+}
+
+.imprint-rw {
+text-align: center;
+}
+
+.extract-verse-rw {
+margin-top: 1.33em;
+margin-bottom: 1.33em;
+padding-left: 20pt;
+}
+
+.extract-rw {
+margin-top: 1.33em;
+margin-bottom: 1.33em;
+padding-left: 20pt;
+}
+
+.extract-verse-rw p {
+text-align: left;
+text-indent: -20pt;
+margin-left: 20pt;
+}
+
+.epigraph-rw {
+margin-top: 1.33em;
+margin-bottom: 1.33em;
+padding-left: 20pt;
+padding-right: 20pt;
+}
+
+.sc-rw {
+font-size: 75%;
+}
+.block-rw {
+margin-top: 1em;
+margin-bottom: 1em;
+margin-left: 20pt;
+margin-right: 20pt;
+}
+
+span.dropcap-rw {
+float: left;
+font-size: 2.7em;
+line-height: .87em;
+}
+
+
+.signature-rw {
+margin-left: 50%;
+text-align: left;
+text-indent: 0;
+}
+
+.AdCard-rw h4 {
+text-align: center;
+}
+
+.AdCard-rw p {
+text-align: center;
+text-indent: 0;
+}
+
+.FrontSales-rw h4, .FrontSales-rw h2 {
+text-align: center;
+}
+
+.FrontSales-rw p {
+text-indent: 0;
+}
+
+
+
+/* NAVIGATION */
+
+a {
+color: black !important;
+}
+
+#toc ol {
+list-style-type: none;
+margin: 0 0 0 2em;
+padding: 0 0 0 0;
+}
+
+#toc ol ol {
+list-style-type: none;
+margin: 0 0 0 1em;
+padding: 0 0 0 0;
+}
+
+
+
+
+
+#toc ol li {
+margin: 0 0 0 0;
+padding: 0 0 0 0;
+}
+
+#toc ol li a {
+text-decoration: none;
+font-family: sans-serif;
+}
+
+.toc-short ol li a {
+text-decoration: none;
+font-family: sans-serif;
+}
+
+
+.toc-short ol {
+list-style-type: none;
+margin: 0 0 0 2em;
+padding: 0 0 0 0;
+}
+
+
+#guide {
+display: none;
+}
+
+
+header {
+padding: 3em 0 2em 0;
+}
+
+header a {
+text-decoration: none;
+color: black;
+}
+
+
+
+
+
+.center {
+text-align: center;
+text-indent: 0;
+}
+
+img {
+max-width: 100%;
+max-height: 100%;
+}
+
+
+
+.title-other-rw {
+text-align: center;
+text-indent: 0;
+margin-top: .5em;
+}
+
+.dateline-rw {
+text-align: left;
+text-indent: 0;
+margin-top: 1.33em;
+margin-bottom: 1.33em;
+}
+
+
+.frontmatter-rw h1 {
+font-size: 1.5em;
+}
+
+.backmatter-rw h1 {
+font-size: 1.5em;
+}
+   
+
+
+   .direction-rw {
+   text-align: center;
+   text-indent: 0;
+   font-style: italic;
+   margin: 1em 0 1em 0;
+   }
+
+    .source-rw {
+margin-bottom: 0em;
+text-align: right !important;
+font-variant: small-caps;
+text-transform: lowercase;
+font-size: 1.1em;
+page-break-before: avoid;
+}
+
+div.block-rw {
+border-top: 2px solid #EEE;
+border-bottom: 2px solid #EEE;
+padding: 6pt 0 6pt 0;
+}
+
+.list-simple-rw p {
+text-indent: 0;
+text-align: left;
+}
+
+.headline-rw p {
+text-indent: 0;
+text-align: center;
+padding-top: 6px;
+}
+
+div.photo {
+margin-top: 1em;
+padding-top: 2em;
+text-align: center;
+
+}
+
+div.photo p {
+text-align: center;
+padding: 6px;
+font-style: italic;
+
+
+
+}
+
+
+
+
+
+.-epub-media-overlay-active {
+    background-color: #ffb;
+}
+
+
+ at media all and (orientation:portrait) {
+p { font-family: serif; }
+}
+
+
+ at media all and (orientation:landscape) {
+p { font-family: sans-serif; }
+
+}
+
+body {
+	background: white;
+	margin-left:2em;
+	margin-right:2em;
+}
+
+body#titlepage {
+	text-align: center;
+}
+
+#canvas {
+	position: relative;
+	margin-left: auto;
+	margin-right: auto;	
+}
+
+.mcol {
+  -webkit-column-count: 2;
+  column-count: 2;
+  
+  -webkit-column-gap: 1em;
+  column-gap: 1em;
+  
+  -webkit-column-rule: thin solid black;
+  column-rule: thin solid black;
+  
+  -webkit-column-fill: balance;
+  column-fill: balance;
+  
+    
+}
+
+body h2 { 
+    text-align: center;
+    letter-spacing: 0.4em;
+}
+
+
+/* SVG */
+svg { 
+	width:100%;
+	height:100%;
+	position:absolute;
+	top:0px;
+	left:0px;
+	margin:0px;
+	padding:0px;
+}
+
+/* Navigation */
+a {
+	color: black !important;
+}
+
+#guide {
+	display: none;
+}
+
+
+/* Fonts */
+ at font-face {
+	font-family:AGaramondPro-Regular-0908;
+	font-style:normal;
+	font-weight:normal;
+	src:url(../Font/agaramondpro-regular.otf);
+}
+ at font-face {
+	font-family:AGaramondPro-Bold-0656;
+	font-style:normal;
+	font-weight:normal;
+	src:url(../Font/agaramondpro-bold.otf);
+}
+ at font-face {
+	font-family:AGaramondPro-Italic-0855;
+	font-style:normal;
+	font-weight:normal;
+	src:url(../Font/agaramondpro-italic.otf);
+}
+ at font-face {
+	font-family:Garamond-0662;
+	font-style:normal;
+	font-weight:normal;
+	src:url(../Font/agaramondpro-regular.otf);
+}
+
+/* FL */
+body {
+	position:absolute;
+	top:0px;
+	left:0px;
+	margin:0px;
+	padding:0px;
+	width:1474px;
+	height:2324px;
+}
+.page {
+	position:absolute;
+	top:0px;
+	left:0px;
+	margin:0px;
+	padding:0px;
+	width:100%;
+	height:100%;
+}
+svg { 
+	width:100%;	
+	height:100%;	
+	position:absolute;	
+	top:0;	
+	left:0;	
+	margin:0;	
+	padding:0;	
+	image-rendering:optimizeSpeed;	
+	shape-rendering:optimizeSpeed;	
+	color-rendering:optimizeSpeed;	
+	text-rendering:optimizeSpeed;
+}
+
+/* NAV */
+a {
+	color: black !important;
+}
+
+#guide {
+	display: none;
+}
+
+
+/* Fonts */
+ at font-face {
+	font-family:AGaramondPro-Regular-0908;
+	font-style:normal;
+	font-weight:normal;
+	src:url(../Font/agaramondpro-regular.otf);
+}
+ at font-face {
+	font-family:AGaramondPro-Bold-0656;
+	font-style:normal;
+	font-weight:normal;
+	src:url(../Font/agaramondpro-bold.otf);
+}
+ at font-face {
+	font-family:AGaramondPro-Italic-0855;
+	font-style:normal;
+	font-weight:normal;
+	src:url(../Font/agaramondpro-italic.otf);
+}
+ at font-face {
+	font-family:Garamond-0662;
+	font-style:normal;
+	font-weight:normal;
+	src:url(../Font/agaramondpro-regular.otf);
+}
+
+
+
+/* Cover and titlepage (fullpage image) */
+figure.fullpage {
+	max-height:100%;
+	margin:0;
+	padding:0;
+}
+img {
+	max-height:100%;
+	margin:0;
+	padding:0;
+}
+
+
+/* titles */
+h2 {
+	font-size: 135%;
+	margin: 0em;
+}
+h1{
+	font-weight: bold;
+	font-size: 200%;
+	margin: 0em;
+}
+article h1 {
+	font-size: 120%;
+	margin: 1.71em 0 1.14em 0;
+}
+article h2 {
+	font-size: 110%;
+	margin: 1.23em 2.15em 0.62em 10.77em;
+}
+
+/* content */
+p {
+	text-align: justify;
+}
+strong {
+	font-weight: bold;
+}
+
+
+/* footnotes */
+p.footnotes {
+	font-size: 60%;
+}
+
+
+/* FL */
+body {
+	width: 1200px;
+	height: 1577px;
+	margin: 0;
+}
+img {
+	position: absolute;
+	margin: 0;
+	z-index: 0;
+}
+
+/* NAV */
+a {
+color: black !important;
+}
+
+#guide {
+display: none;
+}
+
+
+/* FL */
+body {
+	width: 1200px;
+	height: 1577px;
+	margin: 0;
+}
+img {
+	position: absolute;
+	margin: 0;
+	z-index: 0;
+}
+
+/* NAV */
+a {
+color: black !important;
+}
+
+#guide {
+display: none;
+}
+
+/* Layout designed for smaller devices */
+
+
+ 
+div[epub|type="chapter"] {
+    background-position: top center, bottom center;
+    background-size: 30% auto, 50% auto;
+    background-repeat: no-repeat, repeat-x;
+    padding: 1em;
+    margin: auto;
+}
+
+h1 {
+    margin: 50% auto 0 0;
+    font-size: 1em;
+}
+div {
+    text-align: center;
+}
+p {
+    margin-left: 25%;
+}
+
+
+
+
+
+body {
+    font-family: 'QuicksandLight', Gothic, Helvetica, Arial;    
+    background-color: rgb(240,240,240);
+    font-size: 1em;
+    line-height: 1.33em;
+}
+
+p {
+    padding: 0;    
+    text-align: justify;
+}
+
+hgroup, figure.block, figcaption, section {
+    display: block;
+}
+
+hgroup#covertitle {
+    margin-top: 4em;
+}
+
+hgroup#covertitle h2 {
+    margin-left: 8em;
+}
+
+h1, h2 {    
+    font-weight: bold;
+    letter-spacing: 0.2em;        
+    /* text-shadow: 3px 3px 2px rgb(210,210,210); */
+}
+
+h1 {
+    margin-bottom: 0.3em;    
+}
+
+h2 {
+    margin-top: 0em;
+    margin-left: 4em;
+    font-size: 95%;
+}
+
+section.base {
+    margin: 1em;
+    padding: 2em;
+    background-color: rgb(235,235,235);    
+}
+
+section#toc {
+    background-color: inherit;
+}
+
+#video1 {
+    display:block;
+    width: 360px;
+    height: 200px;       
+    margin:auto;
+}
+
+.errmsg {    
+    color:red;
+    font-weight:bold;
+    /* margin-left: -5em; */
+}
+
+a:link, a:visited, a:hover, a:active {
+    color:inherit;
+}
+
+nav ol {
+    list-style-type: none;
+    margin-left: 1em;
+}
+
+nav ol a {
+    text-decoration: none;
+}
+
+nav[epub|type~='toc'] a > span.toc-label {
+    display:block;
+}
+
+nav[epub|type~='toc'] a > span.toc-desc {
+    display:block;
+    font-style:italic;
+    font-size: 90%;
+    margin-left: 3em; 
+}
+
+p.trigger-ctrl {    
+    width: 360px;
+    margin: auto;
+    padding-top: 0.5em;
+}
+
+img.right {
+    float:right;
+    margin-left:2em;
+    width:50%;
+    height:50%;
+
+}
+
+img.left {
+    float:left;
+    margin-right:2em;
+    width:50%;
+    height:50%;
+}
+
+ at font-face {
+    font-family: 'QuicksandLight';
+    src: url('../fonts/Quicksand_Light.otf') format('truetype');
+    font-weight: normal;
+    font-style: normal;
+}
+
+ at font-face {
+    font-family: 'QuicksandLight';
+    src: url('../fonts/Quicksand_Bold_Oblique.otf') format('truetype');
+    font-weight: bold;
+    font-style: normal;
+}
+
+button.button {
+	font-weight: bold;
+	color: rgb(255,255,255);
+	background-color: rgb(0,0,0);
+	border: 0.2em solid rgb(0,0,255);
+	border-radius: 8px;
+	width: 6em;
+}
+
+/* `XHTML, HTML4, HTML5 Reset
+----------------------------------------------------------------------------------------------------*/
+
+a,
+abbr,
+acronym,
+address,
+applet,
+article,
+aside,
+audio,
+b,
+big,
+blockquote,
+body,
+canvas,
+caption,
+center,
+cite,
+code,
+dd,
+del,
+details,
+dfn,
+dialog,
+div,
+dl,
+dt,
+em,
+embed,
+fieldset,
+figcaption,
+figure,
+font,
+footer,
+form,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+header,
+hgroup,
+hr,
+html,
+i,
+iframe,
+img,
+ins,
+kbd,
+label,
+legend,
+li,
+mark,
+menu,
+meter,
+nav,
+object,
+ol,
+output,
+p,
+pre,
+progress,
+q,
+rp,
+rt,
+ruby,
+s,
+samp,
+section,
+small,
+span,
+strike,
+strong,
+sub,
+summary,
+sup,
+table,
+tbody,
+td,
+tfoot,
+th,
+thead,
+time,
+tr,
+tt,
+u,
+ul,
+var,
+video,
+xmp {
+  border: 0;
+  margin: 0;
+  padding: 0;
+  font-size: 100%;
+}
+
+html,
+body {
+  height: 100%;
+}
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+menu,
+nav,
+section {
+/*
+  Override the default (display: inline) for
+  browsers that do not recognize HTML5 tags.
+
+  IE8 (and lower) requires a shiv:
+  http://ejohn.org/blog/html5-shiv
+*/
+  display: block;
+}
+
+b,
+strong {
+/*
+  Makes browsers agree.
+  IE + Opera = font-weight: bold.
+  Gecko + WebKit = font-weight: bolder.
+*/
+  font-weight: bold;
+}
+
+img {
+  color: transparent;
+  font-size: 0;
+  vertical-align: middle;
+/*
+  For IE.
+  http://css-tricks.com/ie-fix-bicubic-scaling-for-images
+*/
+  -ms-interpolation-mode: bicubic;
+}
+
+li {
+/*
+  For IE6 + IE7.
+*/
+  display: list-item;
+}
+
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+
+th,
+td,
+caption {
+  font-weight: normal;
+  vertical-align: top;
+  text-align: left;
+}
+
+q {
+  quotes: none;
+}
+
+q:before,
+q:after {
+  content: '';
+  content: none;
+}
+
+sub,
+sup,
+small {
+  font-size: 75%;
+}
+
+sub,
+sup {
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+
+sub {
+  bottom: -0.25em;
+}
+
+sup {
+  top: -0.5em;
+}
+
+svg {
+/*
+  For IE9.
+*/
+  overflow: hidden;
+}
+
+body {
+    width: 80%;
+    margin: auto;
+    font-size: smaller;
+}
+
+fieldset {
+    margin-bottom: 30px;
+}
+
+.answer {
+    font-style: italic;
+}
+
+.correct {
+    color: green;
+}
+
+.incorrect {
+    color: red;
+}
+
+#flashcard {
+    border: thin solid black;
+    padding: 2em;
+    margin-bottom: 2em;
+}
+
+li {
+  padding: 5px;
+}
+
+body {
+    margin : 3em 2em 2em 3em;
+    background-color: rgb(255,250,245);
+    color:black;
+}
+
+body.titlepage {
+    margin : 8em 2em 2em 2em;    
+}
+
+body.titlepage h1 {
+    text-align : center;
+}
+
+nav#toc ol {
+    list-style-type: none;
+}
+
+
+nav#toc ol li {
+    text-decoration : none;
+    color : black;
+}
+
+span.num {
+    margin-left: 2em;
+    margin-right: 1em;
+}
+
+span.lin {
+    margin-left: 5em;
+}
+
+h1.en, h2.en, h3.en, p.en, dt.en, dd.en {display: none;}
+
+
+
+ at font-face {
+    font-family:'foobar';
+    src: url(../fonts/foobar.ttf);
+}
+
+html
+{
+    font-family: 'foobar', "HiraMinProN-W3", "@MS明朝", serif, sans-serif;
+    font-size: 14pt;
+    margin: auto 1em;
+    padding: 1em 0;
+    max-width: 28em;
+    background-color: #fff4e7;
+}
+body
+{
+    margin: 0;
+}
+h1
+{
+    font-weight: normal;
+    line-height: 2;
+    font-size: 2em;
+    margin-top: 2em;
+}
+h2
+{
+    font-weight: normal;
+    font-size: 1.25em;
+    text-indent: 0em;
+    margin-right: 3em;
+    /*-webkit-margin-before: 3em;*/
+    margin-left: 1em;
+    /*-webkit-margin-after: 1em;*/
+    margin-top: 2em;
+    /*-webkit-margin-start: 2em;*/
+}
+p 
+{
+    margin: 0;
+    line-height: 1.75;
+}
+ul, dl
+{
+    line-height: 2;
+}
+cite
+{
+    font-style: normal;
+}
+blockquote 
+{
+    margin: 2em 0 0;
+    /*-webkit-margin-start: 2em;    */
+}
+rt {
+    font-size: 50%; 
+}
+p.logo
+{
+    text-align: right;
+}
+.block
+{
+    display: inline-block;
+    height:4em;
+    margin-left: 2em;
+}
+.block img
+{
+    height: 100%;
+}
+.author_desc
+{
+    min-width: 10em;
+    max-height: 100%;
+    margin-right: 3em;
+    /*-webkit-margin-before: 3em;*/
+}
+img.author_portrait
+{
+    float: left;
+    height: 50%;
+    font-size: inherit;
+    margin-bottom: 1em;
+    /*-webkit-margin-end: 1em;*/
+}
+.author_desc p
+{
+    font-size: 0.8em;
+    line-height: 1.5;
+}
+.author_desc .en_name
+{
+    color: #0000FF;
+}
+p.author
+{
+    font-weight: normal;
+    font-size: 1.25em;
+    text-align: right;
+    text-indent: 0em;
+    margin-bottom: 2em; 
+    /*-webkit-margin-end: 2em;*/
+}
+.main_text
+{
+    font-size: 1em;
+    line-height: 1.75;
+    text-align: justify;
+    clear: both;
+    /* margin: 0 0 0 0; */
+    margin-bottom: 12em;
+    /* -webkit-margin-after: 12em; */
+}
+.main_text > p,
+.about >p
+{
+    text-indent: 1em;
+}
+.main_text p.conversation,
+.main_text p.translation,
+.main_text p.continued_sentence
+{
+    text-indent: 0em;
+}
+
+span.notes
+{
+    font-size: smaller;
+}
+strong.sesame_dot
+{
+    font-weight: normal;
+    -epub-text-emphasis-style: sesame;
+    color: #0000FF;
+    -epub-text-emphasis-color: #FF0000;
+}
+span.tcy
+{
+    /*writing-mode: horizontal-tb;
+    -webkit-writing-mode: horizontal-tb;*/
+    -epub-text-combine: horizontal;
+    /* --- for test
+    -epub-text-emphasis-style: sesame;
+    -epub-text-emphasis-color: red; -- */   
+}
+span.tcy.blue
+{
+    color: #0000FF;
+}
+
+.about
+{
+    margin-right: 1em;
+    /*-webkit-margin-before: 1em;*/
+    margin-left: 1em;
+    /*-webkit-margin-after: 1em;*/
+    font-size: 0.9em;
+}
+.about h2
+{
+    margin-top: 0em;
+    /*-webkit-margin-start: 0em;*/
+}
+.about h2:before
+{
+    content: "◆";
+}
+.original_information
+{
+    border: 1px solid #D9D9D9;
+}
+.bibliographical_information,
+.notation_notes
+{
+    margin-top: 2em;
+    /*-webkit-margin-start: 2em;    */
+    margin-right: 2em;
+    /*-webkit-margin-before: 2em;*/
+    margin-left: 2em;
+    /*-webkit-margin-after: 2em;*/
+        font-size: 0.8em;
+}
+dl.history {
+    font-size: 0.9em;
+}
+del.hidden {
+    display: none;
+}
+
+.TableOfContents ol {
+    list-style-type: none;
+}
+.TableOfContents a {
+    text-decoration: none;
+}
+.TableOfContents a:hover {
+    text-decoration: underline;
+}
+
+ at font-face {
+    font-family: 'OldStandard';
+    font-weight: normal;
+    font-style: normal;
+    src:url(OldStandard-Regular.woff) format('woff');
+}
+
+ at font-face {
+    font-family: 'OldStandard';
+    font-weight: bold;
+    font-style: normal;
+    src:url(OldStandard-Bold.woff) format('woff');
+}
+
+ at font-face {
+    font-family:'OldStandard';
+    font-weight: normal;
+    font-style: italic;
+    src:url(OldStandard-Italic.woff) format('woff');
+}
+
+ at font-face {
+    font-family: 'OldStandard';
+    font-weight: normal;
+    font-style: normal;
+    src:url(OldStandard-Regular.obf.woff) format('woff');
+}
+
+ at font-face {
+    font-family: 'OldStandard';
+    font-weight: bold;
+    font-style: normal;
+    src:url(OldStandard-Bold.obf.woff) format('woff');
+}
+
+ at font-face {
+    font-family:'OldStandard';
+    font-weight: normal;
+    font-style: italic;
+    src:url(OldStandard-Italic.obf.woff) format('woff');
+}
+
+ at font-face {
+    font-family: 'OldStandard';
+    font-weight: normal;
+    font-style: normal;
+    src:url(OldStandard-Regular.otf) format('opentype');
+}
+
+ at font-face {
+    font-family: 'OldStandard';
+    font-weight: bold;
+    font-style: normal;
+    src:url(OldStandard-Bold.otf) format('opentype');
+}
+
+ at font-face {
+    font-family:'OldStandard';
+    font-weight: normal;
+    font-style: italic;
+    src:url(OldStandard-Italic.otf) format('opentype');
+}
+
+ at font-face {
+    font-family: 'OldStandard';
+    font-weight: normal;
+    font-style: normal;
+    src:url(OldStandard-Regular.obf.otf) format('opentype');
+}
+
+ at font-face {
+    font-family: 'OldStandard';
+    font-weight: bold;
+    font-style: normal;
+    src:url(OldStandard-Bold.obf.otf) format('opentype');
+}
+
+ at font-face {
+    font-family:'OldStandard';
+    font-weight: normal;
+    font-style: italic;
+    src:url(OldStandard-Italic.obf.otf) format('opentype');
+}
+
+/* the whole figure gallery box */
+#figure-gallery {
+	width: 80%;
+	margin-left: auto;
+	margin-right: auto;
+	background-color: #222;
+	height: 600px;
+	padding-left: 0px;
+	padding-right: 0px;
+	margin-top: 20px;
+	margin-bottom: 20px;
+				
+}
+
+/* the figure */
+#figure-gallery figure {
+	margin-left: 0px;
+	margin-right: 0px;
+}
+
+/* the display panel */
+#contents {
+	background-color: black;
+	text-align: center;
+}
+
+/* the description */
+#figure-gallery figcaption {
+	background-color: lightgray;
+	font-size: smaller;
+	padding-left: 20px;
+	padding-right: 20px;
+	padding-top: 5px;
+	margin: 1em;
+}
+
+#figure-gallery figcaption h2 {
+	font-size: 10pt;
+	margin-top: 5px;
+	margin-bottom: 10px;
+}
+
+/* the navigation controls */
+#navigation {
+	text-align: center;
+}
+
+#navigation * {
+	color: lightgray;
+	padding-right: 2em;
+}
+
+.navigation-disabled {
+	color: gray;
+	text-decoration: none;
+}
+			
+#thumbnails {
+	text-align: center;
+	margin: auto;
+	
+	/* add scrolling behavior */
+	overflow-x: auto;
+	white-space: nowrap;
+	
+}			
+#thumbnails li {
+	display: inline;
+	padding: 10px;
+}
+			
+#thumbnails .selected {
+	box-shadow: 0 0 5px rgba(0, 0, 0, 1);
+	-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 1); 
+	-moz-box-shadow: 0 0 5px rgba(0, 0, 0, 1);
+	border:1px solid rgba(255,186,0, 0.8);
+}
+.error {
+	color: red;
+}
+
+
+
+
+body {
+    margin-left: 6em;
+    margin-right: 16em;
+    color: black;    
+    font-family: times, 'times new roman', serif;    
+    
+    background-color: rgb(255,255,245);
+    line-height: 1.5em;
+}
+
+h2 {
+    margin-top: 5em;
+    margin-bottom: 2em;
+}
+
+h3 {
+    margin-top: 3em;
+}
+
+.linegroup { 
+    margin-top: 1.6em; 
+}
+
+span.lnum {
+    float: right;
+    color: gray;
+    font-size : 90%;
+}
+
+a.noteref {    
+    color: rgb(215,215,195);
+    text-decoration: none;
+    margin-left: 0.5em;
+    margin-right: 0.5em;
+}
+
+section#rearnotes a {
+    color: black;
+    text-decoration: none;
+    border-bottom : 1px dotted gray;
+    margin-right: 0.8em;
+}
+
+.indent {
+    padding-left: 3em;
+}
+
+.indent2 {
+    padding-left: 5em;
+}
+
+*[epub|type~='dedication'] {
+    padding-left: 2em;
+}
+
+figure.fallback {
+    margin-bottom: 30px;
+}
+figure.fallback figcaption h2 {
+    font-size: medium;
+    margin-top: inherit !important;
+    margin-bottom: inherit !important;
+}
+
+
+
+
+
+body {
+    margin-left: 6em;
+    margin-right: 16em;
+    color: black;    
+    font-family: times, 'times new roman', serif;    
+    
+    background-color: rgb(255,255,245);
+    line-height: 1.5em;
+}
+
+h2 {
+    margin-top: 5em;
+    margin-bottom: 2em;
+}
+
+h3 {
+    margin-top: 3em;
+}
+
+.linegroup { 
+    margin-top: 1.6em; 
+}
+
+span.lnum {
+    float: right;
+    color: gray;
+    font-size : 90%;
+}
+
+a.noteref {    
+    color: rgb(215,215,195);
+    text-decoration: none;
+    margin-left: 0.5em;
+    margin-right: 0.5em;
+}
+
+section#rearnotes a {
+    color: black;
+    text-decoration: none;
+    border-bottom : 1px dotted gray;
+    margin-right: 0.8em;
+}
+
+.indent {
+    padding-left: 3em;
+}
+
+.indent2 {
+    padding-left: 5em;
+}
+
+*[epub|type~='dedication'] {
+    padding-left: 2em;
+}
+
+figure.fallback {
+    margin-bottom: 30px;
+}
+figure.fallback figcaption h2 {
+    font-size: medium;
+    margin-top: inherit !important;
+    margin-bottom: inherit !important;
+}
+
+body {
+    margin: 5em 5em 5em 5em;
+    background-color: rgb(255,253,249);
+    font-family: arial, verdana, sans-serif;
+    color:black;
+}
+
+nav#toc ol {
+    list-style-type: none;
+}
+
+nav#toc ol li a {
+    text-decoration : none;
+    color:black;
+}
+
+body#titlepage {
+    text-align : center;
+}
+
+
+
+
+body {
+	font-family: Arial,Verdana,sans-serif;
+	font-size: 1em;
+}
+
+.nonindent { text-indent: 0em }
+
+span.repeat { padding-left: 45px; }
+span.repeatDem { padding-left: 45px; }
+span.repeatRep { padding-left: 100px; }
+
+*[epub|type='pagebreak'] { display: none; }
+
+a[epub|type='noteref'] { vertical-align: super; }
+
+
+
+
+body {
+	font-family: Arial,Verdana,sans-serif;
+	font-size: 1em;
+}
+
+.nonindent { text-indent: 0em }
+
+span.repeat { padding-left: 45px; }
+span.repeatDem { padding-left: 45px; }
+span.repeatRep { padding-left: 100px; }
+
+*[epub|type='pagebreak'] { display: none; }
+
+a[epub|type='noteref'] { vertical-align: super; }
+
+
+
+body {
+    color: rgb(0,0,0);
+    font-family: arial, helvetica, sans-serif;
+    background-color: rgb(255,255,255);
+    margin: 0.5em 1em 0 0.5em;
+    border: 0;
+    padding: 0
+}
+
+h1, h2, h3, h4, h5, h6 {
+    text-align: center;
+}
+
+h2 {
+    page-break-before: always;
+    padding-top: 1em
+}
+
+h3 {
+	page-break-before: always;
+}
+
+.subhd {
+	display: block;
+	margin-top: 0.5em;
+}
+
+span[epub|type~='bridgehead'] {
+    font-weight: bold;
+}
+
+div[epub|type~='z3998:author'] {
+	font-size: small;
+	font-weight: bold;
+	text-align: center;
+}
+
+p {
+    margin-top: 0.75em;
+    text-align: justify;
+    text-indent: 1.25em;
+    margin-bottom: 0.75em
+}
+
+
+.intro {
+	font-family: Calibri,Arial,sans-serif;
+    margin: 0.75em 2em;
+    text-align: justify;
+}
+
+.center {
+    text-align: center
+}
+
+.smcap {
+    font-variant: small-caps
+}
+
+.poem {
+    margin-left: 30%;
+    margin-right: 10%;
+    text-align: left
+}
+
+.line {
+	display: block;
+}
+
+span.c8 {
+	display: block;
+    margin-left: 1em
+}
+
+nav[epub|type~='toc'] ol {
+	list-style-type: none;
+}
+
+ol > li:first-child {
+	margin-top: 0.5em;
+}
+
+nav[epub|type~='toc'] > ol > li > ol > li {
+	margin-top: 0.5em;
+}
+
+li.front {
+	font-style: italic;
+}
+
+li.front + li.body {
+	margin-top: 1.5em;
+}
+
+span.author {
+	font-family: arial, helvetica, sans-serif;
+	font-weight: bold;
+}
+
+span[epub|type~='pagebreak'] {
+    font-size: smaller;
+    color: rgb(180,180,180);
+	text-align: center;
+	border: 1px solid rgb(180,180,180);
+	padding: 0.1em 0.3em;
+}
+
+aside[epub|type~='annotation'] {
+	margin-top: 1.5em;
+	border-top: 0.1em solid rgb(100,100,100);
+	font-size: 0.7em;
+	width: 50%;
+}
+
+
+
+/* O'Reilly Media, 2012; version 2.5.1 - New code fonts and syntax highlighting */
+
+/* reset */
+
+html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6,
+p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del,
+dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub,
+sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form,
+label, legend, table, caption, tbody, tfoot, thead, tr, th, td { 
+  margin: 0;
+  padding: 0;
+  border: 0;
+  outline: 0;
+  font-size: 100%;
+  vertical-align: baseline;
+  background: transparent; }
+
+/* end reset */
+
+ at page {
+  margin: 5px !important;
+}
+
+/* p margin */
+
+p { 
+  margin: 8px 0 0;
+}
+
+/* inlines; code and monospace in the code section below */
+
+span.bolditalic {
+  font-weight: bold;
+  font-style: italic;
+}
+
+strong, span.bold {
+  font-weight: bold;
+  font-family: serif;
+}
+
+a.ulink, a.xref, a.email {
+  text-decoration: none;
+  color: #8e0012;
+}
+
+sup {  /* bug in webkit? */
+  font-size: x-small;
+  vertical-align: super;
+} 
+
+sub {
+  font-size: smaller;
+  vertical-align: sub;
+}
+
+span.lineannotation {
+  font-style: italic;
+  color: red;
+  font-family: serif, "Free Serif";
+}
+
+span.underline { text-decoration: underline; }
+
+span.strikethrough { text-decoration: line-through; }
+
+span.smallcaps { font-variant: small-caps; }
+
+span.cursor { background: #000; color: #FFF; } /* for Learning GNU Emacs, 3e */
+
+/* added for special formatting in Regular Expressions Cookbook, 1e (9780596802783.EBOOK) */
+
+.boxedtext, .keycap {
+  border-style: solid;
+  border-width: 1px;
+  border-color: #000;
+  padding: 1px;
+}
+
+span.gray50 {
+  color: #7F7F7F; /* 50 % gray */
+}
+
+/* added for special formatting in Bioinformatics Programming Using Python, 1e (9781449378677.EBOOK) */
+
+.gray-background, .reverse-video {
+  background: #2E2E2E;
+  color: #FFF;
+}
+
+/* added for special formatting in Working with Microsoft Visual Studio 2005, 1e (9780735649958.EBOOK) */
+
+.light-gray-background {
+  background: #A0A0A0;
+}
+
+/* preserve whitespace in non-pre elements */
+/* Used for special formatting in Using SQLite (9781449394042.EBOOK), which needs verbatim space preserved in a <dt> element, which cannot contain a pre */
+/* See EBK-2920 */
+
+.preserve-whitespace { white-space: pre-wrap; }
+
+/* headings */
+
+h1 {
+  font-size: 1.5em;
+  font-weight: bold;
+  font-family: "Free Sans Bold", sans-serif;
+  margin-top: 20px !important;
+}
+
+h2 { 
+  font-size: 1.3em;
+  font-weight: bold;
+  font-family: "Free Sans Bold", sans-serif;
+  color: #8e0012;
+  margin: 15px 0 8px 0 !important;
+}
+
+h3 {
+  font-size: 1.1em;
+  font-weight: bold;
+  font-family: "Free Sans Bold", sans-serif;
+  margin: 10px 0 8px 0 !important;
+}
+
+h4 {
+  font-size: bold;
+  font-weight: 1em;
+  font-family: "Free Sans Bold", sans-serif;
+  color: #555;
+  margin: 9px 0 !important;
+}
+
+/* Appropriate heading hyphenation suppression for different ereaders */
+h1, h2, h3, h4 { 
+  -webkit-hyphens: none;
+  hyphens: none;
+  adobe-hyphenate: none;
+}
+
+section.chapter > h1.title,
+section.preface > h1.title,
+section.appendix > h1.title { /* larger chapter title */
+  font-size: 2em;
+  line-height: 1;
+  margin-bottom: 15px;
+}
+  
+/* images  */
+
+img {
+  max-width: 95%;
+  margin: 0 auto;
+  padding: 0;
+}
+
+figure {
+  margin: 10px 0 !important;
+  text-align: center;
+  -webkit-border-radius: 5px;
+  border-radius: 5px;
+  border: 1px solid #000;
+  background-color: transparent;
+  padding: 5px !important;
+  page-break-inside: avoid;
+}
+
+figure figcaption {
+  font-size: 90%;
+  text-align: center;
+  font-weight: normal;
+  font-style: italic;
+  font-family: "Free Serif", serif;
+  color: #000;
+  padding: 5px !important;
+  page-break-before: avoid;
+  page-break-after: avoid;
+}
+
+div.informalfigure {
+  text-align: center;
+  padding: 5px 0 !important;
+}
+
+/* sidebars */
+
+div.sidebar {
+  margin: 10px 0 !important;
+  -webkit-border-radius: 5px;
+  border-radius: 5px;
+  border: 1px solid #000;
+  background-color: transparent;
+  font-size: 90%;
+  padding: 10px 8px !important;
+  page-break-inside: avoid;
+}
+
+div.sidebar p.title {
+  font: bold 1em;
+  font-family: "Free Sans Bold", sans-serif;
+  text-transform:uppercase;
+  letter-spacing: 1px;
+  text-align: center;
+  margin: 4px 0 6px 0 !important;
+  page-break-inside: avoid;
+}
+
+div.sidebar ol {
+  margin-left: 15px;
+}
+
+div.sidebar div.tip, div.sidebar div.note, div.sidebar div.warning,
+div.sidebar div.caution, div.sidebar div.important {
+  margin: 10px 12.5% !important;
+  font-size: 90%;
+  padding: 10px 5px !important;
+  width: 75%;
+}
+
+div.sidebar div.tip, div.sidebar div.note {
+  background-color: #f1f6fc;
+  border: none;
+}
+
+div.sidebar div.warning, div.sidebar div.caution {
+  background-color: #fce5e8;
+}
+
+div.sidebar div.important {
+  background-color: #FBEC5D;
+}
+
+div.sidebar div.figure {
+  border: none;
+}
+
+/* code */
+
+pre {
+  white-space: pre-wrap;
+  font-family: "Ubuntu Mono", monospace;
+  margin: 10px 0 10px 20px;
+  font-size: 85%;
+  display: block;
+  -webkit-hyphens: none;
+  hyphens: none;
+  adobe-hyphenate: none;
+}
+
+code {
+  font-family: "Ubuntu Mono", monospace;
+}
+
+code strong em, code em strong, pre em strong, pre strong em,
+strong code em code, em code strong code, span.bolditalic code { /* yes, all of these variations are needed */
+  font-weight: bold;
+  font-style: italic;
+  font-family: "Ubuntu Mono BoldItal", monospace;
+}
+
+code em, em code, pre em, em.replaceable {
+  font-family: "Ubuntu Mono Ital", monospace;
+  font-style: italic;
+}
+
+code strong, strong code, pre strong, strong.userinput {
+  font-family: "Ubuntu Mono Bold", monospace;
+  font-weight: bold;
+}
+
+div.example {
+  margin: 10px 0 15px 0 !important;
+}
+
+div.example p.title {
+  font-style: italic;
+  font-weight: normal;
+  font-family: "Free Serif", serif;
+  margin: 10px 0 5px 0 !important;
+}
+
+li pre.example {
+  padding: 10px 0 !important;
+}
+
+div.example-contents pre.programlisting, div.example-contents pre.screen { margin: 0; }
+
+
+/* title and copyright page */
+
+div.book div.titlepage h1.title {
+  font-size: 2.2em;
+  text-align: center;
+  margin-bottom: 10px !important;
+  line-height: 1;
+}
+
+div.book div.titlepage div.author h3 {
+  font-size: 1.6em;
+  font-family: "Free Sans Bold", sans-serif;
+  text-align: center;
+  color: #8e0012;
+  margin: 10px 0 !important;
+}
+
+h2.subtitle {
+  font: bold italic 1.1em;
+  font-family: "Free Sans Bold", sans-serif;
+  text-align: center;
+  color: #000;
+  margin-top: 5px !important;
+}
+
+div.titlepage p.copyright { margin: 20px 0 !important; }
+
+div.legalnotice {
+  margin: 0 !important;
+  font-size: 90%;
+}
+
+div.legalnotice p { margin: 5px 0 !important; }
+
+div.titlepage hr {
+  width: 50%;
+}
+
+div.editor h4 { 
+  color: #000;
+  margin: 20px 0 0 0 !important;
+  font-weight: bold; 
+  font-style: normal;
+  font-size: 1em;
+ }
+
+div.editor h3 {
+  margin: 0;
+  font-family: serif;
+  font-size: 1em;
+  font-weight: normal
+}
+
+div.dedication p { 
+  text-align: center;
+  font-style: italic;
+  font-family: "Free Serif", serif;
+}
+
+div.dedication div.titlepage h1.title {
+  text-transform: uppercase;
+  font-size: 1em;
+}
+
+div.affiliation span.orgname, span.jobtitle {
+  padding-left: 30px !important;
+  font-size: smaller;
+}
+
+/* epigraphs, blockquotes, attributions */
+
+div.attribution {
+  margin: 5px 0 0 50px !important;
+}
+
+h3.author span.orgname { display: none } /* to work around bug */
+
+div.epigraph {
+  margin: 10px 0 10px 20px !important;
+  page-break-inside: avoid;
+  font-size: 90%;
+}
+
+blockquote, div.blockquote {
+  margin: 10px 0 10px 5px !important;
+  page-break-inside: avoid;
+  font-size: 95%;
+}
+
+blockquote p, div.blockquote p {
+  font-style: italic;
+  font-family: "Free Serif", serif;
+}
+
+blockquote div.attribution {  
+  margin: 5px 0 0 30px !important;
+  text-align: right;
+  width: 80%;
+}
+
+blockquote div.attribution p {  
+  font-style: normal;
+}
+
+/* footnotes */
+
+div.footnote {
+  font-size: 90%;
+}
+
+/* refentries */
+
+div.refnamediv h2, div.refnamediv h3, div.refsynopsisdiv h2 {
+  font-size: 1.1em;
+  color: #000;
+  margin-top: 15px !important;
+  margin-bottom: 0px !important;
+}
+
+div.refentry div.refsect1 h2 {
+  font-size: 1.1em;
+  color: #000;
+  margin-top: 15px !important;
+  margin-bottom: 0px !important;
+}
+  
+div.refsect2 h3 {
+  font-size: 1em;
+  color: #000;
+  margin-top: 10px !important;
+  margin-bottom: 0 !important;
+}
+
+div.refnamediv p {
+  margin-left: 15px !important;
+}
+
+/* lists */
+
+dt {
+  padding-top: 10px !important;
+  padding-bottom: 0 !important;
+}
+
+dd {
+  margin-left: 1.5em !important;
+}
+
+ol {
+  list-style-type: decimal;
+  margin-top: 8px !important;
+  margin-bottom: 8px !important;
+  margin-left: 20px !important;
+  padding-left: 25px !important;
+}
+
+ol ol {
+  list-style-type: lower-alpha;
+}
+
+ol ol ol {
+  list-style-type: lower-roman;
+}
+
+ul { 
+  list-style-type: square;
+  margin-top: 8px !important;
+  margin-bottom: 8px !important;
+  margin-left: 5px !important;
+  padding-left: 20px !important;
+}
+
+ul ul { 
+  list-style-type: none;
+  padding-left: 0 !important;
+  margin-left: 0 !important;
+}
+
+ul ul li p:before { 
+  content: "\2014 \0020";
+}
+
+ul ul ul li p:before { 
+  content: "";
+}
+
+ul ul ul { 
+  list-style-type: square;
+  margin-left: 20px !important;
+  padding-left: 30px !important;
+}
+
+div.orderedlistalpha {
+  list-style-type: upper-alpha;
+}
+
+table.simplelist {
+  margin-left: 20px !important;
+  margin-bottom: 10px;
+}
+
+table.simplelist td {
+  border: none;
+  font-size: 90%;
+}
+
+table.simplelist tr {
+  border-bottom: none;
+}
+
+table.simplelist tr:nth-of-type(even) {
+  background-color: transparent;
+}
+
+div.calloutlist p:first-child {
+ margin-top: -25px !important;
+}
+
+div.calloutlist dd {
+  padding-left: 40px !important;
+}
+
+div.calloutlist img {
+  padding: 0;
+}
+
+a.co img {
+  padding: 0;
+}
+
+/* admonitions */
+ 
+div.tip, aside.note, div.warning, div.caution, div.important {
+  margin: 10px 0 !important;
+  -webkit-border-radius: 5px;
+  border-radius: 5px;
+  font-size: 90%;
+  padding: 10px 8px 20px 8px !important;
+  page-break-inside: avoid;
+}
+
+div.tip, aside.note {
+  border: 1px solid #6cafd0;
+  background-color: transparent;
+}
+
+div.warning, div.caution {
+  border: 1px solid #8e0012;
+  background-color: #fce5e8;
+}
+
+div.important {
+  background-color: #FFF68F;
+  border: 1px solid #615E3F;
+}
+
+div.tip h3, aside.note h3, div.warning h3, div.caution h3, div.important h3 {
+  font: bold 90%;
+  font-family: "Free Sans Bold", sans-serif;
+  text-transform: uppercase;
+  letter-spacing: 1px;
+  text-align: center;
+  margin: 4px 0 6px !important;
+  color: #000;
+}
+
+/* tables */
+
+div.table, table {
+  margin: 10px auto !important;
+  max-width: 95%;
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+
+div.table, div.informaltable {
+  page-break-inside: avoid;
+}
+
+tr {
+  border-bottom: 1px solid #c3c3c3;
+}
+
+tr th {
+  border-bottom: #9d9d9d 2px solid !important;
+  border-top: #9d9d9d 2px solid !important; 
+}
+
+tr:nth-of-type(even) {
+  background-color: #f1f6fc;
+}
+
+th {
+  font-family: "Free Sans Bold", sans-serif;
+  color: #000;
+  font-weight: bold;
+}
+
+td, th {
+  padding: 0.3em;
+  text-align: left;
+  vertical-align: baseline;
+  font-size: 80%;
+}
+
+div.informaltable table {
+  margin: 10px auto !important;
+}
+
+div.informaltable table tr {
+  border-bottom: none;
+}
+
+div.informaltable table tr:nth-of-type(even) {
+  background-color: transparent;
+}
+
+div.informaltable td, div.informaltable th {
+  border: #9d9d9d 1px solid;
+}
+
+div.table p.title {
+  font-weight: normal;
+  font-style: italic;
+  font-family: "Free Serif", serif;
+  margin: 20px 0 0 0 !important;
+  text-align: center;
+  padding: 0;
+}
+
+table code {
+  font-size: smaller;
+}
+
+/* syntax highlighting and coloring text in general */
+
+/* legacy stuff */
+code.boolean, .navy {
+  color: rgb(0,0,128); /* navy */
+}
+code.character, .olive {
+  color: rgb(128,128,0); /* olive */
+}
+code.comment, .blue {
+  color: rgb(0,0,255); /* blue */
+}
+code.conditional, .limegreen {
+  color: rgb(50,205,50); /* limegreen */
+}
+code.constant, .darkorange {
+  color: rgb(255,140,0); /* darkorange */
+}
+code.debug, .darkred {
+  color: rgb(139,0,0); /* darkred */
+}
+code.define, .darkgoldenrod, .gold {
+  color: rgb(184,134,11); /* darkgoldenrod */
+}
+code.delimiter, .dimgray {
+  color: rgb(105,105,105); /* dimgray */
+}
+code.error, .red {
+  color: rgb(255,0,0); /* red */
+}
+code.exception, .salmon {
+  color: rgb(250,128,11); /* salmon */
+}
+code.float, .steelblue {
+  color: rgb(70,130,180); /* steelblue */
+}
+code.function, .green {
+  color: rgb(0,128,0); /* green */
+}
+code.identifier, .royalblue {
+  color: rgb(65,105,225); /* royalblue */
+}
+code.ignore, .gray {
+  color: rgb(128,128,128); /* gray */
+}
+code.include, .purple {
+  color: rgb(128,0,128); /* purple */
+}
+code.keyword, .sienna {
+  color: rgb(160,82,45); /* sienna */
+}
+code.label, .deeppink {
+  color: rgb(255,20,147); /* deeppink */
+}
+code.macro, .orangered {
+  color: rgb(255,69,0); /* orangered */
+}
+code.number, .brown {
+  color: rgb(165,42,42); /* brown */
+}
+code.operator, .black {
+  color: #000; /* black */
+}
+code.preCondit, .teal {
+  color: rgb(0,128,128); /* teal */
+}
+code.preProc, .fuschia {
+  color: rgb(255,0,255); /* fuschia */
+}
+code.repeat, .indigo {
+  color: rgb(75,0,130); /* indigo */
+}
+code.special, .saddlebrown {
+  color: rgb(139,69,19); /* saddlebrown */
+}
+code.specialchar, .magenta {
+  color: rgb(255,0,255); /* magenta */
+}
+code.specialcomment, .seagreen {
+  color: rgb(46,139,87); /* seagreen */
+}
+code.statement, .forestgreen {
+  color: rgb(34,139,34); /* forestgreen */
+}
+code.storageclass, .plum {
+  color: rgb(221,160,221); /* plum */
+}
+code.string, .darkred {
+  color: rgb(139,0,0); /* darkred */
+}
+code.structure, .chocolate {
+  color: rgb(210,106,30); /* chocolate */
+}
+code.tag, .darkcyan {
+  color: rgb(0,139,139); /* darkcyan */
+}
+code.todo, .black {
+  color: #000; /* black */
+}
+code.type, .mediumslateblue {
+  color: rgb(123,104,238); /* mediumslateblue */
+}
+code.typedef, .darkgreen {
+  color: rgb(0,100,0); /* darkgreen */
+}
+code.underlined {
+  text-decoration: underline; /* guess what */
+}
+
+/* Pygments with manni theme */
+pre code.hll { background-color: #ffffcc }
+pre code.c { color: #0099FF; font-style: italic } /* Comment */
+pre code.err { color: #AA0000 } /* Error */
+pre code.k { color: #006699; font-weight: bold } /* Keyword */
+pre code.o { color: #555555 } /* Operator */
+pre code.cm { color: #35586C; font-style: italic } /* Comment.Multiline */
+pre code.cp { color: #009999 } /* Comment.Preproc */
+pre code.c1 { color: #35586C; font-style: italic } /* Comment.Single */
+pre code.cs { color: #35586C; font-weight: bold; font-style: italic } /* Comment.Special */
+pre code.gd { background-color: #FFCCCC } /* Generic.Deleted */
+pre code.ge { font-style: italic } /* Generic.Emph */
+pre code.gr { color: #FF0000 } /* Generic.Error */
+pre code.gh { color: #003300; font-weight: bold } /* Generic.Heading */
+pre code.gi { background-color: #CCFFCC } /* Generic.Inserted */
+pre code.go { color: #AAAAAA } /* Generic.Output */
+pre code.gp { color: #000099; font-weight: bold } /* Generic.Prompt */
+pre code.gs { font-weight: bold } /* Generic.Strong */
+pre code.gu { color: #003300; font-weight: bold } /* Generic.Subheading */
+pre code.gt { color: #99CC66 } /* Generic.Traceback */
+pre code.kc { color: #006699; font-weight: bold } /* Keyword.Constant */
+pre code.kd { color: #006699; font-weight: bold } /* Keyword.Declaration */
+pre code.kn { color: #006699; font-weight: bold } /* Keyword.Namespace */
+pre code.kp { color: #006699 } /* Keyword.Pseudo */
+pre code.kr { color: #006699; font-weight: bold } /* Keyword.Reserved */
+pre code.kt { color: #007788; font-weight: bold } /* Keyword.Type */
+pre code.m { color: #FF6600 } /* Literal.Number */
+pre code.s { color: #CC3300 } /* Literal.String */
+pre code.na { color: #330099 } /* Name.Attribute */
+pre code.nb { color: #336666 } /* Name.Builtin */
+pre code.nc { color: #00AA88; font-weight: bold } /* Name.Class */
+pre code.no { color: #336600 } /* Name.Constant */
+pre code.nd { color: #9999FF } /* Name.Decorator */
+pre code.ni { color: #999999; font-weight: bold } /* Name.Entity */
+pre code.ne { color: #CC0000; font-weight: bold } /* Name.Exception */
+pre code.nf { color: #CC00FF } /* Name.Function */
+pre code.nl { color: #9999FF } /* Name.Label */
+pre code.nn { color: #00CCFF; font-weight: bold } /* Name.Namespace */
+pre code.nt { color: #330099; font-weight: bold } /* Name.Tag */
+pre code.nv { color: #003333 } /* Name.Variable */
+pre code.ow { color: #000000; font-weight: bold } /* Operator.Word */
+pre code.w { color: #bbbbbb } /* Text.Whitespace */
+pre code.mf { color: #FF6600 } /* Literal.Number.Float */
+pre code.mh { color: #FF6600 } /* Literal.Number.Hex */
+pre code.mi { color: #FF6600 } /* Literal.Number.Integer */
+pre code.mo { color: #FF6600 } /* Literal.Number.Oct */
+pre code.sb { color: #CC3300 } /* Literal.String.Backtick */
+pre code.sc { color: #CC3300 } /* Literal.String.Char */
+pre code.sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */
+pre code.s2 { color: #CC3300 } /* Literal.String.Double */
+pre code.se { color: #CC3300; font-weight: bold } /* Literal.String.Escape */
+pre code.sh { color: #CC3300 } /* Literal.String.Heredoc */
+pre code.si { color: #AA0000 } /* Literal.String.Interpol */
+pre code.sx { color: #CC3300 } /* Literal.String.Other */
+pre code.sr { color: #33AAAA } /* Literal.String.Regex */
+pre code.s1 { color: #CC3300 } /* Literal.String.Single */
+pre code.ss { color: #FFCC33 } /* Literal.String.Symbol */
+pre code.bp { color: #336666 } /* Name.Builtin.Pseudo */
+pre code.vc { color: #003333 } /* Name.Variable.Class */
+pre code.vg { color: #003333 } /* Name.Variable.Global */
+pre code.vi { color: #003333 } /* Name.Variable.Instance */
+pre code.il { color: #FF6600 } /* Literal.Number.Integer.Long */
+
+/* Sanders's additions to manni */
+pre code.g { color: #005500 } /* Generic */
+pre code.l { color: #CC6600 } /* Literal */
+pre code.l { color: #FF9900 } /* Literal.Date */
+pre code.n { color: #000088 } /* Name */
+pre code.nx { color: #000088 } /* Name.Other */
+pre code.py { color: #9966FF } /* Name.Property */
+pre code.p { color: #000000 } /* Punctuation */
+pre code.x { color: #FF0066 } /* Other */
+
+/* Special handling for sampler TOC entry rendering */
+
+div.blockquote_sampler_toc {
+  width: 95%;
+  margin: 5px 5px 5px 10px !important;
+}
+
+/* fonts (keep at bottom); using Free Serif and Sans as a fallback for its rich set of glyphs */
+
+ at font-face {
+  font-family: "Free Serif";
+  font-style: normal;
+  font-weight: normal;
+  src: url(FreeSerif.otf);
+}
+
+ at font-face {
+  font-family: "Free Sans Bold";
+  font-style: normal;
+  font-weight: bold;
+  src: url(FreeSansBold.otf);
+}
+
+ at font-face {
+  font-family: "Ubuntu Mono";
+  font-weight: normal;
+  font-style: normal;
+  src: url(UbuntuMono-R.ttf);
+}
+
+ at font-face {
+  font-family: "Ubuntu Mono Bold";
+  font-style: normal;
+  font-weight: bold;
+  src: url(UbuntuMono-B.ttf);
+}
+
+ at font-face {
+  font-family: "Ubuntu Mono BoldItal";
+  font-weight: bold;
+  font-style: italic;
+  src: url(UbuntuMono-BI.ttf);
+}
+
+ at font-face {
+  font-family: "Ubuntu Mono Ital";
+  font-weight: normal;
+  font-style: italic;
+  src: url(UbuntuMono-RI.ttf);
+}
+
+/* keep this body statement last */
+
+body {
+  font-family: "Free Serif", serif;
+}
+
+
+/* remove numbering from nav ol */
+
+nav#toc ol {
+	list-style-type: none;
+}
+
+
+
+body {
+    margin-top: 2em;
+    margin-left: 6em;
+    margin-right: 15em;
+    margin-bottom: 2em;
+    font-family: arial, helvetica, sans-serif;
+    color: black;
+    background: white;
+    background-position: 97% 20px;
+    background-attachment: scroll;
+    background-repeat: no-repeat;
+    background-image: url(../img/idpflogo_web_125.jpg);
+    
+}
+
+/***************************************************************************/
+/*    dl      **************************************************************/
+/***************************************************************************/
+
+dl dt {
+    font-weight: bold;
+}
+
+dt span.term {
+    color: #005A9C;
+    font-weight: normal;
+}
+
+dd > dl {
+    margin-top: 1px;
+    padding-top: 0px;
+    margin-bottom: 1px;
+    padding-bottom: 0px;
+}
+
+/***************************************************************************/
+/*    ul      **************************************************************/
+/***************************************************************************/
+
+ul.conformance-list li {
+    list-style-type: none;
+}
+
+/***************************************************************************/
+/*  glosslist      *********************************************************/
+/***************************************************************************/
+
+*.glosslist dl {
+    margin-left: 2em
+}
+*.glosslist dl dt {
+    color: #005A9C
+}
+
+*.glossentry {
+    font-size: .9em;
+}
+
+/***************************************************************************/
+/*  misc block      ********************************************************/
+/***************************************************************************/
+
+p.informative, p.normative {
+    font-weight: bold;
+    font-size: 100%;
+    color: #8B0000;
+    padding: 5px 0px 10px;
+}
+
+.biblioentry:target {
+    border: 1px dashed rgb(200,200,225);
+}
+
+
+/***************************************************************************/
+/*  misc inline      *******************************************************/
+/***************************************************************************/
+
+code, span.property, a.codelink {
+    color: #660099;
+    font-family: monospace;
+    font-weight: bold
+}
+*.RFC2119 {
+    font-style: italic;
+    font-size: 80%;
+}
+
+*.todo, *.TODO {
+    background-color: yellow
+}
+
+/* vocab */
+*.subproplabel, *.subpropref {
+    font-style: italic;
+    font-size: 90%;
+}
+
+/***************************************************************************/
+/*  elem-synopsis       ****************************************************/
+/***************************************************************************/
+
+*.elem-synopsis {
+    border: 1px solid rgb(200,200,225);
+	border-top: 1px solid rgb(210,210,245);
+	border-left: 1px solid rgb(210,210,245);
+    background: rgb(240,240,255);
+    padding-left: 1em;
+	padding-right: 1em;
+	margin-bottom: 2em;
+	-moz-box-shadow: 5px 5px 5px #888;
+	-webkit-box-shadow: 5px 5px 5px #888;
+}
+
+/* special case for the code.option fields in elem-synopsis */
+code.option {
+    color: black;
+    font-family: arial, helvetica, sans-serif;
+    font-weight: normal
+}
+/* for the special case when an attlist occurs outside of an elem-synopsis*/
+div.section > div.elem-synopsis-attlist {
+    border: 2px solid rgb(200,200,225);
+    background: rgb(230,230,255);
+    padding: 1em
+}
+
+
+/***************************************************************************/
+/*   toc     ***************************************************************/
+/***************************************************************************/
+
+div.toc dl dt {
+    font-weight: normal
+}
+
+*.toc p, div.list-of-examples p {
+    font: small-caps 105% sans-serif;
+    color: #005A9C;
+}
+
+*.toc {
+    margin-top: 3em
+}
+
+nav#toc li {
+	list-style-type:none;
+}
+
+nav#toc > ol > li > span > a {
+    color: #0000ff
+}
+nav#toc > ol > li > ol > li > a {
+    color: #0033ff
+}
+nav#toc > ol > li > ol > li > ol > li > a {
+    font-size: .9em;
+    color: #0066ff;
+}
+nav#toc > ol > li > ol > li > ol > li > ol > li > a {
+    font-size: .9em;
+    color: #0099ff
+}
+nav#toc > ol > li > ol > li > ol > li > ol > li > ol > li > a {
+    font-size: .9em;
+    color: #0099ff
+}
+nav#toc > ol > li > ol > li > ol > li > ol > li > ol > li > ol > li  > a {
+    font-size: .9em;
+    color: #0099ff
+}
+
+nav#toc > ol > li > ol > li > ol > li > ol > li > ol > li > ol > li > ol > li > a {
+    font-size: .9em;
+    color: #0099ff
+}
+
+/***************************************************************************/
+/*   examples     **********************************************************/
+/***************************************************************************/
+
+div.informalexample {
+    margin: 1.5em auto 2em auto;
+}
+
+div.informalexample > p {
+    margin: 0px 20px;
+    font-style: italic;
+    font-size: .8em
+}
+
+div.informalexample > p code {
+    color: black;
+}
+
+pre {
+    font-family: "Courier New", Courier, Monospace;
+    color: #000;
+    background-color: #eee;
+    margin: 0;
+    border: 1px solid #ddd;
+    padding: 9px;
+    overflow: auto;    
+    white-space: pre-wrap;
+    white-space: -moz-pre-wrap !important;
+    white-space: -pre-wrap;
+    white-space: -o-pre-wrap;
+    word-wrap: break-word;
+
+}
+
+pre.synopsis, p.syntax {
+    background-color:rgb(253,253,253);
+    border: 1px solid rgb(220,220,220);
+	border-left: 1px solid rgb(230,230,230);
+	border-top: 1px solid rgb(230,230,230);
+	margin-bottom: 1em;
+	-moz-box-shadow: 5px 5px 5px #888;
+	-webkit-box-shadow: 5px 5px 5px #888;
+	-box-shadow: 5px 5px 5px #888;
+}
+
+p.syntax {
+    font-family: courier, fixed, monospace;
+    padding: 9px;
+}
+
+/***************************************************************************/
+/*   note, caution     *****************************************************/
+/***************************************************************************/
+
+.caution .note {
+    font-style : italic;
+    font-size : .9em;
+}
+
+div.note, div.caution {
+	margin: 2em 1em;
+	border: solid gray 1px;
+	background-color: rgb(255,255,224);
+	padding: .5em
+}
+
+ 
+div.caution {
+    background-color: rgb(255,235,205)
+}
+
+div.note > *, div.caution > * {
+	/* margin: .25em 0em;
+	padding: 0em; */
+}
+
+div.note > h2, div.note > h3, div.note > h4, div.note > h5,
+div.caution > h2, div.caution > h3, div.caution > h4, div.caution > h5 {
+	font-size: 1em;
+	font-style: italic;
+	font-variant: small-caps;
+	float: left;
+	padding: .18em .6em .18em .5em;	
+	margin: -1em -0.5em -0.5em auto;
+	width: auto; 
+	border: solid 1px; 
+	background: white; 
+}
+
+/***************************************************************************/
+/*   headings   ************************************************************/
+/***************************************************************************/
+
+h1, h2, h3, h4, h5, h6 {
+    text-align: left;
+    color: #005A9C;
+}
+h1 {
+    font: 170% sans-serif;
+    padding-bottom: 1em;
+}
+h2 {
+    font: 140% sans-serif;
+    padding-top: 2em;
+    border-bottom: 1px solid #005A9C
+}
+h3 {
+    font: 120% sans-serif;
+    padding-top: 1.5em;
+}
+h4 {
+    font: bold 110% sans-serif;
+    padding-top: 1.2em;
+}
+h5 {
+    font: italic 105% sans-serif
+}
+h6 {
+    font: italic 100% sans-serif
+}
+p.bridgehead {
+    font: 110% sans-serif;
+    padding-top: 0.7em;
+    color: #005A9C;
+}
+
+
+/***************************************************************************/
+/* links *******************************************************************/
+/***************************************************************************/
+
+a.glossterm {
+    color: black;
+    text-decoration: none;
+    border-bottom : 1px dotted rgb(210,210,210);
+}
+a.biblioref {
+    color: #0000FF;
+    text-decoration: none;
+}
+a.glossterm:hover, a.biblioref:hover {
+    text-decoration: underline;
+    background-color: white;
+    color: #0000FF;
+}
+
+/***************************************************************************/
+/* "link here" anchor  *****************************************************/
+/***************************************************************************/
+
+a.hidden-reveal {
+    color: #005A9C;
+}
+a.hidden-reveal:link {
+    text-decoration: none;
+    color: #005A9C;
+}
+a.hidden-reveal:visited {
+    text-decoration: none;
+    color: #005A9C;
+}
+a.hidden-reveal:hover {
+    text-decoration: underline;
+    background-color: #005A9C;
+    color: #FFFFFF;
+}
+a.hidden-reveal:active {
+    text-decoration: none;
+    color: #005A9C;
+}
+
+/***************************************************************************/
+/*  frontmatter     ********************************************************/
+/***************************************************************************/
+
+*.releaseinfo {
+    font-size: 140%;
+    color: #005A9C;
+    margin-right: 0.4em
+}
+*.pubdate {
+    font-size: 140%;
+    color: #005A9C
+}
+*.legalnotice {
+    font-size: 90%
+}
+dl.printhistory {
+    margin-top: 2em;
+    margin-bottom: 2em
+}
+dl.printhistory dt {
+    font: small-caps 105% sans-serif;
+    color: #005A9C;
+    margin-top: 0.4em;
+    margin-bottom: 0.4em
+}
+div.authorgroup p.editor {
+    margin-left: 2em;
+    font-size: 90%
+}
+
+/***************************************************************************/
+/*  table      *************************************************************/
+/***************************************************************************/
+
+table {
+    border: 1px solid #005A9C;
+    border-spacing: 0px;
+    padding: 1em;
+    margin-top: 1.5em;
+    margin-bottom: 2em;    
+    -moz-box-shadow: 2px 2px 2px rgb(240,240,240);
+	-webkit-box-shadow: 2px 2px 2px rgb(190,190,190);
+	-box-shadow: 2px 2px 2px rgb(190,190,190);
+}
+th {
+    border: 1px solid #005A9C;
+    font-weight: bold;
+    padding: 0.5em;
+    font-weight: bold;
+    color: #005A9C;
+    font-size: 90%
+}
+td {
+    border: 1px solid #005A9C;
+    padding: 0.5em;
+    text-align: left
+}
+td *, td > * {
+    text-align: left;
+}
+table, tbody {
+    padding: 0;
+}
+
+caption {
+    text-align: left;
+    font-size: 90%
+}
+/* the xsl renders db:simplelist as single-column tables */
+table.simplelist, table.simplelist th, table.simplelist td, table.simplelist tr {
+    border-style: none;
+    -moz-box-shadow: none;
+	-webkit-box-shadow: none;
+	-box-shadow: none;
+}
+
+/* ensure confomity of width for property tables */
+div.informaltable > table {
+    border-spacing: 0px;
+    border: 1px solid rgb(210,210,225);
+    font-size: 1em;
+    width: 100%
+}
+
+div.informaltable > table td, div.informaltable > table th {
+  border: none;
+}
+
+div.informaltable > table td.rdfa-property {
+    padding: 3px;
+    text-indent: 15px;
+    color: rgb(0,90,156);
+    background-color: rgb(240,240,255);
+    border-bottom: 1px solid rgb(210,210,225);
+}
+td.rdfa-property > code {
+    color: rgb(0,50,116);
+    font-weight: bold;
+    font-size: 1.1em
+}
+div.informaltable > table td.rdfa-property-header {
+    width: 150px;
+    text-align: center;
+    padding: 3px;
+    border-right: 1px solid rgb(210,210,225);
+    color: rgb(0,90,156);
+    background-color: rgb(240,240,255);
+}
+td.rdfa-property-desc {
+    padding: 3px
+}
+
+td.rdfa-cardinality > p {
+	padding: 0em;
+	margin: 0em
+}
+
+/* the core media types table */
+table#tbl-core-media-types > thead > tr > th,
+table#tbl-epubReadingSystem-properties > thead > tr > th,
+table#tbl-epubReadingSystem-features > thead > tr > th {
+    background-color: rgb(240,240,255);
+    text-align: left;
+    white-space:nowrap;
+}
+
+table#tbl-core-media-types > tbody > tr > th {    
+    text-align: left;
+    font-weight: normal;
+    font-style: italic;
+    padding: 3px;
+}
+
+table#tbl-core-media-types td, table#tbl-core-media-types th, table#tbl-core-media-types tr {
+    border-color: #005A9C;
+    margin: 0em;
+}
+
+table#tbl-core-media-types td code, table#tbl-core-media-types td a {
+    white-space:nowrap;
+}
+
+table.productionset, table.productionset td {
+    border : none;
+    background-color : #EEE;
+}
+
+td[headers="tbl-cmt-appl"] {
+    font-size: .9em;
+}
+
+/* ns prefix table in contentdocs */
+table#tbl-nspfx {
+    border:none;
+    border-spacing: 0px;
+    margin-left: 1em;
+}
+
+span.italic {
+    font-style: italic;
+}
+
+span.link-marker {
+    float: left;
+}
+
+/* display prop examples as block */
+
+code.prop-example {
+   display: block;
+}
+
+/* participant listings */
+ul.personlist {
+    list-style-type: none;
+    padding-left: 1em;
+    margin-bottom: 2em;
+}
+
+*.personlist span.affiliation {
+    color: rgb(75,75,75);
+}
+
+*.personlist span.wg-role {
+    font-style: italic;
+}
+
+/*
+span.surname {
+    text-transform: uppercase;
+}
+*/
+
+table.productionset tbody tr {
+    border: none;
+}
+
+table.productionset tbody tr td {
+    border: none;
+    border-bottom: 1px solid #CCC;
+}
+
+table.productionset tbody tr td a {
+    text-decoration: none;
+    border-bottom: 1px dotted #0000ff;
+}
+
+table.productionset tbody tr td a:hover {
+    text-decoration: underline;
+}
+
+table.productionset tbody tr td a:visited,
+table.productionset tbody tr td a:active,
+table.productionset tbody tr td a:hover {
+    color: #0000ff;
+}
+
+
+p.diff, p.errata {
+	font-size: 0.9em;
+	font-style: italic
+}
+
+code {
+  font-style: normal;  
+}
+
+div.informalexample > p code {
+    font-size: 1.2em;
+}
+
+/* vocab experimental term labels */
+strong.experimental {
+	color: rgb(255,0,0)
+}
+
+h1.ja-jp, h2.ja-jp, h3.ja-jp, p.ja-jp, dt.ja-jp, dd.ja-jp {display: none;}
+
+
+/*-------------------------------------------------------------------------------
+  縦組時のスタイルを記述します。
+  -epub-writing-mode、font-family、インデントの部分が中心です。
+ ------------------------------------------------------------------------------*/
+
+
+/*-----------------------------------------------------------------------------
+  [タイプセレクタ]
+  bodyへのwriting-mode指定、基本となるfont-familyを指定
+ ----------------------------------------------------------------------------*/
+/*body*/
+body {
+  -epub-writing-mode:vertical-rl;
+  -webkit-writing-mode:vertical-rl;
+  font-family:"@Hiragino Mincho ProN","@ヒラギノ明朝 Pro W3","@IPAexMincho","@IPAex明朝","@MS Mincho","@MS 明朝","ヒラギノ明朝 Pro W3","Hiragino Mincho ProN","IPAexMincho","IPAex明朝",serif;
+  /*本文フォントに明朝体指定する場合には、この順番を推奨*/
+}
+
+/* 見出し */
+h1,h2,h3,h4,h5,h6 {
+  /*縦組時の見出しの書体指定*/
+  font-family:"@HiraKakuProN-W3","@ヒラギノ角ゴ Pro W3","@MS Gothic","@MS ゴシック","HiraKakuProN-W3","ヒラギノ角ゴ Pro W3",sans-serif;
+  /*縦組時の見出しの前後にアキを入れる場合の指定。アキを入れない場合には、この下の2行は削除*/
+  margin-right:1em;
+  margin-left:1em;
+}
+
+/*-----------------------------------------------------------------------------
+  [クラスセレクタ]
+  クラス名や値の設定は任意ですが、使用するプロパティは可能な限り合わせてください
+ ----------------------------------------------------------------------------*/
+/* body */
+body.title {
+  -epub-writing-mode:vertical-rl;
+  -webkit-writing-mode:vertical-rl;
+}
+body.tocpage {
+  -epub-writing-mode:vertical-rl;
+  -webkit-writing-mode:vertical-rl;
+}
+body.chapter_page {
+  -epub-writing-mode:vertical-rl;
+  -webkit-writing-mode:vertical-rl;
+}
+body.body_text {
+  -epub-writing-mode:vertical-rl;
+  -webkit-writing-mode:vertical-rl;
+}
+body.sectional_ttl{
+  -epub-writing-mode:vertical-rl;
+  -webkit-writing-mode:vertical-rl;
+}
+
+/* 見出し */
+h1.title {
+  font-family: "@Hiragino Mincho ProN","@ヒラギノ明朝 Pro W3","@IPAexMincho","@IPAex明朝","@MS Mincho","@MS 明朝","ヒラギノ明朝 Pro W3","Hiragino Mincho ProN","IPAexMincho","IPAex明朝",serif;
+}
+h2.chapter{
+  font-family: "@Hiragino Mincho ProN","@ヒラギノ明朝 Pro W3","@IPAexMincho","@IPAex明朝","@MS Mincho","@MS 明朝","ヒラギノ明朝 Pro W3","Hiragino Mincho ProN","IPAexMincho","IPAex明朝",serif;
+  padding-top:2em;
+  padding-right:1.75em;
+}
+h2.section {
+  font-family: "@HiraKakuProN-W3","@ヒラギノ角ゴ Pro W3","@MS Gothic","@MS ゴシック","HiraKakuProN-W3","ヒラギノ角ゴ Pro W3",sans-serif;
+  margin-right:1.75em;
+  padding-top:2em;
+}
+h3.subchapter {
+  padding-top:3em;
+  padding-right:1em;
+  padding-left:1em;
+  text-indent:-1em;
+}
+h3.sub_section {
+  padding-top:1em;
+  padding-right:1em;
+  padding-left:1em;
+}
+h2.toc {
+  font-family: "@HiraKakuProN-W3","@ヒラギノ角ゴ Pro W3","@MS Gothic","@MS ゴシック","HiraKakuProN-W3","ヒラギノ角ゴ Pro W3",sans-serif;
+  letter-spacing: 1em;
+  padding-top:2em;
+}
+h4.section {
+  padding-top:3em;
+}
+
+/* 文字装飾など */
+.underline {
+    text-decoration:overline; /*縦書き時にはoverline、横書き時にはunderline*/
+}
+
+p.author_top_title {
+  font-family: "@Hiragino Mincho ProN","@ヒラギノ明朝 Pro W3","@IPAexMincho","@IPAex明朝","@MS Mincho","@MS 明朝","ヒラギノ明朝 Pro W3","Hiragino Mincho ProN","IPAexMincho","IPAex明朝",serif;
+  text-align: right;
+}
+.gothic {
+  font-family: "@HiraKakuProN-W3","@ヒラギノ角ゴ Pro W3","@MS Gothic","@MS ゴシック","HiraKakuProN-W3","ヒラギノ角ゴ Pro W3",sans-serif;
+}
+.go_small_red {
+  font-family: "@HiraKakuProN-W3","@ヒラギノ角ゴ Pro W3","@MS Gothic","@MS ゴシック","HiraKakuProN-W3","ヒラギノ角ゴ Pro W3",sans-serif;
+  font-size:90%;
+  color:#ff0000;
+}
+
+/*字下げ、インデント*/
+.start_1em {
+  padding-top:1em;
+  margin-right:1em;
+  margin-left: 1em;
+}
+.start_2em {
+  padding-top:2em;
+/*  margin-right:1em;
+  margin-left: 1em;*/
+}
+.start_3em_nopad {
+  padding-top:4em;
+}
+.start_4em {
+  padding-top:4em;
+}
+.indent_m1em {
+  padding-top:1em;
+  text-indent:-1em;
+}
+.indent_m2em {
+  padding-top:2em;
+  text-indent:-2em;
+}
+.start_1em_indent_2em {
+  padding-top:3em;
+  text-indent:-2em;
+  margin-right:1em;
+  margin-left: 1em;
+}
+.start_2em_indent_2em {
+  padding-top:4em;
+  text-indent:-2em;
+  margin-right:1em;
+  margin-left: 1em;
+}
+
+
+.level1{
+  padding-top:0;
+}
+.level2 {
+  padding-top:1em;
+}
+
+
+/*-------------------------------------------------------------------------------
+  横組時のスタイルを記述します。
+  -epub-writing-mode、font-family、インデントの部分が中心です。
+ ------------------------------------------------------------------------------*/
+
+
+/*-----------------------------------------------------------------------------
+  [タイプセレクタ]
+  bodyへのwriting-mode指定、基本となるfont-familyを指定
+ ----------------------------------------------------------------------------*/
+/*body*/
+body {
+  -epub-writing-mode:horizontal-tb;
+  -webkit-writing-mode:horizontal-tb;
+  font-family: "Hiragino Mincho ProN","ヒラギノ明朝 Pro W3","IPAexMincho","IPAex明朝","MS Mincho","MS 明朝",serif;
+  /*本文フォントに明朝体指定する場合には、この順番を推奨*/
+}
+
+/* 見出し */
+h1,h2,h3,h4,h5,h6 {
+  /*横組時の見出しの書体指定*/
+  font-family: "HiraKakuProN-W3","ヒラギノ角ゴ Pro W3","MS Gothic","MS ゴシック",sans-serif;
+  /*横組時の見出しの前後にアキを入れる場合の指定。アキを入れない場合には、この下の2行は削除*/
+  margin-bottom:1em;
+  margin-bottom:1em;
+}
+
+/*-----------------------------------------------------------------------------
+  [クラスセレクタ]
+  クラス名や値の設定は任意ですが、使用するプロパティは可能な限り合わせてください
+ ----------------------------------------------------------------------------*/
+
+/* body */
+body.title {
+  -epub-writing-mode:horizontal-tb;
+  -webkit-writing-mode:horizontal-tb;
+}
+body.tocpage {
+  -epub-writing-mode:horizontal-tb;
+  -webkit-writing-mode:horizontal-tb;
+}
+body.chapter_page {
+  -epub-writing-mode:horizontal-tb;
+  -webkit-writing-mode:horizontal-tb;
+}
+body.body_text {
+  -epub-writing-mode:horizontal-tb;
+  -webkit-writing-mode:horizontal-tb;
+}
+body.sectional_ttl{
+  -epub-writing-mode:horizontal-tb;
+  -webkit-writing-mode:horizontal-tb;
+}
+
+/* 見出し */
+h1.title {
+  font-family: "Hiragino Mincho ProN","ヒラギノ明朝 Pro W3","IPAexMincho","IPAex明朝","MS Mincho","MS 明朝",serif;
+}
+h2.chapter{
+  font-family: "Hiragino Mincho ProN","ヒラギノ明朝 Pro W3","IPAexMincho","IPAex明朝","MS Mincho","MS 明朝",serif;
+  padding-left:2em;
+  padding-right:1.75em;
+}
+h2.section {
+  font-family:"HiraKakuProN-W3","ヒラギノ角ゴ Pro W3","MS Gothic","MS ゴシック",sans-serif;
+  margin-top:1.75em;
+  padding-left:2em;
+}
+h3.subchapter {
+  padding-left:3em;
+  padding-right:1em;
+  padding-left:1em;
+  text-indent:-1em;
+}
+h3.sub_section {
+  padding-left:1em;
+  padding-right:1em;
+  padding-left:1em;
+}
+h2.toc {
+  font-family:"HiraKakuProN-W3","ヒラギノ角ゴ Pro W3","MS Gothic","MS ゴシック",sans-serif;
+  letter-spacing: 1em;
+  padding-left:2em;
+}
+h4.section {
+  padding-left:3em;
+}
+
+/* 文字装飾など */
+.underline {
+    text-decoration:underline; /*縦書き時にはoverline、横書き時にはunderline*/
+}
+
+p.author_top_title {
+  font-family: "Hiragino Mincho ProN","ヒラギノ明朝 Pro W3","IPAexMincho","IPAex明朝","MS Mincho","MS 明朝",serif;
+  text-align: right;
+}
+.gothic {
+  font-family:"HiraKakuProN-W3","ヒラギノ角ゴ Pro W3","MS Gothic","MS ゴシック",sans-serif;
+}
+.go_small_red {
+  font-family:"HiraKakuProN-W3","ヒラギノ角ゴ Pro W3","MS Gothic","MS ゴシック",sans-serif;
+  font-size:90%;
+  color:#ff0000;
+}
+
+/*字下げ、インデント*/
+.start_1em {
+  padding-left:1em;
+  margin-top:1em;
+  margin-bottom: 1em;
+}
+.start_2em {
+  padding-left:2em;
+/*  margin-top:1em;
+  margin-bottom: 1em;*/
+}
+.start_3em_nopad {
+  padding-left:4em;
+}
+.start_4em {
+  padding-left:4em;
+}
+.indent_m1em {
+  padding-left:1em;
+  text-indent:-1em;
+}
+.indent_m2em {
+  padding-left:2em;
+  text-indent:-2em;
+}
+.start_1em_indent_2em {
+  padding-left:3em;
+  text-indent:-2em;
+  margin-top:1em;
+  margin-bottom: 1em;
+}
+.start_2em_indent_2em {
+  padding-left:4em;
+  text-indent:-2em;
+  margin-top:1em;
+  margin-bottom: 1em;
+}
+
+
+.level1{
+  padding-left:0;
+}
+.level2 {
+  padding-left:1em;
+}
+
+
+
+ at page {
+   margin:8%;
+   /*ページ割り付けされた場合(paged media)の余白:数値の変更はOK。
+     margin-top, margin-bottom, margin-left, margin-rightを個別指定してもよい。
+     デバイスサイズが多岐にわたることを考慮すると、pxでの指定は推奨しない。
+     電子書籍としては基本的にページ割り付けされることを考慮すると、@pageで行なうべき
+     もしターゲットがcontinuousメディア(スクロールを前提とした表示)なら、bodyにmarginを指定する。
+   */
+}
+
+img.pagefit {
+   display:block;
+   margin: auto;
+   width: auto;
+   height: auto;
+   max-width:100%;
+   max-height:100%;
+}
+
+img.inline {  /*インライン画像の場合も、画面からはみださないように*/
+   display:inline;
+   width:auto;
+   height:auto;
+   max-width:100%;
+   max-height:100%;
+}
+img.w1 {
+   display:inline;
+   width:1em;
+   height:auto;
+}
+img.w2 {
+   display:inline;
+   width:2em;
+   height:auto;
+}
+
+/*-----------------------------------------------------------------------------
+  [タイプセレクタ]
+  全体の基本となるスタイル
+  ここで書かれたものはクラスセレクタで上書きされます。
+ ----------------------------------------------------------------------------*/
+/*body*/
+body {
+   line-height: 1.75; /*行送り*/
+   letter-spacing: 0px; /*字間*/
+   text-align: justify;
+}
+
+/* 見出し */
+h1,h2,h3,h4,h5,h6 {
+   font-size: 110%;
+   font-weight: bold;
+   /* 書体の指定は縦/横用のスタイルで */
+}
+
+/* リンク */
+a {
+   text-decoration: none; /*リンクに下線をつけたく無い場合の設定*/
+}
+a:link {
+   color:#00008b;
+}
+a:visited {
+   color:#00008b;
+}
+
+/*-----------------------------------------------------------------------------
+  [クラスセレクタ]
+ ----------------------------------------------------------------------------*/
+/* body */
+body.cover { /*表紙*/
+   -epub-writing-mode:horizontal-tb;
+   -webkit-writing-mode:horizontal-tb;
+   margin:0;
+}
+body.imgpage {
+   -epub-writing-mode:horizontal-tb;
+   -webkit-writing-mode:horizontal-tb;
+   text-align:center;
+   margin:0;
+}
+body.imgpage80 {
+   -epub-writing-mode:horizontal-tb;
+   -webkit-writing-mode:horizontal-tb;
+   background-color: #ffffff;
+   text-align:center;
+   margin-top:5%;
+}
+
+/*見出し*/
+h1.title {
+   font-size: 120%;
+   font-weight: bold;
+}
+h2.chapter{
+   font-size: 120%;
+   font-weight: bold;
+}
+h3.subchapter {
+   font-size: 110%;
+   font-weight: bold;
+}
+h2.toc {
+   font-size: 110%;
+   font-weight: bold;
+}
+h4.section {
+   font-size: 100%;
+   font-weight: bold;
+}
+h2.invisible {
+   display:none;
+}
+
+/* 文字装飾など */
+.desc {
+   color:#008000;
+}
+.note {
+   font-size:90%;   
+}
+.chu {
+   font-size:90%;   
+}
+.kana {
+   font-size:90%;   
+}
+.bold {
+   font-weight: bold;
+}
+.small {
+   font-size:90%;
+}
+.size70per {
+   font-size:70%;
+}
+.size80per {
+   font-size:80%;
+}
+.size90per {
+   font-size:90%;
+}
+.size110per {
+   font-size:110%;
+}
+.size120per {
+   font-size:120%;
+}
+.size160per {
+   font-size:160%;
+}
+.title {
+   font-size:120%;
+   font-weight:bold;
+}
+.author_top_title {
+   font-size:110%;
+}
+/*欧文のスタイル*/
+.serif_italic {
+   font-family: serif;
+   font-style:italic;
+}
+.serif_bold {
+   font-family: serif;
+   font-weight: bold;
+}
+.serif_italic_bold {
+   font-family: serif;
+   font-style:italic;
+   font-weight: bold;
+}
+.sansserif_italic {
+   font-family: sans-serif;
+   font-style:italic;
+}
+.sansserif_bold {
+   font-family: sans-serif;
+   font-weight: bold;
+}
+.sansserif_italic_bold {
+   font-family: sans-serif;
+   font-style:italic;
+   font-weight: bold;
+}
+
+/*上付き・下付き*/
+.sup {
+   font-size:50%;
+   vertical-align:super;
+   letter-spacing: -2px
+}
+.sub {
+   font-size:50%;
+   vertical-align:sub;
+   letter-spacing: -2px
+}
+
+
+/*
+ 共通スタイルシート
+ どんな書籍でも共通に使用できるクラス集です。
+ これは編集しないでご利用ください。
+*/
+
+/*------------------------------------------------
+スタイルのリセット
+-------------------------------------------------*/
+
+div, span, h1, h2, h3, h4, h5, h6, p, img, nav, section
+{
+  margin:0;
+  padding:0;
+  border:0;
+  outline:0;
+  font-size:100%;
+  vertical-align:baseline; 
+}
+
+body {
+  font-size:100%; 
+}
+
+/*リセットここまで*/
+
+/*------------------------------------------------
+ 各種共通クラス集
+-------------------------------------------------*/
+/*行揃え*/
+div.left {
+    text-align:left;
+}
+div.center {
+    text-align:center;
+}
+div.right {
+    text-align:right;
+}
+p.left {
+    text-align:left;
+}
+p.center {
+    text-align:center;
+}
+p.right {
+    text-align:right;
+}
+.clear {
+    clear:both;
+}
+
+/*画像の揃え*/
+img.left {
+    float:left;
+    padding-right:12px;
+    padding-left:12px;
+    padding-bottom:18px;
+    max-width:100%;
+    max-height:100%;
+}
+img.right {
+    float:right;
+    padding-right:12px;
+    padding-left:12px;
+    padding-top:18px;
+    max-width:100%;
+    max-height:100%;
+}
+
+/* 画像外字 */
+img.gaiji {
+   width: 1em;
+   height: 1em;
+   display:inline;
+}
+
+/*画像の回り込みの解除*/
+.clear {
+    clear:both;
+}
+
+/*縦中横*/
+.tcy {
+   -epub-text-combine:horizontal;
+   -webkit-text-combine:horizontal;
+}
+
+/*傍点*/
+.em_accent {
+    -epub-text-emphasis-style: filled sesame;
+    -webkit-text-emphasis-style: filled sesame;
+}
+.em_dot {
+    -epub-text-emphasis-style: filled double-circle;
+    -webkit-text-emphasis-style: filled double-circle;
+}
+.em_circle {
+    -epub-text-emphasis-style: open dot;
+    -webkit-text-emphasis-style: open dot;
+}
+.em_disc {
+    -epub-text-emphasis-style: filled dot;
+    -webkit-text-emphasis-style: filled dot;
+}
+
+/*文字装飾(共通に使用できるもの)*/
+.bold {
+    font-weight:bold;
+}
+
+/*色指定 X11 Colorsを16進にしてます */
+.aliceblue {
+    color:#f0f8ff;
+}
+.antiquewhite {
+    color:#faebd7;
+}
+.aqua {
+    color:#00ffff;
+}
+.aquamarine {
+    color:#7fffdf;
+}
+.azure {
+    color:#f0ffff;
+}
+.beige {
+    color:#f5f5dc;
+}
+.bisque {
+    color:#ffe4c4;
+}
+.black {
+    color:#000000;
+}
+.blanchedalmond {
+    color:#ffebcd;
+}
+.blue {
+    color:#0000ff;
+}
+.blueviolet {
+    color:#8a2be2;
+}
+.brown {
+    color:#a52a2a;
+}
+.burlywood {
+    color:#deb887;
+}
+.cadetblue {
+    color:#5f9ea0;
+}
+.chartreuse {
+    color:#7fff00;
+}
+.chocolate {
+    color:#d2691e;
+}
+.coral {
+    color:#ff7550;
+}
+.cornflowerblue {
+    color:#6495ed;
+}
+.cornsilk {
+    color:#fff8dc;
+}
+.crimson {
+    color:#dc143c;
+}
+.cyan {
+    color:#00ffff;
+}
+.darkblue {
+    color:#00008b;
+}
+.darkcyan {
+    color:#008b8b;
+}
+.darkgoldenrod {
+    color:#b8860b;
+}
+.darkgray {
+    color:#a9a9a9;
+}
+.darkgreen {
+    color:#006400;
+}
+.darkkhaki {
+    color:#bdb76b;
+}
+.darkmagenta {
+    color:#8b008b;
+}
+.darkolivegreen {
+    color:#556b2f;
+}
+.darkorange {
+    color:#ff8c00;
+}
+.darkorchid {
+    color:#9932cc;
+}
+.darkred {
+    color:#8b0000;
+}
+.darksalmon {
+    color:#e9967a;
+}
+.darkseagreen {
+    color:#8fbc8f;
+}
+.darkslateblue {
+    color:#483d8b;
+}
+.darkslategray {
+    color:#2f4f4f;
+}
+.darkturquoise {
+    color:#00ced1;
+}
+.darkviolet {
+    color:#9400d3;
+}
+.deeppink {
+    color:#ff1493;
+}
+.deepskyblue {
+    color:#00bfff;
+}
+.dimgray {
+    color:#696969;
+}
+.dodgerblue {
+    color:#1e90ff;
+}
+.firebrick {
+    color:#b22222;
+}
+.floralwhite {
+    color:#fffaf0;
+}
+.forestgreen {
+    color:#228b22;
+}
+.fuchsia {
+    color:#ff00ff;
+}
+.gainsboro {
+    color:#dcdcdc;
+}
+.ghostwhite {
+    color:#f8f8ff;
+}
+.gold {
+    color:#ffd700;
+}
+.goldenrod {
+    color:#daa520;
+}
+.gray {
+    color:#808080;
+}
+.green {
+    color:#008000;
+}
+.greenyellow {
+    color:#adff2f;
+}
+.honeydew {
+    color:#f0fff0;
+}
+.hotpink {
+    color:#ff69b4;
+}
+.indianred {
+    color:#cd5c5c;
+}
+.indigo {
+    color:#4b0082;
+}
+.ivory {
+    color:#fffff0;
+}
+.khaki {
+    color:#f0e68c;
+}
+.lavender {
+    color:#e6e6fa;
+}
+.lavenderblush {
+    color:#fff0f5;
+}
+.lawngreen {
+    color:#7cfc00;
+}
+.lemonchiffon {
+    color:#fffacd;
+}
+.lightblue {
+    color:#add8e6;
+}
+.lightcoral {
+    color:#f08080;
+}
+.lightcyan {
+    color:#e0ffff;
+}
+.lightgoldenrodyellow {
+    color:#fafad2;
+}
+.lightgreen {
+    color:#90ee90;
+}
+.lightgrey {
+    color:#d3d3d3;
+}
+.lightpink {
+    color:#ffb6c1;
+}
+.lightsalmon {
+    color:#ffa07a;
+}
+.lightseagreen {
+    color:#20b2aa;
+}
+.lightskyblue {
+    color:#87cefa;
+}
+.lightslategray {
+    color:#778899;
+}
+.lightsteelblue {
+    color:#b0c4de;
+}
+.lightyellow {
+    color:#ffffe0;
+}
+.lime {
+    color:#00ff00;
+}
+.limegreen {
+    color:#32cd32;
+}
+.linen {
+    color:#faf0e6;
+}
+.magenta {
+    color:#ff00ff;
+}
+.maroon {
+    color:#800000;
+}
+.mediumaquamarine {
+    color:#66cdaa;
+}
+.mediumblue {
+    color:#0000cd;
+}
+.mediumorchid {
+    color:#ba55d3;
+}
+.mediumpurple {
+    color:#9370db;
+}
+.mediumseagreen {
+    color:#3cb371;
+}
+.mediumslateblue {
+    color:#7b68ee;
+}
+.mediumspringgreen {
+    color:#00fa9a;
+}
+.mediumturquoise {
+    color:#48d1cc;
+}
+.mediumvioletred {
+    color:#c71585;
+}
+.midnightblue {
+    color:#191970;
+}
+.mintcream {
+    color:#f5fffa;
+}
+.mistyrose {
+    color:#ffe4e1;
+}
+.moccasin {
+    color:#ffe4b5;
+}
+.navajowhite {
+    color:#ffdead;
+}
+.navy {
+    color:#000080;
+}
+.oldlace {
+    color:#fdf5e6;
+}
+.olive {
+    color:#808000;
+}
+.olivedrab {
+    color:#6b8e23;
+}
+.orange {
+    color:#ffa500;
+}
+.orangered {
+    color:#ff4500;
+}
+.orchid {
+    color:#da70d6;
+}
+.palegoldenrod {
+    color:#eee8aa;
+}
+.palegreen {
+    color:#98fb98;
+}
+.paleturquoise {
+    color:#afeeee;
+}
+.palevioletred {
+    color:#db7093;
+}
+.papayawhip {
+    color:#ffefd5;
+}
+.peachpuff {
+    color:#ffdab9;
+}
+.peru {
+    color:#cd853f;
+}
+.pink {
+    color:#ffc0cb;
+}
+.plum {
+    color:#dda0dd;
+}
+.powderblue {
+    color:#b0e0e6;
+}
+.purple {
+    color:#800080;
+}
+.red {
+    color:#ff0000;
+}
+.rosybrown {
+    color:#bc8f8f;
+}
+.royalblue {
+    color:#4169e1;
+}
+.saddlebrown {
+    color:#8b4513;
+}
+.salmon {
+    color:#fa8072;
+}
+.sandybrown {
+    color:#f4a460;
+}
+.seagreen {
+    color:#2e8b57;
+}
+.seashell {
+    color:#fff5ee;
+}
+.sienna {
+    color:#a0522d;
+}
+.silver {
+    color:#c0c0c0;
+}
+.skyblue {
+    color:#87ceeb;
+}
+.slateblue {
+    color:#6a5acd;
+}
+.slategray {
+    color:#708090;
+}
+.snow {
+    color:#fffafa;
+}
+.springgreen {
+    color:#00ff7f;
+}
+.steelblue {
+    color:#4682b4;
+}
+.tan {
+    color:#d2b48c;
+}
+.teal {
+    color:#008080;
+}
+.thistle {
+    color:#d8bfd8;
+}
+.tomato {
+    color:#ff6347;
+}
+.turquoise {
+    color:#40e0d0;
+}
+.violet {
+    color:#ee82ee;
+}
+.wheat {
+    color:#f5deb3;
+}
+.white {
+    color:#ffffff;
+}
+.whitesmoke {
+    color:#f5f5f5;
+}
+.yellow {
+    color:#ffff00;
+}
+.yellowgreen {
+    color:#9acd32;
+}
+
+ at font-face {
+font-family: 'DejaVu Sans';
+font-style: normal;
+font-weight: normal;
+src:url(Fonts/DejaVuSans.ttf);
+}
+
+ at font-face {
+font-family: 'DejaVu Sans';
+font-style: italic;
+font-weight: normal;
+src:url(Fonts/DejaVuSans-Oblique.ttf);
+}
+
+ at font-face {
+font-family: 'DejaVu Sans';
+font-style: normal;
+font-weight: bold;
+src:url(Fonts/DejaVuSans-Bold.ttf);
+}
+
+ at font-face {
+font-family: 'DejaVu Sans';
+font-style: italic;
+font-weight: bold;
+src:url(Fonts/DejaVuSans-BoldOblique.ttf);
+}
+
+ at font-face {
+font-family: 'Time New Romans';
+font-style: normal;
+font-weight: normal;
+src:url(Fonts/pdheb.ttf);
+}
+
+body {font-size: 1em;
+		padding-left: 0pt;}
+
+div {font-size: 1em;
+		padding: 0px 0px 0px 0px;
+		margin: 0.1 0.1 0.1 0.1;}
+
+p {font-size: 1em;
+	text-align:right;
+	direction: rtl;
+	writing-mode: rl-tb;
+	margin: 8px;}
+
+span {font-size: 1em;
+	text-align:right;
+	direction: rtl;
+	writing-mode: rl-tb;}
+	
+/*Used for book title*/
+h1 { font-size: 230%;
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	text-align: center;
+	direction: rtl;
+	writing-mode: rl-tb;
+	font-weight: normal;
+}
+/*Used for book authors*/
+h2 { font-size: 180%;
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	text-align: center;
+	direction: rtl;
+	writing-mode: rl-tb;
+	font-weight: normal;
+}
+/*Used for chapters*/
+h3 {	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	font-size: 130%;
+	font-weight: normal;
+    text-align: center;
+	direction: rtl;
+	writing-mode: rl-tb;
+}
+
+/*Used for larger centered text, like info and copyright*/
+h4 { font-size: 105%;
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	text-align: center;
+	direction: rtl;
+	writing-mode: rl-tb;
+	font-weight: normal;
+}
+/*Used for regular centered text, or centered images*/
+h5 { font-size: 100%;
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	text-align: center;
+	direction: rtl;
+	writing-mode: rl-tb;
+	font-weight: normal;
+}		
+
+.initial {
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	font-size: 478%;
+}
+
+.regular {
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	font-size: 100%;
+	writing-mode: rl-tb;
+	direction:rtl;
+}
+
+.regularbold {
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	font-size: 100%;
+	font-weight:bold;
+}
+
+.regularitalic {
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	font-size: 102%;
+	font-style:italic; 
+}
+
+.regularunderline {
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	font-size: 102%;
+	text-decoration: underline;
+}
+
+.regulars {
+	font-family: 'Time New Romans';
+	font-size: 100%;
+}
+
+.regularbolditalic {
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	font-size: 102%;
+	font-style:italic; 
+	font-weight:bold;
+}
+
+.smaller {
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	font-size: 92%;
+}
+
+.smallerbold {
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	font-size: 92%;
+	font-weight:bold;
+}
+
+.smalleritalic {
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	font-size: 94%;
+	font-style:italic; 
+}
+
+.larger {
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	font-size: 108%;
+}
+
+.largerbold {
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	font-size: 108%;
+	font-weight:bold;
+}
+
+.largeritalic {
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	font-size: 110%;
+	font-style:italic; 
+}
+
+.largerbolditalic {
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	font-size: 110%;
+	font-style:italic; 
+	font-weight:bold;
+}
+
+.larger118 {
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	font-size: 118%;
+}
+
+.larger118italic {
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	font-size: 118%;
+	font-style:italic;
+}
+
+.larger118bold {
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	font-size: 118%;
+	font-weight:bold;
+}
+
+.larger118bolditalic {
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	font-size: 120%;
+	font-weight:bold;
+	font-style:italic;
+}
+
+.larger138 {
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	font-size: 138%;
+}
+
+.larger148 {
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	font-size: 148%;
+}
+
+.larger148italic {
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	font-size: 148%;
+	font-style:italic;
+}
+
+.larger148bold {
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	font-size: 148%;
+	font-weight:bold;
+}
+
+.smaller72 {
+    font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+    font-size: 72%;
+}
+
+.smaller72bold {
+    font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+    font-size: 72%;
+    font-weight:bold;
+}
+
+.smaller72italic {
+    font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+    font-size: 74%;
+    font-style:italic;
+}
+
+.footnotes {
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	font-size: 100%;
+}
+
+.footnote {
+	font-family: 'Times New Roman', Times, serif, 'sans serif', 'DejaVu Sans';
+	font-size: 95%;
+}
+
+
+
+ol {
+list-style-type: none;
+}
+a {
+text-decoration: none;
+}
+a:hover {
+text-decoration: underline;
+}
+body
+{
+    font-size: 14pt;
+    font-family: "KozMinPr6N-Medium", "HiraMinProN-W3", "MS 明朝", serif, sans-serif;
+    margin: auto 1em;
+    padding: 1em 0;
+    max-height: 28em;
+    background-color: #fff4e7;
+}
+
+
+ol {
+list-style-type: none;
+}
+a {
+text-decoration: none;
+}
+a:hover {
+text-decoration: underline;
+}
+body
+{
+    font-size: 14pt;
+    font-family: "KozMinPr6N-Medium", "HiraMinProN-W3", "MS 明朝", serif, sans-serif;
+    margin: auto 1em;
+    padding: 1em 0;
+    max-height: 28em;
+    background-color: #fff4e7;
+}
+
+/*
+ | This file is part of the DITA Open Toolkit project hosted on 
+ | Sourceforge.net. See the accompanying license.txt file for 
+ | applicable licenses.
+*/
+
+/*
+ | (c) Copyright IBM Corp. 2004, 2005 All Rights Reserved.
+ */
+ 
+.unresolved { background-color: skyblue; }
+.noTemplate { background-color: yellow; }
+
+.base { background-color: #ffffff; }
+
+/* Add space for top level topics */
+.nested0 { margin-top : 1em;}
+
+/* div with class=p is used for paragraphs that contain blocks, to keep the XHTML valid */
+.p {margin-top: 1em}
+
+/* Default of italics to set apart figure captions */
+.figcap { font-style: italic }
+.figdesc { font-style: normal }
+
+/* Use @frame to create frames on figures */
+.figborder { border-style: solid; padding-left : 3px; border-width : 2px; padding-right : 3px; margin-top: 1em; border-color : Silver;}
+.figsides { border-left : 2px solid; padding-left : 3px; border-right : 2px solid; padding-right : 3px; margin-top: 1em; border-color : Silver;}
+.figtop { border-top : 2px solid; margin-top: 1em; border-color : Silver;}
+.figbottom { border-bottom : 2px solid; border-color : Silver;}
+.figtopbot { border-top : 2px solid; border-bottom : 2px solid; margin-top: 1em; border-color : Silver;}
+
+/* Most link groups are created with <div>. Ensure they have space before and after. */
+.ullinks { list-style-type: none }
+.ulchildlink { margin-top: 1em; margin-bottom: 1em }
+.olchildlink { margin-top: 1em; margin-bottom: 1em }
+.linklist { margin-bottom: 1em }
+.linklistwithchild { margin-left: 1.5em; margin-bottom: 1em  }
+.sublinklist { margin-left: 1.5em; margin-bottom: 1em  }
+.relconcepts { margin-top: 1em; margin-bottom: 1em }
+.reltasks { margin-top: 1em; margin-bottom: 1em }
+.relref { margin-top: 1em; margin-bottom: 1em }
+.relinfo { margin-top: 1em; margin-bottom: 1em }
+.breadcrumb { font-size : smaller; margin-bottom: 1em }
+dt.prereq { margin-left : 20px;}
+
+/* Set heading sizes, getting smaller for deeper nesting */
+.topictitle1 { margin-top: 0pc; margin-bottom: .1em; font-size: 1.34em; }
+.topictitle2 { margin-top: 1pc; margin-bottom: .45em; font-size: 1.17em; }
+.topictitle3 { margin-top: 1pc; margin-bottom: .17em; font-size: 1.17em; font-weight: bold; }
+.topictitle4 { margin-top: .83em; font-size: 1.17em; font-weight: bold; }
+.topictitle5 { font-size: 1.17em; font-weight: bold; }
+.topictitle6 { font-size: 1.17em; font-style: italic; }
+.sectiontitle { margin-top: 1em; margin-bottom: 0em; color: black; font-size: 1.17em; font-weight: bold;}
+.section { margin-top: 1em; margin-bottom: 1em }
+.example { margin-top: 1em; margin-bottom: 1em }
+div.tasklabel { margin-top: 1em; margin-bottom: 1em; }
+h2.tasklabel, h3.tasklabel, h4.tasklabel, h5.tasklabel, h6.tasklabel { font-size: 100%; }
+
+/* All note formats have the same default presentation */
+.note { margin-top: 1em; margin-bottom : 1em;}
+.notetitle { font-weight: bold }
+.notelisttitle { font-weight: bold }
+.tip { margin-top: 1em; margin-bottom : 1em;}
+.tiptitle { font-weight: bold }
+.fastpath { margin-top: 1em; margin-bottom : 1em;}
+.fastpathtitle { font-weight: bold }
+.important { margin-top: 1em; margin-bottom : 1em;}
+.importanttitle { font-weight: bold }
+.remember { margin-top: 1em; margin-bottom : 1em;}
+.remembertitle { font-weight: bold }
+.restriction { margin-top: 1em; margin-bottom : 1em;}
+.restrictiontitle { font-weight: bold }
+.attention { margin-top: 1em; margin-bottom : 1em;}
+.attentiontitle { font-weight: bold }
+.dangertitle { font-weight: bold }
+.danger { margin-top: 1em; margin-bottom : 1em;}
+.cautiontitle { font-weight: bold }
+.caution { font-weight: bold; margin-bottom : 1em; }
+.warning { margin-top: 1em; margin-bottom : 1em;}
+.warningtitle { font-weight: bold }
+
+/* Simple lists do not get a bullet */
+ul.simple { list-style-type: none }
+
+/* Used on the first column of a table, when rowheader="firstcol" is used */
+.firstcol { font-weight : bold;}
+
+/* Various basic phrase styles */
+.bold { font-weight: bold; }
+.boldItalic { font-weight: bold; font-style: italic; }
+.italic { font-style: italic; }
+.underlined { text-decoration: underline; }
+.uicontrol { font-weight: bold; }
+.parmname { font-weight: bold; }
+.kwd { font-weight: bold; }
+.defkwd { font-weight: bold; text-decoration: underline; }
+.var { font-style : italic;}
+.shortcut { text-decoration: underline; }
+
+/* Default of bold for definition list terms */
+.dlterm { font-weight: bold; }
+
+/* Use CSS to expand lists with @compact="no" */
+.dltermexpand { font-weight: bold; margin-top: 1em; }
+*[compact="yes"]>li { margin-top: 0em;}
+*[compact="no"]>li { margin-top: .53em;}	
+.liexpand { margin-top: 1em; margin-bottom: 1em }
+.sliexpand { margin-top: 1em; margin-bottom: 1em }
+.dlexpand { margin-top: 1em; margin-bottom: 1em }
+.ddexpand { margin-top: 1em; margin-bottom: 1em }
+.stepexpand { margin-top: 1em; margin-bottom: 1em }
+.substepexpand { margin-top: 1em; margin-bottom: 1em }
+
+/* Align images based on @align on topic/image */
+div.imageleft { text-align: left }
+div.imagecenter { text-align: center }
+div.imageright { text-align: right }
+div.imagejustify { text-align: justify }
+
+/* The cell border can be turned on with
+   {border-right:solid}
+   This value creates a very thick border in Firefox (does not match other tables)
+
+   Firefox works with 
+   {border-right:solid 1pt}
+   but this causes a barely visible line in IE */
+.cellrowborder { border-left:none; border-top:none; border-right:solid 1px; border-bottom:solid 1px }
+.row-nocellborder { border-left:none; border-right:none; border-top:none; border-right: hidden; border-bottom:solid 1px}
+.cell-norowborder { border-top:none; border-bottom:none; border-left:none; border-bottom: hidden; border-right:solid 1px}
+.nocellnorowborder { border:none; border-right: hidden;border-bottom: hidden }
+
+pre.screen { padding: 5px 5px 5px 5px; border: outset; background-color: #CCCCCC; margin-top: 2px; margin-bottom : 2px; white-space: pre}
+
+span.filepath { font-family:monospace }
+
+/* OXYGEN PATCH START - EXM-18359 */
+body {
+  margin-left: 1em;
+  margin-top: 1em;
+}
+/* OXYGEN PATCH END - EXM-18359 */
+
+/* OXYGEN PATCH START - EXM-18138 */
+span.uicontrol > img {
+  padding-right: 5px;
+}
+/* OXYGEN PATCH END - EXM-18138 */
+
+/* OXYGEN PATCH START EXM-17248 - Center figure captions. */
+div.fignone p.figcap {
+  display:block;
+  text-align:left;
+  font-weight:bold;
+  padding:2px 10px 5px 10px;
+}
+
+div.fignone p.figcapcenter {
+  display:block;
+  text-align:center;
+  font-weight:bold;
+  padding:2px 10px 5px 10px;
+}
+
+div.fignone p.figcapright {
+  display:block;
+  text-align:right;
+  font-weight:bold;
+  padding:2px 10px 5px 10px;
+}
+
+div.fignone p.figcapjustify {
+  display:block;
+  text-align:justify;
+  font-weight:bold;
+  padding:2px 10px 5px 10px;
+}
+
+div.fignone img {
+  padding-top: 5px;
+  padding-left: 10px;
+  padding-right: 10px;
+}
+/* OXYGEN PATCH END EXM-17248 */
+
+
+
+
+
+body {
+    font-family:Georgia,Times,Serif;
+    letter-spacing: 0.08em;    
+}
+
+h1, h2 {
+    letter-spacing: 0.16em;
+}
+
+nav#toc ol {
+    list-style-type:none;
+}
+
+body.reflow { 
+    margin: 2em 4em 2em 4em;
+    background-color: rgb(255,255,230);
+}
+
+img#portrait, img.detail {
+    float:right; 
+    margin:0.2em 0em 0.9em 2em;
+}
+
+body.fixed, img.full {     
+    width:1024px;
+    margin: 0;
+    padding: 0;
+    top: 0px;
+    left: 0px;
+}
+
+#b1.fixed {
+    height:697px;
+}
+
+#b2.fixed {
+    height:696px;
+}
+
+#b3.fixed {
+    height:673px;
+}
+
+#b4.fixed {
+    height:698px;
+}
+
+img.full {    
+    position : absolute;
+}
+
+
+
+
+
+body {
+    font-family:Georgia,Times,Serif;
+    /* text-align: justify; */
+    letter-spacing: 0.08em;
+    
+}
+
+h1, h2 {
+    letter-spacing: 0.16em;
+}
+
+nav#toc ol {
+    list-style-type:none;
+}
+
+body.reflow { /* first spine item only*/
+    margin: 2em 4em 2em 4em;
+    background-color: rgb(255,255,230);
+}
+
+figure {
+    position : absolute;
+    background-color: rgb(60,60,60);  
+    color: rgb(240,240,240);
+}
+
+img#portrait {
+    float:right; 
+    margin:0.2em 0em 0.9em 2em;
+}
+
+figure.unscripted {
+    opacity: 0.9;    
+    margin: 1em 3em 1em 3em;
+    padding: 1em 2em 1em 2em;
+    max-width : 850px;
+}
+
+figure.unscripted > img.detail {   
+    display: none;     
+}
+
+body.fixed, img.full {     
+    width:1024px;
+    margin: 0;
+    padding: 0;
+    top: 0px;
+    left: 0px;
+}
+
+#b1.fixed {
+    height:697px;
+}
+
+#b2.fixed {
+    height:696px;
+}
+
+#b3.fixed {
+    height:673px;
+}
+
+#b4.fixed {
+    height:698px;
+}
+
+img.full {
+    opacity: 1.0; 
+    position : absolute;
+}
+
+figure > img.detail {            
+    margin:0;
+    float : left;        
+}
+
+figcaption {
+    margin:0 0 0 0;
+    padding:0;
+}
+
+figcaption > p {
+    margin:0;
+    padding:0;
+}
+
+figure.scripted > img.detail {   
+    display: block;    
+    margin-right:30px;    
+}
+
+figure.scripted { 
+    opacity: 1.0; 
+    border: 1px solid rgb(100,100,100); 
+    border-radius: 0px;    
+    padding: 40px 40px 40px 40px;
+    position : absolute;     
+    top: 85px;
+    left: 16px;
+    width:834px;
+    line-height : 23px;
+    font-size: 18px;
+    /* letter-spacing:0.1em; */
+}
+
+#f1.scripted {     
+    height:277px;       
+}
+#f1.scripted > img.detail {
+    margin-bottom:500px; 
+}
+
+
+#f2.scripted {       
+    height:390px;    
+} 
+#f2.scripted > img.detail {
+    margin-bottom:20px; 
+}
+
+#f3.scripted {   
+    top: 60px;
+    height:420px;     
+}
+#f3.scripted > img.detail {
+    margin-bottom:20px; 
+}
+
+#f4.scripted {   
+    top: 70px;
+    height:400px;     
+}
+#f4.scripted > img.detail {
+    margin-bottom:180px; 
+}
+
+
+
+body {
+    font-family: Georgia, serif;
+    margin: 0;
+    padding: 0;
+}
+
+div[epub|type="chapter"] {
+    background-image: url('childrens-book-swans.jpg'),
+                      url('childrens-book-flowers.jpg');
+    background-position: 100% 50%, bottom center;
+    background-size: 50% auto, auto auto;
+    background-repeat: no-repeat, repeat-x;
+    background-color: #fdefc2;
+
+    padding: 2em;
+}
+
+p {
+    font-size: .75em;
+    text-align: left;
+}
+
+p:last-child {
+    padding-bottom: 2em;
+}
+
+
+h1 {
+    margin-top: 0;
+    text-transform: uppercase;
+    font-weight: 200;
+}
+
+p > span {
+    display: block;
+}
+
+p > span:nth-child(even) {
+    text-indent: 1em;
+}
+
+ at media screen and (max-width:480px) { 
+ 
+    div[epub|type="chapter"] {
+        background-position: top center, bottom center;
+        background-size: 30% auto, 50% auto;
+
+        padding: 1em;
+        margin: auto;
+        text-align: center;
+    }
+    
+    h1 {
+        margin: 50% auto 0 0;
+        font-size: 1em;
+        text-align: center;
+    }
+    p {
+        margin-left: 25%;
+    }
+    
+}
+
+ at media screen and (orientation:landscape) { 
+ 
+    div[epub|type="chapter"] {
+        background-position: 97% 40%, bottom center;
+        background-size: 20% auto, 50% auto;
+
+        -webkit-column-count: 2;
+        -moz-column-count: 2;
+        column-count: 2;
+
+        -webkit-column-gap: 0;
+        -moz-column-count: 0;
+        column-gap: 0;
+
+        padding: 2em 4em 5em 4em;
+    }
+}
+
+/* Style sheet for Japanese Layout Requirements */
+/* $Id: base.css,v 1.42 2011/11/15 09:28:06 tkobayas4 Exp $ */
+
+ at media screen {
+
+body {
+	font-family: Arial, sans-serif;
+}
+html:lang(ja) {
+	line-height: 1.5;
+}
+
+}
+
+p, li {
+	margin-top: 0.3em;
+	margin-bottom: 0.3em;
+}
+
+div.navigation { text-align: center; }
+
+span.toc-number { font-family: monospace; }
+span.toc-page { display: none; }
+div.toc-level1 { }
+div.toc-level2 { margin-left: 1em; }
+div.toc-level3 { margin-left: 2em; }
+div.toc-levelA { margin-left: 1em; }
+div.index-item2 { margin-left: 1em; }
+span.index-page { display: none; }
+
+div.body { background-color:transparent; }
+div.div1 { background-color:transparent; }
+div.div2 { background-color:transparent; }
+div.div3 { background-color:transparent; }
+div.index { background-color:transparent; }
+
+h1 { font: 170% Arial, sans-serif; color: #005A9C; }
+h2 { font: 140% Arial, sans-serif; color: #005A9C; }
+h3 { font: 120% Arial, sans-serif; color: #005A9C; }
+.div3 > h3,
+h4 { font: 115% Arial, sans-serif; color: #005A9C; }
+
+hr {
+	margin-top: 1em;
+	margin-bottom: 1em;
+}
+hr.chapter-ruler {
+	display: none;
+}
+
+ol, ul {
+	/*padding-left: 2.5em;*/
+}
+ol {
+	list-style-type: lower-alpha;
+}
+ol.decimal,
+ol ol {
+	list-style-type: decimal;
+}
+ol.decimal ol {
+	list-style-type: lower-alpha;
+}
+ol.decimal ol ol,
+ol ol ol {
+	list-style-type: lower-roman;
+}
+ol.decimal ol ol ol,
+ol ol ol ol {
+	list-style-type: decimal;
+}
+
+div.figure {
+	text-align: center;
+	margin-top: 1em;
+	margin-bottom: 1em;
+	/*border: solid thin red;*/
+}
+div.figure img {
+	margin-top: 0.5em;
+	margin-bottom: 0.5em;
+}
+.figureCaption {
+	font-size: 0.8em;
+	font-style: italic;
+	display: block;
+	text-align: center;
+	margin-bottom: 1em;
+}
+
+table.t_note {
+	border-collapse: collapse;
+	border-spacing: 0;
+	margin-left: 2em;
+}
+table.t_note td {
+	vertical-align: top;
+	/*border: 1px solid red;*/
+	border: none;
+}
+table.t_note td {
+	padding: 0;
+}
+table.t_note td.ft {
+	white-space: nowrap;
+	padding-right: 0.5em;
+}
+table.t_note td p {
+	font-size: 0.85em;
+	font-weight: normal;
+}
+table.t_note td ol {
+	margin-top: 0;
+	margin-bottom: 0;
+}
+table.t_note .figureCaption {
+}
+
+ol table.t_note,
+ul table.t_note {
+	margin-left: 1em;
+}
+
+table.t_sample {
+	margin-left: 1em;
+	border-spacing: 0;
+	border-collapse: collapse;
+}
+table.t_sample td {
+	vertical-align: top;
+	padding-right: 0.5em;
+	/*border: 1px solid green;*/
+	border: none;
+}
+table.t_sample td.ft {
+	white-space: nowrap;
+	padding-right: 0.5em;
+}
+table.t_sample td p {
+	font-size: 1em;
+	font-weight: normal;
+	margin-top: 0;
+	margin-bottom: 0;
+}
+table.t_sample td ol {
+	margin-top: 0;
+	margin-bottom: 0;
+}
+
+table.t_note table.t_sample td p {
+	font-size: 0.8em;
+}
+
+span.digit { }
+span.unit { }
+i.quantity,
+span.math-i {
+	font-style: italic;
+}
+
+.termdef {
+	font-weight: bold;
+	text-decoration: none;
+}
+a.termref:link,
+a.termref:visited {
+}
+a.termref2nd:link,
+a.termref2nd:visited {
+	color: black;
+	text-decoration: none;
+	background-color: transparent;
+}
+.chapter_ref {
+	font-weight: bold;
+}
+.figure_ref {
+}
+
+.rfc2119 {
+	font-variant: small-caps;
+}
+
+span.character:lang(ja) {
+	padding-left: 0.25em;
+	padding-right: 0.25em;
+}
+
+table.termlist {
+	border-collapse: collapse;
+}
+table.termlist th,
+table.termlist td {
+	border: solid thin gray;
+	padding: 0.2em;
+}
+
+table.charclass {
+	border-collapse: collapse;
+}
+table.charclass col.character,
+table.charclass col.ucs {
+	text-align: center;
+}
+table.charclass tr > td {
+	text-align: center;
+}
+table.charclass tr > td + td + td {
+	text-align: left;
+}
+table.charclass th,
+table.charclass td {
+	border: solid thin gray;
+	padding: 0.2em;
+}
+table.charclass td.character {
+	font-family: 'MS Mincho'
+}
+table.charclass td.character-latn {
+	font-family: 'Times New Roman'
+}
+
+
+span.math,
+span.expr {
+	/*font-famiy: monospace;*/
+	/*font-size: 0.9em;*/
+}
+
+span.math,
+div.div-pdf,
+object.pdf,
+object.svg {
+	display: none;
+}
+
+/* ------------------ */
+
+ at media screen {
+
+.sec_ref {
+	font-style: italic;
+}
+
+.termdef {
+	color: #008000;
+}
+a.termref:link,
+a.termref:visited {
+	background-color: #FF8;
+}
+a.termref2nd:link,
+a.termref2nd:visited {
+}
+
+ins { text-decoration: underline; background-color: #CCFFCC; }
+del, del a { text-decoration: line-through; color:#CCCCCC; }
+em.change { background-color:#CC3333; color: white; }
+/* em { background-color:#CC3333; color: white; }
+em.conflict-term { background-color:#882288; } */
+span.change { color: red; }
+span.index-link { margin-left: 1em;}
+
+} /*end of screen*/
+
+/* ------------------ */
+
+ at media print {
+
+ins { text-decoration: none; background-color: transparent; }
+del { display: none; }
+
+:link,
+:visited {
+	color: black;
+	text-decoration: none;
+	background-color: transparent;
+}
+
+} /*end of print*/
+
+/* ------------------ */
+/*
+h1, h2, h3, h4 { background-color: transparent; }
+div.head { background-color: #EFF; }
+div.div1 { background-color: #EFF; }
+div.div2 { background-color: #FFE; }
+div.div3 { background-color: #EEE; }
+p.body { background-color: #FEF; }
+div.figure { background-color: #EFE; }
+table.t_note { border: solid 1pt red; }
+table.t_sample { border: solid 1pt #CCF; }
+table.t_list { border: solid 1pt #CCC; }
+span.lln { background-color: #DDF; }
+a.termref:link,
+a.termref:visited { background-color: #FF8; }
+*/
+
+.div1 h2 {
+	margin-top: 4em;
+}
+
+/* Style sheet for Japanese Layout Requirements */
+/* $Id: base.css,v 1.42 2011/11/15 09:28:06 tkobayas4 Exp $ */
+
+ at media screen {
+
+body {
+	font-family: Arial, sans-serif;
+}
+html:lang(ja) {
+	line-height: 1.5;
+}
+
+}
+
+p, li {
+	margin-top: 0.3em;
+	margin-bottom: 0.3em;
+}
+
+div.navigation { text-align: center; }
+
+span.toc-number { font-family: monospace; }
+span.toc-page { display: none; }
+div.toc-level1 { }
+div.toc-level2 { margin-left: 1em; }
+div.toc-level3 { margin-left: 2em; }
+div.toc-levelA { margin-left: 1em; }
+div.index-item2 { margin-left: 1em; }
+span.index-page { display: none; }
+
+div.body { background-color:transparent; }
+div.div1 { background-color:transparent; }
+div.div2 { background-color:transparent; }
+div.div3 { background-color:transparent; }
+div.index { background-color:transparent; }
+
+h1 { font: 170% Arial, sans-serif; color: #005A9C; }
+h2 { font: 140% Arial, sans-serif; color: #005A9C; }
+h3 { font: 120% Arial, sans-serif; color: #005A9C; }
+.div3 > h3,
+h4 { font: 115% Arial, sans-serif; color: #005A9C; }
+
+hr {
+	margin-top: 1em;
+	margin-bottom: 1em;
+}
+hr.chapter-ruler {
+	display: none;
+}
+
+ol, ul {
+	/*padding-left: 2.5em;*/
+}
+ol {
+	list-style-type: lower-alpha;
+}
+ol.decimal,
+ol ol {
+	list-style-type: decimal;
+}
+ol.decimal ol {
+	list-style-type: lower-alpha;
+}
+ol.decimal ol ol,
+ol ol ol {
+	list-style-type: lower-roman;
+}
+ol.decimal ol ol ol,
+ol ol ol ol {
+	list-style-type: decimal;
+}
+
+div.figure {
+	text-align: center;
+	margin-top: 1em;
+	margin-bottom: 1em;
+	/*border: solid thin red;*/
+}
+div.figure img {
+	margin-top: 0.5em;
+	margin-bottom: 0.5em;
+}
+.figureCaption {
+	font-size: 0.8em;
+	font-style: italic;
+	display: block;
+	text-align: center;
+	margin-bottom: 1em;
+}
+
+table.t_note {
+	border-collapse: collapse;
+	border-spacing: 0;
+	margin-left: 2em;
+}
+table.t_note td {
+	vertical-align: top;
+	/*border: 1px solid red;*/
+	border: none;
+}
+table.t_note td {
+	padding: 0;
+}
+table.t_note td.ft {
+	white-space: nowrap;
+	padding-right: 0.5em;
+}
+table.t_note td p {
+	font-size: 0.85em;
+	font-weight: normal;
+}
+table.t_note td ol {
+	margin-top: 0;
+	margin-bottom: 0;
+}
+table.t_note .figureCaption {
+}
+
+ol table.t_note,
+ul table.t_note {
+	margin-left: 1em;
+}
+
+table.t_sample {
+	margin-left: 1em;
+	border-spacing: 0;
+	border-collapse: collapse;
+}
+table.t_sample td {
+	vertical-align: top;
+	padding-right: 0.5em;
+	/*border: 1px solid green;*/
+	border: none;
+}
+table.t_sample td.ft {
+	white-space: nowrap;
+	padding-right: 0.5em;
+}
+table.t_sample td p {
+	font-size: 1em;
+	font-weight: normal;
+	margin-top: 0;
+	margin-bottom: 0;
+}
+table.t_sample td ol {
+	margin-top: 0;
+	margin-bottom: 0;
+}
+
+table.t_note table.t_sample td p {
+	font-size: 0.8em;
+}
+
+span.digit { }
+span.unit { }
+i.quantity,
+span.math-i {
+	font-style: italic;
+}
+
+.termdef {
+	font-weight: bold;
+	text-decoration: none;
+}
+a.termref:link,
+a.termref:visited {
+}
+a.termref2nd:link,
+a.termref2nd:visited {
+	color: black;
+	text-decoration: none;
+	background-color: transparent;
+}
+.chapter_ref {
+	font-weight: bold;
+}
+.figure_ref {
+}
+
+.rfc2119 {
+	font-variant: small-caps;
+}
+
+span.character:lang(ja) {
+	padding-left: 0.25em;
+	padding-right: 0.25em;
+}
+
+table.termlist {
+	border-collapse: collapse;
+}
+table.termlist th,
+table.termlist td {
+	border: solid thin gray;
+	padding: 0.2em;
+}
+
+table.charclass {
+	border-collapse: collapse;
+}
+table.charclass col.character,
+table.charclass col.ucs {
+	text-align: center;
+}
+table.charclass tr > td {
+	text-align: center;
+}
+table.charclass tr > td + td + td {
+	text-align: left;
+}
+table.charclass th,
+table.charclass td {
+	border: solid thin gray;
+	padding: 0.2em;
+}
+table.charclass td.character {
+	font-family: 'MS Mincho'
+}
+table.charclass td.character-latn {
+	font-family: 'Times New Roman'
+}
+
+
+span.math,
+span.expr {
+	/*font-famiy: monospace;*/
+	/*font-size: 0.9em;*/
+}
+
+span.math,
+div.div-pdf,
+object.pdf,
+object.svg {
+	display: none;
+}
+
+/* ------------------ */
+
+ at media screen {
+
+.sec_ref {
+	font-style: italic;
+}
+
+.termdef {
+	color: #008000;
+}
+a.termref:link,
+a.termref:visited {
+	background-color: #FF8;
+}
+a.termref2nd:link,
+a.termref2nd:visited {
+}
+
+ins { text-decoration: underline; background-color: #CCFFCC; }
+del, del a { text-decoration: line-through; color:#CCCCCC; }
+em.change { background-color:#CC3333; color: white; }
+/* em { background-color:#CC3333; color: white; }
+em.conflict-term { background-color:#882288; } */
+span.change { color: red; }
+span.index-link { margin-left: 1em;}
+
+} /*end of screen*/
+
+/* ------------------ */
+
+ at media print {
+
+ins { text-decoration: none; background-color: transparent; }
+del { display: none; }
+
+:link,
+:visited {
+	color: black;
+	text-decoration: none;
+	background-color: transparent;
+}
+
+} /*end of print*/
+
+/* ------------------ */
+/*
+h1, h2, h3, h4 { background-color: transparent; }
+div.head { background-color: #EFF; }
+div.div1 { background-color: #EFF; }
+div.div2 { background-color: #FFE; }
+div.div3 { background-color: #EEE; }
+p.body { background-color: #FEF; }
+div.figure { background-color: #EFE; }
+table.t_note { border: solid 1pt red; }
+table.t_sample { border: solid 1pt #CCF; }
+table.t_list { border: solid 1pt #CCC; }
+span.lln { background-color: #DDF; }
+a.termref:link,
+a.termref:visited { background-color: #FF8; }
+*/
+
+.div1 h2 {
+	margin-top: 4em;
+}
+
+
+/* Style for a "Working Group Note" */
+
+/*
+   Copyright 1997-2003 W3C (MIT, ERCIM, Keio). All Rights Reserved.
+   The following software licensing rules apply:
+   http://www.w3.org/Consortium/Legal/copyright-software */
+
+/* $Id: base.css,v 1.25 2006/04/18 08:42:53 bbos Exp $ */
+
+body {
+  padding: 2em 1em 2em 70px;
+  margin: 0;
+  font-family: sans-serif;
+  color: black;
+  background: white;
+  background-position: top left;
+  background-attachment: fixed;
+  background-repeat: no-repeat;
+}
+:link { color: #00C; background: transparent }
+:visited { color: #609; background: transparent }
+a:active { color: #C00; background: transparent }
+
+a:link img, a:visited img { border-style: none } /* no border on img links */
+
+a img { color: white; }        /* trick to hide the border in Netscape 4 */
+ at media all {                   /* hide the next rule from Netscape 4 */
+  a img { color: inherit; }    /* undo the color change above */
+}
+
+th, td { /* ns 4 */
+  font-family: sans-serif;
+}
+
+h1, h2, h3, h4, h5, h6 { text-align: left }
+/* background should be transparent, but WebTV has a bug */
+h1, h2, h3 { color: #005A9C; background: white }
+h1 { font: 170% sans-serif }
+h2 { font: 140% sans-serif }
+h3 { font: 120% sans-serif }
+h4 { font: bold 100% sans-serif }
+h5 { font: italic 100% sans-serif }
+h6 { font: small-caps 100% sans-serif }
+
+.hide { display: none }
+
+div.head { margin-bottom: 1em }
+div.head h1 { margin-top: 2em; clear: both }
+div.head table { margin-left: 2em; margin-top: 2em }
+
+p.copyright { font-size: small }
+p.copyright small { font-size: small }
+
+ at media screen {  /* hide from IE3 */
+a[href]:hover { background: #ffa }
+}
+
+pre { margin-left: 2em }
+/*
+p {
+  margin-top: 0.6em;
+  margin-bottom: 0.6em;
+}
+*/
+dt, dd { margin-top: 0; margin-bottom: 0 } /* opera 3.50 */
+dt { font-weight: bold }
+
+pre, code { font-family: monospace } /* navigator 4 requires this */
+
+ul.toc, ol.toc {
+  list-style: disc;		/* Mac NS has problem with 'none' */
+  list-style: none;
+}
+
+ at media aural {  
+  h1, h2, h3 { stress: 20; richness: 90 }
+  .hide { speak: none }
+  p.copyright { volume: x-soft; speech-rate: x-fast }
+  dt { pause-before: 20% }
+  pre { speak-punctuation: code } 
+}
+
+
+
+/* Copyright 1997-2003 W3C (MIT, ERCIM, Keio). All Rights Reserved.
+   The following software licensing rules apply:
+   http://www.w3.org/Consortium/Legal/copyright-software */
+
+body {
+  background-image: url(./logo-WG-Note.png);
+}
+
+
+/* Style for a "Working Group Note" */
+
+/*
+   Copyright 1997-2003 W3C (MIT, ERCIM, Keio). All Rights Reserved.
+   The following software licensing rules apply:
+   http://www.w3.org/Consortium/Legal/copyright-software */
+
+/* $Id: base.css,v 1.25 2006/04/18 08:42:53 bbos Exp $ */
+
+body {
+  padding: 2em 1em 2em 70px;
+  margin: 0;
+  font-family: sans-serif;
+  color: black;
+  background: white;
+  background-position: top left;
+  background-attachment: fixed;
+  background-repeat: no-repeat;
+}
+:link { color: #00C; background: transparent }
+:visited { color: #609; background: transparent }
+a:active { color: #C00; background: transparent }
+
+a:link img, a:visited img { border-style: none } /* no border on img links */
+
+a img { color: white; }        /* trick to hide the border in Netscape 4 */
+ at media all {                   /* hide the next rule from Netscape 4 */
+  a img { color: inherit; }    /* undo the color change above */
+}
+
+th, td { /* ns 4 */
+  font-family: sans-serif;
+}
+
+h1, h2, h3, h4, h5, h6 { text-align: left }
+/* background should be transparent, but WebTV has a bug */
+h1, h2, h3 { color: #005A9C; background: white }
+h1 { font: 170% sans-serif }
+h2 { font: 140% sans-serif }
+h3 { font: 120% sans-serif }
+h4 { font: bold 100% sans-serif }
+h5 { font: italic 100% sans-serif }
+h6 { font: small-caps 100% sans-serif }
+
+.hide { display: none }
+
+div.head { margin-bottom: 1em }
+div.head h1 { margin-top: 2em; clear: both }
+div.head table { margin-left: 2em; margin-top: 2em }
+
+p.copyright { font-size: small }
+p.copyright small { font-size: small }
+
+ at media screen {  /* hide from IE3 */
+a[href]:hover { background: #ffa }
+}
+
+pre { margin-left: 2em }
+/*
+p {
+  margin-top: 0.6em;
+  margin-bottom: 0.6em;
+}
+*/
+dt, dd { margin-top: 0; margin-bottom: 0 } /* opera 3.50 */
+dt { font-weight: bold }
+
+pre, code { font-family: monospace } /* navigator 4 requires this */
+
+ul.toc, ol.toc {
+  list-style: disc;		/* Mac NS has problem with 'none' */
+  list-style: none;
+}
+
+ at media aural {  
+  h1, h2, h3 { stress: 20; richness: 90 }
+  .hide { speak: none }
+  p.copyright { volume: x-soft; speech-rate: x-fast }
+  dt { pause-before: 20% }
+  pre { speak-punctuation: code } 
+}
+
+
+
+/* Copyright 1997-2003 W3C (MIT, ERCIM, Keio). All Rights Reserved.
+   The following software licensing rules apply:
+   http://www.w3.org/Consortium/Legal/copyright-software */
+
+body {
+  background-image: url(./logo-WG-Note.png);
+}
+
+
+
+
+
+
+
diff --git a/src/test/resources/stress/EPUB/content_00000.xhtml b/src/test/resources/stress/EPUB/content_00000.xhtml
new file mode 100644
index 0000000..b06ccea
--- /dev/null
+++ b/src/test/resources/stress/EPUB/content_00000.xhtml
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="style_00000.css" />
+	</head>
+	<body>
+		<h1>Lorem Ipsum 00000</h1>
+		<section id="ch1">
+			<h2>Chapter 1</h2>
+			<img src="image_00000.png"/>
+			
+			<p>Lorem ipsum <a href="content_00000.xhtml">dolor sit amet</a>, consectetur adipiscing elit. Aliquam vel purus mauris, ut
+				auctor massa. Pellentesque non nunc risus. Fusce a massa augue. Nunc erat ante,
+				auctor id varius ac, vestibulum non purus. Quisque non dui in sem consectetur
+				condimentum non ac quam. Quisque ultricies nulla nec urna fringilla pretium.
+				Pellentesque dictum pulvinar purus in mattis. Aliquam vestibulum orci sed magna
+				vestibulum a sollicitudin lectus pharetra. Suspendisse luctus risus imperdiet nunc
+				condimentum malesuada. Nulla fringilla vulputate vestibulum. Sed diam dui, fringilla
+				quis sagittis nec, viverra et nibh.</p>
+
+			<p>Sed sollicitudin accumsan augue, quis pulvinar sem volutpat at. Vestibulum rutrum
+				bibendum augue sit amet accumsan. Etiam tempus malesuada libero vestibulum
+				fringilla. Maecenas diam nulla, ultricies ac sodales vitae, viverra ut velit.
+				Vivamus posuere, mi sit amet vehicula tempus, nibh purus scelerisque enim, non
+				vestibulum erat arcu in libero. Aliquam vel convallis nibh. Sed in nisi ipsum. Sed
+				sed est justo, in lacinia nulla.</p>
+
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus est vel lacus
+				ullamcorper vestibulum. Mauris est sapien, pharetra id feugiat in, ornare a erat.
+				Nam consectetur vehicula nisi vel faucibus. Morbi blandit augue nec lacus malesuada
+				venenatis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur
+				ridiculus mus. Maecenas consectetur, odio vitae suscipit ullamcorper, arcu ligula
+				pellentesque sem, quis rhoncus enim eros id lectus. Nam ornare dui est, vel posuere
+				metus. Quisque non nisl metus. Pellentesque id mi nunc, in gravida metus. Nullam
+				neque tellus, ultricies quis laoreet vitae, imperdiet at nunc. Ut laoreet massa quis
+				quam vulputate et ultricies nibh consectetur. Donec convallis, nulla id ultricies
+				ullamcorper, diam tortor interdum dolor, vel tempor lectus urna ut est. Praesent
+				convallis lacus vitae justo lobortis euismod. In at ante elit.</p>
+
+			<p>Aenean quis consectetur justo. Nulla nec enim nisl. Etiam rutrum volutpat tellus, a
+				scelerisque mauris malesuada sit amet. Suspendisse quis urna augue. Proin tempus
+				hendrerit libero non cursus. Praesent non massa at nisl luctus facilisis. Nullam
+				pulvinar, ligula eu porta ornare, mi mi accumsan orci, a iaculis tortor lorem quis
+				dolor. Phasellus ante nibh, pulvinar ac pulvinar eu, pulvinar ac enim.</p>
+
+			<p>Donec vel velit id elit volutpat vestibulum vitae a erat. Duis id est id magna
+				aliquam pretium nec sit amet nibh. Nullam condimentum suscipit felis, sed interdum
+				felis dictum ac. Phasellus non nisi quis magna pellentesque auctor. Cras risus
+				lectus, viverra eu fringilla malesuada, rhoncus et est. Etiam rhoncus pharetra
+				accumsan. Nullam suscipit tellus felis.</p>
+		</section>
+		<section id="ch2">
+			<h2>Chapter 2</h2>
+			<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet nibh felis.
+				Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+				Curae; Etiam est sapien, dapibus eget gravida nec, accumsan a turpis. Nunc in nisi
+				ut dolor elementum porttitor. Mauris hendrerit pulvinar tincidunt. Etiam metus
+				metus, ullamcorper ut varius lacinia, luctus et nibh. Donec ut metus enim, id
+				faucibus nunc. Quisque ut iaculis mauris. Duis pellentesque nulla ut eros ultricies
+				quis condimentum eros adipiscing. Sed porta ultrices diam, ut sagittis lectus mattis
+				a. Phasellus gravida, sapien vitae mollis interdum, dui neque tempor arcu, ac ornare
+				leo ipsum ut nisl.</p>
+
+			<p>Donec porta, odio et aliquet molestie, felis tellus fermentum leo, id interdum magna
+				massa quis ligula. Integer elementum mauris eget nisl eleifend facilisis nec sit
+				amet tellus. Morbi consectetur dignissim egestas. Donec pulvinar, enim eu auctor
+				cursus, turpis arcu venenatis turpis, eu cursus magna nisl sit amet ante. Curabitur
+				eleifend arcu eget nibh facilisis mattis. Etiam nisl nunc, semper vitae condimentum
+				sed, viverra sit amet lacus. Curabitur et orci augue. Suspendisse sollicitudin
+				vulputate risus, sit amet consequat erat mollis eu. Nunc sodales tincidunt
+				tincidunt.</p>
+
+			<p>Aliquam erat volutpat. Aliquam ornare augue et nulla consequat commodo. Quisque
+				dictum rhoncus orci vel euismod. Proin leo turpis, adipiscing quis facilisis id,
+				condimentum sed metus. Nullam pellentesque scelerisque est nec tristique. Nunc augue
+				turpis, consequat non varius quis, aliquam auctor dolor. Cras luctus dignissim justo
+				sit amet laoreet. Quisque vel ipsum quis massa suscipit vehicula.</p>
+
+			<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Vivamus fringilla eleifend magna, vel commodo turpis egestas at.
+				Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
+				egestas. Sed eu lorem quam, et sagittis libero. Maecenas vel ante id sem bibendum
+				laoreet nec dignissim justo. Class aptent taciti sociosqu ad litora torquent per
+				conubia nostra, per inceptos himenaeos. Fusce eu lorem orci, eu viverra nisi. Lorem
+				ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus commodo
+				pellentesque. Maecenas quis est accumsan est interdum pharetra egestas nec lorem.
+				Nam a lectus sit amet justo facilisis suscipit.</p>
+
+			<p>Integer dolor dolor, volutpat id commodo id, gravida id risus. Donec consectetur
+				sollicitudin sem, non auctor urna pulvinar non. Vivamus ipsum nisi, commodo sed
+				scelerisque id, porta nec massa. Vestibulum ac risus et augue faucibus fermentum ut
+				et nisi. Integer tincidunt suscipit ipsum, sed interdum felis mollis sed.
+				Suspendisse potenti. Praesent et mauris et quam consequat tristique. Morbi mi dolor,
+				pharetra quis rutrum quis, fringilla in tortor. Sed a nulla vitae leo dapibus
+				cursus. Aliquam erat volutpat. Integer purus purus, dictum id bibendum at, lobortis
+				quis metus.</p>
+		</section>
+	</body>
+</html>
diff --git a/src/test/resources/stress/EPUB/image_00000.png b/src/test/resources/stress/EPUB/image_00000.png
new file mode 100644
index 0000000..16a44e0
Binary files /dev/null and b/src/test/resources/stress/EPUB/image_00000.png differ
diff --git a/src/test/resources/stress/EPUB/nav.xhtml b/src/test/resources/stress/EPUB/nav.xhtml
new file mode 100644
index 0000000..bbac339
--- /dev/null
+++ b/src/test/resources/stress/EPUB/nav.xhtml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="la" lang="la"
+	xmlns:epub="http://www.idpf.org/2007/ops">
+	<head>
+		<title>Lorem Ipsum</title>
+		<link type="text/css" rel="stylesheet" href="style_00000.css" />
+	</head>
+	<body>
+		<h1>Table of Contents</h1>
+		<nav epub:type="toc">
+			<ol>
+				<li><a href="content_00000.xhtml">Lorem Ipsum 00000</a></li>					
+			</ol>
+		</nav>
+	</body>
+</html>
diff --git a/src/test/resources/stress/EPUB/package.opf b/src/test/resources/stress/EPUB/package.opf
new file mode 100644
index 0000000..9715720
--- /dev/null
+++ b/src/test/resources/stress/EPUB/package.opf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
+    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <dc:identifier id="uid">urn:uuid:999e8000-e29b-41d4-a716-4466674412314</dc:identifier>
+        <dc:title>Stress Test</dc:title>        
+        <dc:language>la</dc:language>
+        <dc:date>2012-10-01</dc:date>
+        <meta property="dcterms:modified">2012-10-01T17:18:00Z</meta>
+    </metadata> 
+    <manifest>
+    	<item id="nav" href="nav.xhtml" properties="nav" media-type="application/xhtml+xml" />
+        <item id="t_00000" href="content_00000.xhtml" media-type="application/xhtml+xml" />                
+        <item id="css_00000" href="style_00000.css" media-type="text/css" />
+		<item id="img_00000" href="image_00000.png" media-type="image/png" />		
+    </manifest>
+    <spine>
+        <itemref idref="t_00000" />        
+    </spine>    
+</package>
\ No newline at end of file
diff --git a/src/test/resources/stress/EPUB/style_00000.css b/src/test/resources/stress/EPUB/style_00000.css
new file mode 100644
index 0000000..0823b78
--- /dev/null
+++ b/src/test/resources/stress/EPUB/style_00000.css
@@ -0,0 +1,6 @@
+body {
+    margin-left : 6em;
+    margin-right : 16em;
+    color:black;
+    font-family: arial, helvetica, sans-serif;
+}
\ No newline at end of file
diff --git a/src/test/resources/stress/META-INF/container.xml b/src/test/resources/stress/META-INF/container.xml
new file mode 100644
index 0000000..77a8bf3
--- /dev/null
+++ b/src/test/resources/stress/META-INF/container.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
+	<rootfiles>
+		<rootfile full-path="EPUB/package.opf" 	
+			media-type="application/oebps-package+xml"/>
+	</rootfiles>
+</container>
\ No newline at end of file
diff --git a/src/test/resources/stress/mimetype b/src/test/resources/stress/mimetype
new file mode 100644
index 0000000..57ef03f
--- /dev/null
+++ b/src/test/resources/stress/mimetype
@@ -0,0 +1 @@
+application/epub+zip
\ No newline at end of file
diff --git a/src/tools/BookReporter.py b/src/tools/BookReporter.py
new file mode 100644
index 0000000..68d6ca2
--- /dev/null
+++ b/src/tools/BookReporter.py
@@ -0,0 +1,865 @@
+#!c:\python27\python
+
+import os
+import sys
+import datetime
+import time
+import webbrowser
+import urllib
+import optparse
+import subprocess
+import zipfile
+import shutil
+import json
+import Dictionary
+import CompareResults
+
+defaultJarName = os.path.join(os.path.dirname(os.path.realpath(__file__)), r"epubcheck.jar")
+
+def parse_args(argv):
+    prog_dir = os.path.dirname(argv[0])
+    usage = """
+Usage: %s [OPTION]
+BookReporter: ePubCheck all ePub files in the target directory, potentially preserving
+                  generated .JSON output files, compare results to prior checks if old results are found.
+                  Optional (use --ppDiffs) pretty-prints any jsondiffs.json files found in the json directory.
+"""[1:-1] % os.path.basename(argv[0])
+
+    parser = optparse.OptionParser(usage=usage)
+    parser.add_option("-d", "--directory", dest="target", type="str", default=".",
+                      help="Directory on which ePubCheck will be run, default is the current working directory")
+    parser.add_option("-f", "--file", dest="targetFile", type="str", default="",
+                      help=r'''File or comma separated list of files to run the check on; if -f is omitted, all files 
+in the target directory will be checked. If you include a fully qualified path to a file, you can add additional comma 
+separated file names in the same directory named on the first file (-f /path/a.epub,b.epub).
+''')
+    parser.add_option("--NoSaveJson", action="store_false", dest="saveJson", default=True,
+                      help=r"Do NOT save ePubcheck .json output files")
+    parser.add_option("--NoCompareJson", action="store_false", dest="compareJson", default=True,
+                      help=r"Do NOT compare the json created during this check with the most recently saved .json result, if found.")
+    parser.add_option("--EanOnlyJsonNames", action="store_true", dest="jsonNamedByEAN", default=False,
+                      help=r"Use this flag to force .json file names to use EAN-only naming convention, <ean>.ePubCheck.json, not <file_name>.ePubCheck.json names. Files not conforming to EAN-first naming pattern will use the <file_name> convention")
+    parser.add_option("-j", "--jsonDir", dest="jsonDir", type="str",
+                      default=r"",
+                      help=r"if the -s switch is used, ePubCheck .json output files will be preserved in either the location specified by the -e switch, or if -e is omitted, stored in <targetDir>\NOOKePubCheckJson")
+    parser.add_option("--ppJson", dest="ppJson", action="store_true", default=False,
+                      help=r"Skip checks and 'pretty print' any json files in the target directory's json output directory.")
+    parser.add_option("--ppDiffs", dest="ppDiffs", action="store_true", default=False,
+                      help=r"Skip checks and simply 'pretty-print' any jsondiffs.json files found in the target directory's json output directory.")
+    parser.add_option("-v", "--verbose", dest="verbose", action="store_true", default=False,
+                      help=r"Show all messages grouped by type")
+    parser.add_option("-q", "--Hide_errors", dest="showErrors", action="store_false", default=True,
+                      help=r"'Quiet' output mode; don't list FATAL and ERROR messages; by default these errors are always displayed on the console")
+    parser.add_option("-w", "--warning", dest="showWarning", action="store_true", default=False,
+                      help=r"Show WARNING messages; by default, these messages are not shown on the console")
+    parser.add_option("-u", "--usage", dest="showUsage", action="store_true", default=False,
+                      help=r"Show USAGE messages, by default, these messages are not shown on the console")
+
+    parser.add_option("-l", "--logging", dest="loggingFlag", default=False, action="store_true",
+                      help=r"Enable logging to a tab-delimited file")
+    parser.add_option("--logdir", dest="logdir", type="str",
+                      default=r"$EPUBCHECK-LOGS",
+                      help=r'''Log file location used by this tool, defaults to the value of the environment variable "EPUBCHECK-LOGS";
+if EPUBCHECK-LOGS is defined and a valid directory, logging is enabled to that directory automatically (-l is not required if EPUBCHECK-LOGS is defined)
+if EPUBCHECK-LOGS is undefined and logging is enabled, logs are written in the current working directory.
+if EPUBCHECK-LOGS is defined, automatic logging can be disabled by using the "--logdir none" switch.
+''')
+    parser.add_option("--logfile", dest="logfile", type="str",
+                      default=r"NookReporter.TabDelimitedFile",
+                      help=r"Log file name used by this tool, default=BookReporter.TabDelimitedFile")
+    parser.add_option("--customCheckMessages", dest="overrideFile", type="str", default="$ePubCheckCustomMessageFile",
+                      help=r'''Name of a custom ePubCheck message file for use in these checks. 
+If not specified, the value of the environment variable $ePubCheckCustomMessages file will be used, if defined. 
+To override the value of that environment variable, \use "--customCheckMessages=<filePath?" to use an alternate file, 
+or use "--customChckMessages=none" to run ePubCheck with the default set of check message severities.
+''')
+    parser.add_option("--applicationJar", dest="appJar", type="str",
+                      default=defaultJarName,
+                      help=r"if specified,the named jar will be used; if not specified, " + defaultJarName + " in this script's directory will be used")
+    parser.add_option("--jarArgs", dest="jarArgs", type="str",
+                      default=r"",
+                      help=r'''Any args specified with the --jarArgs switch will be passed to the applicationJar (ePubCheck); by default, no jarArgs are passed.
+Note that the BookReporter adds several ePubCheck command line switches automatically, including -j, -mode exp, and possibly others.
+Any parameters specified with --jarArgs will be appended to the command line, and could conflict with the switches added automatically. 
+If the parameters include spaces, quote the --jarArgs parameter string.
+''')
+    parser.add_option("--timeout", dest="timeoutVal", type="int", default=30,
+                      help=r"Abort a ePubCheck process that takes longer than the --timeout nnn in seconds. NOTE: This setting is ignored unless you are using Python 3.3 or later")
+    opts,args = parser.parse_args(argv[1:])
+    return opts,args
+
+def fileMD5(fileName):
+    import hashlib
+    md5 = hashlib.md5()
+    block_size = 128*md5.block_size
+    with open(fileName,'rb') as f:
+        for chunk in iter(lambda: f.read(block_size), b''):
+            md5.update(chunk)
+    return md5.hexdigest()
+
+def checkForException(outputFile, targetString):
+    with open(outputFile, 'r') as f:
+        for line in f:
+            #print(" debug: log file line: " + line.rstrip("\n"))
+            if targetString in line:
+                f.close()
+                return True
+    f.close()
+    return False
+
+
+def logMessages(theMessages, showType):
+    nMessage=0
+    for message in theMessages:
+        if message["severity"] == showType:
+            nMessage += 1
+            if nMessage == 1:
+                print ("    " + showType + " messages:")
+            nTimes = len(message["locations"])
+            if message["additionalLocations"] != 0: nTimes += message["additionalLocations"] - 1
+            timesStr = " (" + str(nTimes) + " occurrence"
+            if nTimes == 1:
+                timesStr += ")"
+            else:
+                timesStr += "s)"
+            try:
+                print ("      " + str(nMessage) + ": " + message["ID"] + ": " + message["message"] + timesStr)
+            except:
+                print ("      " + str(nMessage) + ": " + message["ID"] + ": " + urllib.quote(message["message"].encode('utf-8')) + timesStr)
+            if gopts.verbose:
+                for loc in message["locations"]:
+                    if loc["line"] != -1 or loc["column"] != -1:
+                        locString = ": line: " + str(loc["line"]) + " col: " + str(loc["column"])
+                    else:
+                        locString = ""
+                    try:
+                        print("            " + loc["fileName"] + locString)
+                    except:
+                        print("            " + urllib.quote(loc["fileName"].encode('utf-8')) + urllib.quote(locString.encode('utf-8')))
+                print("")
+    if nMessage > 0:
+        print ("    --")
+
+def listServerFiles(theDir):
+    theFiles = []
+    os.chdir(theDir)
+    files = os.listdir(".")
+    for file in files:
+        theFiles.append(string.strip(file))
+    return(theFiles)
+
+def logStats(log_file, checkerVersion, book_dir, book_file, book_path, elapsedTime, checkTime, ePubVersion, comparedTo, checkChanged, pubChanged, spineChanged, manifestChanged, messagesChanged, numFatal, numError, isScripted, hasFixedFormat):
+
+    now = datetime.datetime.now()
+    dateTime = str(now.date()) + "\t" + str(now.time())
+
+    if not os.path.exists(log_file):
+        print ("File " + log_file + " doesn't exist, inititalizing file...")
+        f = open(log_file, 'a')
+        f.write("logDate\t")
+        f.write("logTime\t")
+        f.write("logTool\t")
+        f.write("checkerVersion\t")
+        f.write("PubDir\t")
+        f.write("ePubFile\t")
+        f.write("ePubPath\t")
+        f.write("elpasedTime\t")
+        f.write("checkTime\t")
+        f.write("ePubVersion\t")
+        f.write("comparedTo\t")
+        f.write("checkChanged\t")
+        f.write("pubChanged\t")
+        f.write("spineChanged\t")
+        f.write("manifestChanged\t")
+        f.write("messagesChanged\t")
+        f.write("numFatal\t")
+        f.write("numErrors\t")
+        f.write("isScripted\t")
+        f.write("hasFixedFormat\n")
+    else:
+        f = open(log_file, 'a')
+
+    f.write(str(now.date()) + "\t" + str(now.time()) + "\t")
+    f.write("BookReporter.py" + "\t")
+    f.write(checkerVersion + "\t")
+    f.write(book_dir + "\t")
+    f.write(book_file.rstrip("\r") + "\t")
+    f.write(book_path + "\t")
+    f.write(elapsedTime + "\t")
+    f.write(checkTime + "\t")
+    f.write(ePubVersion + "\t")
+    f.write(comparedTo + "\t")
+    f.write(checkChanged + "\t")
+    f.write(pubChanged + "\t")
+    f.write(spineChanged + "\t")
+    f.write(manifestChanged + "\t")
+    f.write(messagesChanged + "\t")
+    f.write(numFatal + "\t")
+    f.write(numError + "\t")
+    f.write(isScripted + "\t")
+    f.write(hasFixedFormat + "\n")
+    f.close()
+
+    return "BookReporter Logging complete..."
+
+def ppEpubCheckChanges(jsonDelta):
+    #
+    # print the check metadata plus the publication and manifest item metadata changes
+    #
+    oldCheck = jsonDelta["summary"]["oldCheck"]
+    newCheck = jsonDelta["summary"]["newCheck"]
+    print("    ePubCheck results comparison")
+    print("    --\n\r")
+    print("    New file: " + newCheck["path"] + " checked on: " + newCheck["checkDate"])
+    #
+    # json schema change: moved file name from publication to checker; if the name isn't found, use one in publication; this hack can be removed soon.
+    #
+    try:
+       print("    Old file: " + oldCheck["path"] + " checked on: " + oldCheck["checkDate"])
+    except:
+       print("    Old file: path not found due to json output schema change; the old file was checked on: " + oldCheck["checkDate"])
+    print("    --\n\r")
+    print("    Summary: publication metadata changes: " + str(jsonDelta["summary"]["publicationChanges"]))
+    print("             spine item changes: " + str(jsonDelta["summary"]["spineChanges"]))
+    print("             manifest item changes: " + str(jsonDelta["summary"]["itemChanges"]))
+    print("    --\n\r")
+    if jsonDelta["summary"]["publicationChanges"] > 0:
+        print("    Publication property changes:")
+        pubChanges = jsonDelta["publication"]
+        if len(pubChanges["adds"]) > 0:
+            print("      New properties added: ")
+            for item in pubChanges["adds"]:
+                print("        '" + item + "' (value: " + str(pubChanges["adds"][item]) + ")")
+        if len(pubChanges["cuts"]) > 0:
+            print("      Properties removed: ")
+            for item in pubChanges["cuts"]:
+                print("        '" + item + "' (value was: " + str(pubChanges["cuts"][item]) + ")")
+        if len(pubChanges["changes"]) > 0:
+            print("      Properties changed: ")
+            for item in pubChanges["changes"]:
+                if item == "embeddedFonts":
+                    print("        " + item + " changed --  new embedded font list:")
+                    for fontString in pubChanges["changes"][item]["newValue"]:
+                        print("          " + str(fontString))
+                    print("        " + item + " changed --  old embedded font list:")
+                    for fontString in pubChanges["changes"][item]["oldValue"]:
+                        print("          " + str(fontString))
+                else:
+                    try:
+                        print("        '" + item + "'changed --  new value: '" + str(pubChanges["changes"][item]["newValue"]) + "'; old value: '" + str(pubChanges["changes"][item]["oldValue"]) + "'")
+                    except:
+                        print("        '" + item + "'changed -- exception occurred trying to render old or new property value")
+    else:
+        print("    Publication property changes: NONE")
+
+    print("    --\r\n")
+
+    if jsonDelta["summary"]["spineChanges"] > 0:
+        print("    Spine changes:")
+        spineChanges = jsonDelta["spine"]
+        print("      Unchanged spine items: " + str(spineChanges["unchanged"]))
+        if len(spineChanges["adds"]) > 0:
+            print("      New spine items added: ")
+            for item in spineChanges["adds"]:
+                print("        '" + item + "' order: " + str(spineChanges["adds"][item]))
+        if len(spineChanges["cuts"]) > 0:
+            print("      Spine items removed: ")
+            for item in spineChanges["cuts"]:
+                print("        '" + item + "' order was: " + str(spineChanges["cuts"][item]))
+        if len(spineChanges["orderChanges"]) > 0:
+            print("      Spine items reordered: ")
+            for item in spineChanges["orderChanges"]:
+                print("        '" + item + "' spine order changed --  new order: '" + str(spineChanges["orderChanges"][item]["newSpineIndex"]) + "'; old order: '" + str(spineChanges["orderChanges"][item]["oldSpineIndex"]) + "'")
+        
+        if len(spineChanges["contentChanges"]) > 0:
+            print("      Spine item content changes: ")
+            for item in spineChanges["contentChanges"]:
+                print("        spine ID: '" + item + "' file: '" + str(spineChanges["contentChanges"][item]) + "'")
+    else:
+        print("    Publication spine changes: NONE")
+
+    print("    --\r\n")
+
+    if jsonDelta["summary"]["itemChanges"] > 0:
+        print("    Publication manifest item changes:")
+        maniChanges = jsonDelta["manifest"]
+
+        if len(maniChanges["adds"]) > 0:
+            print("      Manifest items added: ")
+            for item in maniChanges["adds"]:
+                print("        '" + item + "'")
+                if gopts.verbose:
+                    for property in maniChanges["adds"][item]:
+                        if property == "referencedItems":
+                            print("          referenced items: ")
+                            for references in maniChanges["adds"][item][property]:
+                                print("                            " + references)
+                        else:
+                            try:
+                                print("          property: " + property + " -- value: " + str(maniChanges["adds"][item][property]))
+                            except:
+                                print("          property: " + property + " -- value caused exception during output")
+
+        if len(maniChanges["cuts"]) > 0:
+            print("\r\n      Manifest items removed: ")
+            for item in maniChanges["cuts"]:
+                print("        '" + item + "'")
+                if gopts.verbose:
+                    for property in maniChanges["cuts"][item]:
+                        if property == "referencedItems":
+                            print("          referenced items: ")
+                            for references in maniChanges["cuts"][item][property]:
+                                print("                            " + references)
+                        else:
+                            try:
+                                print("          property: " + property + " -- value: " + str(maniChanges["cuts"][item][property]))
+                            except:
+                                print("          property: " + property + " -- value caused exception during output")
+
+        if len(maniChanges["changes"]) > 0:
+            theChanges = maniChanges["changes"]
+            print("\r\n      Manifest item property changes: ")
+            for itemId in theChanges:
+                if "adds" in theChanges[itemId]:
+                    for theAdd in theChanges[itemId]["adds"]:
+                        print("        Manifest item ID: '" + itemId + "' -- property '" + theAdd + "' was added to the manifest item (value: " + str(theChanges[itemId]["adds"][theAdd]) + ")")
+                if "cuts" in theChanges[itemId]:
+                    for theCut in theChanges[itemId]["cuts"]:
+                        print("        Manifest item ID: '" + itemId + "' -- property '" + theCut + "' was removed from the manifest item (value: " + str(theChanges[itemId]["cuts"][theCut]) +")")
+                if "changes" in theChanges[itemId]:
+                    for property in theChanges[itemId]["changes"]:
+                        if property == "referencedItems":
+                            if "adds" in theChanges[itemId]["changes"][property]:
+                                for theAdd in theChanges[itemId]["changes"][property]["adds"]:
+                                    try:
+                                        print("        Manifest item ID: '" + itemId + "' -- added reference to: '" + theAdd +"'")
+                                    except:
+                                        print("        Manifest item ID: '" + itemId + "' -- added reference to: exception thrown during output of the added reference")
+                            if "cuts" in theChanges[itemId]["changes"][property]:
+                                for theCut in theChanges[itemId]["changes"][property]["cuts"]:
+                                    try:
+                                        print("        Manifest item ID: '" + itemId + "' -- removed reference to: '" + theCut +"'")
+                                    except:
+                                        print("        Manifest item ID: '" + itemId + "' -- added reference to: exception thrown during output of the cut reference")
+                        elif property == "checkSum":
+                            try:
+                                print("        Manifest item ID: '" + itemId + "' -- the associated file '" + str(theChanges[itemId]["changes"][property]["newValue"]) +"' contents changed")
+                            except:
+                                print("        Manifest item ID: '" + itemId + "' -- the associated file (named caused exception on output) contents changed")
+                        else:
+                            try:
+                                print("        Manifest item ID: '" + itemId + "' -- property '" + property + "' changed -- newValue: " + str(theChanges[itemId]["changes"][property]["newValue"]) + "; oldValue: " + str(theChanges[itemId]["changes"][property]["oldValue"]))
+                            except:
+                                print("        Manifest item ID: '" + itemId + "' -- property '" + property + "' changed -- old or new property value caused exception during output")
+    else:
+        print("    Publication manifest changes: NONE")
+    print("    --\r\n")
+
+def compareMessages(newMessages, oldMessages):
+    if newMessages == oldMessages:
+        print ("    Message collections are identical you idiot")
+        messDelta = "Mess=!"
+    else:
+        print ("    Message collections comparisons:")
+        messDelta = "Mess-"
+    lenNew = len(newMessages)
+    lenOld = len(oldMessages)
+    oldItems = set()
+    oldDict = {}
+    newItems = set()
+    newDict = {}
+    blankIDinNew = 0
+    blankIDinOld = 0
+    for item in newMessages:
+        key = item["ID"]
+        if key == "":
+            blankIDinNew += 1
+            key = "BlankID_" + str(blankIDinNew)
+        if not key in newItems:
+            newItems.add(key)
+            newDict[key] = item
+        '''
+        else:
+            print ("      Message collections comparison: ID Collision in NEW Messages: " + key)
+        '''
+    for item in oldMessages:
+        key = item["ID"]
+        if key == "":
+            blankIDinOld += 1
+            key = "BlankID_" + str(blankIDinOld)
+        if not key in oldItems:
+            oldItems.add(key)
+            oldDict[key] = item
+        '''
+        else:
+            print ("      Message collections comparison: ID Collision in OLD Messages: " + key)
+        '''
+
+    delta = Dictionary.DictCompare(newDict, oldDict)
+    adds = delta.added()
+    cuts = delta.removed()
+    changes = delta.changed()
+    if len(adds) != 0:
+        messDelta += "A" + str(len(adds)) + "-"
+        for id in adds:
+            print ("      Message ID: " + id + " added")
+    else:
+        messDelta += "xA-"
+        print ("      No Message items added")
+    if len(cuts) != 0:
+        messDelta += "R" + str(len(cuts)) + "-"
+        for id in cuts:
+            print ("      Message ID: " + id + " removed")
+    else:
+        messDelta += "xR-"
+        print ("      No Message items removed")
+    if len(changes) != 0:
+        messDelta += "C" + str(len(changes))
+        for id in changes:
+            newRecord = newDict[id]
+            oldRecord = oldDict[id]
+            recDelta = Dictionary.DictCompare(newRecord, oldRecord)
+            for name in recDelta.added():
+                print ('      Message ID: "' + id + '" -- property value "' + name + '" added; value: "' + str(newRecord[name]) + '"')
+            for name in recDelta.removed():
+                print ('      Message ID: "' + id + '" -- property value "' + name + '" removed; old value was: "' + str(oldRecord[name]) + '"')
+            for name in recDelta.changed():
+                if name == "locations":
+                    print ('      Message ID: "' + id + '" -- property value "' + name + '" changed; new occurrence count: ' + str(len(newRecord[name])) + '; old occurrence count: ' + str(len(oldRecord[name])))
+                    newLocs = set()
+                    oldLocs = set()
+                    oldLocsDict = {}
+                    newLocsDict = {}
+                    for locs in newRecord[name]:
+                        if not locs["fileName"]:
+                            locs["fileName"]= id + "HasNullFileNameLoc"
+                        locID = locs["fileName"] + "-" + str(locs["line"]) + "-" + str(locs["column"])
+                        if not locID in newLocs:
+                            newLocs.add(locID)
+                            newLocsDict[locID] = locs
+                        else:
+                            print ("        Messages: duplicate location in NEW message collection for message ID: " + id + " Location: " + locs["fileName"] +  "@ " + str(locs["line"]) + ":" + str(locs["column"]))
+                    for locs in oldRecord[name]:
+                        if not locs["fileName"]:
+                            locs["fileName"]= id + "HasNullFileNameLoc"
+                        locID = locs["fileName"] + "-" + str(locs["line"]) + "-" + str(locs["column"])
+                        if not locID in oldLocs:
+                            oldLocs.add(locID)
+                            oldLocsDict[locID] = locs
+                        else:
+                            print ("        Messages: duplicate location in OLD message collection for message ID: " + id + " Location: " + locs["fileName"] + " @ " + str(locs["line"]) + ":" + str(locs["column"]))
+                    locsDelta = Dictionary.DictCompare(newLocsDict, oldLocsDict)
+                    for locs in locsDelta.added():
+                        try:
+                            print ('        Message ID: "' + id + '" -- location added; value: "' + newLocsDict[locs]['fileName'] + ' @ ' + str(newLocsDict[locs]['line']) + ':' + str(newLocsDict[locs]['column']) + '"')
+                        except:
+                            print ('        Message ID: "' + id + '" -- location added; value: caused exception on output')
+
+                    for locs in locsDelta.removed():
+                        try:
+                            print ('        Message ID: "' + id + '" -- location removed; value: ' + oldLocsDict[locs]['fileName'] + ' @ ' + str(oldLocsDict[locs]['line']) + ':' + str(oldLocsDict[locs]['column']) +'"')
+                        except:
+                            print ('        Message ID: "' + id + '" -- location removed; value: caused exception on output')
+                    '''
+                    for locs in locsDelta.changed():
+                        print ('      Manifest  ID: "' + id + '" -- property value "' + name + '" changed; new value: "' + str(newRecord[name]) + '"; old value: "' + str(oldRecord[name]) + '"')
+                    '''
+                else:
+                    print ('      Message ID: "' + id + '" -- property value "' + name + '" changed; new value: "' + str(newRecord[name]) + '"; old value: "' + str(oldRecord[name]) + '"')
+
+    else:
+        messDelta += "xC"
+        print ("      No Message item properties were changed")
+    if blankIDinNew != 0:
+        print ("    " + str(blankIDinNew) + " blank Message item IDs in new Messages found")
+    if blankIDinOld != 0:
+        print ("    " + str(blankIDinOld) + " blank Message item IDs in old Messages found")
+    print ("    --")
+    return(messDelta)
+
+print ("BookReporter Tool: Check ePubs and optionally compare check results to a previous check")
+global gopts
+gopts,args = parse_args(sys.argv)
+
+# print (str(gopts.target))
+#
+# set up logging of checking activity
+#
+logging = gopts.loggingFlag
+if (logging or os.path.isdir(os.path.expandvars(gopts.logdir)) != "") and os.path.expandvars(gopts.logdir) != "none":
+    logging = True
+    #
+    # verify that the log dir and file are writable
+    #
+    if not os.path.isdir(os.path.expandvars(gopts.logdir)):
+        print ('Activity logging directory "' + os.path.expandvars(gopts.logdir) + '" is not a valid dir, logging to the current working directory')
+        statsLog = os.path.join(".", gopts.logfile)
+    else:
+        statsLog = os.path.join(os.path.expandvars(gopts.logdir), gopts.logfile)
+    print ("Activity logging is being performed to " + statsLog)
+
+#
+# find the epubcheck jar, or give up...
+#
+if os.path.exists(gopts.appJar):
+        ePubCheckCmd = "java -jar " + gopts.appJar
+else:
+    print ("'" + gopts.appJar + "' was not found; BookReporter.py is aborting...")
+    exit(1)
+#print ("BookReporter is using the java command: " + ePubCheckCmd)
+
+#
+# decide if this is python 2.7 or 3.3 and whether to use the timeout= flag on subprocess.call
+#
+
+useTimeout = False
+pyVersionString = sys.version
+pyVersion = float(pyVersionString.split(' ')[0].split(".")[0] + "." + pyVersionString.split(' ')[0].split(".")[1])
+if pyVersion >= 3.3:
+    useTimeout = True
+    print("BookReporter is running on Python version: " + str(pyVersion) + " and is using a check time limit of: " + str(gopts.timeoutVal) + "s")
+else:
+    print("BookReporter is running on Python version: " + str(pyVersion) + "; no check time limit is being enforced. Some books can take > 5 minutes to check...")
+
+
+#
+# ensure that targetDir is actually a directory...
+#
+targetDir = gopts.target
+if not os.path.isdir(targetDir):
+    print ("-d " + targetDir + " is not a directory, aborting...")
+    sys.exit(1)
+
+ppDiffs = gopts.ppDiffs
+ppJson = gopts.ppJson
+#
+# listing will contain the list of files to check, either ePubs in targetDir or .jsondiffs.json or epubcheck.json files in the json output directory of either --ppDiffs or --ppJson are used
+#
+if gopts.overrideFile == "" or gopts.overrideFile == "none":
+    print("BookReporter is using NO ePubCheck custom message file... even if one is specified by the environment variable $ePubCheckCustomMessageFile")
+    overrideCmdStr = ""
+else:
+    overrideFile = os.path.expandvars(gopts.overrideFile)
+    if overrideFile != "" and os.path.exists(overrideFile):
+        print("BookReporter is using the ePubCheck custom message file: " + overrideFile)
+        overrideCmdStr = ' -c "' + overrideFile + '" '
+        print("BookReporter override command string= '" + overrideCmdStr +"'")
+    else:
+        print("BookReporter could not file the --customMessageFile file: " + overrideFile + "; check continuing without an override file...")
+        overrideCmdStr = ""
+
+#
+# set up the errorLogDirectory name, if necessary; but don't create it until it's needed
+#
+
+if gopts.jsonDir == "":
+    errorsDir = os.path.join(targetDir, "ePubCheckJson")
+else:
+    errorsDir = gopts.jsonDir
+
+if not ppDiffs and not ppJson:
+    targetFileType = ".epub"
+    if gopts.targetFile == "":
+        listing = os.listdir(targetDir)
+    else: 
+        #
+        # handle the case where 
+        #   target file is not specified
+        #   where it contains a list of comma separated file names
+        #   and where it contains a fq pathname
+        # 
+        filePath, fileName = os.path.split(gopts.targetFile)
+        if filePath != "":
+            targetDir = filePath
+        listing = fileName.split(",")
+else:
+    targetDir = errorsDir
+    if ppJson: 
+        targetFileType = ".epubcheck.json"
+    if ppDiffs: 
+        targetFileType = ".jsondiffs.json"
+    if gopts.targetFile == "":
+        listing = os.listdir(targetDir)
+    else:
+        filePath, fileName = os.path.split(gopts.targetFile)
+        if filePath != "":
+            targetDir = filePath
+        listing = fileName.split(",")
+
+nClean=0
+nErrs=0
+nChecked = 0
+nTotalFiles = len(listing)
+
+print ("--\r\n")
+print ("Target Dir= " + targetDir + " (contains "+ str(nTotalFiles) + " files; looking for files of type '" + targetFileType + "' to examine)")
+
+saveJson = gopts.saveJson
+if saveJson: 
+   if not os.path.exists(errorsDir):
+        print ("Dir: " + errorsDir + " does not exist; creating it...")
+        os.mkdir(errorsDir)
+else:
+   print (".json output files are NOT being saved")
+print ("--")
+print ("")
+
+
+
+for file in listing:
+    if ppJson or ppDiffs:
+        if targetFileType in file.lower():
+            if ppJson and file.lower().find(targetFileType) == len(file)-len(targetFileType):
+                print(" Pretty print: " + file)
+                jsonFile = os.path.join(targetDir, file)
+                jsonData = open(jsonFile, "r").read()
+                checkResults = json.loads(jsonData)
+                print("    Messages Summary:")
+                logMessages(checkResults["messages"], "FATAL")
+                logMessages(checkResults["messages"], "ERROR")
+                if gopts.verbose or gopts.showWarning:
+                    logMessages(checkResults["messages"], "WARNING")
+                if gopts.verbose or gopts.showUsage:
+                        logMessages(checkResults["messages"], "USAGE")
+                print ("--")
+                print ("")
+            else:
+                print ("File #" + str(nChecked) + ": " + file + " is not of type '" + targetFileType + "'; skipped...")
+                continue
+            if ppDiffs:
+                print(" Prettyprint: " + file)
+                jsonFile = os.path.join(targetDir, file)
+                jsonData = open(jsonFile, "r").read()
+                jsonDiffs = json.loads(jsonData)
+                ppEpubCheckChanges(jsonDiffs)
+        else:
+            print ("File #" + str(nChecked) + ": " + file + " is not of type '" + targetFileType + "'; skipped...")
+            continue
+        continue
+
+    startTime = time.time()
+    nChecked += 1
+    expString = ""
+    if os.path.splitext(file)[-1].lower() != ".epub":
+        if os.path.isdir(os.path.join(targetDir, file)) and os.path.exists(os.path.join(targetDir, file, "mimetype")):
+            print ("File #" + str(nChecked) + ": " + file + " is a directory and mimetype file found; treating it as an expanded ePub...")
+            expString = " --mode exp"
+            if(os.path.exists(os.path.join(targetDir, file + ".epub"))):
+                expString += " --save"
+                print("    ePub: '" + os.path.join(targetDir, file + ".epub") + "' exists; it will be overwritten, or if severe errors exist when checking the expanded ePub directory '" + file + "' it will be deleted.")
+        else:
+            print ("File #" + str(nChecked) + ": " + file + " is not an ePub, skipped...")
+            continue
+#
+# Process an ePub
+#
+    ePub = os.path.join(targetDir, file)
+    print ("File #" + str(nChecked) + " (of " + str(nTotalFiles) + ") : " + ePub  +" checking...\r"),
+
+    tmpOutputFile = os.path.join(targetDir, file + "Check.log")
+    cmdStr = ePubCheckCmd + ' ' + '"' + ePub + '"' + overrideCmdStr
+    #if gopts.jarArgs != "":
+    #
+    # hack to add default json output file name to the -j param until that bug gets fixed in ePubCheck
+    #
+    if not gopts.jsonNamedByEAN:
+        jsonFileName = file + 'Check.json'
+    else:
+        if not file[0:13].isdigit():
+            jsonFileName = file + 'Check.json'
+            print ('File: "' + file + '" does not conform to the leading-EAN naming scheme; json output file will be named: "' + jsonFileName +'"')
+        else:
+            jsonFileName = file[0:13] + ".ePubCheck.json"
+    jsonFile = os.path.join(targetDir, jsonFileName)
+    cmdStr += ' -u -j "' + jsonFile + '"' + expString
+
+#
+# add the -u flag to epubcheckh if verbose output is on...
+#
+    if gopts.verbose: cmdStr += " -u"
+#
+# add the value of the env var ePubCheckCustomMessageFile if it exists
+#
+
+#
+# add any more jarArgs to the command line
+#  this is very brittle as the script adds a bunch of things autocratically which could conflict
+#
+    cmdStr += " " + gopts.jarArgs
+    # print ("ePubCheck cmdstr= " + cmdStr)
+#
+# run ePubcheck and present the results stored in the json output file; If the script is running in Python 3.3 or later, use the timeout=
+#
+    tmpOutput = open(tmpOutputFile, "w")
+    if(useTimeout):
+        try:
+            checkTime = time.time()
+            checkProcess = subprocess.call(cmdStr, stdout=tmpOutput, stderr=tmpOutput, shell=True, timeout=gopts.timeoutVal)
+            checkTime = time.time() - checkTime
+        except subprocess.TimeoutExpired:
+            if logging:
+                elapsedTime = time.time() - startTime
+                checkTime = gopts.timeoutVal
+                logStats(statsLog, targetDir, file, ePub, str(elapsedTime), str(checkTime), "NA", "NA", "NA", "NA", "NA", "NA", "NA", "ePubcheck hang", "NA", "NA", "NA")
+            print ("ePubCheck of " + file + " has hung; skipping this file")
+            continue
+    else:
+        checkTime = time.time()
+        checkProcess = subprocess.call(cmdStr, stdout=tmpOutput, stderr=tmpOutput, shell=True)
+        checkTime = time.time() - checkTime
+        elapsedTime = time.time() - startTime
+    tmpOutput.close()
+    if checkForException(tmpOutputFile, "com.adobe.epubcheck.tool.Checker.main"):
+        print(" Epubcheck threw exception processing file: " + file + "; processing of this file aborting...")
+        logStats(statsLog, "NA", targetDir, file, ePub, str(elapsedTime), str(checkTime), "NA", "NA", "NA", "NA", "NA", "NA", "NA", "ePubcheck exception", "NA", "NA", "NA")
+        continue
+#
+# examine the .json output file and check the number of errors reported
+#
+    if os.path.exists(jsonFile):
+        try:
+            jsonData = open(jsonFile, "r").read()
+            checkResults = json.loads(jsonData)
+        except:
+            if logging:
+                elapsedTime = time.time() - startTime
+                logStats(statsLog, targetDir, file, ePub, str(elapsedTime), str(checkTime), "NA", "NA", "NA", "NA", "NA", "NA", "NA", "exception on .json json.loads", "NA", "NA", "NA")
+            print ("json output file " + jsonFile + " caused exception on load, processing of " + ePub + " abandoned...")
+            continue
+        checkerVersion = checkResults["checker"]["checkerVersion"]
+        nErrs = checkResults["checker"]["nFatal"] + checkResults["checker"]["nError"]
+        if nErrs == 0:
+            print ("File #" + str(nChecked) + " (of " + str(nTotalFiles) + ") : " + ePub + " contained NO severe error messages:")
+        else:
+            print ("File #" + str(nChecked) + " (of " + str(nTotalFiles) + ") : " + ePub + " has " + str(nErrs) + " severe errors (" + str(checkResults["checker"]["nFatal"]) +" FATAL and " + str(checkResults["checker"]["nError"]) + " ERROR messages)")
+#
+# custom message file in use?
+#
+        customMessages = checkResults["customMessageFileName"]
+        if customMessages is not None:
+            print("    Custom message file in use: '" + customMessages +"'")
+            print("")
+#
+# failure case, expected .json file not found, keep trying!
+#
+    else:
+       if logging:
+           elapsedTime = time.time() - startTime
+           logStats(statsLog, "NA", targetDir, file, ePub, str(elapsedTime), str(checkTime), "NA", "NA", "NA", "NA", "na", "NA", "NA", ".json output FNF", "NA", "NA", "NA")
+       print ("json output file " + jsonFile + " NOT found, processing aborting...")
+       continue
+#
+# preserve the json if requested; [TODO] only diff them if saving and an older version was foun
+#
+# simple case, no prior json file exists, save it away and move on
+#
+    if not os.path.exists(os.path.join(errorsDir, jsonFileName)):
+        if saveJson:
+            shutil.move(jsonFile, errorsDir)
+        oldPath = "NA"
+        checkChanges = "NA"
+        pubChanged = "NA"
+        spineChanged = "NA"
+        manifestChanged = "NA"
+        messagesChanged = "NA"
+        oldJsonExists = False
+    else:
+#
+# existing json file for this epub was found; load the old json to see if its identical; if it is, save the latest copy
+#
+       oldJsonExists = True
+       if gopts.compareJson:
+           jsonData = open(os.path.join(errorsDir, jsonFileName), "r").read()
+           oldResults = json.loads(jsonData)
+           jsonChanges = CompareResults.compareResults(oldResults, checkResults)
+           changesJsonFile = jsonFileName + "diffs.json"
+           changesJson = os.path.join(errorsDir, changesJsonFile)
+           if os.path.exists(changesJson):
+                oldMTime = os.path.getmtime(changesJson)
+                oldFMTtime = time.strftime("%Y-%m-%d-%H%M.%S", time.gmtime(oldMTime))
+                newName = jsonFileName + "diffs." + oldFMTtime +".json"
+                print ("    Found an older json diff output file for " + ePub + "; saving the older version as: '" + os.path.join(errorsDir, newName) + "'\r\n")
+                os.rename(changesJson, os.path.join(errorsDir, newName))
+           changesFP = open(changesJson, "w")
+           json.dump(jsonChanges, changesFP, indent=2)
+           changesFP.close()
+
+       #
+       # json schema change: moved file name from publication to checker; if the name isn't found, use one in publication; this hack can be removed soon.
+       #
+       try:
+           oldPath = oldResults["checker"]["path"]
+       except:
+           oldPath = oldResults["publication"]["path"]
+       #if (oldResults["publication"] == checkResults["publication"]) and (oldResults["items"] == checkResults["items"]) and (oldResults["messages"] == checkResults["messages"]):
+       if jsonChanges["summary"]["publicationChanges"] + jsonChanges["summary"]["itemChanges"]  == 0:
+           print ('    ePubCheck done on "' + checkResults["checker"]["checkDate"] + '" matched results of check done of "' + str(oldPath) + '" on "' + oldResults["checker"]["checkDate"] + '"; preserving the latest output file...')
+           #
+           # save the latest version
+           #
+           if saveJson:
+               os.remove(os.path.join(errorsDir, jsonFileName))
+               shutil.move(jsonFile, errorsDir)
+           else:
+               os.remove(jsonFile)
+           pubChanged = False
+           spineChanged = False
+           manifestChanged = False
+           checkChanges = False
+           if oldResults["messages"] == checkResults["messages"]:
+               messagesChanged = False
+
+#
+# the two json files aren't identical; preserve the old one by adding a timestamp to the file name and save the new one as "file".epubCheck.json
+#
+       else:
+           checkChanges = True
+           if saveJson:
+                oldMTime = os.path.getmtime(os.path.join(errorsDir, jsonFileName))
+                oldFMTtime = time.strftime("%Y-%m-%d-%H%M.%S", time.gmtime(oldMTime))
+                newName = jsonFileName + "." + oldFMTtime +".json"
+                print ("    Found an older, differing, json output file for " + ePub + "; saving the older version as: '" + os.path.join(errorsDir, newName) + "'\r\n")
+                os.rename(os.path.join(errorsDir, jsonFileName), os.path.join(errorsDir, newName))
+                shutil.move(jsonFile, errorsDir)
+           else:
+               os.remove(jsonFile)
+
+           print ("")
+       ppEpubCheckChanges(jsonChanges)
+       pubChanged = jsonChanges["summary"]["encodedPubChanges"]
+       spineChanged = jsonChanges["summary"]["encodedSpineChanges"]
+       manifestChanged = jsonChanges["summary"]["encodedManiChanges"]
+
+#
+# log output to console
+#
+    if nErrs > 0 and gopts.showErrors:
+        print ("")
+        print ("    Messages Summary:")
+        logMessages(checkResults["messages"], "FATAL")
+        logMessages(checkResults["messages"], "ERROR")
+    if gopts.verbose or gopts.showWarning:
+        logMessages(checkResults["messages"], "WARNING")
+    if gopts.verbose or gopts.showUsage:
+            logMessages(checkResults["messages"], "USAGE")
+    if oldJsonExists and gopts.compareJson:
+        if checkResults["messages"] != oldResults["messages"] and (gopts.verbose):
+            messagesChanged = compareMessages(checkResults["messages"], oldResults["messages"])
+        if checkResults["messages"] != oldResults["messages"] and not gopts.verbose:
+            messagesChanged = "True, comparison disabled"
+            print ("    Generated messages from " + file + " changed...")
+            print ("    --")
+        if checkResults["messages"] == oldResults["messages"] and gopts.verbose:
+            messagesChanged = "Mess=="
+            print ("    Generated messages from " + file + " are unchanged...")
+            print ("    --")
+        else:
+            messagesChanged = "NA, comparison disabled"
+    print ("--")
+    print ("")
+#
+# save the results and cleanup after each file
+#
+    elapsedTime = time.time() - startTime
+    if logging: logStats(statsLog, checkerVersion, targetDir, file, ePub, str(elapsedTime), str(checkTime), str(checkResults["publication"]["ePubVersion"]), str(oldPath), str(checkChanges), pubChanged, spineChanged, manifestChanged, str(messagesChanged), str(checkResults["checker"]["nFatal"]), str(checkResults["checker"]["nError"]),  str(checkResults["publication"]["isScripted"]),  str(checkResults["publication"]["hasFixedFormat"]))
+    os.remove(tmpOutputFile)
\ No newline at end of file
diff --git a/src/tools/CompareResults.py b/src/tools/CompareResults.py
new file mode 100644
index 0000000..6f9a825
--- /dev/null
+++ b/src/tools/CompareResults.py
@@ -0,0 +1,200 @@
+#!c:\python27\python
+import os
+import sys
+import optparse
+import json
+import Dictionary
+
+def compareResults(oldJson, newJson):
+    #
+    # initialize the differences structure and local copies of the publication metadata and the manifest for comparison
+    #
+    jsonDelta = {}
+    jsonDelta["summary"] = {}
+    jsonDelta["summary"]["newCheck"] = newJson["checker"]
+    jsonDelta["summary"]["oldCheck"] = oldJson["checker"]
+    jsonDelta["publication"] = {}
+    jsonDelta["publication"]["adds"] = {}
+    jsonDelta["publication"]["cuts"] = {}
+    jsonDelta["publication"]["changes"] = {}
+    jsonDelta["manifest"] = {}
+    jsonDelta["manifest"]["adds"] = {}
+    jsonDelta["manifest"]["cuts"] = {}
+    jsonDelta["manifest"]["changes"] = {}
+    jsonDelta["spine"] = {}
+    jsonDelta["spine"]["adds"] = {}
+    jsonDelta["spine"]["cuts"] = {}
+    jsonDelta["spine"]["orderChanges"] = {}
+    jsonDelta["spine"]["contentChanges"] = []
+    jsonDelta["spine"]["unchanged"] = 0
+    oldPub = oldJson["publication"]
+    newPub = newJson["publication"]
+    newSpine = {}
+    newSpineContents = {}
+    oldSpineContents = {}
+    oldSpine = {}
+    newMani = newJson["items"]
+    oldMani = oldJson["items"]
+    
+    newManiDict = Dictionary.makeDict(newMani, "id")
+    oldManiDict = Dictionary.makeDict(oldMani, "id")
+    #
+    # compare the publication metadata
+    #
+    deltaPub = Dictionary.DictCompare(newPub, oldPub)
+    for item in deltaPub.added():
+        jsonDelta["publication"]["adds"][item] = newPub[item]
+    for item in deltaPub.removed():
+        jsonDelta["publication"]["cuts"][item] = oldPub[item]
+    pubChanges = deltaPub.changed()
+    if len(pubChanges) > 0:
+        for item in pubChanges:
+            jsonDelta["publication"]["changes"][item] = {"newValue" : newPub[item], "oldValue" : oldPub[item]}
+    if len(jsonDelta["publication"]["adds"]) + len(jsonDelta["publication"]["cuts"]) + len(jsonDelta["publication"]["changes"]) == 0:
+        pubChanges = "Pub=="
+    else:
+        pubChanges = "Pub-"
+        if len(jsonDelta["publication"]["adds"]) > 0:
+            pubChanges += "A" + str(len(jsonDelta["publication"]["adds"]))
+        else:
+            pubChanges += "xA"
+        if len(jsonDelta["publication"]["cuts"]) > 0:
+            pubChanges += "-R" + str(len(jsonDelta["publication"]["cuts"]))
+        else:
+            pubChanges += "-xR"
+        if len(jsonDelta["publication"]["changes"]) > 0:
+            pubChanges += "-C" + str(len(jsonDelta["publication"]["changes"]))
+        else:
+            pubChanges += "-xC"
+    jsonDelta["summary"]["publicationChanges"] = len(jsonDelta["publication"]["adds"]) + len(jsonDelta["publication"]["cuts"]) + len(jsonDelta["publication"]["changes"])
+    jsonDelta["summary"]["encodedPubChanges"] = pubChanges
+        # print(" Calculated publication changes: adds: " + str(len(jsonDelta["publication"]["adds"])) + "; cuts: " + str(len(jsonDelta["publication"]["cuts"])) + "; changes: " + str(len(jsonDelta["publication"]["changes"])))
+    #
+    # compare the spines
+    #
+    for item in newMani:
+        if item["isSpineItem"]:
+            newSpine[item["id"]] = item["spineIndex"]
+            newSpineContents[item["id"]] = item["checkSum"]
+    
+    for item in oldMani:
+        if item["isSpineItem"]:
+            oldSpine[item["id"]] = item["spineIndex"]
+            oldSpineContents[item["id"]] = item["checkSum"]
+    
+    
+    deltaSpine = Dictionary.DictCompare(newSpine, oldSpine)
+    deltaSpineContents = Dictionary.DictCompare(newSpineContents, oldSpineContents)
+    #
+    # look for adds/cuts/order changes in the spine
+    #
+    if len(deltaSpine.added()) > 0:
+        for item in deltaSpine.added():
+            jsonDelta["spine"]["adds"][item] = newSpine[item]
+    if len(deltaSpine.removed()) > 0:
+        for item in deltaSpine.removed():
+            jsonDelta["spine"]["cuts"][item] = oldSpine[item]
+    if len(deltaSpine.changed()) > 0:
+        jsonDelta["spine"]["orderChanges"] = {}
+        for item in deltaSpine.changed():
+            jsonDelta["spine"]["orderChanges"][item] = {}
+            jsonDelta["spine"]["orderChanges"][item]["newSpineIndex"] = newSpine[item]
+            jsonDelta["spine"]["orderChanges"][item]["oldSpineIndex"] = oldSpine[item]
+    jsonDelta["spine"]["unchanged"] = len(deltaSpine.unchanged())
+    #
+    # look for content changes only in items common to both spines
+    #
+    if len(deltaSpineContents.changed()) > 0:
+        for item in deltaSpineContents.changed():
+            jsonDelta["spine"]["contentChanges"] = {}
+            jsonDelta["spine"]["contentChanges"][item] = newManiDict[item]["fileName"]
+    #
+    # summarize the spine changes
+    #
+    if len(jsonDelta["spine"]["adds"]) + len(jsonDelta["spine"]["cuts"]) + len(jsonDelta["spine"]["orderChanges"]) + len(jsonDelta["spine"]["contentChanges"]) == 0:
+        spineChanges = "Spine==-N" + str(newPub["nSpines"])
+    else:
+        spineChanges = "Spine-N" + str(newPub["nSpines"])
+        if jsonDelta["spine"]["unchanged"] == 0:
+            spineChanges += "-xU"
+        else:
+            spineChanges += "-U" + str(jsonDelta["spine"]["unchanged"])
+        if len(jsonDelta["spine"]["adds"]) > 0:
+            spineChanges += "-A" + str(len(jsonDelta["spine"]["adds"]))
+        else:
+            spineChanges += "-xA"
+        if len(jsonDelta["spine"]["cuts"]) > 0:
+            spineChanges += "-R" + str(len(jsonDelta["spine"]["cuts"]))
+        else:
+            spineChanges += "-xR"
+        if len(jsonDelta["spine"]["orderChanges"]) > 0:
+            spineChanges += "-OC" + str(len(jsonDelta["spine"]["orderChanges"]))
+        else:
+            spineChanges += "-xOC"
+        if len(jsonDelta["spine"]["contentChanges"]) > 0:
+            spineChanges += "-CC" + str(len(jsonDelta["spine"]["contentChanges"]))
+        else:
+            spineChanges += "-xCC"
+
+    jsonDelta["summary"]["spineChanges"] = len(jsonDelta["spine"]["adds"]) + len(jsonDelta["spine"]["cuts"]) + len(jsonDelta["spine"]["orderChanges"]) + len(jsonDelta["spine"]["contentChanges"]) 
+    jsonDelta["summary"]["encodedSpineChanges"] = spineChanges
+    #
+    # do the manifest
+    #
+    deltaMani = Dictionary.DictCompare(newManiDict, oldManiDict)
+    for item in deltaMani.added():
+        jsonDelta["manifest"]["adds"][item] = newManiDict[item]
+    for item in deltaMani.removed():
+        jsonDelta["manifest"]["cuts"][item] = oldManiDict[item]
+    maniChanges = list(deltaMani.changed())
+    if (len(maniChanges)) > 0:
+        for item in maniChanges:
+            itemDelta = {}
+            deltaItem = Dictionary.DictCompare(newManiDict[item], oldManiDict[item])
+            if len(deltaItem.added()) > 0:
+                itemDelta["adds"] = {}
+                for theAdd in deltaItem.added():
+                    #print("property added: " + theAdd + " value: " + str(newManiDict[item][theAdd]))
+                    itemDelta["adds"][theAdd] = newManiDict[item][theAdd]
+            if len(deltaItem.removed()) > 0:
+                itemDelta["cuts"] = {}
+                for theCut in deltaItem.removed():
+                    itemDelta["cuts"][theCut] = oldManiDict[item][theCut]
+            if len(deltaItem.changed()) > 0:
+                itemDelta["changes"] = {}
+                for itemProp in deltaItem.changed():
+                    if itemProp == "referencedItems":
+                        oldRefs = set(oldManiDict[item][itemProp])
+                        newRefs = set(newManiDict[item][itemProp])
+                        refsCommon = newRefs & oldRefs
+                        refsAdded = newRefs - oldRefs
+                        refsRemoved = oldRefs - refsCommon
+                        itemDelta["changes"][itemProp] = { "adds" : list(refsAdded), "cuts" : list(refsRemoved) }
+                    elif itemProp == "checkSum":
+                        itemDelta["changes"][itemProp] = {"newValue" : newManiDict[item]["fileName"], "oldValue" : oldManiDict[item]["fileName"]}
+                    else:
+                        itemDelta["changes"][itemProp] = {"newValue" : newManiDict[item][itemProp], "oldValue" : oldManiDict[item][itemProp]}
+            jsonDelta["manifest"]["changes"][item] = itemDelta
+            #print("   Manifest item id : " + item + " changed...")
+            #print("   Manifest item delta: " + str(itemDelta))
+
+    # print(" Calculated manifest changes: adds: " + str(len(jsonDelta["manifest"]["adds"])) + "; cuts: " + str(len(jsonDelta["manifest"]["cuts"])) + "; changes: " + str(len(jsonDelta["manifest"]["changes"])))
+    jsonDelta["summary"]["itemChanges"] = len(jsonDelta["manifest"]["adds"]) + len(jsonDelta["manifest"]["cuts"]) + len(jsonDelta["manifest"]["changes"])
+    if jsonDelta["summary"]["itemChanges"] == 0:
+        jsonDelta["summary"]["encodedManiChanges"] = "Mani=="
+    else:
+        maniChanges = "Mani-"
+        if len(jsonDelta["manifest"]["adds"]) > 0:
+            maniChanges += "A" + str(len(jsonDelta["manifest"]["adds"]))
+        else:
+            maniChanges += "xA"
+        if len(jsonDelta["manifest"]["cuts"]) > 0:
+            maniChanges += "-R" + str(len(jsonDelta["manifest"]["cuts"]))
+        else:
+            maniChanges += "-xR"
+        if len(jsonDelta["manifest"]["changes"]) > 0:
+            maniChanges += "-C" + str(len(jsonDelta["manifest"]["changes"]))
+        else:
+            maniChanges += "-xC"
+        jsonDelta["summary"]["encodedManiChanges"] = maniChanges
+    return(jsonDelta)
\ No newline at end of file
diff --git a/src/tools/CompareResultsUtil.py b/src/tools/CompareResultsUtil.py
new file mode 100644
index 0000000..9851ce0
--- /dev/null
+++ b/src/tools/CompareResultsUtil.py
@@ -0,0 +1,45 @@
+#!c:\python27\python
+import os
+import sys
+import optparse
+import json
+import CompareResults
+
+def parse_compare_args(argv):
+    prog_dir = os.path.dirname(argv[0])
+    usage = """
+Usage: %s <originalFile> <newFile> [OPTION] 
+Compare epubcheck json output
+"""[1:-1] % os.path.basename(argv[0])
+
+    parser = optparse.OptionParser(usage=usage)
+    parser.add_option("-r", "--resultFile", dest="resultFile", type="str", default="",
+                      help="The destination file for the comparison results")
+
+    opts,args = parser.parse_args(argv[1:])
+    return opts,args
+                   
+global gopts
+gopts,args = parse_compare_args(sys.argv)
+if (len(sys.argv) < 3):
+    print "ERROR: Insufficent args were provided.  Specify both the original and new json files"
+    sys.exit();
+gopts.oldFile = os.path.join(".", sys.argv[1])
+gopts.newFile = os.path.join(".", sys.argv[2])
+if (not os.path.isfile(gopts.oldFile)):
+    print "ERROR: Original file " + gopts.oldFile + " could not be found"
+    sys.exit()
+if (not os.path.isfile(gopts.newFile)):
+    print "ERROR: New file " + gopts.newFile + " could not be found"
+    sys.exit()
+oldJsonData = open(gopts.oldFile, "r").read()
+oldResults = json.loads(oldJsonData)
+newJsonData = open(gopts.newFile, "r").read()
+newResults = json.loads(newJsonData)
+jsonChanges = CompareResults.compareResults(oldResults, newResults)
+if (gopts.resultFile == ""):
+    gopts.resultFile = os.path.basename(gopts.oldFile) + "_" + os.path.basename(gopts.newFile) + ".json"
+changesFP = open(gopts.resultFile, "w")
+json.dump(jsonChanges, changesFP, indent=2)
+changesFP.close()
+print "Finished! Results can be found in " + gopts.resultFile
\ No newline at end of file
diff --git a/src/tools/CompareVersions.py b/src/tools/CompareVersions.py
new file mode 100644
index 0000000..cd647f9
--- /dev/null
+++ b/src/tools/CompareVersions.py
@@ -0,0 +1,194 @@
+#!c:\python27\python
+
+import os
+import sys
+import datetime
+import time
+import webbrowser
+import urllib
+import optparse
+import subprocess
+import zipfile
+import tempfile
+import shutil
+import glob
+
+def parse_args(argv):
+    prog_dir = os.path.dirname(argv[0])
+    usage = """
+Usage: %s [OPTION] 
+Collect ePubStats on the ePub files in the target directory
+"""[1:-1] % os.path.basename(argv[0])
+
+    parser = optparse.OptionParser(usage=usage)
+    parser.add_option("-n", "--newerDir", dest="newerDir", type="str",
+                      help="Directory holding the latest versions of the ePub versions to compare")
+    parser.add_option("-o", "--olderDir", dest="olderDir", type="str",
+                      help="Directory holding the older version of the ePubs being compared")
+    parser.add_option("-p", "--preserveDiffs", action="store_true", dest="saveDiffs", default=False,
+                       help=r"Use this flag to save the differences file in the --diffLogDir directory")
+    parser.add_option("--diffLogDir", dest="diffsDir", type="str", default=r"diffLogs",
+                      help=r"If --preserveDiffs is specified, the diffs are stored in the directory 'diffLogs' unless overriden by the value of this option.")
+    parser.add_option("--logdir", dest="logdir", type="str",
+                      default=r"$EPUBCHECK-LOGS",
+                      help=r"Log file location used by this tool, default=%EPUBCHECK-LOGS%\CompareLog.TabDelimitedFile; if EPUBCHECK-LOGS is not defined, the file will be written to the current working directory")
+    parser.add_option("--logfile", dest="logfile", type="str",
+                      default=r"CompareEpubsLog.TabDelimitedFile",
+                      help=r"Log file name used by this tool, default=CompareEpubsLog.TabDelimitedFile")
+
+    opts,args = parser.parse_args(argv[1:])
+    return opts,args
+
+
+def logStats(log_file, elapsedTime, newerFile, olderFile, zipsDiffer, nDiffs):
+    
+    now = datetime.datetime.now()
+    dateTime = str(now.date()) + "\t" + str(now.time())
+    
+    if not os.path.exists(log_file):
+        print "File " + log_file + " doesn't exist, inititalizing file..."
+        f = open(log_file, 'a')
+        f.write("logDate\t")
+        f.write("logTime\t")
+        f.write("elapsedTime\t")
+        f.write("newerFile\t")
+        f.write("olderFile\t")
+        f.write("zipsDiffer\t")
+        f.write("nDiffs\n")
+    else:
+        f = open(log_file, 'a')
+
+    f.write(str(now.date()) + "\t" + str(now.time()) + "\t")
+    f.write(elapsedTime + "\t")
+    f.write(newerFile.rstrip("\r") + "\t")
+    f.write(olderFile.rstrip("\r") + "\t")
+    f.write(zipsDiffer + "\t")
+    f.write(nDiffs + "\n")
+    f.close()
+
+    return "ePubStats Logging complete..."
+
+global gopts
+gopts,args = parse_args(sys.argv)
+
+    #
+    # verify that the log dir and file are writable
+    #
+if not os.path.isdir(os.path.expandvars(gopts.logdir)):
+   print ('Activity logging environment variable "' + gopts.logdir + '" is not a valid dir, logging to the current working directory')
+   statsLog = os.path.join(".", gopts.logfile)
+else:
+   statsLog = os.path.join(os.path.expandvars(gopts.logdir), gopts.logfile)
+print ("Activity logging is being performed to " + statsLog)
+
+olderDir = gopts.olderDir
+newerDir = gopts.newerDir
+
+print("B&N CompareEpubVersions Tool")
+print("  Compare two directory trees holding differing versions of the same ePubs")
+print("--\n")
+print('Comparing the newer ePub versions in "' + newerDir + '" to older versions in "' + olderDir +'"')
+print("--\n")
+
+newerFiles = os.listdir(newerDir)
+olderFiles = os.listdir(olderDir)
+newCount = len(newerFiles)
+
+if newCount != len(olderFiles):
+    print('  Warning: The number of files in "' + newerDir + '" (' + str(len(newerFiles)) + ') does not match the number in "' + olderDir + '" (' + str(len(olderFiles)) + ')')
+
+diffCmd = "diff -q -w -r "
+nCompared = 0
+nChecked = 0
+
+for file in newerFiles:
+    startTime = time.time()
+    nChecked += 1
+    if os.path.splitext(file)[-1].lower() != ".epub":
+        print ("  File #" + str(nChecked) + " (of " + str(newCount) + ") " + str(nChecked) + ": " + file + " is not an ePub, skipped...\n--\n")
+        continue
+
+    nCompared += 1
+
+    ean = file[0:13]
+    olderTarget = glob.glob(os.path.join(olderDir, ean + "*.epub"))
+    if len(olderTarget) == 0:
+        print("  Error: no older version of " + os.path.join(newerDir, file) + " was found in " + olderDir)
+        logStats(statsLog, "NA", os.path.join(newerDir, file), olderDir, str(False), "Older File Not Found")
+        nCompared -= 1
+        continue
+
+    if len(olderTarget) > 1:
+        print("  Warning: " + str(len(olderTarget)) + " ePubs found matching the target ean: " + ean)
+    # print("File: " + file + " ean: " + ean + " olderTarget: " + str(olderTarget))
+
+    newTmpBookDir = tempfile.mkdtemp(prefix="CePubV-Newer")
+    oldTmpBookDir = tempfile.mkdtemp(prefix="CePubV-Older")
+
+    newZipFile = os.path.join(newerDir, file)
+    oldZipFile = olderTarget[0]
+
+    tmpOutputFile = os.path.join(newerDir, ean + ".compare.log")
+    tmpOutput = open(tmpOutputFile, mode="w")
+    cmdStr = diffCmd + '"' + newZipFile + '" "' + oldZipFile + '"'
+    print("  Comparing the zips themselves: " + cmdStr)
+    subprocess.call(cmdStr, stdout=tmpOutput, stderr=tmpOutput, shell=True)
+    tmpOutput.close()
+    tmpOutput = open(tmpOutputFile, mode="r")
+    theDiffs = tmpOutput.readlines()
+    tmpOutput.close()
+    if len(theDiffs) == 0:
+        zipsDiffer = False
+        nDiffs = 0
+        print("  File #" + str(nChecked) + " (of " + str(newCount) + ") (" + str(nCompared) + " compared) - " + file + ": both ePub container files are identical")
+    else:
+        zipsDiffer = True
+        print("  File #" + str(nChecked) + " (of " + str(newCount) + ") (" + str(nCompared) + " compared) - " + file + ": ePub container files differ")
+        for line in theDiffs:
+            print("     Zip Diff: " + line.rstrip())
+    #
+    # if they are different, lets see how different
+    #
+    if zipsDiffer:
+        newZip = zipfile.ZipFile(newZipFile, 'r')
+        oldZip = zipfile.ZipFile(oldZipFile, 'r')
+
+        newZip.extractall(newTmpBookDir)
+        oldZip.extractall(oldTmpBookDir)
+
+        #print("    New zip: " + file + " extracted to: " + str(newTmpBookDir))
+        #print("    Old zip: " + olderTarget[0] + " extracted to: " + str(oldTmpBookDir))
+
+        tmpOutputFile = os.path.join(newerDir, ean + ".compare.log")
+        tmpOutput = open(tmpOutputFile, mode="w")
+        cmdStr = diffCmd + '"' + newTmpBookDir + '" "' + oldTmpBookDir + '"'
+        subprocess.call(cmdStr, stdout=tmpOutput, stderr=tmpOutput, shell=True)
+        tmpOutput.close()
+        tmpOutput = open(tmpOutputFile, mode="r")
+        theDiffs = tmpOutput.readlines()
+        tmpOutput.close()
+        nDiffs = len(theDiffs)
+        if nDiffs > 0:
+            print("  File #" + str(nChecked) + " (of " + str(newCount) + ") (" + str(nCompared) + " compared) - " + file + " have " + str(len(theDiffs)) + " differences:")
+            for line in theDiffs:
+                print("     Asset Diff: " + line.rstrip())
+        else:
+            print("  File #" + str(nChecked) + " (of " + str(newCount) + ") (" + str(nCompared) + " compared) - " + file + ": ePub contents in differing containers are identical")
+            
+        shutil.rmtree(newTmpBookDir)
+        shutil.rmtree(oldTmpBookDir)
+
+    print("--")
+    print("")
+
+    if gopts.saveDiffs:
+        diffsDir = os.path.join(newerDir, gopts.diffsDir)
+        if not os.path.exists(diffsDir):
+            print ("Dir: " + diffsDir + " does not exist; creating it...")
+            os.mkdir(diffsDir)
+        shutil.move(tmpOutputFile, diffsDir)
+    else:
+        os.remove(tmpOutputFile)
+
+    elapsedTime = str(time.time() - startTime)
+    logStats(statsLog, elapsedTime, os.path.join(newerDir, file), olderTarget[0], str(zipsDiffer), str(nDiffs))
\ No newline at end of file
diff --git a/src/tools/Dictionary.py b/src/tools/Dictionary.py
new file mode 100644
index 0000000..2c0b474
--- /dev/null
+++ b/src/tools/Dictionary.py
@@ -0,0 +1,39 @@
+#!c:\python27\python
+
+class DictCompare(object):
+    """
+    Calculate the difference between two dictionaries as:
+    (1) items added
+    (2) items removed
+    (3) keys same in both but changed values
+    (4) keys same in both and unchanged values
+    """
+    def __init__(self, current_dict, past_dict):
+        self.current_dict, self.past_dict = current_dict, past_dict
+        self.current_keys, self.past_keys = [
+            set(d.keys()) for d in (current_dict, past_dict)
+        ]
+        self.intersect = self.current_keys.intersection(self.past_keys)
+
+    def added(self):
+        return self.current_keys - self.intersect
+
+    def removed(self):
+        return self.past_keys - self.intersect
+
+    def changed(self):
+        return set(o for o in self.intersect
+                   if self.past_dict[o] != self.current_dict[o])
+
+    def unchanged(self):
+        return set(o for o in self.intersect
+                   if self.past_dict[o] == self.current_dict[o])
+
+def makeDict(inputArray, key):
+    outputDict = {}
+    if len(inputArray) == 0:
+        return outputDict
+    for item in inputArray:
+        itemKey = item[key]
+        outputDict[itemKey] = item
+    return outputDict

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/epubcheck.git



More information about the pkg-java-commits mailing list